移動推薦演算法(二):基於簡單規則的預測
本文為轉載文章,來源為: https://blog.csdn.net/Snoopy_Yuan/article/details/72850601
一直在探索資料探勘、資料建模的案例,百度搜到這篇文章,收穫頗豐,轉載以作記錄。
前言:移動推薦演算法是阿里天池賽2015年賽題之一,題目以移動電商平臺的真實使用者-商品行為資料為基礎來構建商品推薦模型。該題現已成為新人入門的經典演練物件,博主也希望基於該題場景,加深對機器學習相關知識的理解,積累實踐經驗。
關於題目回顧與資料初探,可參考:天池離線賽 - 移動推薦演算法(一):題目與資料解析,本文討論如何運用一個簡單的規則來進行預測,主要目的是感受一下天池賽答題評分的過程。
規則提出
根據生活常識,我們很容易想到加購物車的行為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
提交,得到評測結果如下:
可以看到,這樣一種基於規則的預測方法還是取得了一定的結果。(ps.由於新賽季剛開始,提交結果的人還不多,所以竟rank到了第二名。。。)