你的廣告能打幾分?Kaggle需求預測挑戰賽冠軍方案這樣做
作者 Dance with Ensemble
伊瓢 編譯
量子位 出品 | 公眾號 QbitAI
我們每天在網頁上看到的各種電商廣告,到底夠不夠吸引人?4個月前Kaggle和「俄羅斯版58同城」Avito辦了個需求預測挑戰賽,預測不同的廣告能吸引用戶多大的購買需求。
如今冠軍已出爐,並且在社交網路上引起了一波關注收藏,量子位在此分享一下。
Avito需求預測挑戰賽
而爛廣告則表意不明、圖片不清晰,或者讓人覺得這壓根就是個騙子。
所以,對同樣的產品,好廣告產生的需求高,爛廣告產生的需求低。Kaggle的這次需求預測挑戰,就是把「需求」用方差來定義:
公式中?為預測值,y為實際值。
這場比賽在今年4月底推出,6月底截止,共有1873支隊伍參賽,冠軍獎勵12000美元,亞軍獎勵8000美元,季軍獎勵5000美元。
冠軍方案
冠軍團隊Dance with Ensemble的最終分數為0.2150,團隊包含兩名中國人、兩名俄國人。領銜作者Little Boat目前Kaggle比賽排名第五。
之後,他們公開了自己的方案。
整個網路的第一層包含一些lgb模型、一些NN模型和一些xgb模型,第二層包含一些lgb模型、一些xgb模型和一些NN模型,一個NN作為最後一層。作者認為複雜的結構(3層)可能給提供了大約0.0002-0.0004分的改進。
他們還發現了一些基於主動訓練+測試的特徵,將最好的單個lgb提升到213X,最終貢獻了0.0007的改善。
整個Dance with Ensemble團隊四個人的部分合併時,他們模型的線性混合可以達到0.2133。
神經網路
如何用一個NN達到0.215X?
包括文本,分類,數字,圖像在內,所有內容都很重要。作者是這樣實現的:
1.得到了0.227X的數字特徵和分類嵌入。
2.用2個RNN包含了titile和description,使用fastText預訓練嵌入,通過一些調整,得分降至0.221X。
3.用自我訓練fastText嵌入訓練+測試,並主動訓練、主動測試。事實證明,訓練+測試的自我訓練是最好的。得分達到0.220。
4.添加具有平均池化的VGG16頂層。這一步其實讓分數變低了,在將文本,圖像,分類,數字特徵合併在一起之前做一些調整,分數約為0.219X。
5.嘗試用CNN或Attention等調整文本模型,發現無效後使用2層LSTM,然後是dense層,這裡可能有0.0003的改進。
6.嘗試了用不同的CNN模型處理圖像,固定的ResNet50中間層可能還有0.0005分的提升,分數變成了0.218X。
7.開始做各種調整,發現在文本和LSTM之間添加空間dropout有很大幫助,大概貢獻了0.0007 - 0.001。精細調整的退出率總體上也有所幫助,這裡改進了大約0.001 - 0.0015,所以現在的分數大約為0.2165 - 0.217。
8.開始整合所有特徵,得到一個0.215分的NN!
9.如果你一直在保存模型,你可以在它們之上訓練一個全連接的NN,還有大約0.008的改進。換句話說,用神經網路打進前10名很容易!
特徵工程
文字特徵
在標題,描述,標題+描述,標題+描述+param_1等上面,用了tfidf演算法。保留所有xgb模型的稀疏特徵; 使用svd和oof ridge為所有lgb模型保持多樣化。
文本統計,比如字長、標題包含而描述中沒有的特殊字詞等。
圖像特徵
1.圖像統計,參考:https://www.kaggle.com/shivamb/ideas-for-image-features-and-image-quality
2.三個預訓的練神經網路模型的特徵,參考:https://www.kaggle.com/wesamelshamy/high-correlation-feature-image-classification-conf
3.vgg16預訓練網路特徵
4.關鍵點特徵,參考:https://www.kaggle.com/c/avito-demand-prediction/discussion/59414
分類特徵
計算/統計各個級別的獨特特徵。
這些特徵是為train + test和train + test + train_active + test_active生成的。例如,(parent_category_name,category_name,param_1)中的廣告數量,(region,city)中的唯一user_id數量。
各種級別的目標編碼。這些包括count> = 5000的類別的平均deal_probability; count> = 5000的類別的平均預測deal_probability(train + test)(注意,選擇閾值使得cv / lb間隙保持大致相同。); OOF表示deal_probability編碼; OOF表示deal_probability * min(1,log(count)/ log(10000))編碼。
預測自變數特徵
xgb預測價格,image_top_1;
lgb預測價格,image_top_1,item_seq_number(oof預測);
rnn預測day_diff = day_to - day_from
在不同分類級別的平均預測價格,image_top_1,item_seq_number,day_diff。
不同級別的差異特徵,例如(price-xgb_price)/(category_name)級別的價格,log(image_top_1) - (resnet50_category1)級別的log(lgb_image_top_1)等。
嘗試從文本特徵預測parent_category_name和category_name(multicalss分類),但包括它們使cv略差。
user_id特徵
路程特徵,首先從(user_id,item_seq_number,activation_date)開始訓練,然後計算旅程數量(和百分比)、不同級別的返程數量(和百分比),例如( user_id,parent_category_name),(user_id,parent_category_name,category_name,activation_date)等。
分類特徵,將user_id視為分類變數,在(user_id)或(user_id,其他分類變數)級別生成特徵。例如,unique item_seq_number,price range = log1p(max(price)) - log1p(min(price)))。
周期特徵,由periods_train和periods_test生成。
傳送門
作者原貼:
https://www.kaggle.com/c/avito-demand-prediction/discussion/59880
—完—
加入社群
量子位AI社群19群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字「交流群」,獲取入群方式;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進專業群請在量子位公眾號(QbitAI)對話界面回復關鍵字「專業群」,獲取入群方式。(專業群審核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。


※Waymo無人計程車年底發射,現已進入定價環節
※有屏智能設備的多維對話:延遲和指令呈現
TAG:量子位 |