天池离线赛 - 移动推荐算法(二):基于简单规则的预测

关于题目回顾与数据初探,可参考:天池离线赛 - 移动推荐算法(一):题目与数据解析,本文讨论如何运用一个简单的规则来进行预测,主要目的是感受一下天池赛答题评分的过程。

规则提出

根据生活常识,我们很容易想到加购物车的行为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提交,得到评测结果如下:

rule_example_res

可以看到,这样一种基于规则的预测方法还是取得了一定的效果。