关于题目回顾与数据初探,可参考:天池离线赛 - 移动推荐算法(一):题目与数据解析,本文讨论如何运用一个简单的规则来进行预测,主要目的是感受一下天池赛答题评分的过程。
规则提出
根据生活常识,我们很容易想到加购物车的行为behavior_type = 3
与最终的购买行为behavior_type = 4
强关联,于是我们提出这样一条规则:
在 T 时间内加购物车的用户最终会选择购买、
于是我们的任务变成了确定这个最优参数 T。
数据构建与宏观分析
为了进行分析,我们基于原始数据集构建一个新的数据集:
D_time = {<user_id, item_id, time_3, time_4>}
D_time数据集中的time_3, time_4
对应某个用户商品对[user_id, item_id]下的2种操作(加购物车、购买)的初次时间,缺省值为nan,采用pandas处理数据并做去重处理,生成的新数据,示意如下:
>>> df_time.head(5)
user_id item_id time3 time4
0 100029775 222229697 2014-12-12 15:00:00 2014-12-12 15:00:00
1 100068031 250636264 2014-12-14 00:00:00 2014-12-14 00:00:00
2 100068031 296527651 2014-12-15 07:00:00 NaT
3 100068031 187577314 2014-12-15 06:00:00 NaT
4 100068031 150442941 2014-12-18 17:00:00 NaT
...
剔除数据集中的缺失值样本,得到既有加购物车又有购买的样本数据集事宜如下:
>>> df_time_34.head(5)
user_id item_id time3 time4
0 100029775 222229697 2014-12-12 15:00:00 2014-12-12 15:00:00
1 100068031 250636264 2014-12-14 00:00:00 2014-12-14 00:00:00
6 100076491 28462638 2014-12-02 22:00:00 2014-12-02 22:00:00
10 100097524 234964999 2014-11-30 22:00:00 2014-11-30 22:00:00
11 100097524 95870772 2014-11-30 22:00:00 2014-11-30 22:00:00
...
对数据的time3、time4做差,得到时间差,绘制出“加购物车-购买”时间差分布直方图示意图如下:查看源码 - python
由上图可见,绝大多数记录的“加购物车-购买”时间差在1天以内(这也和我们的生活经验一致),于是我们取参数T = 1 day
即最终规则为:
在12月18日加购物车而未购买的用户,最终会选择在12月19日购买。
规则验证
统计出规则中的”用户-商品(属于商品子集)”对(即12月18日加购物车而为购买的样本),导出预测结果示意如下:查看源码 - python
user_id,item_id
100442521,85464552
100442521,169674678
103215328,126238643
103490614,300814663
103490614,79590796
...
将所生成的csv文件tianchi_mobile_recommendation_predict.csv
提交,得到评测结果如下:
可以看到,这样一种基于规则的预测方法还是取得了一定的效果。