天池?cái)?shù)據(jù)挖掘競(jìng)賽是國(guó)內(nèi)數(shù)據(jù)挖掘圈是很正規(guī)奢人,規(guī)模很大谓媒,組織很好的競(jìng)賽平臺(tái)淆院。作為在讀的一名數(shù)據(jù)挖掘小白,懷著當(dāng)炮灰的念頭句惯,毅然決然的參加了這次競(jìng)賽土辩。
賽題在這里就不詳細(xì)描述,有興趣的朋友可以去天池搜索抢野,商鋪定位比賽拷淘。主要是告訴你用戶(hù)去逛商場(chǎng)的時(shí)候,手機(jī)會(huì)搜到wifi熱點(diǎn)指孤,通過(guò)給你wifi列表启涯,用戶(hù)交易時(shí)經(jīng)緯度,交易時(shí)間恃轩,店鋪經(jīng)緯度结洼,店鋪類(lèi)型,店鋪價(jià)格和商場(chǎng)名稱(chēng)等信息叉跛,讓你去預(yù)測(cè)該用戶(hù)再次發(fā)生交易時(shí)松忍,位于哪家店鋪。訓(xùn)練集給出了2017年8月一整月的數(shù)據(jù)筷厘,讓你去預(yù)測(cè)2017年9月前兩周的商鋪定位情況鸣峭。
數(shù)據(jù)挖掘競(jìng)賽有一個(gè)基本的流程宏所,首先對(duì)問(wèn)題進(jìn)行分析,然后進(jìn)行數(shù)據(jù)預(yù)處理摊溶,然后繼續(xù)進(jìn)行傳說(shuō)中最厲害的特征工程爬骤,最后利用模型去對(duì)目標(biāo)問(wèn)題進(jìn)行分析預(yù)測(cè),得到結(jié)果莫换。有些朋友的博客也分析的比較清楚盖腕,這里就不贅述了。在這里主要給出題目的分析思路和自己操作的結(jié)果
在比賽的開(kāi)始階段浓镜,可以很明顯的想到wifi是能夠確定店鋪的關(guān)鍵因素溃列。后續(xù)的事實(shí)也證明了wifi的重要性。起初我們?cè)谧鲆?guī)則學(xué)習(xí)膛薛,利用wifi的強(qiáng)度構(gòu)造了wifi距離听隐,也就是在訓(xùn)練集中,對(duì)每一個(gè)樣本的wifi序列出現(xiàn)的強(qiáng)度值求均值哄啄,然后利用測(cè)試樣本中每一個(gè)樣本的wifi序列和訓(xùn)練樣本中wifi序列中的交集部分求歐式距離雅任,最終取距離最近的店鋪?zhàn)鳛轭A(yù)測(cè)結(jié)果。起初這樣做咨跌,效果很差沪么,正確率只有0.16。
后來(lái)發(fā)現(xiàn)會(huì)出現(xiàn)有兩個(gè)訓(xùn)練樣本和一個(gè)測(cè)試樣本算距離锌半,一個(gè)交集個(gè)數(shù)為4禽车,一個(gè)交集個(gè)數(shù)為3,但是按照交集個(gè)數(shù)的算了相應(yīng)wifi的距離后是4(假設(shè)每個(gè)wifi距離為1)和3刊殉,我們的思路會(huì)將測(cè)試樣本的答案分配給交集個(gè)數(shù)為3的店鋪殉摔,但這與實(shí)際不相符合,一般來(lái)說(shuō)交集個(gè)數(shù)大记焊,他離這家店鋪也就會(huì)比較近逸月,因此我們?cè)谒阃昃嚯x以后,將算出來(lái)的距離除了一個(gè)交集個(gè)數(shù)的平方遍膜,從而放大交集個(gè)數(shù)對(duì)結(jié)果的影響碗硬,經(jīng)過(guò)這樣的改動(dòng),我們的成績(jī)提升到了0.8589瓢颅,還是有質(zhì)的提升恩尾。
最后我們發(fā)現(xiàn)在wifi中有很多公共wifi,還有手機(jī)熱點(diǎn)等惜索,我們對(duì)求距離的條件進(jìn)行了強(qiáng)化特笋,對(duì)交集部分的個(gè)數(shù)大于5個(gè)的再來(lái)求距離,如果交集個(gè)數(shù)不大于5,就對(duì)其距離設(shè)為無(wú)窮大。這樣大大提升了預(yù)測(cè)的準(zhǔn)確程度猎物,預(yù)測(cè)分?jǐn)?shù)也上升到了0.8893虎囚。這里尤其感謝新神,他是為這套方案創(chuàng)造了一套公式蔫磨,方便編程實(shí)現(xiàn)和調(diào)參淘讥。下次給出。
這里再給出wifi相關(guān)思路堤如。
1. 每一個(gè)wfi序列可以看成是wifi序列蒲列,我們可以從LCS的角度去考慮每家店鋪對(duì)應(yīng)的wifi和測(cè)試樣本中擁有長(zhǎng)度最大的最長(zhǎng)公共子序列,因?yàn)檫@里既包含了最長(zhǎng)公共子序列的長(zhǎng)度的影響又包含了wifi的出現(xiàn)的順序信息搀罢。
2. 將每家店鋪對(duì)應(yīng)的wifi序列當(dāng)成是自然語(yǔ)言處理中一句話(huà)蝗岖,然后利用諸如word2vec,gensim等對(duì)其進(jìn)行訓(xùn)練,挖掘每段wifi語(yǔ)言的相似性榔至,然后從中找相似性最大的店鋪?zhàn)鳛榻Y(jié)果抵赢。
3. wifi出現(xiàn)在每家店鋪的順序不同,利用wifi出現(xiàn)的順序?qū)ifi進(jìn)行編碼唧取。
后來(lái)做規(guī)則铅鲤,實(shí)在是做不太動(dòng)了,然后剛好群里面的麥芽大神開(kāi)源了一份代碼枫弟。僅僅73行邢享,但是能夠有高達(dá)0.9073的成績(jī),實(shí)在讓人有點(diǎn)心動(dòng)淡诗。然后就下載后進(jìn)行了學(xué)習(xí)骇塘。
麥芽大神的開(kāi)源思路其實(shí)比較簡(jiǎn)單,就是將wifi出現(xiàn)次數(shù)比較少的wifi刪去袜漩,然后按照商場(chǎng)绪爸,將每一家商場(chǎng)下所有的wifi做onehot,在里面是1的位置填充強(qiáng)度值宙攻,將其作為特征,再加上交易時(shí)的經(jīng)緯度介褥,利用xgboost做多分類(lèi)座掘,就可以達(dá)到0.9073的分?jǐn)?shù)。實(shí)在是羨慕柔滔,大神思路明了溢陪,代碼簡(jiǎn)潔。然后在仔細(xì)看了代碼之后睛廊,居然發(fā)現(xiàn)大神不小心把rowid加入訓(xùn)練和預(yù)測(cè)形真,我從中摘出來(lái)之后,居然又上升了萬(wàn)分之5超全,哈哈還是挺開(kāi)心的咆霜。
最后自己對(duì)代碼進(jìn)行修改邓馒,想著加入特征。但分析數(shù)據(jù)后蛾坯,因?yàn)闇y(cè)試集中沒(méi)有店鋪相關(guān)的信息光酣,我沒(méi)有辦法將店鋪相關(guān)的特征加入進(jìn)來(lái),只能挖時(shí)間維度了脉课。我通過(guò)tableau畫(huà)出了平日和周末的流量圖救军,發(fā)現(xiàn)兩者有著明顯的不同,因此我們將是否是工作日作為一列特征加入其中倘零,通過(guò)多分類(lèi)的訓(xùn)練唱遭,居然上升了萬(wàn)分之十六,還是比較開(kāi)心呈驶。然后自己又重新審視數(shù)據(jù)胆萧,發(fā)現(xiàn)8月份有一個(gè)比較特殊的節(jié)日,那就是七夕節(jié)俐东,我就將其加入周末中跌穗,成績(jī)又上升了萬(wàn)分之一。之后我們通過(guò)觀察數(shù)據(jù)發(fā)現(xiàn)虏辫,發(fā)現(xiàn)用戶(hù)去店鋪的時(shí)間基本是有大概的規(guī)律蚌吸,有的用戶(hù)只是早上而且是同一家,有的是很多家砌庄,因此我們將所有店鋪的記錄發(fā)生的時(shí)間統(tǒng)一到小時(shí)的角度羹唠,作為特征加入模型,又上升了萬(wàn)分之四娄昆,最終成績(jī)終于有了較大的提升佩微,最終由于自己思路的限制,止步復(fù)賽萌焰。但是感覺(jué)第一次參加這種比賽能夠從2897支隊(duì)伍中做到前200還是比較開(kāi)心的哺眯,希望天池越來(lái)越好,希望自己下次能夠有好成績(jī)扒俯。這里也感謝隊(duì)友新神和林神奶卓,很強(qiáng)勢(shì)。
最后總結(jié)一下在比賽中自己的一些收獲和經(jīng)驗(yàn)教訓(xùn):
1. pandas在數(shù)據(jù)分析方面真的是利器撼玄,無(wú)與倫比夺姑。但是循環(huán)真的比較慢。而且在循環(huán)嵌套的過(guò)程中不要在循環(huán)中出現(xiàn)深拷貝掌猛,對(duì)時(shí)間上的損耗十分大盏浙。比賽之初的代碼居然可以跑三天。。废膘。竹海。。最終實(shí)在是等不起了殖卑,然后將所有的數(shù)據(jù)格式更改為dict站削,然后對(duì)其遍歷,30分鐘就可以搞定孵稽。
2. pkl文件序列化到硬盤(pán)许起,沒(méi)有壓縮參數(shù),導(dǎo)致文件體積很大菩鲜。
3. 在以后做比賽還是做開(kāi)發(fā)的時(shí)候园细,需要統(tǒng)一py的版本,因?yàn)閜y改動(dòng)激進(jìn)接校,在字符編碼方面和py2完全不一樣猛频,在這個(gè)問(wèn)題上浪費(fèi)了很多時(shí)間
4. 在碰到數(shù)據(jù)量大的情況,利用分而治之的思想比較重要蛛勉,在這個(gè)題目中數(shù)據(jù)量比較大鹿寻,因此我們分商場(chǎng)對(duì)其進(jìn)行處理。劃分成子問(wèn)題诽凌,這樣效果會(huì)好的多毡熏,并且執(zhí)行速度上也會(huì)快的多。而且對(duì)有些變量的onehot也就變成了可能侣诵。
5. 碰到類(lèi)別變量或者字符串變量痢法,可以對(duì)類(lèi)別等進(jìn)行統(tǒng)計(jì)分組,或者找出類(lèi)別之間的關(guān)系和特征杜顺,最后考慮onehot,或者利用自然語(yǔ)言處理中的詞向量的思想
6. 在分析真實(shí)數(shù)據(jù)的時(shí)候财搁,是否是工作日,節(jié)假日等十分重要躬络,這種特殊的時(shí)間段尖奔,往往會(huì)表現(xiàn)出不一樣的分布,分開(kāi)處理洗鸵,往往效果會(huì)好的多越锈。
7. 時(shí)間維度刻畫(huà)特征,分段離散化膘滨,找起點(diǎn)形成時(shí)間距離。
8. 異常數(shù)據(jù)需要做剔除稀拐,會(huì)使得預(yù)測(cè)準(zhǔn)確率變高火邓。
9. xgboost調(diào)參,特征重要性畫(huà)法都比較重要