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