项目概述
这是Udacity数据科学家的毕业项目,项目提供了一系列交易相关信息,要求通过这些数据,分析出用户在什么样的广告推送下会有购买的行为发生。
项目数据
一共有3个数据集
portfolio.json -- 广告特征数据
id (string) – 推送的id
offer_type (string) – 推送的种类,例如 BOGO、打折(discount)、信息(informational)
difficulty (int) – 满足推送的要求所需的最少花费
reward (int) – 满足推送的要求后给与的优惠
duration (int) – 推送持续的时间,单位是天
channels (字符串列表)
profile.json -- 用户特征数据
age (int) – 顾客的年龄
became_member_on (int) – 该顾客第一次注册app的时间
gender (str) – 顾客的性别(注意除了表示男性的 M 和表示女性的 F 之外,还有表示其他的 O)
id (str) – 顾客id
income (float) – 顾客的收入
transcript.json -- 交易数据
event (str) – 记录的描述(比如交易记录、推送已收到、推送已阅)
person (str) – 顾客id
time (int) – 单位是小时,测试开始时计时。该数据从时间点 t=0 开始
value - (dict of strings) – 推送的id 或者交易的数额
研究问题选择
根据给出的数据集,我选择的研究问题是:
不同的广告推送对不同的用户是否会有促成消费的效果。及用广告类型数据结合用户数据,预测是否会在广告推送后发生交易行为。
因为最后预测的结果为:是否会有消费行为,属于二分类问题,这里我选择了用了随机森林作为基础模型进行预测。因为这个模型的适用范围较广,在学习数据不多的情况下也有良好表现。
清洗数据
step1: 我先对三个数据集进行的数据分布的观察:
step2: 数据处理
整理Target user数据:
1. 将offer viewed event筛选出来
2.将viewed event和profile数据通过user的id联系起来,把user的profile数据和event进行联系。
3.将transition的event筛选出来和1,2步整理好的数据通过user的id连接起来
4.通过计算transition time - view time 对比offer during 筛选出看来优惠券后在优惠券有效期内产生的消费记为yes,否则记为no。
5.通过dummy的方式,将预测target变成target_customer_no和target_customer_yes. Offer的type也变成bogo, discount, ifnformational三个类。
最后整理得到的模型training data 结构如下:
member_days 是根据用户加入会员时间到reporting (2020/7/20) 时间的天数
target_customer_no 表示这个用户在此种offer下没有发生消费
target_customer_yes则表示这个用户在此种offer下发生了消费
构建模型
我选用了随机森林模型,参数选择了500棵树。最后的预测结果如下:
模型的yes类的recision较高,no的recall 比较高,说明模型的预测性相对较好,但鲁棒性较差。
模型的数据不是很平衡,这个是影响模型质量的原因。
模型选择/比较 (Logistic Regression Classifier)
接着我又尝试了Logistic Regression Classifier,尝试结果如下。比较precision, 非target customer的组预测结果很差,原因可能是no组的样本较少。target customer为yes的组precision也明显低于Random Forest。所以不选此模型。
模型评估:
这里我选用了Yes 类的Precision作为主要的评估指标,因为yes预判错误的损失最多是多发了几个无用的广告推荐,没有什么损失。但是如果少发的广告而落掉了目标客户,那么损失相对是较大的。
改进:
增加数据量,尤其是informational的数据相对较少。
精选精细化调参,可以进一步提高模型准确率。
最开始选择预测优惠券有效的类型,分成3类,但由于数据不足模型精度较低。转成预测是否有效的binary预测,精度相对有所提高。因为合并成两类后,增加了产生消费的数据量,精度相对提高。
结论:
本项目的工作流程可以总结为:
1. 初步观察客户信息、offer信息和系统记录event,了解样本数量和质量;
2. 定义项目目标:怎样的客户在怎样的推送下会有购买行为?
3.确认需要的训练数据内容
4.整理数据,构建Training dataset
5.测试多款分类器尝试评估合适选项
6. 确定随机森林分类器并进行模型调优
7.生成预测结果和validation结果,计算precision进行模型评估。
总体感觉数据的清洗过程比较有挑战,需要处理一些异常值,比如删掉超过110岁的顾客。还需要把不同的event删选处理进行拼接。
网友评论