IJCAI-15 商家促銷后的重復買家預測比賽紀實

IJCAI-15 商家促銷后的重復買家預測比賽紀實

標簽: ML比賽 IJCAI


比賽介紹

兩年一屆的人工智能頂會IJCAI與阿里合辦的機器學習比賽。由Alibaba inc.提供比賽數據。和去年以及今年的天池大數據競賽賽題相似但又不同。

我們知道,國內外的電商有各種各樣促(pian)銷(qian)活動,像國外的黑五(Black Friday),國內的雙十一等等。大量商家通過打折促銷吸引顧客。而我們,aka. 剁手黨,也在這一天伺機而動。其中,有許多顧客是被商家的促銷所吸引的新顧客,那么他們會不會在促銷之后繼續在這家店買東西呢?本次比賽題目就是預測這些會重復購買的顧客。

比賽分為兩個階段(阿里比賽的一貫套路),第一階段數據量相對較小,參賽者可以本地建模,提交最終的結果即可,最終TOP50的選手or隊伍可以進入第二階段。第二階段則需要把代碼提交到阿里的云平臺上運行(當然是官方提供的接口)。

比賽的評測標準是ROC曲線下面積(AUC[1])。典型的二分類分類器評估標準。

我們隊伍LinkinPark在Stage1 rank9,Stage2 rank4. 第二階段最后幾天被擠出前三。。(囧)。

數據分析與預處理

數據格式 文件名 字段
data format 2 train_format2.csv user id,age range,gender
merchant_id,label,activity log test
test_format2.csv user_id,age_range,gender
merchant_id,label,activity log test
data format 1 user_log_format1.csv user_id,item_id,cat_id,seller_id
brand_id,time_stamp,action_type
user_info_format1.csv user_id,age_range,gender
train_format1.csv user_id,merchant_id,label
test_format1.csv user_id,merchant_id,label

先來看看第一階段提供下載的數據。官方提供了兩種數據格式(見下表)

數據格式 文件名 字段
data format 2 train_format2.csv user id,age range,gender
merchant_id,label,activity log test
test_format2.csv user_id,age_range,gender
merchant_id,label,activity log test
data format 1 user_log_format1.csv user_id,item_id,cat_id,seller_id
brand_id,time_stamp,action_type
user_info_format1.csv user_id,age_range,gender
train_format1.csv user_id,merchant_id,label
test_format1.csv user_id,merchant_id,label

兩個數據格式都包含了雙11之前6個月的用戶行為日志,label表示用戶是否在雙11之后的6個月內重復購買,在格式2的數據中,label有-1的,表示當前用戶不是當前商家的雙11新用戶。可見,格式一的數據是user-friendly(官方說法)的,易于做特征工程。然而,格式一中是沒有label為-1的(u,m)對的,因此相比格式二會少一些信息。

Data format #Pairs #User #Merchant #Item #Cat #Brand
data format 1 4215979 126474 4995 800322 1542 7936
data format 3 14052684 424170 4995 1090071 1658 8444

我們現在將那些label為-1的數據記為Data format3,來看看format1和3的數據統計信息(下表)。

Data format #Pairs #User #Merchant #Item #Cat #Brand
data format 1 4215979 126474 4995 800322 1542 7936
data format 3 14052684 424170 4995 1090071 1658 8444
---- #Click #Cart #Favour #Buy Total
All-Period 48550712 67728 3277708 3005723 54901871
11-11 9188150 12621 1220285 156450 10577506
Daily Average Before 11-11 224928 299 11181 15485 240594

然后再看看雙11和非雙11用戶各種行為統計。

---- #Click #Cart #Favour #Buy Total
All-Period 48550712 67728 3277708 3005723 54901871
11-11 9188150 12621 1220285 156450 10577506
Daily Average Before 11-11 224928 299 11181 15485 240594

雙11的行為數數十數百倍于平時。。。

特征工程

對于一般的分類算法,特征空間的選擇是非常重要的,即使你的算法再牛逼,沒有好的搜索空間的支持,也然并卵。因此特征工程在DM/ML比賽是大廈的基石,它決定了你的樓能蓋多高。

特征體系

統一介紹一下兩個階段用到的特征,第二階段的特征幾乎涵蓋了第一階段的。

  1. Baseline特征
    官方提供的一套為LR設計的特征體系。首先,獲得每個商家的最相似的5個商家,計算方法是統計商家之間的共同用戶。這些商家的id離散化作為特征(4995維稀疏特征)。然后,取當前用戶對當前商家的行為特征。
  2. 信息描述類特征
    這是我們特征的主力軍,時間都花在這上面了。這部分特征幾乎都是具有物理意義的特征,總體可以分為三種:user,merchant,(u,m)對特征。由具體的物理意義再分為三類:
    • 計數類:行為計數、行為天計數、行為對象計數等;
    • 比值類:平均每天行為、回購率、每月行為占比等;
    • 生命周期類:用戶首次/最后行為日、生存周期。
  3. 離散特征
    為什么要設計這套特征?為了使ID類完全個性化,用在LR上效果特別好(線性模型,L1正則,可實現效果好)。
    離散的方法,是將類別|ID可取的值展開成多維稀疏向量,只有對應的部分標1,其余為0.我們離散的特征為:
    • 用戶的年齡和性別;
    • 當前用戶在當前商家購買的商品ID、商品類別ID、品牌ID;
    • 當前用戶在當前商家重復購買的品牌ID。

特征處理

LR是一個傲嬌的模型,喂的特征量綱不統一他是不會吃的- -。因此我們需要統一量綱。我們使用了log轉化,即對會產生問題的特征進行了log(x)的轉換。為什么不用z-score/minmax歸一化方法?純粹是因為第二階段提供的特征提取框架很難實現。

工具和平臺

第一階段

scikit-learn[2]+xgboost[3],我是python黨;)
xgboost是個好工具!感謝陳天奇大神帶來這么牛x的GBM實現。

第二階段

第二階段官方提供了一個平臺“方便”參賽者提取特征和跑模型。基礎平臺:阿里ODPS,特征提取:Graph(管理員說的,我估計是graphlab那個框架),lr,gbrt實現:Xlib。
如果我們只用Xlib的LR和GBRT的話,我們只需要提供提取特征的代碼,并打包提交即可。
這個平臺讓人蛋疼的幾點:

  • 首先是特征提取。集群使用十臺worker虛擬機,每個worker上有10個vertex,用戶的日志(format2)被分別分在這些vertex上,特征提取程序分別在這些vertex上運行,達到并行的效果。這里,可以編程使每個用戶的log都分配在同一個vertex上,但是每個商家就不一定了,因此如果我們在這個框架下提取商家的特征,會導致這些特征不是全局的問題- -。我們只能使用stage1的數據提取特征在作為輔助文件上傳。。。
  • 其次是模型融合。官方的框架無法實現線上LR和GBDT哪怕是簡單stacking learning的融合。這使得我們只能以單個模型比賽(雖然大家都一樣。。)。

模型

  • LR:Logistic Regression[4],簡單實用,線性模型,訓練快速。可用L1/L2正則化,SGD。在面對stage2 100W+維特征時候表現很好。
  • RF:Random Forest[^rf],各種隨機,多棵樹融合。stage1作為輔助模型融合。
  • GBRT:Gradient Boost Regression Tree[5],梯度提升框架,不用特征歸一,泛化強,效果贊。再次膜拜其實現Xgboost[3]
  • MFM:Multi-Instance Factorization Machines,這個模型是我們隊一個大牛設計的,結合了Factorization Machines[6]和Multi-Intance[7]框架。
    MFM不需要做特征工程!我們需要做的就是將每個用戶的log打包,對于一個(u,m)對,一個log加上一個flag(這個log是否與m相關聯)對應一個instance,一個用戶的所有instance為一個bag。所以最終用戶是否是商家的重復買家取決于用戶所有的log是否發生在當前商家。
    FM被用來預測一個instance對一個重復買家的positive貢獻,由等式1定義,其中$M(x)$由等式2定義。
    $$
    Pr(y(x)=1;w,{v}) = \frac{1}{1+e^{-M(x)}}
    $$
    $$
    M(x)=w_0+\sum_{i-1}Dw_ix_i+\sum_{i=1}{D}\sum_{j=i+1}^{D}<v_i,v_j>x_ix_j
    $$
    我們要求得目標函數是:
    $$
    argmax_{w,{v}}\prod Pr(y(B^+)=1)\prod Pr(y(B^-)=-1)
    $$
    使用SGD學習$w,{v}$,再用L-BFGS調節L2正則化后的所有權重。

模型融合

我們第一階段的融合框架:


Ensemble框架
Model GBRT GBRT GBRT RF Final Model
Feature Set Size 383(all) 276 254 383(all) mix
AUC 0.702711 0.702645 0.702585 0.701084 0.70319

其實很簡單,就是特征池中選擇特征$\rightarrow$模型$\rightarrow$stacking learning[8]
我們直接把MFM的結果作為一個High-level的特征加入到特征池中。提升了0.0018,0.700936$\rightarrow$0.702711.
各模型結果:

Model GBRT GBRT GBRT RF Final Model
Feature Set Size 383(all) 276 254 383(all) mix
AUC 0.702711 0.702645 0.702585 0.701084 0.70319

結果

第一階段我們隊伍獲得了第9。
第二階段我們隊伍獲得了第4。

總結

歷程

寫一下我參加這次比賽的歷程,由于今年阿里的移動推薦比賽,第一階段就被淘汰了(T.T)才轉戰這個比賽的。看完賽題就著手做了起來,每天想一些新的特征,再xgb調調參數,分數一直穩步再漲,一度到了LB6。然后有幾天分數就卡主上不去了,當時想著是不是應該招人組個隊,分享一下思路。于是去比賽論壇上發了個貼子,當天晚上和之后的那個隊長聊到了2點多鐘。。。他是有老師支持的(真好),雖然當時他們名次沒有我高,我還是同意讓他當了隊長(畢竟人家帶著一幫人。。),第二天我們隊又來了個大牛,就是做MFM那個,他是自己造的輪子,分數有0.689.于是我們隊就在最后五天組成了。然后我們就在最后五天進行了特征融合,他們那邊把特征輸出給我,我來組合,跑模型,跑完的結果在給他做ensemble。

經驗&教訓

  • 組隊真的有必要。個人精力非常有限,組隊不僅可以提供新的思路,還能使任務并行。
  • 這種比賽拼的到底是什么。我覺得1.特征工程,對數據的理解,不停地嘗試都是特征工程需要做的。2.融合,之后參加了幾次kaggle比賽知道了融合強大,簡單的stacking learning就能獲得不少的提升。
  • 一個教訓是我們在組隊之初犯了許多錯誤,沒有一個比較規范的融合模式,導致比較混亂。

Reference


  1. Andrew P. Bradley. The use of the area under the roc curve in the evaluation of machine learning algorithms. Pattern Recognition, pages 1145–1159, 1997. ?

  2. http://scikit-learn.org/stable/ ?

  3. https://github.com/dmlc/xgboost ? ?

  4. Olivier Chapelle, Eren Manavoglu, and R′omer Rosales. Simple and scalable response prediction for display advertising. ACM Transactions on Intelligent Systems and Technology, 5(4):61:1–61:34, 2014. ?

  5. Jerome H. Friedman. Greedy function approximation: A gradient boosting machine. Annals of Statistics, 29:1189–1232, 1999. ?

  6. Steffen Rendle. Factorization machines. In IEEE International Conference on Data Mining series (ICDM), pages 995–1000, 2010. ?

  7. Oded Maron and Tom′as Lozano-P′erez. A framework for multiple-instance learning. In Advances in Neural Information Processing Systems 10, pages 570–576, 1997. ?

  8. https://en.wikipedia.org/wiki/Ensemble_learning ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容