使用 Amazon Personalize 的用户细分功能来提高广告投放效果

7a00768f433155125fa4128fb86e319b.gif

Amazon Personalize 是一个全托管式的机器学习服务,开发人员在没有机器学习背景的情况下,可以使用自己熟悉语言的 SDK 或者控制台 GUI 点击轻松地构建一个实时推荐系统任务来满足对应业务的需要。目前 Amazon Personalize 已经在个性化推荐,相似物品推荐,个性化物品排名,以及个性化促销和通知等使用场景均有比较好的使用案例。

在 2021 年 11 月 29 日,Amazon Personalize 也新推出了智能用户细分的功能。使用用户细分的这个新功能不仅可以帮助运营团队进行精细化运营,也可以帮助销售和市场团队进行客户分群来做到精准营销以提高 ROI。在电商场景下,可以针对不同的商品,对潜在用户进行划分,以便更有针对性地进行投放活动。本文将以一个广告投放的使用场景为例,使用 Python Boto3 的 SDK 介绍如何使用 Amazon Personalize 的新功能来帮助运营人员和市场人员完成一个用户细分的任务。

数据集

构建

为了完成一个 Amazon Personalize 的训练任务,我们首先需要构建数据集。ETL 工程师从数仓中导出的 Raw Data 可能是以下形式。其中 uid 代表了完成广告浏览并产生交互行为的用户 ID,event_track 代表相应用户在应用内产生的用户行为,ad_id 代表影响用户的相应广告 ID(或标签),generated_time 代表用户完成用户行为时被记录的时间戳。

390df9e3bd1cab66782628ece7688f92.png

Amazon Personalize 支持三种数据集,分别是用户数据集,物品数据集,以及用户交互数据集

· Users – User Dataset 用于记录用户的 metadata。例如用户的年龄,性别,会员信息等。

· Items – Item Dataset 用于记录物品的 metadata。例如商品的 SKU,价格等,在广告投放中,可以记录广告的品类以及标签。

· Interactions – Interaction Dataset 包含了 User 和 Item 的历史和实时数据。例如用户的点击, 浏览,点赞等行为。在 Amazon Personalize 中,每一次用户事件都作为一条记录会被用于作为训练数据任务。

为了完成 Amazon Personalize 的作业至少需要创建一个交互数据集来完成训练。Amazon Personalize 的交互数据集需要至少一列 USER_ID, 一列 ITEM_ID,一列 TIMESTAMP来完成训练任务,我们也可以提供 EVENT_TYPE 和 EVENT_VALUE 数据来显式地对模型部署时提高精准投放能力。

首先我们需要对数据集进行清洗和数据预处理,以满足 Amazon Personalize 的数据格式需要。这里我们将使用 Pandas 完成这个步骤。你可以使用云上的 Amazon SageMaker Notebook Instance 来运行代码,也可以使用本地的 Jupyter Notebook 来完成。

import pandas as pd
import datetime
import time
from numpy import float32, uint32def string_to_unix_time_long(date_string):casted_time = date_string[:13]+":"+date_string[14:16]+":"+date_string[17:]return uint32(time.mktime(pd.to_datetime(casted_time).timetuple())).item()raw_data["generated_time"] = raw_data["generated_time"].apply(string_to_unix_time_long)

*左滑查看更多

以上代码可以将事例中 generated_time 的格式替换成为 Amazon Personalize 要求的 UNIX epoch 时间格式。为了实现精准投放,我们将 event_track 中的用户行为转化为点击事件,并对其中的各种用户行为按照各种行为的重要程度进行赋值,将 categorical data 转化为 numerical data,以便后续训练模型时进行针对训练。

event_map = {'创建订单':3, '支付':4,'加入购物车': 2,'注册完成': 1
}def event_mapping_method(event):return event_map[event]
raw_data["event_tracking"] = raw_data["event_tracking"].apply(event_mapping_method)
raw_data['EVENT_TYPE'] = "click"

*左滑查看更多

以上代码对EVENT_VALUE 按照用户行为的重要性进行赋值,并追加 click事件列。

bd37ba30e88374d20bcb3d72409a2b12.png

至此,我们完成了一个简易的数据集组的构建。接下来我们将对 Amazon Personalize 导入并创建数据集

import boto3
from time import sleep
import jsonpersonalize = boto3.client('personalize')
personalize_runtime = boto3.client('personalize-runtime')
create_dataset_group_response = personalize.create_dataset_group(name = "segmentation-dataset"
)
dataset_group_arn = create_dataset_group_response['datasetGroupArn']
print(json.dumps(create_dataset_group_response, indent=2))

*左滑查看更多

我们使用以下代码来监控数据集创建任务。待创建完成后,方可继续后续步骤。

max_time = time.time() + 3*60*60 # 3 hours
while time.time() < max_time:describe_dataset_group_response = personalize.describe_dataset_group(datasetGroupArn = dataset_group_arn)status = describe_dataset_group_response["datasetGroup"]["status"]print("DatasetGroup: {}".format(status))if status == "ACTIVE" or status == "CREATE FAILED":breaktime.sleep(60)

*左滑查看更多

接下来,我们创建数据集的 Schema 以便 Amazon Personalize 可以完成数据集的构建。

interactions_schema = schema = {"type": "record","name": "Interactions","namespace": "com.amazonaws.personalize.schema","fields": [{"name": "USER_ID","type": "string"},{"name": "ITEM_ID","type": "string"},{ "name": "EVENT_TYPE","type": "string"},{"name": "EVENT_VALUE","type": "float"},{"name": "TIMESTAMP","type": "long"}],"version": "1.0"
}create_schema_response = personalize.create_schema(name = "segmentation-schema",schema = json.dumps(interactions_schema)
)interaction_schema_arn = create_schema_response['schemaArn']
print(json.dumps(create_schema_response, indent=2))

*左滑查看更多

之后,我们将创建一个 Amazon S3 桶,以及相应的桶访问策略。用于存放 Amazon Personalize 的数据集,以及做用户细分时所需要的输入输出文件路径。请注意,Amazon S3 桶创建的地区需要和 Amazon Personalize 的地区保持一致,以便 Amazon Personalize 能够正常使用 S3 中的数据来进行作业。

s3 = boto3.client('s3')
region = "us-east-2"
bucket_name = "personalize-user-segmentation-poc-2022-1-1"
s3.create_bucket(Bucket=bucket_name,CreateBucketConfiguration={'LocationConstraint': region})
policy = {"Version": "2012-10-17","Id": "PersonalizeS3BucketAccessPolicy","Statement": [{"Sid": "PersonalizeS3BucketAccessPolicy","Effect": "Allow","Principal": {"Service": "personalize.amazonaws.com"},"Action": ["s3:*Object","s3:ListBucket"],"Resource": ["arn:aws:s3:::{}".format(bucket_name),"arn:aws:s3:::{}/*".format(bucket_name)]}]
}s3.put_bucket_policy(Bucket=bucket_name, Policy=json.dumps(policy))

*左滑查看更多

接下来,我们将数据集上传到云上的 Amazon S3,以便后续使用。

raw_data.to_csv("segmentation.csv",index=False)
boto3.Session().resource('s3').Bucket(bucket_name).Object("segmentation.csv").upload_file("segmentation.csv")

*左滑查看更多

我们使用以下代码创建一个 IAM 角色,并附给 Amazon Personalize 用于访问 S3 存储桶读写权限。

iam = boto3.client("iam")role_name = "Personalize-User-Segmentation-Role"
assume_role_policy_document = {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "personalize.amazonaws.com"},"Action": "sts:AssumeRole"}]
}
create_role_response = iam.create_role(RoleName = role_name,AssumeRolePolicyDocument = json.dumps(assume_role_policy_document)
)
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonPersonalizeFullAccess"
iam.attach_role_policy(RoleName = role_name,PolicyArn = policy_arn
)
iam.attach_role_policy(PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess',RoleName=role_name
)
time.sleep(60) # 等待 IAM 角色附加完成role_arn = create_role_response["Role"]["Arn"]
print(role_arn)

*左滑查看更多

接下来我们将创建数据集并进行数据导入作业

dataset_type = "INTERACTIONS"
create_dataset_response = personalize.create_dataset(name = "personalize-user-segmentation-data-1",datasetType = dataset_type,datasetGroupArn = dataset_group_arn,schemaArn = interaction_schema_arn
)
# 创建数据集
interactions_dataset_arn = create_dataset_response['datasetArn']
print(json.dumps(create_dataset_response, indent=2))time.sleep(100) # 等待数据集创建完成
# 创建数据集导入任务
create_dataset_import_job_response = personalize.create_dataset_import_job(jobName = "personalize-segmentation-import-1",datasetArn = interactions_dataset_arn,dataSource = {"dataLocation": "s3://{}/{}".format(bucket_name, "segmentation.csv")},roleArn = role_arn
)dataset_import_job_arn = create_dataset_import_job_response['datasetImportJobArn']
print(json.dumps(create_dataset_import_job_response, indent=2))

*左滑查看更多

至此我们完成了数据集导入的任务。接下来我们将创建用户分群的任务。

用户

分群

接下来我们将创建用户分群的任务。目前用户分群是 Amazon Personalize 的一项批处理任务,因此我们需要提前准备好需要针对分群的 Item ID,并按照如下格式创建好输入的 Json 文件,上传到 Amazon S3 中作为输入文件。

{"itemId": "ad-label1b"}
{"itemId": "ad-label1c"}

本文,我们以广告 ID ad-label1b 和 ad-label1c 为例,来选取对这两个广告有兴趣的潜在用户,以便市场部门进行针对性广告投放。我们使用以下代码创建名为 ad_id_list.json 的广告 ID文件,并上传至 Amazon S3,以便后续创建分群作业使用。

!echo -e "{"itemId": "ad-label1b"}\n{"itemId": "ad-label1c"}" > ad_id_list.json
boto3.Session().resource('s3').Bucket(bucket_name).Object("ad_id_list.json").upload_file("ad_id_list.json")

*左滑查看更多

接下来我们将创建用户分群的解决方案以及方案版本,此方案创建中,我们定义 eventValue 值大于 2 的行为用于训练。即,对本例中广告投放的用户行为中至少点击了 “加入购物车” 的行为来进行精准地训练。

user_segmentation_recipe_arn ="arn:aws:personalize:::recipe/aws-item-affinity"
user_personalization_create_solution_response = personalize.create_solution(name = "personalize-user-segmentation",datasetGroupArn = dataset_group_arn,recipeArn = user_segmentation_recipe_arn,eventType = "click",solutionConfig ={"eventValueThreshold":"2"} 
)
user_segmentation_solution_arn = user_personalization_create_solution_response['solutionArn']
print(json.dumps(user_segmentation_solution_arn, indent=2))time.sleep(60) # 等待方案创建完成后创建版本
user_segmentation_create_solution_version_response = personalize.create_solution_version(solutionArn = user_segmentation_solution_arn
)
solution_version_arn = user_segmentation_create_solution_version_response["solutionVersionArn"]
print(json.dumps(solution_version_arn, indent=2))# 以下代码会轮训方案创建状态,待方案创建完成后方可进行作业任务
max_time = time.time() + 10*60*60 # 10 hours
while time.time() < max_time:version_response = personalize.describe_solution_version(solutionVersionArn = solution_version_arn)status = version_response["solutionVersion"]["status"]if status == "ACTIVE" or status == "CREATE FAILED":breaktime.sleep(60)

*左滑查看更多

接下来我们将进行用户分群作业,并输入先前创建的广告 ID 文件,以针对每个广告投放生成的潜在用户数。分群的输出结果将写入 Amazon S3 output 文件夹中。

batch_job_arn = personalize.create_batch_segment_job (solutionVersionArn = solution_version_arn,jobName = "personalize-user-segmentation-job-6",numResults = 25, # 生成  1 and 5,000,000 个对投放广告对象的潜在用户数roleArn = role_arn,jobInput = {"s3DataSource": {"path": "s3://personalize-user-segmentation-poc-2022-1-1/ad_id_list.json"}},jobOutput = {"s3DataDestination": {"path": "s3://personalize-user-segmentation-poc-2022-1-1/output/"}}
)["batchSegmentJobArn"]

*左滑查看更多

接下来我们会轮训地监控任务状态,任务完成后会在Amazon S3 目录中生成 ad_id_list.json.out 文件,等待任务完成后拉去并展示结果。

# 以下代码会轮训任务作业创建状态,待作业完成后方可取回结果
max_time = time.time() + 10*60*60 # 10 hours
while time.time() < max_time:job_response = personalize.describe_batch_segment_job(batchSegmentJobArn= batch_job_arn)print(job_status)    job_status = job_response["batchSegmentJob"]["status"]if job_status == "ACTIVE" or job_status == "CREATE FAILED":breaktime.sleep(60)
s3.download_file('personalize-user-segmentation-poc-2022-1-1', 'output/ad_id_list.json.out', 'potential_user.json')
!cat potential_user.json

*左滑查看更多

至此我们完成了用户行为数据集的数据清洗和预处理,数据集的构建,用户分群方案和方案版本的构建,以及针对广告 ID 的用户分群的批处理以及潜在用户的结果生成。用户分群的使用场景非常广泛,在电商场景中的数据应用本方案,可以将电商中的商品对应本文中的广告 ID,寻找对潜在商品感兴趣的用户进行针对推荐,也可以导入 ITEM 数据集,轻松构建商品的品类和属性,创建针对不同品类/SKU 的商品的推荐用户列表。取得的用户 ID ,可以进行针对性推送通知推荐和优惠活动,进行用户激活,引导潜在用户的购买行为。

除此之外,Amazon Personalize 也可以支持增量的数据训练,以满足不同场景的用户需要。

本篇作者

4ad1a41f53627f06b2638b849b2beb59.png

 Aonan Guan

 解决方案架构师

负责基于亚马逊云科技云计算方案架构的咨询和设计,推广亚马逊云科技云平台技术和各种解决方案。专注 Builder Expereience 和效率工程。

1a587b43f82374ef1069288ec17dffeb.gif

听说,点完下面4个按钮

就不会碰到bug了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43711.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何正确跟踪广告转化数据,优化广告投放效果?

为什么要做转化跟踪 广告界有一句老话&#xff0c;我知道我的广告费有一半是浪费掉的&#xff0c;但是不知道是怎么浪费掉的。所以对广告主来说广告跟踪非常重要&#xff0c;当你花了一大笔预算去做广告投放&#xff0c;带来的效果如何&#xff1f;如何根据每次广告投放的数据…

如何利用QA来提高亚马逊Listing的流量?

在亚马逊的运营中&#xff0c;对于Listing的优化&#xff0c;很多卖家习惯性地只关注关键词和Review&#xff0c;却容易忽略QA部分&#xff1b;其实亚马逊QA也是影响Listing权重的重要因素。QA在亚马逊Listing的产品详情页中占有非常重要的位置&#xff0c;是买家购物的重要参考…

关于亚马逊广告优化如何把握设置细节值得一看?

当前的亚马逊运营&#xff0c;站内广告成为标配&#xff0c;但很多新卖家&#xff0c;遇到广告投放就蒙圈&#xff0c;既没有广告投放的思路&#xff0c;也不知道如何把握设置的细节。 比如&#xff0c;在日常遇到的咨询中&#xff0c;最常遇到的就是&#xff1a; 新品上架后…

亚马逊广告CPC优化技巧 投放就有效

上篇文章我们介绍了亚马逊广告为什么没有效果&#xff0c;为什么有展示没有成单&#xff0c;为什么有点击没有成单等问题。今天这篇我们主要介绍亚马逊广告如何设置。都是干货&#xff01; 亚马逊广告问题自查之后才能知道自己的问题在哪&#xff0c;然后修改&#xff0c;大神…

亚马逊运营之广告优化问题的见解!

很多卖家在运营中把广告优化等同于设置否定关键词&#xff0c;这个词被点击了5次没转化&#xff0c;否定&#xff1b;那个词被点击了3次没转化&#xff0c;否定&#xff1b;N多个词被否定之后&#xff0c;广告也变得越来越差了。 原因很简单&#xff0c;否定固然是广告投放过程…

高薪聘请“软件测试”专业老师“在线修改测试人简历”、逆风下测试人的简历如何才能脱颖而出

小编热衷于收集整理资源&#xff0c;记录踩坑到爬坑的过程。希望能把自己所学&#xff0c;实际工作中使用的技术、学习方法、心得及踩过的一些坑&#xff0c;记录下来。也希望想做软件测试的你一样&#xff0c;通过我的分享可以少走一些弯路&#xff0c;可以形成一套自己的方法…

软件测试培训班出来的,为啥那么容易被发现,简历到底该怎么写

首先&#xff0c;我说一句&#xff1a;培训出来的&#xff0c;优秀学员大有人在&#xff0c;我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配&#xff0c;是非常遗憾的事情。 ​ 1&#xff0c;工作年限不匹配的 应届生就是没有经验的&#xff0c;不要写1-2年…

你的简历真的做的好吗?一起来看看软件测试简历的常见误区

目录 误区一&#xff1a;简历整体排版混乱&#xff0c;花花绿绿&#xff0c;不够简洁大方。 误区二&#xff1a;不要出现明显拉低简历逼格的技能和证书 误区三&#xff1a;工作经历模块流水账记录公司日常工作内容 误区四&#xff1a;专业技能描述跟工作经验不匹配 误区五&…

你投的简历提示不合适,建议参考STAR法则

投简历的时候老被提示为 您与该职位不太合适&#xff0c;无法进入面试阶段。建议参考STAR法则对简历进行修改&#xff0c;并突出您在专业知识方面的优势。 目测你是在拉钩上投的&#xff0c;企业的投递回复都是拉钩给的模板&#xff08;所谓的STAR都是套路&#xff09; 如果你…

个股呈现普跌

今日两市震动调整&#xff0c;到收盘&#xff0c;上证指数跌0.92%失守3600点&#xff0c;深证成指跌0.99%&#xff0c;创业板指跌0.19%。商场心情转弱&#xff0c;多空博弈剧烈&#xff0c;个股呈现普跌&#xff0c;挣钱效应较差。盘面上&#xff0c;重型机械、酒店餐饮、电源设…

透过顶级机构Q2持仓报告看美股不同板块的行情

美股股市走到今年二季度&#xff0c;市场出现了分化行情。部分板块受到政策影响而陷入低迷状态&#xff1b;有的版块因经济增长强劲迎来上涨行情&#xff0c;为此受到了不少投资机构的青睐。 近期&#xff0c;2021年二季度13F报告陆续释出&#xff0c;许多投资者都比较关心投资…

A股市场全景分析系列—基于涨停板统计市场情绪指标

股票分析应该遵循先大后小、先宏观后微观的原则&#xff0c;先分析整体市场的趋势&#xff0c;然后挖掘当前的热点板块&#xff0c;最后聚焦到强势股中。 于是&#xff0c;我们推出了“A股市场全景分析”系列&#xff0c;通过多维度的全局观察分析&#xff0c;清晰当前市场走向…

拉伯证券|A股涨势趋缓,个股分化,北向资金继续“买买买”

今天上午&#xff0c;A股商场涨势趋缓&#xff0c;主要指数涨跌互现。 个股方面也现较大分解&#xff0c;接连涨停股和接连大幅跌落股同时呈现。 值得注意的是&#xff0c;作为近期最为坚定买入A股的力量之一&#xff0c;北向资金今天上午继续“买买买”&#xff0c;上午半个交…

上涨趋势回踩均线选股器

本篇文章延续上篇《底部均线多头排列选股器》的思路继续往下写。 我记得自己刚入行的时候&#xff0c;最喜欢做的事之一就是去抄底&#xff0c;觉得在底部买入是一件多么让人兴奋的事情&#xff0c;但是随着经验的丰富&#xff0c;发现抄底这事的确很难&#xff0c;所以后来对…

上海亚商投顾:沪指冲高回落 三季报行情成主流

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日弱势震荡&#xff0c;创业板指一度冲高涨超1%&#xff0c;午后涨幅有所回落&#xff0c;上证50跌超1%&…

申宝剖析沪深两市股指高开高走

沪深两市股指高开高走&#xff0c;截至收盘&#xff0c;沪指涨0.61%&#xff0c;深证成指涨1.41%&#xff0c;创业板指涨2.54%站上3500点整数关口。 板块方面&#xff0c;锂电池、半导体、芯片板块全天强势&#xff0c;光伏、家电、动力电池板块涨幅居前&#xff0c;新能源汽车…

聊聊今天地产股的逆势上涨

文章来源&#xff1a;小七滚雪球 小七由于崇尚长期投资&#xff0c;坚持多看书&#xff0c;少看盘的投资方针&#xff0c;所以挺反感写这种聊一天行情的文章的。但是&#xff0c;一方面由于自己最近码字时间比较多&#xff0c;另一方面还是想把今天的行情作为一个引子&#xff…

【汇正财经】沪深创冲高回落

盘面回顾&#xff1a; 今日两市早盘冲高后一路走低&#xff0c;盘中一度涨0.9%的沪指最终收跌0.46%&#xff0c;深成指、创业板指分别跌0.33%、0.36%。市场情绪依旧低迷&#xff0c;成交量相对昨日有所回升&#xff0c;全天成交额6570亿&#xff0c;两市下跌个股多达4100只&am…

哈佛大学计算机系王牌项目,要请AI来当导师了

本文经量子位&#xff08;公众号 ID: QbitAI&#xff09;授权转载&#xff0c;转载请联系出处 克雷西 发自 凹非寺量子位 | 公众号 QbitAI 近日&#xff0c;哈佛宣布了一个重磅决定&#xff1a;AI导师将进入课程。 负责的还是计算机系的旗舰项目——计算机科学导论&#xff0c;…