目录
步骤 3:上传 Amazon Personalize 的训练数据和配置
步骤 4:查看来自 Amazon Personalize 推理得出的细分
目标客户群体细分(segment)允许营销人员更好地针对特定的受众群体量身定制他们的营销活动。采用客户细分的企业可以创建并传达与特定客户群体产生共鸣的有针对性的营销信息。细分增加了客户与品牌互动的可能性,并减少了信息疲劳的潜在风险——即客户对收到太多与他们无关的信息而产生的反感。例如,如果您的企业想要开展一次关于正装的电子邮件活动,目标受众应该只包括穿正装的人。
本文介绍了一种使用 Amazon Personalize 生成高度个性化的 Amazon Pinpoint 客户细分(segment)的解决方案。使用 Amazon Pinpoint,您可以通过活动(campaign)和旅程(journey)向这些客户 segment 发送消息。
个性化 Pinpoint Segment
营销人员首先需要通过收集客户数据(如关键特征、交易数据和行为数据)来了解他们的客户。这些数据有助于形成买家人物画像、了解他们如何消费以及他们对接收什么类型的信息感兴趣。
您可以在 Amazon Pinpoint 中创建两种类型的客户细分:导入细分和动态细分。对于这两种类型的细分,您都需要执行客户数据分析并识别行为模式。在确定了细分特征后,您可以构建包含适当条件的动态细分。您可以在 Amazon Pinpoint 用户手册中了解有关动态和导入细分的更多信息。
在线销售产品和服务的企业可以从基于已知客户偏好(如产品类别、颜色或配送选项)的细分中获益。想要推广新产品或通知客户某个产品类别促销活动的营销人员可以使用这些细分来启动 Amazon Pinpoint 活动(campaign)和旅程(journey),从而提高客户完成交易的可能性。
构建有针对性的细分需要您获取历史客户交易数据,然后投入时间和资源进行分析。这里就可以使用机器学习技术节省时间并提高准确性。
Amazon Personalize 是一项全面托管的机器学习服务,无需任何先验机器学习知识即可运行。它提供了用于细分创建和产品推荐的现成模型(称为配方/recipes)。使用 Amazon Personalize USER_SEGMENTATION 配方,您可以基于产品 ID 或产品属性生成细分。
关于本解决方案
本方案引用了下面解决方案的架构设计:
上面解决方案以 nested stacks 的形式与主体应用一同被部署。其用于展示 Amazon Personalize 如何与 Amazon Pinpoint 集成来完成基于上下文的细分。
解决方案技术架构
本文解决方案架构图
一旦训练数据和训练配置被上传到 Personalize 数据 S3 存储桶(1),Amazon Step Function 状态机就会被执行(2)。该状态机实现了一个训练工作流来为 Amazon Personalize 提供所需的所有资源。它基于 Item-Attribute-Affinity 配方训练推荐模型(3a)。一旦该 Amazon Personalize 方案创建完成,工作流就会创建一个批量细分作业来获取用户细分(3b)。本例中,作业配置专注于生成对动作类型电影感兴趣的用户细分。
当批量细分作业完成时,结果会被上传到 Amazon S3(3c)。训练工作流状态机将在自定义 Event Bus 上发布 Amazon Personalize 状态更改(4)事件。Amazon EventBridge 规则会监听描述批量细分作业已完成的事件(5)。一旦此事件被发布到 Event Bus 总线上,批量细分后处理工作流就会作为 Amazon Step Function 状态机执行(6)。该工作流读取并转换来自 Amazon Personalize 的细分作业输出(7),将其转换为可以作为静态细分导入 Amazon Pinpoint 的 CSV 文件(8)。CSV 文件只包含与 Amazon Personalize 推荐细分中相应用户的 Amazon Pinpoint endpoint ID,格式如下:
{ "itemAttributes": "ITEMS.genres = \"Action\"" }
解析 Amazon Pinpoint 端点 ID 的机制依赖于在 Amazon Personalize 中设置的用户 ID 也在 Amazon Pinpoint 中的每个端点上使用 user ID 属性进行引用。
Id
hcbmnng30rbzf7wiqn48zhzzcu4
tujqyruqu2pdfqgmcgkv4ux7qlu
keul5pov8xggc0nh9sxorldmlxc
lcuxhxpqh/ytkitku2zynrqb2ce
Amazon Personalize 细分对应为 Amazon Pinpoint 细分的工作流图
该工作流确保细分文件具有唯一的文件名,以便可以在 Amazon Pinpoint 中独立识别细分。一旦细分 CSV 文件被上传到 S3(7),细分导入工作流就会在 Amazon Pinpoint 中创建一个新的导入细分(8)。
数据集
该解决方案使用了一个名为 Bingewatch 的人工生成的电影数据集用于演示。该数据已经过预处理,可在 Amazon Personalize 和 Amazon Pinpoint 的上下文中使用。预处理后的数据包括以下内容:
- 从 Bingewatch csv 创建的交互(interaction)元数据
- 从 Bingewatch csv 创建的项目(item)元数据
- 从 Bingewatch csv 创建的用户元数据,并用虚构的电子邮件地址和年龄数据进行了扩充
- Amazon Pinpoint 端点数据
交互数据集
交互数据集描述了 Bingewatch 用户对电影的评分。每一行描述了一个用户对一部电影的单次评分,用户由用户 ID 标识。
EVENT_VALUE 描述了 1.0 到 5.0 之间的实际评分,EVENT_TYPE 指定该评分是因为用户在给定的 TIMESTAMP 观看了该电影,如下例所示:
USER_ID,ITEM_ID,EVENT_VALUE,EVENT_TYPE,TIMESTAMP
1,1,4.0,Watch,964982703
2,3,4.0,Watch,964981247
3,6,4.0,Watch,964982224
...
项目数据集
项目数据集包含了系统中每部电影的信息,如 TITLE(电影名)、RELEASE_YEAR(发行时间)、CREATION_TIMESTAMP (数据创建时间)、以及 GENRES(一段包含多个属性的文本)。如下例所示:
ITEM_ID,TITLE,RELEASE_YEAR,CREATION_TIMESTAMP,GENRES
1,Toy Story,1995,788918400,Adventure|Animation|Children|Comedy|Fantasy
2,Jumanji,1995,788918400,Adventure|Children|Fantasy
3,Grumpier Old Men,1995,788918400,Comedy|Romance
...
项目数据集在本文中所需的数据结构:
{
"type": "record",
"name": "Items",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "ITEM_ID",
"type": "string"
},
{
"name": "GENRE",
"type": ["null", "string"],
"categorical": true
}
],
"version": "1.0"
}
用户数据集
用户数据集包含所有已知用户的信息,由 USER_ID 标识。该数据集包含人工生成的元数据,描述了用户的 GENDER (性别)和 AGE(年龄),如下例所示:
USER_ID,GENDER,E_MAIL,AGE
1,Female,success1@simulator.amazonses.com,21
2,Female,success+2@simulator.amazonses.com,35
3,Male,success+3@simulator.amazonses.com,37
4,Female,success+4@simulator.amazonses.com,47
5,Agender,success+5@simulator.amazonses.com,50
...
用户数据集在本文中所需的数据结构:
{
"type": "record",
"name": "Users",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "USER_ID",
"type": "string"
},
{
"name": "AGE",
"type": ["null", "int"]
},
{
"name": "GENDER",
"type": ["null", "string"]
}
],
"version": "1.0"
}
Amazon Pinpoint 端点
要将 Amazon Pinpoint 端点映射到 Amazon Personalize 中的用户,重要的是要有统一的用户标识符。解析 Amazon Pinpoint 端点 ID 的过程依赖于在 Amazon Personalize 中设置的用户 ID 也在 Amazon Pinpoint 中的每个端点上通过 userId 属性进行引用,如下例所示:
User.UserId,ChannelType,User.UserAttributes.Gender,Address,User.UserAttributes.Age
1,EMAIL,Female,success+1@simulator.amazonses.com,21
2,EMAIL,Female,success+2@simulator.amazonses.com,35
3,EMAIL,Male,success+3@simulator.amazonses.com,37
4,EMAIL,Female,success+4@simulator.amazonses.com,47
5,EMAIL,Agender,success+5@simulator.amazonses.com,50
...
解决方案实施
前置条件
要部署此解决方案,您必须具备以下条件:
- 一个亚马逊云科技账户
- 本地机器上的 AWS CLI。更多信息,请参阅安装 AWS CLI 指南。
- 本地机器上的 SAM CLI。更多信息,请参阅 Amazon Serverless Application Model 开发人员指南中的安装 SAM CLI。
- 最新版本的 Boto3。更多信息,请参阅 Boto3 文档中的安装说明。
注意:此解决方案会创建一个名为 personalize 的 Amazon Pinpoint 项目。如果您想在现有的 Amazon Pinpoint 项目上部署此解决方案,您需要在 YAML 模板中进行有针对性的更改。
部署解决方案
步骤 1:部署 SAM 解决方案
将 GitHub 存储库克隆到您的本地机器(如何克隆 GitHub 存储库)。使用 SAM CLI 进入到本地机器上的 GitHub 存储库位置,并执行以下命令:
sam deploy --stack-name contextual-targeting --guided
按照显示填写以下字段。将亚马逊云科技区域更改为 Amazon Pinpoint 和 Amazon Personalize 可用的亚马逊云科技区域(AWS Region)。电子邮件参数用于 Amazon Simple Notification Service(SNS) 在 Amazon Personalize 作业完成时向您发送电子邮件通知。
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] : Not found
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app]: contextual-targeting
AWS Region [us-east-1]: eu-west-1
Parameter Email []: me@example.com
Parameter PEVersion [v1.2.0]:
Parameter SegmentImportPrefix [pinpoint/]:
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]:
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]:
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]:
Save arguments to configuration file [Y/n]:
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]:
Looking for resources needed for deployment:
Creating the required resources...
[...]
Successfully created/updated stack - contextual-targeting in eu-west-1
======================
步骤 2:将初始细分导入 Amazon Pinpoint
我们将导入一些人工生成的初始端点到 Amazon Pinpoint。
在本地机器上通过 AWS CLI 执行以下命令。
以下命令适用于 Linux:
SEGMENT_IMPORT_BUCKET=$(aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`SegmentImportBucket`].OutputValue' --output text)
aws s3 sync ./data/pinpoint s3://$SEGMENT_IMPORT_BUCKET/pinpoint
对于 Windows PowerShell,请使用以下命令:
$SEGMENT_IMPORT_BUCKET = (aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`SegmentImportBucket`].OutputValue' --output text)
aws s3 sync ./data/pinpoint s3://$SEGMENT_IMPORT_BUCKET/pinpoint
步骤 3:上传 Amazon Personalize 的训练数据和配置
现在我们准备好训练初始推荐模型了。此解决方案为您提供了模拟训练数据以及训练和推理配置,需要将其上传到 Amazon Personalize S3 存储桶。模型训练可能需要 45 到 60 分钟。
在本地机器上通过 AWS CLI 执行以下命令。
以下命令适用于 Linux:
PERSONALIZE_BUCKET=$(aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`PersonalizeBucketName`].OutputValue' --output text)
aws s3 sync ./data/personalize s3://$PERSONALIZE_BUCKET
对于 Windows PowerShell,请使用以下命令:
$PERSONALIZE_BUCKET = (aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`PersonalizeBucketName`].OutputValue' --output text)
aws s3 sync ./data/personalize s3://$PERSONALIZE_BUCKET
步骤 4:查看来自 Amazon Personalize 推理得出的细分
一旦训练工作流完成,您应该会在您部署堆栈时提供的电子邮件地址收到一封电子邮件。电子邮件应该如下面的屏幕截图所示:
Amazon SES 电子邮件示例
在亚马逊云科技控制台界面上,导航到 Amazon Pinpoint 控制台 > 您的项目 > 细分,您应该会看到两个导入的细分。一个名为 endpoints.csv,包含步骤 2 中导入的所有端点。另一个名为 ITEMSgenresAction_<date>-<time>.csv,包含 由Amazon Personalize 推理出的对动作电影感兴趣的端点 ID。
Amazon Pinpoint Segments 管理页面