1. 程式人生 > >移動推薦演算法(二):基於簡單規則的預測

移動推薦演算法(二):基於簡單規則的預測

本文為轉載文章,來源為: 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到了第二名。。。)