推广推荐中的项目 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

推广推荐中的项目

对于所有域名用例和一些自定义食谱,你可以在收到推荐时指定促销活动。促销定义了适用于推荐商品的可配置子集的其他业务规则。例如,你可能有一个流媒体应用程序,想要宣传自己的节目和电影,但也想推荐相关的标题。您可以使用促销来指定一定比例的推荐商品必须来自内部该类别。剩余的推荐项目将继续是基于您的食谱和任何请求筛选条件的相关推荐。

要申请促销,请在推荐请求中指定以下内容:

  • 应用促销筛选条件的推荐商品的百分比。

  • 用于指定促销条件的筛选器。有关更多信息,请参阅促销过滤器

在推荐回复中,晋升物品相对于其他推荐物品是随机放置的,但相对于其他升级物品是按排序顺序排列的。根据您的食谱,不在促销活动中的推荐商品会按与用户的相关性、受欢迎程度或相似度进行排序。如果没有足够的物品符合促销标准,则结果将包含尽可能多的促销物品。

您可以使用亚马逊个性化控制台、Amazon Command Line Interface (Amazon CLI) 或 Amazon SDK 对推荐进行促销。

支持促销的用例和食谱

所有用例都支持促销。以下自定义食谱支持促销:

促销过滤器

当您对推荐请求应用促销时,您可以选择一个指定促销标准的筛选条件。您可以使用现有的过滤器或创建新的过滤器。您可以像在 Amazon Personalize 中创建和管理其他筛选条件一样创建和管理促销筛选条件。有关创建和管理筛选器的信息,请参阅筛选结果

促销筛选条件和您在促销之外选择的筛选条件(请求筛选条件)之间的唯一区别是 Amazon Personalize 如何应用它们。促销筛选条件仅适用于促销商品,而请求筛选器仅适用于剩余的推荐商品。如果您指定了请求筛选条件和促销筛选条件,并希望将这两个筛选条件应用于促销商品,则促销筛选条件的表达式必须包含这两个表达式。组合两个表达式的方式取决于您使用的数据集。有关筛选表达式、其规则以及如何创建它们的更多信息,请参阅筛选条件表达式

筛选表达式示例

以下表述仅包括 “内部” 类别的物品。如果您想在推荐中推广自己的内容,则可以使用此表达式。

INCLUDE ItemID WHERE Items.OWNER IN ("in-house")

以下表达式仅包括在您指定的时间戳之前创建的项目。您可以使用此表达式来推广最近创建的项目。

INCLUDE ItemID WHERE Items.CREATION_TIMESTAMP < $DATE

以下表达式显示了如何对推广项目应用请求筛选器。它仅包括作为促销物品的可用服装物品。在这种情况下,还Items.AVAILABLE IN ("True")将在请求筛选表达式中使用,以便所有推荐都针对可用的项目。

INCLUDE ItemID WHERE Items.CATEGORY IN ("clothing") AND Items.AVAILABLE IN ("True")

有关过滤器示例的更完整列表,请参阅筛选表达式示例

推广物品(控制台)

要使用 Amazon Personalize 控制台推广推荐中的某些商品,请创建筛选条件,然后在推荐请求中提供促销详情。有关其他字段的信息,请参见获取建议(控制台)

推广推荐中的项目
  1. 通过 https://console.aws.amazon.com/personalize/home 打开亚马逊个性化控制台并登录您的账户。

  2. 选择包含您正在使用的广告系列或推荐人的数据集组。

  3. 如果您还没有,请创建一个指定促销标准的过滤器。为促销创建筛选条件的方式与创建请求筛选条件的方式相同。有关创建和管理筛选器的信息,请参阅筛选结果

  4. 在导航窗格中,选择 “推荐者” 或 “营销活动”。

  5. 选择目标广告系列或推荐人。

  6. 对于广告系列,在 “测试广告活动结果” 下,根据您使用的配方输入您的推荐请求详情。对于推荐人,选择 “测试推荐人”,然后输入您的推荐请求详细信息。

  7. (可选)为请求选择过滤器。此过滤器仅适用于非促销商品。有关创建和管理筛选器的信息,请参阅筛选结果

  8. 如果您使用上下文元数据,请为每个上下文提供数据。对于每个上下文,为密钥输入元数据字段。对于,输入上下文数据。有关更多信息,请参阅使用情境元数据提高推荐的相关性

  9. 要进行促销,请指定以下内容:

    • 促销商品百分比:输入要应用促销的推荐商品的百分比。

    • 筛选条件:选择用于指定促销标准的筛选条件。此筛选器适用于促销项目,而不是您在步骤 7 中可能指定的任何请求筛选条件。

    • 筛选参数:如果您的促销使用带有占位符参数的筛选条件,请为每个参数输入值以设置筛选条件。要为一个参数使用多个值,请用逗号分隔每个值。

  10. 选择 Get recommendations (获得推荐)。将显示一个包含用户前 25 个推荐项目的表。促销商品列显示该商品是否因为您的促销而被包括在内。升级物品相对于其他推荐物品是随机放置的,但相对于其他升级物品是按排序顺序排列的。根据您的用例或食谱,不属于促销的推荐商品将按与用户的相关性、受欢迎程度或相似度进行排序。如果没有足够的物品符合促销标准,则结果将包含尽可能多的促销物品。

促销商品 (Amazon CLI)

以下代码显示了如何使用Amazon CLI和自定义广告系列推广推荐中的项目。要使用推荐人推广商品,请将campaign-arn参数替换为,recommender-arn并为推荐人指定亚马逊资源名称 (ARN)。对于促销字段,请指定以下内容:

  • 名称:给促销起个名字。推荐回复使用名称来识别促销商品。

  • percent-promoted-items:适用于促销的推荐商品的百分比。在此示例中,50% 的物品将是升级物品。

  • filterArn:指定用于定义升级标准的筛选器的亚马逊资源名称 (ARN)。有关更多信息,请参阅促销过滤器

  • 参数名称和值:如果您的筛选表达式有任何参数,请提供参数名称(区分大小写)和值。例如,如果您的过滤器表达式有$GENRE参数,则提供流派作为关键字,并提供一个或多个流派(例如喜剧)作为值。用逗号分隔多个值。使用时Amazon CLI,对于每个值,都必须使用/字符来转义引号和字/符。以下代码示例显示了如何格式化值。

该代码显示了如何同时使用请求过滤器和促销过滤器。促销筛选条件仅适用于促销商品,而请求筛选器仅适用于剩余的推荐商品。有关更多信息,请参阅促销过滤器

有关其他字段的信息,请参阅获取建议 (AmazonSDK)使用情境元数据获得个性化排名 (AmazonPython SDK)

aws personalize-runtime get-recommendations \ --campaign-arn CampaignArn \ --user-id 1 \ --num-results 10 \ --filter-arn RequestFilterArn \ --filter-values '{ "RequestFilterParameterName": "\"value\"", "RequestFilterParameterName": "\"value1\",\"value2\",\"value3\"" }' \ --promotions "[{ \"name\": \"promotionName\", \"percentPromotedItems\": 50, \"filterArn\": \"PromotionFilterARN\", \"filterValues\": {\"PromotionParameterName\":\"\\\"value1, value2\\\"\"} }]"

将显示推荐项目列表。升级物品相对于其他推荐物品是随机放置的,但相对于其他升级物品是按排序顺序排列的。根据您的食谱,不在促销活动中的推荐商品会按与用户的相关性、受欢迎程度或相似度进行排序。如果没有足够的物品符合促销标准,则结果将包含尽可能多的促销物品。

{ "itemList": [ { "itemId1": "123", "score": .0117211, "promotionName": "promotionName" }, { "itemId2": "456", "score": .0077976 }, { "itemId3": "789", "score": .0067171 }, ..... ]

推广商品 (AmazonSDK)

以下代码显示了如何使用适用于 Python 的 SDK (Boto3)、适用于 Java 2.x 的 SDK 以及自定义活动来推广推荐中的项目。要使用推荐人推广商品,请将campaignArn参数替recommenderArn换为推荐人并为其指定 Amazon 资源名称 (ARN)。对于促销字段,请指定以下内容:

  • 名称:指定促销的名称。建议回复包含用于识别促销商品的名称。

  • percentPromotedItems:适用于促销的推荐商品的百分比。

  • promotionFilterARN:定义促销标准的筛选器的亚马逊资源名称 (ARN)。有关更多信息,请参阅促销过滤器

  • 任何参数名称和值:如果您的筛选表达式具有任何参数,请为筛选表达式中的每个参数提供参数名称(区分大小写)和值。例如,如果您的过滤器表达式有一个$GENRE参数,则提供"GENRE"一个或多个流派,例如 “\” Comedy”\”,作为值。用逗号分隔多个值。例如,"\"comedy\",\"drama\",\"horror"\"

以下代码显示了如何同时使用请求筛选器和促销过滤器。促销筛选条件仅适用于促销商品,而请求筛选器仅适用于剩余的推荐商品。有关更多信息,请参阅促销过滤器

有关其他字段的信息,请参阅获取建议 (AmazonSDK)使用情境元数据获得个性化排名 (AmazonPython SDK)

SDK for Python (Boto3)
import boto3 personalizeRt = boto3.client('personalize-runtime') response = personalizeRt.get_recommendations( campaignArn = "CampaignARN", userId = '1', numResults = 10, filterArn = 'RequestFilterARN', filterValues = { "RequestFilterParameterName": "\"value1\"", "RequestFilterParameterName": "\"value1\",\"value2\",\"value3\"" .... }, promotions = [{ "name" : "promotionName", "percentPromotedItems" : 50, "filterArn": "promotionFilterARN", "filterValues": { "PromotionParameterName": "\"Value1\",\"Value2\"" ... } }] ) print("Recommended items") for item in response['itemList']: print (item['itemId']) if ("promotionName" in item): print(item['promotionName'])
SDK for Java 2.x
public static void getRecommendationsWithPromotedItems(PersonalizeRuntimeClient personalizeRuntimeClient, String campaignArn, String userId, String requestFilterArn, String requestParameterName, String requestParameterValue1, String requestParameterValue2, String promotionName, int percentPromotedItems, String promotionFilterArn, String promotionParameterName, String promotionParameterValue1, String promotionParameterValue2) { try { Map<String, String> promotionFilterValues = new HashMap<>(); promotionFilterValues.put(promotionParameterName, String.format("\"%1$s\",\"%2$s\"", promotionParameterValue1, promotionParameterValue2)); Promotion newPromotion = Promotion.builder() .name(promotionName) .percentPromotedItems(percentPromotedItems) .filterArn(promotionFilterArn) .filterValues(promotionFilterValues) .build(); List<Promotion> promotionList = new List<>(); promotionsList.add(newPromotion); Map<String, String> requestfilterValues = new HashMap<>(); requestfilterValues.put(requestParameterName, String.format("\"%1$s\",\"%2$s\"", requestParameterValue1, requestParameterValue2)); GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder() .campaignArn(campaignArn) .numResults(20) .userId(userId) .filterArn(requestFilterArn) .fitlerValues(requestFilterValues) .promotions(promotionList) .build(); GetRecommendationsResponse recommendationsResponse = personalizeRuntimeClient.getRecommendations(recommendationsRequest); List<PredictedItem> items = recommendationsResponse.itemList(); for (PredictedItem item: items) { System.out.println("Item Id is : "+item.itemId()); System.out.println("Item score is : "+item.score()); System.out.println("Promotion name is : "+item.promotionName()); } } catch (PersonalizeRuntimeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { GetRecommendationsCommand, PersonalizeRuntimeClient } from "@aws-sdk/client-personalize-runtime"; // create personalizeRuntimeClient. const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION", }); // set recommendation request param export const getRecommendationsParam = { campaignArn: "CAMPAIGN_ARN", /* required */ userId: "USER_ID", /* required */ numResults: 25, /* optional */ filterArn: "FILTER_ARN", /* provide if you are applying a custom filter */ filterValues: { "PARAM_NAME": "\"PARAM_VALUE\"" /* provide if your filter has a placeholder parameter */ }, promotions: [ { name: "PROMOTION_NAME", /* specify the name of the promotion. The recommendation response includes the name to identify promoted items. */ percentPromotedItems: 50, /* the percentage of recommended items to apply the promotion to. */ filterArn: "PROMOTION_FILTER_ARN", /* the Amazon Resource Name (ARN) of the filter that defines the promotion criteria. */ filterValues: { "PARAM_NAME": "\"PARAM_VALUE\"" /* provide if your promotion filter has a placeholder parameter */ }, }, ], }; export const run = async () => { try { const response = await personalizeRuntimeClient.send(new GetRecommendationsCommand(getRecommendationsParam)); console.log("Success!", "\nItems are: "); response.itemList.forEach(element => console.log(element.itemId)) return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

将显示推荐项目列表。升级物品相对于其他推荐物品是随机放置的,但相对于其他升级物品是按排序顺序排列的。根据您的食谱,不在促销活动中的推荐商品会按与用户的相关性、受欢迎程度或相似度进行排序。如果没有足够的物品符合促销标准,则结果将包含尽可能多的促销物品。

{ "itemList": [ { "itemId1": "123", "score": .0117211, "promotionName": "promotionName" }, { "itemId2": "456", "score": .0077976 }, { "itemId3": "789", "score": .0067171 }, ..... ]