开源!2019CCF BDCI 乘用车销量预测 冠军方案
作者:樓觀白樓
出處:https://zhuanlan.zhihu.com/p/98926322
寫在前面
在本次比賽中,我們團(tuán)隊(duì)惡魔媽媽買面膜(經(jīng)主辦方建議,決賽時(shí)隊(duì)名修改為秋名山車神)在初賽A榜,初賽B榜,復(fù)賽A榜,復(fù)賽B榜分別取得2,4,1,3的名次,并在最終決賽中逆襲拿到冠軍(1/3000)。
本來復(fù)賽B榜是rank 4。由于有一個(gè)隊(duì)伍由于使用小號(hào)被取消資格,一個(gè)隊(duì)伍放棄復(fù)現(xiàn),決賽逆襲一個(gè)隊(duì)伍,最終拿到了冠軍。說實(shí)話,運(yùn)氣非常好。
歷時(shí)四個(gè)月,從多次想要放棄(中間有一個(gè)月放棄了沒有做)到最終奪冠,真的十分感謝隊(duì)友!
團(tuán)隊(duì)介紹
秋名山車神
梁晨 重慶郵電大學(xué) 研一
陳暄群 華南理工大學(xué) 研二
梁汐然 北京大學(xué) 大四
徐巍 重慶郵電大學(xué) 研二
王猛旗 重慶郵電大學(xué) 研一
如你們所見,我們來自三個(gè)不同的學(xué)校,通過本次比賽聚集在一起,在此也十分感謝DF平臺(tái)與主辦方CCF。
我們團(tuán)隊(duì)中大多數(shù)人都是第一次參加數(shù)據(jù)科學(xué)競(jìng)賽。
感謝開源
本次比賽要特別感謝的人是魚佬,他的框架太強(qiáng)了。換成是我我不一定會(huì)在比賽中開源這么強(qiáng)的思路,從某種層面上來說這可能會(huì)坑到自己。所以敢于開源的人都應(yīng)該值得稱贊,開源與分享可以讓整個(gè)環(huán)境進(jìn)步。
另外還要感謝月月鳥,阿道,煥明(校友,就是54的那個(gè)規(guī)則開源,實(shí)際上我發(fā)現(xiàn)很多隊(duì)伍的規(guī)則都是基于他做的),他們的開源也讓我們學(xué)習(xí)到了很多。
代碼
我們本次的方案一共約500行代碼,主要的工作在于特征工程與規(guī)則構(gòu)造,思路,代碼都很簡(jiǎn)單,運(yùn)行只需3min,請(qǐng)放心使用。
https://github.com/cxq80803716/2019-CCF-BDCI-Car_sales
接下來我會(huì)詳細(xì)介紹一下本次的賽題與解決方案。
實(shí)測(cè)(8g內(nèi)存,CPU:i5-8500,耗時(shí)132秒):
賽題介紹
CCF大數(shù)據(jù)與計(jì)算智能大賽(CCF Big Data & Computing Intelligence Contest,簡(jiǎn)稱CCF BDCI)是由中國(guó)計(jì)算機(jī)學(xué)會(huì)大數(shù)據(jù)專家委員會(huì)于2013年創(chuàng)辦的國(guó)際化智能算法、創(chuàng)新應(yīng)用和大數(shù)據(jù)系統(tǒng)大型挑戰(zhàn)賽事,是全球大數(shù)據(jù)與人工智能領(lǐng)域最具影響力的活動(dòng)之一。
深瞳是一家大數(shù)據(jù)與行業(yè)智能應(yīng)用解決方案運(yùn)營(yíng)商,為各行業(yè)客戶提供數(shù)據(jù)分析與策略咨詢服務(wù),幫助行業(yè)客戶進(jìn)行數(shù)據(jù)資產(chǎn)化,為客戶提供數(shù)據(jù)處理、建模分析服務(wù)。汽車行業(yè)是深瞳所重點(diǎn)服務(wù)的核心行業(yè)之一,長(zhǎng)期服務(wù)于國(guó)內(nèi)外知名汽車品牌客戶。
近幾年來,國(guó)內(nèi)汽車市場(chǎng)由增量市場(chǎng)逐步進(jìn)入存量市場(chǎng)階段,2018年整體市場(chǎng)銷量首次同比下降。在市場(chǎng)整體趨勢(shì)逐步改變的環(huán)境下,消費(fèi)者購(gòu)車決策的過程也正在從線下向線上轉(zhuǎn)移,我們希望能在銷量數(shù)據(jù)自身趨勢(shì)規(guī)律的基礎(chǔ)上,找到消費(fèi)者在互聯(lián)網(wǎng)上的行為數(shù)據(jù)與銷量之間的相關(guān)性,為汽車行業(yè)帶來更準(zhǔn)確有效的銷量趨勢(shì)預(yù)測(cè)。
https://www.datafountain.cn/competitions/352
備注:(原始數(shù)據(jù)下載地址,github已經(jīng)有數(shù)據(jù),可以不用下載)
鏈接:https://pan.baidu.com/s/1Zs5d9CWJuUoX7AmIKAoYmg
提取碼:frqb
賽題需要參賽隊(duì)伍根據(jù)給出的60款車型在22個(gè)細(xì)分市場(chǎng)(省份)的銷量連續(xù)24個(gè)月(從2016年1月至2018年12月)的銷量數(shù)據(jù),建立銷量預(yù)測(cè)模型;基于該模型預(yù)測(cè)同一款車型和相同細(xì)分市場(chǎng)在接下來一個(gè)季度連續(xù)4個(gè)月份的銷量;除銷量數(shù)據(jù)外,還提供同時(shí)期的用戶互聯(lián)網(wǎng)行為統(tǒng)計(jì)數(shù)據(jù),包括:各細(xì)分市場(chǎng)每個(gè)車型名稱的互聯(lián)網(wǎng)搜索量數(shù)據(jù);主流汽車垂直媒體用戶活躍數(shù)據(jù)等。參賽隊(duì)伍可同時(shí)使用這些非銷量數(shù)據(jù)用于建模。
簡(jiǎn)單來說,本次賽題給出2016.1~2017.12的省份,車型,車身,銷量,搜索量,評(píng)論量,評(píng)價(jià)量等,要求預(yù)測(cè)2018.1~2018.4的銷量。
評(píng)價(jià)指標(biāo)是歸一化均方根誤差的均值
數(shù)據(jù)分析
通過初步分析數(shù)據(jù)可以發(fā)現(xiàn)省份-車型所組成的類別特別多,并且對(duì)于同一車型,波動(dòng)也挺大的,銷量的范圍較大等。
順便說一下,我們經(jīng)過多次嘗試發(fā)現(xiàn)評(píng)論量與評(píng)價(jià)量幾乎起不到作用,所以這兩個(gè)特征我們并沒有使用,如果你有辦法處理這兩個(gè)特征,歡迎評(píng)論討論。
數(shù)據(jù)預(yù)處理
為了使數(shù)據(jù)分布更加符合高斯分布,對(duì)數(shù)據(jù)做了log1p的預(yù)處理。
算法整體方案
我們?cè)诔踬惖臅r(shí)候嘗試了xgb,lgb,cat,prophet,rule,lstm,cnn,并且初賽的最終結(jié)果是由lgb,prophet,rule與lstm融合而來。但是后來我們發(fā)現(xiàn)就算只用lgb和rule也能得到差不多的分?jǐn)?shù),時(shí)序模型與深度學(xué)習(xí)模型在這道小數(shù)據(jù)時(shí)序問題上并不適用,又考慮到工業(yè)環(huán)境中模型越少,越簡(jiǎn)單越好,因此復(fù)賽時(shí),我們只使用了差異性足夠大的lgb與rule兩個(gè)模型。
抑制誤差傳遞
直接使用魚佬的框架能帶來相當(dāng)不錯(cuò)的效果,但是可以發(fā)現(xiàn),越往后的月份誤差的累計(jì)會(huì)越來越嚴(yán)重,因此在模型中,我們只拼接了1月份預(yù)測(cè)出來的值。
特征分析
在構(gòu)造特征之前,對(duì)特征一些分析。
畫出省份銷量的熱力圖可以發(fā)現(xiàn)銷量與省份的發(fā)達(dá)程度,臨海程度是成一定正相關(guān)的,這與我們的直覺相符。因此各省份銷量的差異明顯,建模時(shí)必須對(duì)省份進(jìn)行區(qū)別。
對(duì)于同一個(gè)月份,2016年與2017年的銷量類似,即銷量有周期性變化的特性。而且對(duì)于宏觀變化而言,2017年的銷量較2016年銷量呈現(xiàn)下降趨勢(shì)。
春節(jié)月的銷量較低,春節(jié)后逐漸上升,年末達(dá)到最高。
特征工程
這一塊是本次工作的重頭戲,也是我們花費(fèi)了最多時(shí)間的地方,最終,我們的模型特征由以下幾部分組成。
考慮到春節(jié)等節(jié)假日,我們構(gòu)造了與節(jié)假日相關(guān)的一些特征。
考慮到每個(gè)月的天數(shù),工作日不同,我們構(gòu)造了相關(guān)的特征。
由于是個(gè)時(shí)序問題,因此歷史銷量與銷量的變化趨勢(shì)是我們應(yīng)該考慮的重點(diǎn)。針對(duì)此,我們?cè)诙鄠€(gè)不同粒度下構(gòu)造了歷史平移特征,差分特征,同比/環(huán)比特征與趨勢(shì)特征。
不過經(jīng)過我們的嘗試,同比的效果不怎么好。
更加詳細(xì)的內(nèi)容請(qǐng)看代碼。
特征選擇
我們所構(gòu)造的特征實(shí)際上不止這些,不過由于信息重疊與毒特等原因,我們使用了一些方法對(duì)特征進(jìn)行篩選。
我們使用了樹模型的特征重要性排序,均值判斷與SHAP進(jìn)行特征篩選。
特征重要性排序:根據(jù)樹模型輸出的特征重要性進(jìn)行篩選,去掉重要性低的特征。
均值判斷:由于本道賽題中,1234月具有相對(duì)固定的均值比例與均值大小,因此可以通過添加/刪除特征后1234月的平均均值來大概判斷特征的好壞。
SHAP:利用了組合博弈論的知識(shí),防止因?yàn)樾畔⒅丿B而導(dǎo)致的特征重要度不公平的情況。
初賽LGB的構(gòu)建流程
初賽時(shí)lgb做的一些操作與對(duì)應(yīng)的分?jǐn)?shù)如下
統(tǒng)計(jì)規(guī)則
規(guī)則部分的框架是使用歷史同期銷量,歷史最近銷量與指數(shù)平滑進(jìn)行加權(quán)得到一個(gè)初步預(yù)測(cè)銷量,然后用上下半年的銷量變化趨勢(shì)與平滑構(gòu)造年度銷量變化趨勢(shì),最后兩者相乘即可得到規(guī)則的預(yù)測(cè)結(jié)果。
由此可見,規(guī)則帶有相當(dāng)多的超參數(shù)。據(jù)我了解不少團(tuán)隊(duì)復(fù)賽時(shí)規(guī)則血崩,這也是時(shí)序題里面規(guī)則的泛性問題。我們初賽時(shí)規(guī)則可以達(dá)到0.633,是一個(gè)絕對(duì)的主力,復(fù)賽提交次數(shù)太少,最終規(guī)則也只有0.598,只能以lgb為主,規(guī)則為輔。
模型融合
因?yàn)橹挥袃蓚€(gè)模型,所以模型融合基本上不用考慮太多,直接進(jìn)行簡(jiǎn)單的算數(shù)/幾何加權(quán)即可,由于幾何加權(quán)可以使預(yù)測(cè)值偏小,而2018年的銷量理應(yīng)是較之前低的,所以我們使用了幾何加權(quán)進(jìn)行融合。
另外1234月分開進(jìn)行融合,可以帶來微小的提升。
總結(jié)
這里特別提一下模型的數(shù)量與運(yùn)行時(shí)間的優(yōu)點(diǎn),據(jù)我們決賽觀察,大多數(shù)隊(duì)伍都有超過2個(gè)的模型,而且有的隊(duì)伍需要超過一個(gè)小時(shí)的運(yùn)行時(shí)間。從工業(yè)角度來講,我們的方案應(yīng)該是更加適用的。
備注:公眾號(hào)菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧那些年做的學(xué)術(shù)公益-你不是一個(gè)人在戰(zhàn)斗適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(第一部分)備注:加入本站微信群或者qq群,請(qǐng)回復(fù)“加群”加入知識(shí)星球(4500+用戶,ID:92416895),請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的开源!2019CCF BDCI 乘用车销量预测 冠军方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI基础:深度学习论文阅读路线(127篇
- 下一篇: 如何判断数据背离正态分布?