文章目录
简介
本次赛题为《阿里移动推荐算法》,以阿里巴巴移动电商平台的真实用户-商品行为数据为基础,同时提供移动时代特有的位置信息,而参赛队伍则需要通过大数据和算法构面向建移动电子商务的商品推荐模型。希望参赛队伍能够挖掘数据背后丰富的内涵,为移动用户在合适的时间、合适的地点精准推荐合适的内容。
赛事网址:https://tianchi.aliyun.com/competition/entrance/231522/introduction?spm=5176.12281973.1005.5.3dd54c2ab7Ixu4
GitHub:代码地址
比赛信息
- 竞赛数据信息
本场比赛提供20000用户的完整行为数据以及百万级的商品信息。竞赛数据包含两个部分。
第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_fresh_comp_train_user_2w,包含如下字段:
第二个部分是商品子集(P),表名为tianchi_fresh_comp_train_item_2w,包含如下字段:
-
比赛内容
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。 -
评分数据格式
具体计算公式如下:参赛者完成用户对商品子集的购买预测之后,需要将结果放入指定格式的数据表(非分区表)中,要求结果表名为:tianchi_mobile_recommendation_predict.csv,且以utf-8格式编码;包含user_id和item_id两列(均为string类型),要求去除重复。例如:
1. 探索数据分析
1.1 查看数据
用户行为数据表(tianchi_fresh_comp_train_user.csv)包含23291027条数据,数据样式如下:
商品子集数据表中包含620918条数据,数据样式如下:
1.2 数据缺失值占比
两个数据文件中中除了用户(user_geohash)有68.3%的缺失值
商品位置信息(item_geohash)有67.2%的缺失值,其他字段都无缺失值。
1.3 用户的行为类型
购买与非购买的占比约为1:100,标签存在严重的类别不均衡情况,易导致模型训练失效,可以考虑对数据进行抽样处理。
关于数据不均衡事例请戳这篇博客:https://blog.youkuaiyun.com/weixin_43746433/article/details/97537816
2.用户行为探索
2.1 转换时间类型
2.2 每日购买分布
-
商品全集每天的购买情况
用户购买商品的数量比较稳定,基本维持在6000左右,双12由于购买量是平时的将近5倍。 -
商品子集每天的购买情况
用户购买商品子集的数量基本稳定在500-600之间,也就是说我们最终需要预测的购买数据大概率在这个数量区间。
2.3 查看用户星期购买分布
-
商品全集 浏览、加购物车、收藏 和购买的星期分布图
用户的四种行为在一个星期内每天的分布,浏览、收藏和加入购物车的分布大致相同,而星期五购买量比其他的天数多。 -
商品子集购买星期分布图
- 用户type操作的时间段分布
商品全集与子集购买时间段分布图
-
按小时来观察用户行为的分布,用户一般在每天的19:00—23:00时间段,浏览、收藏、加入购物车的操作数量达到高峰,而购买行为则在下午和晚上够比较多。
由于数据只有行为时间的数据,所以必须通过各种行为构造新的特征。通过对数据的探索以及对购买行为的理解,可以在用户各种行为发生的次数和时间间隔等方面构造特征
3.特征工程
3.1 特征构造
对于特征构造的思路,可以考虑在用户、商品、商品类型以及用户-商品、用户-商品类型几个大类,对各种行为的次数、时间等方面进行特征构造,构造的特征如下:
3.2 特征选择
用了XGBoost模型。可以通过模型中Feature importance中各特征的Score值来筛选特征,最终留下Score值较高的特征。
rom xgboost import plot_importance
plot_importance(model_xgb)
plt.show()
4.模型训练
4.1 数据集划分
训练数据建立推荐模型,并输出用户在接下来在19号对商品子集购买行为的预测结果(提交结果)。 所有数据需要划分训练集,验证集,以及测试集。
训练集:17号以前的数据 预测17号的购买
验证集:17号以前的数据 预测18号的购买
测试集:17号以前的数据 预测19号的购买(结果)
4.2 模型的选择
解决本问题适用的模型有Logistic Regression、随机森林、GBDT、XGBoost等
可使用模型融合方法进行预测。
参考:https://blog.youkuaiyun.com/weixin_43746433/article/details/98787993#57__939
XGBoost模型具有以下的优势:
(1)数据存在严重的正负样本不均衡的情况,采用Logistic Regression需要数据进行采样,平衡正负样本的数量,而决策树类的模型对于类别失衡不敏感。
(2)不需要对数据进行标准化和归一化,而且,可以自动处理Null值。
(3)训练速度快,并且可以通过参数调节防止模型过拟合。
4.3 模型训练与参数调整
使用sklearn中的 GridSearchCV() 函数调节参数,详情请戳:https://blog.youkuaiyun.com/weixin_43746433/article/details/96483129#4XGBoost__324
5.提交数据
此前,在探索性数据分析的环节,数据显示用户对子集中商品的购买数量大致稳定在每天500-600。因此,结合模型的结果,最终选取评分前550的用户-商品对作为预测结果。