阿里大数据比赛总结
阿里大數(shù)據(jù)比賽心得
~~~~~~····最終比賽還是結(jié)束了,想說研一一半的青春奉獻(xiàn)給了阿里,最后艱難擠進(jìn)了前五十,一路過來真心不easy,每天早上醒來的第一件事就是查成績(jī),三個(gè)月來天天如此,晚上熬夜提交預(yù)測(cè),那樣的日子想說愛你不easy。。。回想一路走來的艱難歷程,回味當(dāng)中的付出和收獲,謹(jǐn)以此文獻(xiàn)給一路走來一起奮斗的小伙伴,么么噠···~~~~~~
(一)初識(shí)阿里大數(shù)據(jù)比賽
一次偶然的機(jī)會(huì),在去實(shí)驗(yàn)室的路上見到了阿里天貓推薦算法的比賽海報(bào),對(duì)近來炒得非常火的大數(shù)據(jù)有非常濃的好奇心,點(diǎn)開報(bào)名網(wǎng)址,大數(shù)據(jù)比賽,便踏上了接近四個(gè)月的阿里競(jìng)賽之路。
比賽大概的描寫敘述是:第一賽季阿里官方提供少量的某年4-15到8-15這段時(shí)間離線的天貓真實(shí)行為數(shù)據(jù),參賽者利用機(jī)器學(xué)習(xí)的方法,預(yù)測(cè)8.15-9-15的用戶購(gòu)買情況,詳細(xì)評(píng)分方式為:依據(jù)預(yù)測(cè)的正確率和召回率計(jì)算出調(diào)和平均得分來考量參賽者的成績(jī),例如以下圖所看到的:
接觸第一賽季的時(shí)候,比賽已經(jīng)進(jìn)行了半個(gè)多月,因?yàn)榉荂S出生,機(jī)器學(xué)習(xí)方面僅僅學(xué)習(xí)過皮毛,做過一兩個(gè)實(shí)驗(yàn)。。。能夠說經(jīng)驗(yàn)匱乏,草草的和實(shí)驗(yàn)室隊(duì)友組隊(duì)了(草率的決定讓自己后來說不出的心酸...無力吐槽),第一次胡亂的提交了一次成績(jī),第二天就有了成績(jī)啦,看到了成績(jī)以及排名,當(dāng)時(shí)還有點(diǎn)小興奮,盡管成績(jī)不好,總算有個(gè)成績(jī)啦。。。
接下來幾天成績(jī)都有小幅度上漲,詳細(xì)的做法是利用學(xué)習(xí)過的邏輯回歸LR和加一些簡(jiǎn)單的統(tǒng)計(jì)規(guī)則進(jìn)行推薦,一些簡(jiǎn)單的規(guī)則有:利用用戶對(duì)品牌的點(diǎn)擊、購(gòu)買、收藏、增加購(gòu)物車這四種基本操作給品牌打分,將得分較高的品牌推薦給用戶,做了半個(gè)多月,成績(jī)一路上漲??
?
??
最后還是穩(wěn)穩(wěn)的進(jìn)入了前500名,得到了接觸第二賽季的機(jī)會(huì),賽季結(jié)束的時(shí)候,官方組織確定了終于的參賽隊(duì)伍信息,第一賽季差點(diǎn)兒是一個(gè)人戰(zhàn)斗的我,選擇了又一次組隊(duì),和室友新組建了一個(gè)2人小隊(duì),心血來潮搞了個(gè)隊(duì)名,,擠進(jìn)第二賽季,當(dāng)時(shí)定下的目標(biāo),沖擊一百萬,贏取白富美,出任CEO,走上人生巔峰,小小興奮了一把(~純屬自娛自樂~)
(二)第二賽季“血拼”
休整了幾天之后,阿里開放了第二賽季的天池大數(shù)據(jù)計(jì)算平臺(tái)ODPS供參賽者使用,對(duì)于第一次接觸大數(shù)據(jù)分析平臺(tái)的我們來說,真是啥都不會(huì)。。。三個(gè)月的奮斗,我們組大概用了純規(guī)則、LR、RF、GBRT四種方法,其它的一些SVM、貝葉斯等方法效果甚微,淺嘗輒止。
2.1、SQL純規(guī)則
第一時(shí)間打開了提供的ODPS用戶手冊(cè),看了簡(jiǎn)單的入門之后,就開始弄了,再次從0開始學(xué)習(xí),這次提供的用戶操作記錄數(shù)比第一賽季高了幾個(gè)數(shù)量級(jí),達(dá)到了5億的規(guī)模,直接依照手冊(cè)提供的sql語句加入的簡(jiǎn)單規(guī)則(給用戶推薦熱門的10個(gè)商品)進(jìn)行了一次的提交,結(jié)果就有了成績(jī),小激動(dòng)啊:
?? ? ? ? ? ? ? ? ? ? ? ? ?
接下來的幾天,依照第一賽季的流程,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,刪除未購(gòu)買過品牌的用戶記錄(不刪除近期一周才出現(xiàn)的新用戶),刪除未被購(gòu)買過的品牌記錄,刪除瘋狂點(diǎn)擊可是從不購(gòu)買的刷鉆用戶記錄等,利用一些簡(jiǎn)單規(guī)則:定義熱門品牌集合,交互時(shí)間記錄統(tǒng)計(jì),活躍用戶集合,近期新出現(xiàn)的品牌集合,周期品牌集合,用戶的品牌忠誠(chéng)度,用戶對(duì)品牌的操作加權(quán)打分等規(guī)則,每加一條規(guī)則,成績(jī)都蹭蹭蹭往上漲(畢竟我們的baseline還非常低),幸福洋溢的感覺有木有:
提升了幾天,絲毫沒有察覺到規(guī)則帶來的局限,依靠純規(guī)則推薦,挖掘不出用戶購(gòu)買行為深層次的關(guān)系注定有提升上限,做了接近10天的規(guī)則成績(jī)漲到3.9左右,無論怎么加入規(guī)則,我們的成績(jī)也始終上漲不了了。
2.2、LR模型
考慮轉(zhuǎn)到LR模型,要想利用模型訓(xùn)練,首先得在與處理之后的數(shù)據(jù)之上,劃分好線上和線下數(shù)據(jù)集,參考阿里討論群和BBS上面的數(shù)據(jù)集劃分,因?yàn)轭}目是利用4個(gè)月交互數(shù)據(jù)預(yù)測(cè)第5個(gè)月購(gòu)買,故我們線下也是將已知的四個(gè)月數(shù)據(jù)平均分為5部分,利用前4部分?jǐn)?shù)據(jù)預(yù)測(cè)第5部分購(gòu)買情況,構(gòu)建的線下數(shù)據(jù)集和線上數(shù)據(jù)集詳細(xì)為:
2.2.1、線下:
訓(xùn)練:篩選出4月15號(hào)到7月02號(hào)的有過交互記錄的,而且在7月03號(hào)到7月21號(hào)發(fā)生購(gòu)買的用戶品牌對(duì)作為正樣本,將4月15號(hào)到7月02號(hào)剩下的記錄作為負(fù)樣本,構(gòu)建好特征后,訓(xùn)練到線下的LR模型;
預(yù)測(cè):利用4-15號(hào)到7月21號(hào)的全部數(shù)據(jù),構(gòu)建好特征后,帶入線下訓(xùn)練好的LR模型進(jìn)行驗(yàn)證;
2.2.2、線上:
訓(xùn)練:篩選出4月15號(hào)到7月21號(hào)的有過交互記錄的,而且在7月22號(hào)到8月15號(hào)發(fā)生購(gòu)買的用戶品牌對(duì)作為正樣本,將4月15號(hào)到7月21號(hào)剩下的記錄作為負(fù)樣本,構(gòu)建好特征后,訓(xùn)練到線上的LR模型;
預(yù)測(cè):利用4-15號(hào)到8月15號(hào)的全部數(shù)據(jù),構(gòu)建好特征后,帶入線上訓(xùn)練好的LR模型進(jìn)行推薦;
數(shù)據(jù)集劃分好后,我們組花了大量的時(shí)間構(gòu)建特征,從三個(gè)角度出發(fā),用戶品牌交互特征類,用戶特征類和品牌特征類,到第二賽季結(jié)束的時(shí)候,累計(jì)構(gòu)建了715個(gè)特征(真的是一個(gè)比拼特診構(gòu)建的比賽了),僅僅羅列出我們組最后用上的效果比較好的一組特征,具體例如以下:
2.2.3、用戶品牌交互特征類
構(gòu)建用戶與品牌之間交互的統(tǒng)計(jì)特征,體現(xiàn)用戶與品牌之間的交互特性,大致反映出用戶與品牌之間滿足某種映射下會(huì)發(fā)生購(gòu)買行為,大概有:
<pre name="code" class="objc">click_count :用戶A對(duì)品牌B的總PV數(shù) buy_count :用戶A對(duì)品牌B的總購(gòu)買數(shù) collect_count :用戶A對(duì)品牌B的總收藏?cái)?shù) cart_count :用戶A對(duì)品牌B的總增加購(gòu)物車數(shù) avg_buy_day_count :用戶A對(duì)品牌B的各次購(gòu)買離如今的平均天數(shù) variance_buy_day_count :用戶A對(duì)品牌B的各次購(gòu)買離如今的時(shí)間的方差 least_click_day_count :用戶A對(duì)品牌B的近期一次點(diǎn)擊離如今的天數(shù) least_buy_day_count :用戶A對(duì)品牌B的近期一次購(gòu)買離如今的天數(shù) least_collect_day_count :用戶A對(duì)品牌B的近期一次收藏離如今的天數(shù) least_cart_day_count :用戶A對(duì)品牌B的近期一次購(gòu)物車離如今的天數(shù) click_count_before_firstbuy :用戶A對(duì)品牌B的第一次購(gòu)買前的PV數(shù) collect_count_before_firstbuy :用戶A對(duì)品牌B的第一次購(gòu)買前的收藏?cái)?shù) cart_count_before_firstbuy :用戶A對(duì)品牌B的第一次購(gòu)買前的購(gòu)物車數(shù) avg_click_day_interval :用戶A對(duì)品牌B的平均點(diǎn)擊天數(shù)間隔 avg_buy_day_interval :用戶A對(duì)品牌B的平均購(gòu)買天數(shù)間隔 first_operator_day_count :用戶A對(duì)品牌B的第一次交互離如今的天數(shù) last_operator_day_count :用戶A對(duì)品牌B的最后一次交互離如今的天數(shù) max_operator_Day_count :用戶A對(duì)品牌B的交互次數(shù)最多那天離如今的天數(shù) user_buy_brand_rate :用戶A對(duì)品牌B的購(gòu)買次數(shù)占用戶A總購(gòu)買次數(shù)的比例 user_click_brand_rate :用戶A對(duì)品牌B的點(diǎn)擊次數(shù)占用戶A總點(diǎn)擊次數(shù)的比例 click_buy_rate :用戶A對(duì)品牌B的點(diǎn)擊購(gòu)買比 click_2_count :用戶A對(duì)品牌B的PV數(shù)的平方 buy_2_count :用戶A對(duì)品牌B的購(gòu)買數(shù)的平方 brand_is_bought_rate :用戶A對(duì)品牌B的購(gòu)買次數(shù)占品牌B被購(gòu)買的總次數(shù)的比例 brand_is_clicked_rate :用戶A對(duì)品牌B的點(diǎn)擊次數(shù)占品牌B被點(diǎn)擊的總次數(shù)的比例 last_31_day_click_buy_rate :用戶A對(duì)品牌B的近期31天的點(diǎn)擊購(gòu)買比 click_day_count :用戶A對(duì)品牌B的點(diǎn)擊總天數(shù) buy_day_count :用戶A對(duì)品牌B的購(gòu)買總天數(shù) buy_last_week_count :用戶A對(duì)品牌B購(gòu)買了多少周 avg_click_rate_before_buy :用戶A對(duì)品牌B最后一次購(gòu)買后的PV數(shù)/用戶A對(duì)品牌B每次購(gòu)買前的平均點(diǎn)擊 avg_collect_rate_before_buy :用戶A對(duì)品牌B最后一次購(gòu)買后的收藏?cái)?shù)/用戶A對(duì)品牌B每次購(gòu)買前的平均收藏 click_delete_user_avg_rate :(用戶A對(duì)品牌B的PV數(shù)-用戶A對(duì)操作過的品牌的平均PV數(shù))/用戶A對(duì)操作過的品牌的平均PV數(shù) buy_delete_user_avg_rate :(用戶A對(duì)品牌B的購(gòu)買數(shù)-用戶A對(duì)操作過的品牌的平均購(gòu)買數(shù))/用戶A對(duì)操作過的品牌的平均購(gòu)買數(shù) collect_delete_user_avg_rate :(用戶A對(duì)品牌B的收藏?cái)?shù)-品牌B被平均收藏?cái)?shù))/品牌B被平均收藏?cái)?shù) before_0_day_last_5_day_click_count :用戶A對(duì)品牌B離如今5天之內(nèi)的PV數(shù) before_0_day_last_5_day_buy_count :用戶A對(duì)品牌B離如今5天之內(nèi)的購(gòu)買數(shù) before_0_day_last_5_day_collect_count :用戶A對(duì)品牌B離如今5天之內(nèi)的收藏?cái)?shù) before_0_day_last_5_day_cart_count :用戶A對(duì)品牌B離如今5天之內(nèi)的增加購(gòu)物車數(shù) before_0_day_last_10_day_click_count :用戶A對(duì)品牌B離如今10天之內(nèi)的PV數(shù) before_0_day_last_10_day_buy_count :用戶A對(duì)品牌B離如今10天之內(nèi)的購(gòu)買數(shù) before_0_day_last_10_day_collect_count :用戶A對(duì)品牌B離如今10天之內(nèi)的收藏?cái)?shù) before_0_day_last_10_day_cart_count :用戶A對(duì)品牌B離如今10天之內(nèi)的增加購(gòu)物車數(shù) before_10_day_last_10_day_click_count :用戶A對(duì)品牌B離如今10天之前的10天之內(nèi)的PV數(shù) before_10_day_last_10_day_buy_count :用戶A對(duì)品牌B離如今10天之前的10天之內(nèi)的購(gòu)買數(shù) before_10_day_last_10_day_collect_count:用戶A對(duì)品牌B離如今10天之前的10天之內(nèi)的收藏?cái)?shù) before_10_day_last_10_day_cart_count :用戶A對(duì)品牌B離如今10天之前的10天之內(nèi)的增加購(gòu)物車數(shù) before_20_day_last_10_day_click_count :用戶A對(duì)品牌B離如今20天之前的10天之內(nèi)的PV數(shù) before_20_day_last_10_day_buy_count :用戶A對(duì)品牌B離如今20天之前的10天之內(nèi)的購(gòu)買數(shù) before_20_day_last_10_day_collect_count:用戶A對(duì)品牌B離如今20天之前的10天之內(nèi)的收藏?cái)?shù) before_20_day_last_10_day_cart_count :用戶A對(duì)品牌B離如今20天之前的10天之內(nèi)的增加購(gòu)物車數(shù) before_30_day_last_10_day_click_count :用戶A對(duì)品牌B離如今30天之前的10天之內(nèi)的PV數(shù) before_30_day_last_10_day_buy_count :用戶A對(duì)品牌B離如今30天之前的10天之內(nèi)的購(gòu)買數(shù) before_30_day_last_10_day_collect_count:用戶A對(duì)品牌B離如今30天之前的10天之內(nèi)的收藏?cái)?shù) before_30_day_last_10_day_cart_count :用戶A對(duì)品牌B離如今30天之前的10天之內(nèi)的增加購(gòu)物車數(shù) before_0day_last_10_day_click_day_count:用戶A對(duì)品牌B離如今10天之內(nèi)的總點(diǎn)擊天數(shù) before_0day_last_10_day_buy_day_count :用戶A對(duì)品牌B離如今10天之內(nèi)的總購(gòu)買天數(shù)
2.2.4、用戶特征類
構(gòu)建體現(xiàn)用戶特性的特征,盡量挖掘處用戶購(gòu)物行為習(xí)慣,大致有例如以下特征:
user_buy_count :用戶A總購(gòu)買的次數(shù) user_click_count :用戶A總點(diǎn)擊的次數(shù) user_collect_count :用戶A總收藏的次數(shù) user_cart_count :用戶A總購(gòu)物車的次數(shù) user_click_buy_rate :用戶A總的點(diǎn)擊購(gòu)買比 user_avg_buy_day_count :用戶A全部購(gòu)買發(fā)生的時(shí)間離如今的平均天數(shù) user_least_buy_day_count :用戶A近期一次購(gòu)買離如今的天數(shù) user_variance_buy_day_count :用戶A全部購(gòu)買發(fā)生的時(shí)間離如今的時(shí)間方差 user_last_5_day_click_count :用戶A近期5天的點(diǎn)擊總數(shù) user_last_5_day_buy_count :用戶A近期5天的購(gòu)買總數(shù) user_last_5_day_collect_count :用戶A近期5天的收藏總數(shù) user_last_5_day_cart_count :用戶A近期5天的增加購(gòu)物車總數(shù) user_click_day_count :用戶A點(diǎn)擊的總天數(shù) user_buy_day_count :用戶A購(gòu)買的總天數(shù) user_collect_day_count :用戶A收藏的總天數(shù) user_cart_day_count :用戶A增加購(gòu)物車的總天數(shù) user_buy_brand_count_for_1_week:用戶A僅僅購(gòu)買1周的商品有多少種 user_buy_brand_count_for_2_week:用戶A僅僅購(gòu)買2周的商品有多少種 user_buy_brand_count_for_3_week:用戶A僅僅購(gòu)買3周的商品有多少種 user_buy_brand_count_for_4_week:用戶A僅僅購(gòu)買4周的商品有多少種
2.2.5、品牌特征類
構(gòu)建體現(xiàn)品牌特性的特征,盡量挖掘處什么樣的品牌受用戶追捧,會(huì)被用戶購(gòu)買,大致有例如以下特征:
brand_click_count :品牌B被點(diǎn)擊的總次數(shù) brand_buy_count :品牌B被購(gòu)買的總次數(shù) brand_collect_count :品牌B被收藏的總次數(shù) brand_cart_count :品牌B被增加購(gòu)物車的總次數(shù) brand_click_buy_rate :品牌B的點(diǎn)擊購(gòu)買比 brand_last_3_day_click_count :品牌B近期3天之內(nèi)的點(diǎn)擊總數(shù) brand_last_3_day_buy_count :品牌B近期3天之內(nèi)的購(gòu)買總數(shù) brand_last_5_day_click_count :品牌B近期5天之內(nèi)的點(diǎn)擊總數(shù) brand_last_5_day_buy_count :品牌B近期5天之內(nèi)的購(gòu)買總數(shù) brand_last_11_day_click_count :品牌B近期11天之內(nèi)的點(diǎn)擊總數(shù) brand_last_11_day_buy_count :品牌B近期11天之內(nèi)的購(gòu)買總數(shù) brand_least_operator_day_count:品牌B近期一次被操作離如今的天數(shù) brand_first_operator_day_count:品牌B第一次被操作離如今的天數(shù) brand_hot_level :品牌B的熱門度(PV數(shù)*0.1+購(gòu)買數(shù)*5+購(gòu)物車數(shù)+收藏?cái)?shù)) user_count_buy_brand_morethan_2week :購(gòu)買品牌B超過兩周的用戶數(shù) user_count_buy_brand_morethan_3week :購(gòu)買品牌B超過三周的用戶數(shù) user_count_buy_brand_morethan_4week :購(gòu)買品牌B超過四周的用戶數(shù) user_count_buy_brand_equal_1week :購(gòu)買品牌B為1周的用戶數(shù) user_count_buy_brand_equal_2week :購(gòu)買品牌B為2周的用戶數(shù) user_count_buy_brand_equal_3week :購(gòu)買品牌B為3周的用戶數(shù) user_count_buy_brand_equal_4week :購(gòu)買品牌B為4周的用戶數(shù) brand_hot_ave_level :品牌B的熱門度(PV數(shù)*0.1+購(gòu)買數(shù)*5+購(gòu)物車數(shù)+收藏?cái)?shù))/(品牌B第一次被操作和最后一次被操作的時(shí)間間隔天數(shù))2.2.6特征計(jì)算
利用天池平臺(tái)的分布式計(jì)算,具體資料見天池平臺(tái)資料分享。我們組寫了三個(gè)MapReduce程序,Map階段分別依據(jù)userbrandgroup、usergroup、brandgroup進(jìn)行拆分,Reduce階段分別計(jì)算出三類特征的數(shù)值,后面就是簡(jiǎn)單的多張?zhí)卣鞅淼暮喜⒉僮?#xff0c;線下的訓(xùn)練和預(yù)測(cè)的特征總表的MR處理是一樣的,僅僅有輸入時(shí)間不一樣,例如以下所看到的:
<pre name="code" class="sql"><pre name="code" class="sql">//線下訓(xùn)練特征總表 create resource jar C:\TOOLS\mapReduce-getCharacter.jar -f jar --resources mapReduce-getCharacter.jar --classpath C:\TOOLS\mapReduce-getCharacter.jar com.mr.userbrandgroup.MyDriver LR_Offline_Train_Table LR_Offline_Train_Feature_1_Table '04-15' '07-02' '1'; create resource jar C:\TOOLS\mapReduce-getCharacter.jar -f jar --resources mapReduce-getCharacter.jar --classpath C:\TOOLS\mapReduce-getCharacter.jar com.mr.usergroup.MyDriver LR_Offline_Train_Table LR_Offline_Train_Feature_2_Table '04-15' '07-02'; create resource jar C:\TOOLS\mapReduce-getCharacter.jar -f jar --resources mapReduce-getCharacter.jar --classpath C:\TOOLS\mapReduce-getCharacter.jar com.mr.brandgroup.MyDriver LR_Offline_Train_Table LR_Offline_Train_Feature_3_Table '04-15' '07-02';//線下預(yù)測(cè)特征總表 create resource jar C:\TOOLS\mapReduce-getCharacter.jar -f jar --resources mapReduce-getCharacter.jar --classpath C:\TOOLS\mapReduce-getCharacter.jar com.mr.userbrandgroup.MyDriver LR_Offline_Validate_Table LR_Offline_Validate_Feature_1_Table '04-15' '07-21'; create resource jar C:\TOOLS\mapReduce-getCharacter.jar -f jar --resources mapReduce-getCharacter.jar --classpath C:\TOOLS\mapReduce-getCharacter.jar com.mr.usergroup.MyDriver LR_Offline_Validate_Table LR_Offline_Validate_Feature_2_Table '04-15' '07-21'; create resource jar C:\TOOLS\mapReduce-getCharacter.jar -f jar --resources mapReduce-getCharacter.jar --classpath C:\TOOLS\mapReduce-getCharacter.jar com.mr.brandgroup.MyDriver LR_Offline_Validate_Table LR_Offline_Validate_Feature_3_Table '04-15' '07-21';
? ? ? ? ? ? ??在進(jìn)行LR模型的時(shí)候,我們依據(jù)文本檢索里面的對(duì)數(shù)處理準(zhǔn)則,對(duì)計(jì)算到的特征總表進(jìn)行了總體對(duì)數(shù)化處理,之后便是對(duì)正負(fù)樣本進(jìn)行單獨(dú)抽樣得到一個(gè)較小的數(shù)據(jù)集進(jìn)行訓(xùn)練,抽樣總數(shù)為330W,抽樣比例為10:1(后面改到8:1有小幅度提高),LR模型因?yàn)闃?gòu)建數(shù)據(jù)集和特征,熟悉MR,所以上手的時(shí)間非常長(zhǎng),做了一周左右,提交的成績(jī)不好
不斷加入和測(cè)試新的特征,兩三天的時(shí)間,成績(jī)就有了起色,之前規(guī)則的得分上線被LR打破,停滯的F1最終開始漲了,這段時(shí)間因?yàn)樽龅挠悬c(diǎn)疲倦,加的特征不夠多,成績(jī)上漲的斷斷續(xù)續(xù),F1上漲到接近5的時(shí)候又出現(xiàn)了瓶頸,再怎么加入特征都不怎么漲了:
這段時(shí)間,LR的瓶頸讓我們放棄了對(duì)它的執(zhí)念,看到競(jìng)賽群里火熱的討論著RF,我們決定轉(zhuǎn)投RF。。。
2.3RF
我們利用LR最好的一組特征直接轉(zhuǎn)到RF模型上面來進(jìn)行訓(xùn)練預(yù)測(cè),得到的線下成績(jī)非常差,線上的成績(jī)也低得嚇人? ? 感覺我們組好悲催,別的組都能直接從LR過渡到RF上面來,我們又要又一次測(cè)試一下特征,不能直接轉(zhuǎn)過來,花了兩天的時(shí)間,成績(jī)略微正常了一點(diǎn),可是離LR不妨差了一大截啊,懷疑我們的方法哪里出問題了,這段時(shí)間又是考試周臨近,真真的頭疼啊(看到別的組天天都在上升,饑餓游戲,滋味不好受,還是每天抽出兩三個(gè)小時(shí)來做比賽)排錯(cuò)排除了一周左右的時(shí)間,成績(jī)上漲到和LR差點(diǎn)兒相同的水平了,當(dāng)時(shí)那個(gè)開心啊,呵呵,回味無窮
? ? 然后,就正式進(jìn)入考試周了,比賽的時(shí)間壓縮到極致,兩人都忙于復(fù)習(xí),比賽做的比較水了,中途不知道哪里出問題了,提交的成績(jī)創(chuàng)歷史之最了。。。商議之后決定,決定臨時(shí)不搞了,差點(diǎn)兒相同停了兩周左右
考完試也就基本是6月底了,和隊(duì)友也差點(diǎn)兒相同忙完了,每天空暇時(shí)間相對(duì)多了起來,決定重操舊業(yè),”享受早上起來看成績(jī)興奮的那一瞬間“,我們花了兩天時(shí)間又一次排查了一遍程序,決定臨時(shí)先不正確數(shù)據(jù)做預(yù)處理,利用選好的特征,最終得到了超過LR最好得分的成績(jī),一舉破5,停滯的baseline最終開始上漲啦,(果然是預(yù)處理影響了我們的模型型。。。當(dāng)時(shí)猜想是數(shù)據(jù)清洗的過度了,后來也試過刪除一些刷磚用戶,可是效果甚微)基本上方法對(duì)了之后,我們就不斷加入新的特征,這幾天基本實(shí)現(xiàn)兩天一個(gè)大提升,特征總數(shù)也達(dá)到了500多,實(shí)際用上的特征從30多個(gè),到了接近70個(gè)了。
我們RF訓(xùn)練用的方法基本上是界面的方式實(shí)現(xiàn)的,詳細(xì)做法見之前發(fā)的一篇博文阿里大數(shù)據(jù)比賽sesson2 RF上手篇,成績(jī)上漲到5.66這個(gè)水平就不太好上升了,試了兩三天效果都不好了,正好碰到群里又在火熱的討論gbrt,對(duì)于我們來說又是一個(gè)新的模型,我們商議之后,沒有猶豫,立刻決定轉(zhuǎn)到GBRT,繼續(xù)馬拉松。。。
2.4GBRT
學(xué)習(xí)了兩天的GBRT界面操作(由于一直沒注意看BBS的更新資料,導(dǎo)致我們知道7月中旬都一直還在用界面訓(xùn)練預(yù)測(cè),耗時(shí)耗力。。。),便開始實(shí)戰(zhàn)了,果不其然,直接RF最好特征轉(zhuǎn)過來,效果又是差的離奇,(奇了怪了,這也太悲催了吧),這兩天和哈工大隊(duì)的大帥交流了下GBRT的使用心得,最終還是步入了正軌,成績(jī)又開始?xì)g快的漲了,漲了。。。
? ? ? ? 成績(jī)上了5.8之后,上漲的就有點(diǎn)吃力了,不斷加入新的特征,不斷換數(shù)據(jù)預(yù)處理,經(jīng)過一周的操作,成績(jī)上漲到了
還是沒能上5.9,我們這段時(shí)間嘗試過RF和GBRT模型融合,加入規(guī)則輔助推薦都效果不好,詳細(xì)的GBRT方法見博文阿里大數(shù)據(jù)比賽sesson2 GBRT上手篇,20號(hào)左右的時(shí)候,最終看到了腳本實(shí)現(xiàn)的文檔。。。再也不用手動(dòng)訓(xùn)練預(yù)測(cè)了。。。
2.5最后一周奮戰(zhàn)
24號(hào)阿里更新了一批等量的數(shù)據(jù),當(dāng)天晚上,趕在凌晨4點(diǎn)之前,在新數(shù)據(jù)集上跑完了第一次成績(jī),當(dāng)晚的成績(jī)最終破5.9啦
好景不長(zhǎng),接下來的一天,線下在提升,線上卻下降了,反思線下特征過擬合了,在討論組里大家都在議論著提升的問題,我們又又一次梳理了特征,再次加入了一批特征,驚喜的發(fā)現(xiàn)線下提升了0.06達(dá)到了5.39,著實(shí)興奮了一把,果然,第二天成績(jī)怒破6.0,排名穩(wěn)定在了前50名,激動(dòng)不已。。。
接下來的幾天,我們繼續(xù)線下調(diào)試新特征和試著融合,可是線下效果好,到了線上效果卻低于6.02:
最后一天,我們改變了正負(fù)樣本抽樣比例,換到了8:1,線下提升了0.02,線上定格在了6.03:
寫博客的一天,再現(xiàn)了四個(gè)月來的一路”廝殺“,幾個(gè)月來就基本沒有1點(diǎn)鐘之前睡過覺的,盡管辛苦,可是還是認(rèn)為收獲挺多,感謝阿里提供的這個(gè)平臺(tái),讓我們對(duì)大數(shù)據(jù)不再一無所知,感謝隊(duì)友朱凌云的陪伴,感謝我們隊(duì)伍一路走來幫助過我們的哈工大-王帥同學(xué)和姚繼濤同學(xué),感謝USTC的Cara、Closure、陳朝才和陳誠(chéng)、李悅、以及寧波大學(xué)丁石磊同學(xué),以及一些路見不平拔刀相助的壯士,么么噠O(∩_∩)O~
轉(zhuǎn)載于:https://www.cnblogs.com/mfrbuaa/p/4055990.html
總結(jié)
- 上一篇: SharePoint 向多行文本类型字段
- 下一篇: 是否是工作日和节假日判定