未卜先知、研判吉兇一直是人類自古以來孜孜以求的一種向往。時至今日,隨著消費升級帶來的市場競爭和產(chǎn)業(yè)模式的轉(zhuǎn)型,企業(yè)也越來越希望在預(yù)測能力上能有更好的提升。做預(yù)測分析時,通常會使用時間序列算法或回歸模型。時間序列算法在做預(yù)測分析時,只考慮了數(shù)據(jù)在時序上的規(guī)律,而忽略了相關(guān)的影響因素,適用于比較簡單的預(yù)測分析場景。在情況比較復(fù)雜的情況下,需要考慮到相關(guān)因素的影響時,則需要考慮用回歸方法做預(yù)測分析。
縱覽近幾年在預(yù)測分析領(lǐng)域的學(xué)術(shù)研究成果,GBDT(Gradient Boosting Decision Tree,梯度提升決策樹)算法作為機(jī)器學(xué)習(xí)算法的一種,躍然成為眾多研究機(jī)構(gòu)和學(xué)者積極推薦的預(yù)測分析算法,并且結(jié)合Hadoop平臺取得了很好的性能表現(xiàn)和預(yù)測準(zhǔn)確度。主要的應(yīng)用方向有如下方面:
①故障預(yù)測分析
②欺詐預(yù)測分析
③搜索引擎用戶體驗提升
④視頻流媒體服務(wù)體驗提升
⑤個人征信
在商業(yè)應(yīng)用中,需要用到機(jī)器學(xué)習(xí)技術(shù)做預(yù)測分析的場景還有很多。面對大量的數(shù)據(jù),如何更好利用GBDT進(jìn)行分析預(yù)測是個極大的應(yīng)用挑戰(zhàn),本文將會圍繞基于GBDT算法探討如何實現(xiàn)預(yù)測分析的創(chuàng)新模式,幫助企業(yè)實現(xiàn)大數(shù)據(jù)預(yù)測分析的應(yīng)用普及。
GBDT算法簡介
GBDT的算法最初是由Leo Breiman[1] 在1997年提出的,1999年Jerome H. Friedman將GBDT算法用于回歸分析[2][3]。隨后幾年,陸續(xù)有學(xué)者對GBDT回歸算法進(jìn)行了改進(jìn)和優(yōu)化,GBDT在回歸問題中取得了很好的效果。陳天奇博士還根據(jù)GBDT多年的發(fā)展,對GBDT進(jìn)行修改和優(yōu)化,得到了XGboost算法[4]。在Apache Spark的Mllib庫中也整合了GBDT回歸算法,可以方便地在Spark平臺上使用GBDT做回歸預(yù)測分析。
GBDT的原理是利用梯度下降學(xué)習(xí)出多個弱學(xué)習(xí)器,組合產(chǎn)生一個強(qiáng)學(xué)習(xí)器。假設(shè)初始得到的學(xué)習(xí)器是公式1,其中 指的是模型 的損失函數(shù), 是訓(xùn)練集,特征 對應(yīng)的結(jié)果是 。初始化模型可以使用決策樹算法,也可以使用最小二乘法。初始化模型是根據(jù)當(dāng)前數(shù)據(jù),使得損失函數(shù)最小的模型。
(公式1)
設(shè)定迭代次數(shù)是M,那么GBDT算法就是要根據(jù)公式1,使用梯度下降算法通過M次迭代后得到的優(yōu)化模型。下面簡單分析下,第一次迭代的得到 的過程。
第一步,計算梯度:
分別對 計算梯度,梯度如公式2所示。
(公式2)
第二步,訓(xùn)練一個基學(xué)習(xí)器,根據(jù)訓(xùn)練集特征可以計算得到梯度:
使用特征和梯度 作為訓(xùn)練集,訓(xùn)練學(xué)習(xí)器,得到 。使用的訓(xùn)練算法可以是決策樹算法,也可以是最小二乘法。
第三步,尋找合適的步長:
在梯度下降算法中,需要用步長確定梯度下降的速度,步長是自己指定的,在GBDT算法中用到的梯度下降,步長是通過計算得到的。計算的規(guī)則是使得到的新學(xué)習(xí)器 損失函數(shù)值最小數(shù)。
(公式3)
第四步,根據(jù)梯度和步長,迭代得到模型 ,如公式4所示。
(公式4)
通過上面四個步驟,利用梯度下降算法,可以從初始模型 優(yōu)化得到第二個模型 。迭代操作以上四個步驟M-1次,就可以得到最終的GBDT模型。GBDT模型就是這樣由多個弱學(xué)習(xí)器組合而成的。
簡而言之,GBDT是一種迭代的決策樹算法,該算法由多棵決策樹持續(xù)迭代而成,這個迭代過程就是一個機(jī)器學(xué)習(xí)的過程,直至所有樹的結(jié)論和殘差等于或趨近于0為止,進(jìn)而得到一個高準(zhǔn)確度的預(yù)測模型。
基于GBDT的傳統(tǒng)數(shù)據(jù)科學(xué)家工作模式
在使用GBDT算法進(jìn)行預(yù)測分析之前,首先需要對原始的數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理,然后才可以使用處理好的數(shù)據(jù)進(jìn)行預(yù)測分析。
2.1 數(shù)據(jù)預(yù)處理
拿到數(shù)據(jù)的第一件事情就是對數(shù)據(jù)進(jìn)行預(yù)處理,將原始數(shù)據(jù)處理成可以分析的形式。數(shù)據(jù)預(yù)處理一般包括特征提取、數(shù)據(jù)清洗、標(biāo)準(zhǔn)化等操作。
①特征提取
特征提取是根據(jù)要預(yù)測的內(nèi)容,選擇可能會影響到預(yù)測結(jié)果的特征,在不同的問題中需要提取的特征是不一樣的。
比如想要預(yù)測下個月豬肉的平均價格,通過分析影響豬肉價格的特征可能有“生豬個數(shù)”、“玉米價格”、“豆粕價格”、“是否包含節(jié)假日”、“豬類疾病”等。如果原始數(shù)據(jù)中包含這些特征值,那么直接將這些特征選取出來;如果數(shù)據(jù)中沒有這些特征,但是可以計算得到,那就通過計算來獲取這些特征,提取完特征后進(jìn)行數(shù)據(jù)處理。
再比如想要預(yù)測下個月書店里某本書的下個月的銷量,通過分析影響該書店某本書銷量的因素可能有“該書店上個月該書的月銷量”、“該書去年同一時間該書的月銷量”、“該書的作者影響力”、“該書所屬出版社的影響力”等。如果原始數(shù)據(jù)中包含這些特征值,那么直接將這些特征選取出;如果數(shù)據(jù)中沒有這些特征,但是可以計算得到,那就通過計算來獲取這些特征,提取完特征后進(jìn)行數(shù)據(jù)處理。
②數(shù)據(jù)清洗
在完成了特征提取之后,并不能將數(shù)據(jù)直接用于計算,很多情況下需要對數(shù)據(jù)進(jìn)行一些基本的處理。這些基本的處理包括缺失值的處理、非數(shù)字形式的特征值處理、異常值的處理等等。
缺失值可以根據(jù)項目需要采取多種方式進(jìn)行處理。最簡單的方法是補(bǔ)充一個統(tǒng)一的值,顯然這樣的方法在大多數(shù)情況下不是很好。還可以通過相關(guān)的特征值計算得到缺失位置的數(shù)值,然后補(bǔ)充該值。對于缺失值,在有必要的情況下,還可以專門訓(xùn)練一個模型,預(yù)測缺失位置的數(shù)值。在某些情況下,也可以不處理缺失值。
如果特征值不是數(shù)值形式的,需要首先進(jìn)行轉(zhuǎn)化,將取值轉(zhuǎn)成數(shù)值形式。轉(zhuǎn)化的方式有很多種,可以根據(jù)相關(guān)的數(shù)值特征計算得到該特征的數(shù)值,也可以用枚舉的方法為不同取值分別賦值。
不可避免的在原始數(shù)據(jù)中會在一些異常值,在數(shù)據(jù)預(yù)處理中需要能夠檢測到異常值,并做相應(yīng)的處理??梢赃x擇直接過濾掉異常值,也可以對異常值進(jìn)行修正。
③標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化在很多情況下是一個很重要的步驟,其目的是將各種各樣的特征進(jìn)行歸一化處理。直接選取和計算出的特征取值范圍往往很不規(guī)則,標(biāo)準(zhǔn)化能解決這些不規(guī)則的問題。
2.2 模型調(diào)用
對數(shù)據(jù)進(jìn)行預(yù)處理之后,就需要使用GBDT模型對預(yù)處理好的數(shù)據(jù)進(jìn)行擬合?;貧w模型是用一個模型擬合已有的數(shù)據(jù),在得到這樣的模型之后,如果知道想要預(yù)測數(shù)據(jù)的特征,就可以通過特征預(yù)測出目標(biāo)值了。
如果你的編程能力足夠好,完全可以自己動手寫自己的GBDT模型。不過目前已經(jīng)有很多成熟的GBDT代碼,可以直接使用。
如果不需要在Spark平臺上運行程序,可以使用Python語言直接調(diào)用Scikit-learn中的GradientBoostingRegressor包。如果需要在Spark平臺上運行程序,則可以直接調(diào)用Apache Spark Mllib中包裝好的GBTRegressor。借助這些已經(jīng)存在的庫,可以很容易地調(diào)用GBDT回歸算法。同時根據(jù)上面介紹的GBDT算法的原理,數(shù)據(jù)科學(xué)家會基于對GBDT算法中各個參數(shù)的理解,對模型進(jìn)行調(diào)參。
經(jīng)過上述操作,可以實際得到一個GBDT回歸模型。
2.3 基于GBDT的預(yù)測示例
問題:預(yù)測書店里每本書在2017年12月份的月銷量
數(shù)據(jù):書店中2017年12月之前的所有銷售數(shù)據(jù),書店里每本書的基本信息
圖1 數(shù)據(jù)的簡單處理之后的形式
對原始的數(shù)據(jù)進(jìn)行簡單的預(yù)處理之后,得到圖1中的數(shù)據(jù)形式。第一行是每一列數(shù)據(jù)的含義,之后的每一行是書的月銷量以及影響月銷量的特征。其中第二列是書的月銷量,第三列及之后的列是影響書的月銷量的相關(guān)特征(其中第三列是書的歷史總銷量,第四列是書所屬作者所著所有書的歷史總銷量,第五列是書所屬出版出版的所有書的歷史總銷量,書的標(biāo)價,……)。從中可以看出,不同特征的取值范圍差異很大,因此對數(shù)據(jù)進(jìn)行歸一化操作是有必要的。
在訓(xùn)練模型時,需要將數(shù)據(jù)分為訓(xùn)練集和測試集兩個部分。在這里,將2017年11月之前的數(shù)據(jù)當(dāng)做訓(xùn)練集,將2017年11月的數(shù)據(jù)當(dāng)做測試集,通過這種方式對模型進(jìn)行調(diào)參和訓(xùn)練,得到更優(yōu)化的模型,使得模型的預(yù)測能力更好。
圖2 2017年11的實際月銷量和預(yù)測月銷量對比圖
圖2是2017年11月的月銷量預(yù)測結(jié)果和實際結(jié)果的對比。其中橫坐標(biāo)是書本的編號,縱坐標(biāo)是書的月銷量。從圖中可以看出,預(yù)測的月銷量和實際月銷量是很相近。
基于GBDT的業(yè)務(wù)驅(qū)動創(chuàng)新應(yīng)用模式
3.1 平民化一鍵完成GBDT分析
在實際的企業(yè)應(yīng)用中,預(yù)測分析的場景有很多,除了案例中介紹的可以預(yù)測圖書的月銷量之外,還可以預(yù)測股票的價格、預(yù)測某種蔬菜的價格、預(yù)測景區(qū)人流量、預(yù)測高速路某斷路的車流量、預(yù)測餐廳的就餐人數(shù)、預(yù)測服裝店的月銷售量等等,基本的覆蓋了所有的預(yù)測分析案例。
盡管預(yù)測分析的應(yīng)用場景很多,但是將GBDT算法應(yīng)用到實際場景中卻很難。很多企業(yè)并沒有雇傭數(shù)據(jù)科學(xué)家,普遍缺乏使用GBDT算法做預(yù)測分析能力,但是卻有預(yù)測分析方面的普遍需求。另外,這個應(yīng)用過程還需要選擇合適的特征數(shù)據(jù),需要對數(shù)據(jù)進(jìn)行預(yù)處理,如果數(shù)據(jù)量過多,還需要考慮Spark部署和Spark編程等等。
綜合上述,企業(yè)預(yù)測需求和能力短板之間的差距,用友分析云基于GBDT算法進(jìn)行預(yù)測分析應(yīng)用方面有了創(chuàng)新應(yīng)用模式,力求讓所有企業(yè)能夠普及使用這個強(qiáng)大的機(jī)器學(xué)習(xí)預(yù)測工具。
使用用友分析云,不需要做數(shù)據(jù)預(yù)處理工作,也不需要動手寫代碼,就可以使用GBDT算法進(jìn)行預(yù)測分析,所有的這些工作,用友分析云會在后臺的Spark平臺上進(jìn)行分布式計算,幫助企業(yè)方便、快捷、高效地將GBDT算法應(yīng)用到需要的大樣本數(shù)據(jù)分析場景中。
在用友分析云中,可以將數(shù)據(jù)導(dǎo)入用友分析云的數(shù)據(jù)集中,用友分析云會在后臺做一些數(shù)據(jù)預(yù)處理的操作。接下來只需要將影響月銷量的特征拖拽進(jìn)維度里,將需要預(yù)測的列名拖拽進(jìn)指標(biāo)里,分析云就可以幫助企業(yè)使用GBDT回歸算法對指標(biāo)列的內(nèi)容進(jìn)行預(yù)測。圖3是在分析云中預(yù)測生成的,對某書店的書“海底兩萬里”的月銷量的高準(zhǔn)確度預(yù)測結(jié)果。用友分析云可以幫助企業(yè)輕松地做預(yù)測分析。
圖3 分析云中預(yù)測書店中“海底兩萬里”的月銷量
3.2 基于算法競爭的模型優(yōu)化
用友分析云中的預(yù)測分析,除了使用GBDT算法外,還使用了時間序列算法。GBDT算法做預(yù)測分析時考慮到一些影響目標(biāo)值的因素,而時間序列主要考慮到數(shù)據(jù)在時序上的一些規(guī)律,忽略了其他因素對目標(biāo)值的影響。這兩種算法在實際應(yīng)用中剛好互補(bǔ)。如果原始數(shù)據(jù)中包含足夠的數(shù)據(jù)特征,通常情況下使用GBDT回歸做預(yù)測分析效果會比時間序列更好。如果原始數(shù)據(jù)缺乏特征信息,使用時間序列進(jìn)行預(yù)測反而很好。
在用友分析云中,同時使用了時間序列和GBDT回歸算法做預(yù)測分析。用友分析云會自動將數(shù)據(jù)分為訓(xùn)練集和測試集兩部分,分別使用GBDT回歸算法和時間序列算法在訓(xùn)練集上訓(xùn)練模型,并使用測試集對模型進(jìn)行調(diào)優(yōu)。在具體使用時,用戶不用關(guān)心具體選用底層實現(xiàn),只需要在界面上進(jìn)行簡單的拖拽,后臺就會自動地幫用戶選擇合適的模型進(jìn)行預(yù)測分析,并將結(jié)果用圖形界面顯示出來。
總結(jié)
在數(shù)據(jù)量日益遞增的今天,對數(shù)據(jù)進(jìn)行預(yù)測分析是很有必要的。本文介紹了GBDT算法的基本原理,講述了如何在項目中使用GBDT算法進(jìn)行預(yù)測分析,描述了在用友分析云中如何使用GBDT算法做預(yù)測分析,用友分析云將大數(shù)據(jù)預(yù)測分析簡單化,為有預(yù)測分析需求的企業(yè)降低了使用門檻,讓沒有數(shù)據(jù)科學(xué)家的企業(yè)可以方便地使用大數(shù)據(jù)算法進(jìn)行預(yù)測分析,推進(jìn)機(jī)器學(xué)習(xí)在企業(yè)中的普及應(yīng)用。
引用
[1] Breiman, L. “Arcing The Edge”. 1997
[2] Friedman, J. H. “Greedy Function Approximation: A Gradient Boosting Machine”. Annals of Stattistics, 2001 29(5):1189-1232
[3] Friedman, J. H. “Stochastic Gradient Boosting”. 1999
[4] Tianqi Chen and Carlos Guestrin. “XGBoost: A Scalable Tree Boosting System”. In 22nd SIGKDD Conference on Knowledge Discovery and Data Mining, 2016
本文作者系 用友分析云專家 李謹(jǐn)秀 胡鋼
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長
- GitLab將告別中國區(qū)用戶:是時候選擇新的“極狐”或保護(hù)賬號了
- 蘋果明年推至少22款新品,阿里非洲首站啟動,科技新品盛宴拉開帷幕
- SUSE預(yù)測:未來私有AI平臺崛起,讓我們共同見證AI的未來
- AI伴侶“小奇”:奇富科技重塑金融服務(wù)體驗的探索之作
- 揭秘軟銀孫正義神秘芯片計劃:打造超越NVIDIA的未來科技新星
- 大模型創(chuàng)企星辰資本獲數(shù)億融資,騰訊啟明等巨頭入局,人工智能新篇章開啟
- 大模型獨角獸階躍星辰融資新動態(tài):數(shù)億美金B(yǎng)輪,揭秘星辰未來之路
- 哪吒汽車創(chuàng)始人資金遭凍結(jié),1986萬元股權(quán)風(fēng)波引關(guān)注
- 本田與日產(chǎn)醞釀合并:明年6月敲定協(xié)議,新公司社長待本田推薦
- 金融大模型新突破:百川智能Baichuan4-Finance引領(lǐng)行業(yè),準(zhǔn)確率領(lǐng)先GPT-4近20%,變革金融業(yè)未來
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。