目标客户群体细分(Segment)允许营销人员更好地针对特定的受众群体量身定制他们的营销活动。采用客户细分的企业可以创建并传达与特定客户群体产生共鸣的有针对性的营销信息。细分增加了客户与品牌互动的可能性,并减少了信息疲劳的潜在风险——即客户对收到太多与他们无关的信息而产生的反感。例如,如果您的企业想要开展一次关于正装的电子邮件活动,目标受众应该只包括穿正装的人。
本文介绍了一种使用Amazon Personalize生成高度个性化的Amazon Pinpoint客户细分(Segment)的解决方案。使用Amazon Pinpoint,您可以通过活动(Campaign)和旅程(Journey)向这些客户Segment发送消息。
个性化Pinpoint Segment
营销人员首先需要通过收集客户数据(如关键特征、交易数据和行为数据)来了解他们的客户。这些数据有助于形成买家人物画像、了解他们如何消费以及他们对接收什么类型的信息感兴趣。
您可以在Amazon Pinpoint中创建两种类型的客户细分:导入细分和动态细分。对于这两种类型的细分,您都需要执行客户数据分析并识别行为模式。在确定了细分特征后,您可以构建包含适当条件的动态细分。您可以在Amazon Pinpoint用户手册中了解有关动态和导入细分的更多信息。
Amazon Pinpoint用户手册
https://docs.aws.amazon.com/pinpoint/latest/userguide/segments.html
在线销售产品和服务的企业可以从基于已知客户偏好(如产品类别、颜色或配送选项)的细分中获益。想要推广新产品或通知客户某个产品类别促销活动的营销人员可以使用这些细分来启动Amazon Pinpoint活动(Campaign)和旅程(Journey),从而提高客户完成交易的可能性。
活动(Campaign)
https://docs.aws.amazon.com/pinpoint/latest/userguide/campaigns.html
旅程(Journey)
https://docs.aws.amazon.com/pinpoint/latest/userguide/journeys.html
构建有针对性的细分需要您获取历史客户交易数据,然后投入时间和资源进行分析。这里就可以使用机器学习技术节省时间并提高准确性。
Amazon Personalize是一项全面托管的机器学习服务,无需任何先验机器学习知识即可运行。它提供了用于细分创建和产品推荐的现成模型(称为配方/Recipes)。使用Amazon Personalize USER_SEGMENTATION配方,您可以基于产品ID或产品属性生成细分。
Amazon Personalize
https://aws.amazon.com/personalize/
USER_SEGMENTATION配方
https://docs.aws.amazon.com/personalize/latest/dg/user-segmentation-recipes.html
关于本解决方案
本方案引用了下面解决方案的架构设计:
Maintaining Personalized Experiences with Machine Learning。
Amazon S3 Triggered Endpoint Imports。
Maintaining Personalized Experiences with Machine Learning
https://aws.amazon.com/solutions/implementations/maintaining-personalized-experiences-with-ml/
Amazon S3 Triggered Endpoint Imports
https://github.com/aws-samples/communication-developer-services-reference-architectures#Amazon-S3-Triggered-Endpoint-Imports
上面解决方案以nested stacks的形式与主体应用一同被部署。其用于展示Amazon Personalize如何与Amazon Pinpoint集成来完成基于上下文的细分。
解决方案技术架构
本文解决方案架构图
一旦训练数据和训练配置被上传到Amazon Personalize数据Amazon 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属性进行引用。
使用user ID属性进行引用
https://docs.aws.amazon.com/pinpoint/latest/developerguide/audience-define-user.html
Id
hcbmnng30rbzf7wiqn48zhzzcu4
tujqyruqu2pdfqgmcgkv4ux7qlu
keul5pov8xggc0nh9sxorldmlxc
lcuxhxpqh/ytkitku2zynrqb2ce
该工作流确保细分文件具有唯一的文件名,以便可以在Amazon Pinpoint中独立识别细分。一旦细分.csv文件被上传到Amazon 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
...
左右滑动查看完整示意
解决方案实施
前置条件
要部署此解决方案,您必须具备以下条件:
一个亚马逊云科技账户。
本地机器上的Amazon CLI。更多信息,请参阅安装Amazon 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
左右滑动查看完整示意
GitHub存储库
https://github.com/aws-samples/amazon-personalize-pinpoint-contextual-targeting
如何克隆GitHub存储库
https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository
按照显示填写以下字段。将亚马逊云科技区域更改为Amazon Pinpoint和Amazon Personalize可用的亚马逊云科技区域(Amazon 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
======================
左右滑动查看完整示意
Amazon Simple Notification Service(SNS)
https://aws.amazon.com/ec2/instance-types/p5/https://aws.amazon.com/sns/
步骤 2:将初始细分导入Amazon Pinpoint。
我们将导入一些人工生成的初始端点到Amazon Pinpoint。
在本地机器上通过Amazon 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分钟。
在本地机器上通过Amazon 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_-.csv,包含由Amazon Personalize推理出的对动作电影感兴趣的端点ID。
Amazon Pinpoint Segments 管理页面
您可以通过活动和旅程与Amazon Pinpoint客户细分互动。有关如何创建和执行Amazon Pinpoint活动和旅程的更多信息,请访问Building Customer Experiences with Amazon Pinpoint研讨会。
Building Customer Experiences with Amazon Pinpoint研讨会
https://catalog.workshops.aws/amazon-pinpoint-customer-experience/en-US/api-operations/sendmessage
后续步骤
上下文定位不仅限于单一渠道(如本解决方案中的电子邮件)。您可以继续开发并扩展批量细分后处理工作流(batch-segmentation-postprocessing),以满足您的参与和定位需求。
例如,您可以根据引用的端点渠道类型实现多个分支,并创建可通过推送通知、短信、语音呼出和应用内消息参与的 Amazon Pinpoint 客户细分。
清理实验资源
要删除已部署的本解决方案,请在Amazon CLI中运行以下命令。
以下命令适用于Linux:
SEGMENT_IMPORT_BUCKET=$(aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`SegmentImportBucket`].OutputValue' --output text)
PERSONALIZE_BUCKET=$(aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`PersonalizeBucketName`].OutputValue' --output text)
aws s3 rm s3://$SEGMENT_IMPORT_BUCKET/ --recursive
aws s3 rm s3://$PERSONALIZE_BUCKET/ --recursive
sam delete
左右滑动查看完整示意
对于Windows PowerShell,请使用以下命令:
$SEGMENT_IMPORT_BUCKET=$(aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`SegmentImportBucket`].OutputValue' --output text)
$PERSONALIZE_BUCKET=$(aws cloudformation describe-stacks --stack-name contextual-targeting --query 'Stacks[0].Outputs[?OutputKey==`PersonalizeBucketName`].OutputValue' --output text)
aws s3 rm s3://$SEGMENT_IMPORT_BUCKET/ --recursive
aws s3 rm s3://$PERSONALIZE_BUCKET/ --recursive
sam delete
左右滑动查看完整示意
由于Amazon Personalize资源(如数据集组、数据集等)不是通过Amazon Cloudformation创建的,因此您需要手动删除它们,请按照官方亚马逊云科技文档中的说明清理已创建的资源。
本篇作者
Pavlos Ioannou Katidis
亚马逊云科技Amazon Pinpoint和Amazon Simple Email Service 资深产品专家解决方案架构师。他热衷于深入研究客户的技术问题,并帮助他们设计通信相关解决方案。
马競斌
亚马逊云科技资深解决方案架构师,致力于帮助客户构建具有优良架构的产品和应用,以及帮助国内客户出海和海外用户进入中国。在互联网行业有十多年产品研发经验和多年技术管理经验,2023年初开始聚焦生成式AI,已帮助多个国内知名IT公司成功落地了多个生成式AI项目。
星标不迷路,开发更极速!
关注后记得星标「亚马逊云开发者」
听说,点完下面4个按钮
就不会碰到bug了!
点击阅读原文查看博客!获得更详细内容!