如何評價Kaggle舉辦的Rental Listing Inquiries比賽?

Two Sigma Connect: Rental Listing Inquiries


謝邀, 兩周前開始投入在這個比賽裡面, 目前public LB score大概是0.51. 我覺得這是一個挺舒服的比賽. 不需要GPU, feature種類齊全, cross validation也能match public LB的score (不需要重新設計cross validation scheme). 而且研究透論壇上的discussion和kernel應該能把單個xgb模型調到0.53以下,算是比較容易起步的.

比賽還有兩天就結束了, 那我也大概講講我的思路吧. Image和文本並沒有做太多的feature engineering, 嘗試過用一些blind image quality assessment的metric, 但效果並不太好. 文本的話, 就是基本的tfidf. Manager id, features, location能玩的花樣比較多一點, 但基本上也就是採用了discussion裡面的思路或者自己的一些intuition. 用了Bayesian optimization調xgb的參數, 最後還不如自己剛開始選擇的.

把單個模型調到一定效果之後, 就開始做stacking了. 我並沒有使用StackNet, 總感覺裡面是黑箱子,不容易做一些自己的customization. 我的做法有借鑒Zhihua Zhou的deep forest論文, 就是把原本的input feature加到下一個level裡面(我估計這樣的思路之前也有, 不過我剛好看到deep forest的文章, 就嘗試了一下). 這樣子可以構建更複雜的decision boundary. 當然, 我的stacking也就兩層, 算不上deep forest.

這個比賽不需要太多計算資源,參賽者很多, 所以每天起來, 名次都會往下掉&>&<...最後, 還是要等private LB出來才知道有沒有overfit. 但不期待太多LB shake-up, 畢竟Local CV可以做得比較准. 比賽結束再來補充feature engineering和stacking的細節


2017.4.26 更新

比賽結束,private LB兩百多,個人而言已經比較滿意了。最後magic feature出來的時候,我沒有太多時間做stacking,於是排名一直往下掉。我比較了一下自己的代碼和論壇里前幾名大神的思路,發現我的思路的確不夠開闊,很多feature之間的groupby組合沒有想到。

最後安利一下自己在做的一個特徵工程技巧匯總,歡迎補充:【持續更新】機器學習特徵工程實用技巧大全 - 知乎專欄

2017.4.23 更新

所謂的神奇feature已經在論壇里出現了,是圖片壓縮文件里文件夾的創造時間,算是一種leakage。加入這個特徵後,模型普遍能提高0.01的public LB分數。

========================2017.4.20 更新=========================

已經掉出public LB前兩百。。。

有大神表示,他在比賽剛開始的時候就找到了一個非常神奇的feature(原文:magic feature),而且在目前的論壇上還沒有人發現。目前LB第二名用了22個一階模型ensemble,包括xgboost、lightgbm、keras、random forest,以及若干個二階模型。

====================2017.4.11更新====================

評論里有人反映RandomForestClassifier表現不好。我個人推測,是因為和gbdt相比,隨機森林不擅長應對高基數的類別特徵(categorical feature)。

我使用了一種新的數據編碼方式(平均數編碼:針對高基數類別特徵(定性特徵)的數據預處理 - 知乎專欄)之後,隨機森林的cv分數略有提升。除了我文章里的代碼實現以外,論壇里至少還有兩種不同的python代碼與一種R代碼。

========================2017.4.9更新===============================

所有人都在說xgboost包場,但我想到,其實還有一個優秀的gbdt演算法庫:微軟的LightGBM。簡單測試了一下,運算速度遠遠快過xgboost,經過一系列調參之後,準確率也能夠逼近最好的xgboost結果。

在論壇上,我把LightGBM具體的簡單框架做成了一個kernel,網址如下:

Two Sigma Connect: Rental Listing Inquiries

kaggle kernel自帶LightGBM,然而長時間內無人問津,簡直可以悶聲發大財(笑)。希望大家能多多upvote這個kernel,打破kaggle競賽目前被xgboost壟斷的局面。當然,模型準確率的上限必然是由特徵工程決定的,使用不同的演算法也只是在逼近這個上限而已。

===========================原回答===============================

這次比賽基本被XGBoost包場。不論是CV還是LB,RandomForest的效果遠遠比不上xgboost。public LB的前幾名都有非常優秀的特徵工程。論壇里有人連圖片特徵(photos)和自然語言特徵(description)都還沒有使用,僅用時間相關的特徵工程,單個model就可以達到0.525的LB。LB第一名一直在論壇保持沉默,分數從很早開始就甩開所有人一大截(0.500的LB),不知道用的是什麼模型。(我單個模型最好0.532,stack之後0.529,按照目前的趨勢過幾天就要掉出前200了)

在論壇上,有兩個比較有趣的思路。一個是java寫的stacknet架構,似乎可以自動進行智能化stacking,不過加了很多特徵工程後容易過擬合(至少對我是這樣)。另一個是基於貝葉斯的mean encoding:有些類別類特徵(cardinal feature)有很多種不同類別,例如building_id和manager_id。在使用(尤其是cv)的過程中,要小心data leakage,因為mean encoding的過程本身涉及到了我們要預測的y(interest_level)。具體的代碼參見論壇,有R和python的版本。

很好奇大神們用的特徵工程是什麼樣的,坐等比賽結束後的solution sharing。。。

另:拋磚引玉,以下是我的xgboost參數,n_estimators一般通過xgboost.cv確定,所以不列出。

t1_params = {
"silent": True, "objective": "multi:softprob", "nthread": -1,
"max_depth": 4, "learning_rate": 0.05, "subsample": 0.8, "colsample_bytree": 0.6, "colsample_bylevel": 1,
"gamma": 0, "min_child_weight": 1, "max_delta_step": 0,
"reg_alpha": 1, "reg_lambda": 0,
"scale_pos_weight": 1, "base_score": 0.5, "missing": None}


這是針對於這場比賽寫的博文:Kaggle首戰拿銀入門指導 (長文、乾貨) - 知乎專欄

原文鏈接 --&> 第一次參加Kaggle拿銀總結

一覺醒來自己的排名提升到了105名,參與人數也從2709變到了2623,想來Kaggle反作弊還是挺狠的,有些在討論區混的風生水起的大佬也下馬了,不知關注的友校那幾名選手是怎麼回事,默哀1分鐘。

========================2017.4.29 更新=========================

大清早起來看自己的LB排名,最終是124名,作為大三學生第一次參賽感覺非常滿意了。

總的來說,這場比賽比較吸引人的一點是它的數據集中包含很多類型的feature,比如文本、圖像、時間、數值等,比較關鍵的是要從這些給定的feature中找到比較好的組合。

比如其中有個manager_id在這場比賽中起到了非常關鍵的作用,有些人甚至只用了這個feature就能獲得LB0.517的成績。而本人的最終模型manager_id也扮演著關鍵的角色。可以見我發布的一個discussion

Two Sigma Connect: Rental Listing Inquiries

這是一場對初學者非常友好的比賽,對於特徵清洗、選擇,模型選擇、融合、調參的學習都很有幫助,另外就是能提高python中的pandas,numpy,sklearn等第三方庫的熟練程度。甚至有學校(SYSU)還將其作為data mining課的課程作業。

Kaggle是一個活躍的社區,裡面會有很多人分享知識,我受益良多,也非常開心這三個月來斷斷續續的努力沒有白費。

========================2017.4.26 更新=========================

在magic feature出來之後LB大動,猜想會不會像Financial Modeling Challenge一樣各種overfit。

第一次打kaggle,目前LB排名前100,magic feature出來後排名反而掉了二十多名,先挖個坑,過兩天比賽結束了再回來填坑【逃】


kaggle是不是已經被xgboost包場了


不請自來。最終排名top3%,銀牌一枚。最重要的是補齊了作為Kaggle Master需要的最後一枚銀牌,所以,現在也勉強混入Master隊伍了。

比賽數據很有意思,上面已經有多位提到了。方法上貌似沒有太多新鮮的,最後的優勝還是更取決於feature engineering和ensemble。我自己的solution最後包括了從XGBoost, LightGBM,NN,RF,LR,LIBFFM在內的近一百多個模型在8個不同數據集上的ensemble。這個現在在Kaggle已經不算什麼了。

我個人更感興趣的是Rentop的業務模式,包括在這個比賽中主導feature engieering的一個核心思路:怎麼去擬合Hopscore。對這個問題的深入思考,很大程度上拓寬並加深了我對於在線租房乃至於在線售房業務的理解,這才是最有價值的部分。


更新:最終結果0.513 悲劇的11%

這是一個新手可以練手和,大神亦可炫酷的比賽。 時間特徵,文字特徵提取,圖片特徵提取,地理特徵處理,high Cardinal categorical variable 處理。這裡的技能可以延伸到比如 nlp, computer vision, gis 等數據科學使用領域. 論壇里有很多值得學習的內容 比如listing id 有leak, manager feature處理後大大提升模型.... 我為這個比賽的文字信息想了很多特徵結果沒用 比如 大小寫的比例,錯別字的比例... 現在只有5天了 我還在為feature 發愁 我想現學現賣做word2vec試試? 或者用一個包吧image metadata 提取出來?

現在xgb+lightgbm stack 0.5274。 同意xgb包場 rf和lr根本不能與之抗衡。有很多疑問:那個Magic feature 究竟是神馬呢?那個單模型520的人是怎麼做到的?大神指導。


鑒於樓上有一位master和一位準master,就獻醜隨便少說幾句了。這個比賽特徵種類繁多以及PB與LB的吻合,而且各路Grand Master的思路分享也是令人大開眼界的,當然那個magic也是真箇比賽的一個最大的轉折點,幾家歡喜幾家愁,算是稍微有點瑕疵吧,但是整體感覺還是很棒的。建議大家可以去discussion學習一番。此外,這個比賽中國ID佔據了很大的比例,其中最為優異的plantsgo選手,第一次kaggle出手就是No.1,此處膜拜+1。作為排名前30的一名選手,真的建議看到這個帖子的諸君試試玩一把kaggle,比如最近的俄羅斯房價這個很傳統的比賽,衷心希望有更多中國ID在kaggle排行榜,正如Faron大師的那句Great Wall Ahead。


正好在做,不邀自來。

感覺是很好的kaggle入門比賽,因為features的種類真的特別全,有numerical,categorical和datetime,也有text和image,所以有機會嘗試很多種feature engineering。

然後確實有種被xgboost包場的感覺。


我就想問中大的那幾位包攬前幾名的同學, 到底怎麼調的xgboost....

另外, 既然說到這個。。。樓下的各位要不考慮組個知乎隊? @幾何布朗運動 @Tenniel M @郭晨

加個2維碼,有想要組隊的童鞋歡迎入坑

雖然這個比賽不能組隊...但是歡迎大家交流面基


推薦閱讀:

CMU HCI 具體學些什麼?
信息檢索入門?
Linear least squares, Lasso,ridge regression有何本質區別?
谁能解释下seq2seq中的beam search算法过程?

TAG:數據挖掘 | 機器學習 | Kaggle |