阿里大數據之夏—我的坎坷進階路
五一節時,經管院的老鄉跟我說,阿里有個資金流入流出預測的大賽,要不一起打打。我說我先看看,當天把數據下載下來琢磨了一番。
當時好像是3萬用戶的數據,數據量還是不小。有很多字段,用戶表中有什么性別啊,城市啊,星座啊啥的,用戶行為表中也有10來個字段,申購余額寶是從銀行卡里來還是從支付寶來的,贖回是消費還是贖回到銀行卡還是贖回到支付寶,這么多用戶行為數據,想想還是蠻激動的。這么多數據來預測9月份的每一天申購贖回,應該很easy啊。
但是有個問題,他這個不是0-1預測,是要預測申購贖回的確定值的,用一個分類算法搞不定問題呀。一時間,想對用戶行為數據進行深入分析,用戶分分類啊,建模預測預測啥的啊,但感覺有點摸不到頭腦,還不知道如何下手。
開始不斷查資料看論文,論文上比較多的是風力發電廠發電量預測啊,人口增長量預測啥的。這些感覺還蠻沾邊的。人大經濟論壇還有很多金融時序數據分析的帖子,看看也不錯,感覺這個是不是也是一個金融時序數據,於是在本地用自己搭建的mapreduce跑了一把,把每天的申購贖回統計了一下,你還別說,還是真有規律的,它基本是按周走的,周末都申購贖回比較少,工作日都比較多,而細分的話周一多,周五少。
說干就干,開始從0學R,先畫個圖玩玩,然后學了好久才會建立周期為7的時序數據,眼看5月21的第一個提交日就要來了。一狠心搞了個晚上,終於提交上了數據。第一次啊,還是很激動的,晚上等着結果,0點10分出了結果:110,第10名。心想,這下我沒有搞錯方向,感覺開始上路了。
后來也看了不少論壇的帖子,僑鄉麗人寫的那帖子還是很經典的,但是里面很多想法都比較天馬行空,我沒怎么采納。用來開闊思路還不錯。他思路還是很活絡的。真的
老實說第一天我就用了一個時間序列分析,什么ets啊,arima啊啥的。想想這樣就能搞第10,我還沒發功呢,一發力還不打爆全場啊。
開始不斷看論文,有論文說,時序數據預測后,用神經網絡來預測殘差比較好,想想還是小激動,線下預測了一下,效果一般般,但是,誰說的准了,也許線上就湊巧效果好,提交了下,狗屎一樣。當晚都沒怎么睡好。尼瑪。童話里都是騙人的。論文也是。
然后琢磨了一個新思路,我用模型融合吧,融合個SVM,再來個神經網絡,那不很爽了。開始建模,用往日的數據來預測未來的數據,中間還加了一些日期的特征,再跟之前的數據融合提交,哎,然並卵。
之前還想着各種算法堆砌來打爆全場的,當時那段時間真的很郁悶。想想都沒什么思路了。有一天打了一下午籃球,想想也沒啥事,按申購贖回匯總量來看,數據量也不大,而且我只用了14年2月10日后的數據,我把他們按月份和周期建了個表格。の,這9月還有很多特殊日期啊,比如說中秋節,我把這中秋節用以往的假日數據來單獨預測,一提交,成績上漲了8分,哎呀,這不錯哦。
后來又發現了9月28日這個周日調成了上班日。這樣又調了一下,成績又上升了7分。這可老爽了。
這件事讓我總結了一個比較有概括性的結論,各位輕噴:
數據挖掘拒絕本本主義,教條主義。一切從實際出發,在實踐中檢驗和發展真理。機器學習算法和模型是工具,工具可以延伸想象,但工具永遠是人的附庸。
解說:所有數據挖掘的論文是基於特定數據集出發的,數據集不一樣,方法要不一樣。可以多看論文開闊思路,僅此而已。而更多的是要貼近業務,理解數據,讓數據說話。一切讓數據自身說話,而不是妄圖通過方法模型炫酷來整合湊巧得到夢幻結果。
當你對數據有深入認識時,你內心有了一個真實的思路,如果是小數據,你可以用大腦跑出結果,但是數據量大,你需要借助工具,通過建立模型,選擇算法,相當於把自身思路寫入計算機中,讓計算機按自己的思路擬合數據。
工具沒有意識,沒有思維,他可以真實的反應數據讓數據說話,這是比人朴實的地方,但也正因為這一點,他只是人的附庸,他還做不到人思維的靈泛。
后來,看了卡本的視頻,思路又有了很多靈點,這月初是不一樣的啊,9月1號還是星期1呢。我趕緊把1號也預測了下,提交發現成績不變,這下我就奇怪了,原來我1號的得分是0 啊。想想很不爽,1號你到底是啥,我又花了幾天單測這一天,結果成績都不變,真是見了鬼了。我開始懷疑評分程序有問題,他不計算1號的成績,但算者大師說,1號數據比較異常,評分程序沒有問題。我當時真是怒不可遏。夜歸時的信息學部是那么的清冷,從正門進來后大道上黑漆漆的沒有一個人。晚風習習,我騎着自行車。
整了好一陣子,加了些月初月末的特征,在一個周一的凌晨,我第一次得了第2名,耳后我又得過好幾次第二名,整個比賽打下來我在前五名的日子大概有10來天吧。就這樣結束了第一賽季。

第一賽季結束的最后一天,突然冒出了好多綠火箭,這絕對是一大批潛伏的作弊小號的帶頭大哥。想想很不爽,你優化模型你開什么玩笑,你一下提高40分?這也成了這個比賽永遠的傷痕。中國人真的是會鑽空子,有意思嘛,打贏了比賽學不到東西有毛用。
第二賽季馬上要開賽了,趁這個空檔搞了下實驗室的項目,還看了不少kaggle上的帖子。尤其是那個walmat的倉儲量預測的。雖然跟我們的不太一樣,但還是得到了不少啟示。
--------------------------------第二賽季----------------------
第二賽季就開始了,我先說一下,其實阿里的主辦方主辦這個比賽是很有意義的,他們自己也很苦惱:這個申購贖回數據,有時候的一個土豪用戶,就把你整個模型攪爛了,預測准確談何容易,各類數據還是蠻多的,但是自己也找不到如何使用,究竟可不可以對用戶進行划分,建立用戶畫像,來分析預測異常點。於是把這個問題拋給了參賽者。
我始終覺得,第二賽季就只容許100位參賽者好了,參賽者太多了,好多人搞小號。我是從來沒搞過的,尤其是有幾個隊伍是伊朗的,尼瑪。用小號不斷提交來猜測異常點數據,這搞屁的飛機,排行榜不斷刷新,搞的人心惶惶的,優化模型談何容易,哪搞得過開小號猜數據的,后來群里還有人說他們猜好數據后,讓模型去學習出這個猜出的正確數據,以掩人耳目。我去。真沒勁。
這個用戶畫像,我第一賽季覺得用戶比較少,沒有去弄,第二賽季我是有認真琢磨的,但是:這個申購贖回預測不像天貓推薦算法,你是淘寶買家,你老在我店里轉,八九不離十我就能預測到你是否會買,你的一些行為數據跟你的是否購買是直接相關的,而這個申購贖回的數據,沒法完整刻畫用戶畫像,我今天拿獎金了,明天淘寶店主收款了,后來我要付房貸,大后天我去了趟巴黎,這些金融數據背后的原因實在太豐富了,你光從申購贖回這點數據來預測用戶行為,真是杯水車薪。如果我知道你的職業,你喜歡聽什么歌,你的微薄內容,你老吐槽什么:如明天就要交房貸了。這些信息,然后就是你的過往金融消費習慣,那我不算死你。至少可以算一個用戶群體的行為,雖然個體行為有一定的隨機性。
第一賽季我都是一個人打比賽的,當時真的很辛苦,一個人琢磨,形單影只,你的思維就受限。第二賽季拉了2個小伙伴,開賽第一天一起討論討論了下,后來也經常聊聊,感覺還蠻爽的。而且我們就一個學校的。
第二賽季在kaggle上看到有人用隨機森林和gbdt來預測,隊伍的美女也琢磨了隨機森林,於是我也開始搭建隨機森林模型,開始構建特征工程。找了不少特征,而后在后來的線上測試中不斷的發現很多特征是過擬合的。特征就慢慢減少的。有一天,我把時間序列的和這個隨機森林的模型融合了一下,第二賽季的一個星期1的凌晨,我的成績上升了13分,結果還是比第一名少了0.6分。抱憾周星星。整個賽季下來也沒能拿到周星星。哎。
這比賽,我跟你講,他評測程序第二賽季居然改到了凌晨0點25分。這個很可恨的,看完成績,床上轉輾反側睡不着,明天怎么優化呢,今天的結果到底是為什么的?打到后期我真的是累了。有時候腦子都轉不動了。有一天天下暴雨,學校都被淹了,正門那里還有皮划艇,我在寢室睡了一整天,下午5點才起床。爽。
比賽還是結束了,不知道阿里的賽題方是否達到了自己的初衷,阿里的組織者如何來防小號,如何來懲罰作弊的人。都是值得期待的事情。而我,昨天我暴走了一天,徒步穿越了整個湖畔,還有高山,夜晚的時候,我從橋上小跑回來,在橋欄桿上壓了會腿,雨后的夏季還是有些清爽,我買了個寧夏石頭瓜,這西瓜還是蠻甜的,徒步了至少20公里,跟寢室哥們吃了10多斤的西瓜。睡了一個晚上,清早起來,寫下了這篇散文。許多年前,我是多么向往朱自清、沈從文讀書的時光,立志做一名文人,漫步邊城去賞荷塘月色,然后,陰差陽錯,我重新寫下了請求和誓言:我是一名極客,我是大數據科學家。
