0
| 本文作者: 叢末 | 2018-08-24 18:00 |
今年 KDD CUP 設立三項大獎,分別為 General Track、Last Ten-Day Prediction Track 以及 Second 24-Hour Prediction Track,從不同維度獎勵表現(xiàn)突出的團隊。由羅志鵬,胡可,黃堅強組成的 Getmax 團隊,在這三項大獎中獲得一項亞軍、兩項冠軍的成績,是唯一包攬三項大獎的團隊。去年該團隊成員帶領的 Convolution 團隊也包攬了 KDD CUP 2017 的雙料冠軍。
圖為剛剛召開的國際頂級會議 SIGKDD 授予 Getmax 團隊的三項大獎獎牌
雷鋒網(wǎng)也在去年對該團隊進行了技術分享報道。
KDD Cup 是由 ACM 的數(shù)據(jù)挖掘及知識發(fā)現(xiàn)專委會(SIGKDD)主辦的數(shù)據(jù)挖掘研究領域的國際頂級賽事,從 1997 年以來每年舉辦一次。每屆都吸引眾多工業(yè)界以及學術界的選手,有數(shù)據(jù)挖掘領域「奧運會」之稱。
KDD Cup 2018 題目為空氣質(zhì)量預測, 由主辦方提供中國北京和英國倫敦的天氣數(shù)據(jù),選手需要以此來預測未來 48 小時內(nèi) PM2.5/PM10/O3 濃度。本次賽題本身對應對惡劣環(huán)境、改善人類生存有著重要意義,而問題本身則有數(shù)據(jù)規(guī)律性弱,易突變,時間序列以及空間拓撲關系建模等挑戰(zhàn)。
近日,在雷鋒網(wǎng) AI 研習社公開課上,Getmax 團隊就分享了 KDD CUP 2018 兩冠一亞團隊解題思路,本次分享主要對空氣質(zhì)量問題的重點、難點進行針對性的特征設計與深度學習模型優(yōu)化。公開課回放視頻網(wǎng)址:http://www.mooc.ai/open/course/530
分享人介紹
羅志鵬:微軟 Bing 搜索廣告算法工程師,北京大學軟件工程專業(yè)碩士,專注于深度學習技術在 NLP,廣告相關性匹配,CTR 預估等方面的研究及應用。
黃堅強:北京大學軟件工程專業(yè)碩士在讀,擅長特征工程、自然語言處理、深度學習。
胡可:阿里媽媽搜索直通車團隊算法專家,碩士畢業(yè)于香港中文大學機器學習方向,工作技術方向為深度學習與廣告算法。
團隊具備豐富的機器學習在工業(yè)界與比賽的應用經(jīng)驗。團隊成員曾獲得 CIKM 2018 冠軍,KDD CUP 2017 雙料冠軍,Kaggle Outbrain Click Prediction 冠軍,微博熱度預測冠軍,上海 BOT 大數(shù)據(jù)應用大賽冠軍等。
這一事件在雷鋒網(wǎng)旗下學術頻道 AI 科技評論數(shù)據(jù)庫產(chǎn)品「AI 影響因子」有相應加分。
分享主題:KDD CUP 2018 兩冠一亞團隊解題思路
分享提綱:
? 空氣質(zhì)量問題理解及建模設計
? 特征工程
? 深度學習模型優(yōu)化
? 模型融合
雷鋒網(wǎng) AI 研習社將其分享內(nèi)容整理如下:
今天我們團隊要跟大家分享的是 KDD Cup 2018 的解決方案。先介紹一下我們 Getmax 團隊,團隊隊長羅志鵬,是微軟 Bing 搜索廣告算法工程師,北京大學軟件工程專業(yè)碩士。我是黃堅強,目前北京大學軟件工程專業(yè)碩士在讀。胡可是媽媽搜索直通車團隊算法專家,碩士畢業(yè)于香港中文大學機器學習方向。

我們團隊擁有豐富的機器學習在工業(yè)界及競賽的應用經(jīng)驗,此前曾在 CIKM Cup 2018、KDD Cup 2017、Kaggle Outbrain Click Prediction 等比賽均獲得冠軍。
今年 KDD 2018 總共設置了三項大獎,我們獲得了兩項冠軍、一項亞軍的成績,是唯一一個包攬三項大獎的團隊。

我們團隊將從以下 4 各方面來分享本屆 KDD 大賽的經(jīng)驗。
競賽的第一步就是對問題做相應的調(diào)研——對于問題以及數(shù)據(jù)的具體理解是建模的基礎,所以我們先對本次KDD大賽的問題進行理解和分析。
首先介紹一下 KDD Cup 2018 的背景。在本次大賽中,主辦方提供了空氣質(zhì)量、天氣的歷史數(shù)據(jù)以及未來兩天的天氣預報數(shù)據(jù)。我們需要預測北京和倫敦 48 個站點、未來 48 個小時的 PM2.5/PM10/O3 濃度。本次大賽所使用的評價函數(shù)是 SMAPE:
。
該評價函數(shù)是在 Norm-1 的 MAE 評價函數(shù)基礎上,除以預測值與真實值的平均值。使用該評估函數(shù)能有效防止在空氣質(zhì)量問題特有的異常值對整體分數(shù)的影響,比如說當空氣質(zhì)量突變到一個很大的值時,分母項可以相對削弱該影響。
接下來講一下數(shù)據(jù)??諝赓|(zhì)量的指標包括 PM2.5、PM 10、03。天氣數(shù)據(jù)的字段包括溫度、氣壓、濕度、風速和風向等。其中天氣預報數(shù)據(jù)的字段與天氣數(shù)據(jù)的字段相同,但不同之處在于天氣預報僅僅提供了訓練集最后一個月的數(shù)據(jù)。
這些天氣的數(shù)據(jù)都以網(wǎng)格的形式給出,即地圖的經(jīng)緯度通過網(wǎng)格進行劃分,北京總共能提供 600 多個網(wǎng)格點,倫敦能提供 800 多個網(wǎng)格點,在空間維度挖掘潛力很大。據(jù)了解,現(xiàn)有的工業(yè)界以及學術界主要通過統(tǒng)計學、時間序列等來進行建模,基于機器學習尤其是深度學習建模的探索處于相對初級的階段。
本次大賽的難點在以下方面: 
第一,數(shù)據(jù)存在噪聲和不穩(wěn)定性,空氣質(zhì)量規(guī)律性弱,濃度經(jīng)常變化很快。
第二,時間序列的建模難度相當高:需要對未來 48 個小時的每一個小時進行預測。對于時間較長的狀態(tài)建模以及序列間依賴關系的建模帶來很大挑戰(zhàn)。
第三,空間拓撲模型:需要對兩個城市共幾百個站點做預測。不同站點之間的濃度有較大區(qū)別,變化趨勢不太一致而又具有一定的相關性。

經(jīng)過數(shù)據(jù)分析,我們發(fā)現(xiàn)北京 PM2.5 的空氣質(zhì)量濃度變化相當劇烈,這是北京奧體中心從 2 月到 5 月的濃度變化值,其最低值能到 10 ,最高值能到350,而且往往在數(shù)小時內(nèi)就能產(chǎn)生巨大的變化,建模難度較大。
那么時間序列如何建模呢?我們用這張 PPT 來進行說明,整張 PPT 代表著我們現(xiàn)在能獲取的時間序列數(shù)據(jù),從 17 年 1 月 1 號到 18 年 4 月左右,然后以圈進行劃定。這里我們假設 N 等于 3,那么左邊的時間數(shù)據(jù)就相當于從 17 年 1 月 1 號到 17 年 1 月 3 號,右邊就是 4 號到 5 號總共48個小時。因為常用的預測模型只有一個,所以我們需要將 48 個小時滑動拆分為 48 個樣本,那么每個小時的空氣質(zhì)量就是其中一個樣本的標簽,由一個 flag 特征來標識是第幾個序列。這樣,就可以把時間序列預測問題轉(zhuǎn)化為傳統(tǒng)的單目標回歸問題。
我們要在前 N 天的數(shù)據(jù)中提取特征來構建訓練集,所以滑動一圈就能產(chǎn)生 48 個樣本,總共就能產(chǎn)生 86 萬個樣本。然后,我們可以取最后 15 天左右來做驗證集,由于時間序列數(shù)據(jù)不符合獨立同分布,并不適合做多交叉驗證。并且因為本賽題中不同城市受空氣質(zhì)量影響的因素各不相同,分布差異較大,所以我們對北京的 PM2.5、PM 10、03 以及倫敦的 PM2.5、PM 10 這五個指標構建五個模型。
接著我們介紹一下特征工程。特征往往能決定模型的上限,要進行特征工程,我們首先要構建一個 Baseline 模型,在此基礎上,才能進行特征的有效性驗證。
GBDT 模型由于其穩(wěn)定性及其對噪音的不明顯性等優(yōu)點,適用于特征工程的驗證。我們采用每個站點過去 72 小時的空氣質(zhì)量特征、離站點最近網(wǎng)格點的過去 72 小時的天氣特征來構建 Baseline 模型。

這個是 Baseline 模型的預測效果圖,從圖中可以看出,僅僅使用這些特征并不能很好地反映真實值的趨勢。
在 Baseline 模型的基礎上,我們對空氣質(zhì)量、天氣數(shù)據(jù)進行相關性分析,我們發(fā)現(xiàn) 73.7% 的空氣質(zhì)量的變化與風速、風向的變化相關聯(lián)。于是我們考慮在 GBDT 模型的基礎上引入天氣預報特征,但是天氣預報特征僅從 2018 年 4 月 10 號開始提供,缺乏了一年多的數(shù)據(jù)——如何填補缺失的天氣預報數(shù)據(jù)是一個關鍵點。
通常,使用填補缺失值的方法是使用平均值和默認值,但是這些方法都不能產(chǎn)生很好的效果。因此,我們采用了真實天氣來填補天氣預報的缺失值,然而這又產(chǎn)生了一個新的問題——因為天氣預報真實天氣的分布比較不一致,容易導致訓練的過度擬合,因而我們考慮嘗試采用遷移學習去解決這個問題。
我們對真實天氣的訓練集采取預訓練,對天氣預報的訓練集采取再訓練的方式來構建模型。然而經(jīng)實驗發(fā)現(xiàn),天氣預報只有最后一個月的數(shù)據(jù),并不能很好地覆蓋所有的天氣分布,所以這個模型的效果在未來的預測不穩(wěn)定。
最終我們對天氣引入了高斯噪聲,使用高斯分布去估計真實天氣與天氣預報的均值及方差,并且對每個小時都進行參數(shù)估計,以得到更準確的高斯噪聲。另外,我們還使用分箱平滑進一步去緩解天氣預報與真實值的分布不一致性問題。
在緩解了不一致問題后,我們認為進一步提升空間在于從單點的挖掘擴展為多點的挖掘。因為天氣預報提供的網(wǎng)格數(shù)據(jù)點多,數(shù)據(jù)信息量巨大,挖掘空間很大,所以我們進一步進行天氣預報數(shù)據(jù)的特征挖掘。我們對每個站點附近八個方位最近的網(wǎng)格點的天氣進行特征、空氣質(zhì)量特,這樣可以使得統(tǒng)計更充分并且穩(wěn)定。同時考慮到空氣具有較大的流動性,城市乃至城市以外的較大范圍的地點都在未來時間段互相存在一定影響,所以我們對整個城市經(jīng)緯度跨度較大的 12 個網(wǎng)格進行天氣預報特征的提取,并使用這些天氣預報特征來構建我們最終的模型。

經(jīng)過對比,我們發(fā)現(xiàn)這張圖顯示的就是北京奧體中心站 5 月 28 號和 29 號的預測圖,該天凌晨有沙塵暴,導致 PM2.5 的濃度增大,后來天氣持續(xù)變好,在 4 個小時內(nèi),PM2.5 值從 160 左右降到 30 再降到 10 左右,空氣質(zhì)量的突變非常劇烈。我們的 Baseline 模型預測是這條橙線,最終模型預測是這條綠線,相對于橙線更加接近真實值(藍線)。因而,最終模型更能準確反映空氣真實值的趨勢。
我們使用了6 批特征,包括一些基礎的特征如未來第幾個小時、哪個站點或者一些時間特征、空氣質(zhì)量的特征、歷史天氣的統(tǒng)計,而最重要的是天氣質(zhì)量、空間拓撲的特征。同時,我們也對一些歷史變化的特征進行提取,比如統(tǒng)計 PM2.5 最大值和最小值的時間間隔。
最終,我們構建的模型需要進一步選擇特征,以縮寫模型的運行時間。我們通過 GBDT 的分裂的特征增益所選擇的特征的重要性來進行特征選擇,最后從 2027 個特征中選擇了 885 個特征來構建最終模型。由于特征之間出現(xiàn)沖突,所以我們采用類似于隨機生成的 Bagging 做法,對特征進行了分組,對每一組特征都構建一個模型,然后對每個模型的預測值采取加權融合的方式來構建最終模型。也同時在特征工程有瓶頸時進入了下一個階段——多模型的構建。
接下來由我們的隊長羅志鵬來介紹深度模型的優(yōu)化。(羅志鵬:)下面介紹我們主要的兩個神經(jīng)網(wǎng)絡模型。
神經(jīng)網(wǎng)絡模型也有非常強的非線性交互能力,由于我們前面開始做的時候用到 GBDT 模型,DNN 模型實際上與 GBDT 模型具有非常大的差異性。后期使用 DNN模型做融合的時候,能得到最大的提升。
GBDT 模型在時間和空間層面上的表達能力并不充分。在時間層面上,每個樣本的特征基本上都比較相似,所以我們給這些特征加了一個標識位,對未來 48 個小時,用 0 到 47 來進行標識。同時,由于主要歷史信息特征比如歷史空氣質(zhì)量、天氣預報占了比較大的特征比例,我們得到的一些與時間相關的天氣預報特征的結果差異性比較小,并跟真實值的差異比較大。此外,我們也發(fā)現(xiàn) 0 到 47 這個時間特征的重要性也特別高。
在空間上,倫敦有 13 個站點,北京有 35 個站點,我們也對其進行數(shù)字編碼,但是表達能力有限。
接下來介紹一下我們的 DNN 模型。

左邊的這個 Dense 特征是我們 GBDT 所用的特征。提特征的時候,需要注意的是,我們首先要進行標準化,常規(guī)標準化方式就是在整個訓練集上統(tǒng)計均值和標準差。我們發(fā)現(xiàn)這個數(shù)據(jù)集缺失點的分布不一樣——填充缺失部分,分布點差距很大,因此我們在做標準化的時候進行了一些特殊操作:首先統(tǒng)計均值和標準差,忽視空值;做完標準化操作,再把空值進行填充;之后,再對異常值進行一些處理,對小于 0.3 和大于 0.3 的值進行拆解,把范圍縮到 3 和 -3 之間。對于缺失值,也用專門的標示位進行表達,然后我們把它 concat 起來,得到整體的特征標準。
如果僅用左邊介紹的 Dense 特征,我們得到的結果會非常相近,就是 0 到 47 小時的結果會在某個值之間波動,但是彼此間的差異不會很大。我們在后面進行模型的優(yōu)化時,加入了時間和空間信息聯(lián)合建模的優(yōu)化。
我們來看一下模型的右邊部分。首先對小時(Hour)即 0 到 47,進行 Embedding,得到時間的表達;Station 部分,同樣對北京 35個,倫敦 13個進行 Embedding,再做非線性變換,這個有×的圓圈部分代表元素層,它將時間和空間的信息融合起來變成時空信息,再經(jīng)過全連接,再經(jīng)過 σ,這部分就得到時空門限(Gate),即時間和空間的信息整合。這個門限用來控制左邊主體模型結構的信息通過,這樣預測出來的結果差異性會比較大。這個時間和空間的聯(lián)合建模優(yōu)化不僅提高了精度,而且與樹模型有較大的差異性。

我們這里用到的激活函數(shù)是 B-swish。這個激活函數(shù)是由 Google 提出來的,大家可以看一下該函數(shù)的圖,它其實是一個不飽和、光滑、非單調(diào)性、有下界無上界的函數(shù)。相關的 tanh 函數(shù)和 sigmoid 函數(shù),它們圖形的兩端比較平,極值容易趨向于 0,會影響效果。另外,Relu 函數(shù)有很多變種,這些變種在實驗中能得到比較好的效果,但相比較而言,B-swish 函數(shù)無論怎么調(diào)都能達到比較優(yōu)的結果,這個也在很多實驗中得到了證實,大家可以嘗試一下。
下面講一下 RNN 模型,它是一個序列的預測,為一個序列模型。GBDT 和 DNN 都不是序列模型,它們預測一個站點的未來 48 小時,需要預測 48 次,序列也是 4 8個樣本量,比較大的,差異主要體現(xiàn)在與時間相關的天氣預報上。
而 RNN 模型會一次性預測 48 個小時的結果,這樣訓練的數(shù)據(jù)會小很多,但是它后面預測的某個小時的結果跟前面的結果有一定的關聯(lián),所以 RNN 很適合用來解決時間序列的問題。
接下來,我講一下這個模型結構。

首先,前面的 Encoder 其實跟普通的 Encoder 模型很像,其主體用的都是 GRU,速度會比較快。Encoder 的輸入主要為歷史天氣預報、空氣質(zhì)量信息。
Decoder 模型與常規(guī) Decoder模型的差異比較大,輸入的是天氣預報、時間和 Station Embedding,同時會把上一個預測結果加入到每個時間部的輸入。比如說 Y1 在輸出的時候會把輸出結果連接到下一個時間部,第一個 T1 的時間部為一個增勢值的輸入,而當前空氣質(zhì)量的指標,后面的時間部是沒有增值的,這就是拿預測結果作為下一個時間部的輸入。
我們發(fā)現(xiàn)這個時間序列模型有時候并不是很不穩(wěn)定。我們在序列之間加入了正則化。大家可以看一下這個公式:
。
h(t)是當前狀況,h(t-1)是上個時態(tài)的狀態(tài),我們對這兩個值的差值做了二方次,得到一個規(guī)則化的操作,公式的最左邊有個 β,它是用來平衡規(guī)則化的,預測也會變得更穩(wěn)定些。
我們采用 Cocob 優(yōu)化器 ,它沒有學習率,所以我們不需要調(diào)節(jié)顯示率。另外,我們也做過一些測試,在這個任務上,這個優(yōu)化器確實優(yōu)于其他優(yōu)化器。當然在一些 Paper 上也做過關于這個優(yōu)化器的實驗,將其跟常見的而優(yōu)化器做了一些對比,也表明它確實很不錯。
最后,由胡可講一下模型融合與總結部分。
當幾個單模型都調(diào)整到一個相對比較好的狀態(tài)的時候,我們要開始想怎么把這幾個單模型進行融合。通用的融合方式有 Begging、Boosting、Staking,綜合考慮模型的表達能力和模型具有一定的可擴展性(相當于可以加入更多的基模型)后,我們采用了一個兩級的 Staking 結構。 
第一級的模型,就是剛剛所介紹的 GBDT 以及 DNN、RNN 兩種神經(jīng)網(wǎng)絡模型,而我們這個staking模型,分為兩級。
第一級中,會對前面的訓練數(shù)據(jù)進行一年左右的訓練,并將最后兩天作為一個預測時間,這樣能讓線下和線上的預測天數(shù)保持一致。而這樣也有一個問題,即因為測試集只有兩天,數(shù)據(jù)量會比較小。因此,我們采用滑窗的方式來擴大測試集的個數(shù):以兩天為一個單位向前滑,第一個集合相當于以最后兩天作為它的測試集,第二個是以倒數(shù)第三、四天作為其測試集,同理滑動多個集合,就可以利用上它們分別預測的值,比如說 GBDT 有一個預測值,這個值就作為特征 1,DNN 有一個預測值,這個值就作為特征 2,然后再把幾個集合做拼接,作為第二級融合的訓練特征值。這個特征就是第一級模型的預測值,然后 label 就是它本身的數(shù)據(jù) label。
第二級模型選型中,我們一開始嘗試使用 GBDT 模型,發(fā)現(xiàn)空氣質(zhì)量數(shù)據(jù)具有較強的不穩(wěn)定性,而 GBDT這種非線性模型容易引起過擬合。所以之后我們就采用了一個線性模型——Linear Regression,我們把第一級的預測模型作為特征,去進行第二級模型的訓練。
為了提高線性模型的表達能力,我們還采用了兩種優(yōu)化方式:
第一個優(yōu)化是基于約束的線性模型,背后的假設是第一層模型的預測均值切合真實值,因而第二層模型不影響它們的預測均值。
第二個優(yōu)化是基于人工先驗引入一個非線性模型,把預測結果按照時間以及空間的多維度劃分。我們發(fā)現(xiàn)不同模型在不同時間內(nèi)表現(xiàn)形式是不一樣的,比如,有的模型在比較短的時間更擅長預測,有的模型在 40 小時后更擅長,因此在不同的時間段分別建模以提高模型的表達能力。相當于在 48 個小時里,分別訓練了 48 個基于約束的線性模型。我們考慮到了過擬合與欠擬合的平衡,在線性模型中基于人工先驗引入了非線性。

在這個融合框架的第一級模型構建,它的構建有多種方式。我們從特征、模型兩個角度進行構建:模型,指采用 DNN、RNN 這兩種方式去建模時的時間和空間的拓撲關系。在特征層面,有些特征如天氣預報具有不穩(wěn)定性,所以我們在模型中去掉天氣預報特征,而對于拓撲結構,我們也在 DNN 進行了一定的刪改,并且在不同模型中分別放入長時間特征、短時間特征,這樣就可以產(chǎn)生比較強的模型差異性。
模型的精度是S2S(RNN)>GBDT>DNN,融合大概有千分之七的提升,這是相對比較顯著的。主要得益于神經(jīng)網(wǎng)絡模型與樹模型有比較強的差異性,這是模型產(chǎn)生收益的基礎。
這個過程中,我們也有一些想做而沒時間做的工作:

一是對于地理位置的拓撲建模。其實我們在 DNN 進行地理數(shù)據(jù)操作之后,也想用 CNN 進行拓撲空間建模。
二是我們自身提供了一個五年的數(shù)據(jù),但由于時間關系,我們沒有時間去采用。其實我們可以從這個統(tǒng)計分析中看到,這種空氣質(zhì)量具有比較強的周期性,比如在夏天的時候,霧霾頻率低,在三、四月份比較高。在這五年中,我們其實可以捕捉到基于月、季節(jié)的周期性,把這種周期性特征和五年的數(shù)據(jù)一起進行建模,應該也會有增度的收益。
三是深入做一個天氣預報的誤差估計模型。我們天氣預報之前用的高斯噪聲,假設不同小時,它的誤差是不一樣的,但影響誤差的因素并不單是不同的時間段,包括最近時間的一次誤差、最近發(fā)生突變情況的時間間隔和天氣狀況。如果我們深入,還可以做一個天氣預報的誤差估計模型。
這是關于我們整個迭代過程的總結:

第一步,對問題的理解,并且先從特征、數(shù)據(jù)的角度,去挖掘重要的信號量。我們發(fā)現(xiàn)比較重要的信號是天氣預報數(shù)據(jù),因而將其作為一個關鍵的信號去進行細致的特征工程。
第二步,不同于通過特征工程來表達業(yè)務問題。我們盡量從模型角度進行優(yōu)化,比如針對不同的時間與空間的信息表達,在 DNN 等模型上設計了時間和空間的單元,從而在更多的角度去建模時間序列和空間拓撲問題,與之前特征工程的工作形成很好的補充。
第三步相當于把特征和模型這兩個角度的關鍵求解模型進行融合,這是基于一個約束的線性模型的融合框架。
所以我們認為對于問題的理解是基礎,而對于關鍵信息細致的特征工程,以及針對問題特點對于時間與空間的深度學習建模是后期優(yōu)化的關鍵。
以上就是本期嘉賓的全部分享內(nèi)容。更多公開課視頻請到雷鋒網(wǎng) AI 研習社社區(qū)觀看。關注微信公眾號:AI 研習社(okweiwu),可獲取最新公開課直播時間預告。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。