未卜先知、研判吉兇一直是人類自古以來孜孜以求的一種向往。時(shí)至今日,隨著消費(fèi)升級(jí)帶來的市場(chǎng)競(jìng)爭(zhēng)和產(chǎn)業(yè)模式的轉(zhuǎn)型,企業(yè)也越來越希望在預(yù)測(cè)能力上能有更好的提升。做預(yù)測(cè)分析時(shí),通常會(huì)使用時(shí)間序列算法或回歸模型。時(shí)間序列算法在做預(yù)測(cè)分析時(shí),只考慮了數(shù)據(jù)在時(shí)序上的規(guī)律,而忽略了相關(guān)的影響因素,適用于比較簡(jiǎn)單的預(yù)測(cè)分析場(chǎng)景。在情況比較復(fù)雜的情況下,需要考慮到相關(guān)因素的影響時(shí),則需要考慮用回歸方法做預(yù)測(cè)分析。
縱覽近幾年在預(yù)測(cè)分析領(lǐng)域的學(xué)術(shù)研究成果,GBDT(Gradient Boosting Decision Tree,梯度提升決策樹)算法作為機(jī)器學(xué)習(xí)算法的一種,躍然成為眾多研究機(jī)構(gòu)和學(xué)者積極推薦的預(yù)測(cè)分析算法,并且結(jié)合Hadoop平臺(tái)取得了很好的性能表現(xiàn)和預(yù)測(cè)準(zhǔn)確度。主要的應(yīng)用方向有如下方面:
①故障預(yù)測(cè)分析
②欺詐預(yù)測(cè)分析
③搜索引擎用戶體驗(yàn)提升
④視頻流媒體服務(wù)體驗(yàn)提升
⑤個(gè)人征信
在商業(yè)應(yīng)用中,需要用到機(jī)器學(xué)習(xí)技術(shù)做預(yù)測(cè)分析的場(chǎng)景還有很多。面對(duì)大量的數(shù)據(jù),如何更好利用GBDT進(jìn)行分析預(yù)測(cè)是個(gè)極大的應(yīng)用挑戰(zhàn),本文將會(huì)圍繞基于GBDT算法探討如何實(shí)現(xiàn)預(yù)測(cè)分析的創(chuàng)新模式,幫助企業(yè)實(shí)現(xiàn)大數(shù)據(jù)預(yù)測(cè)分析的應(yīng)用普及。
GBDT算法簡(jiǎn)介
GBDT的算法最初是由Leo Breiman[1] 在1997年提出的,1999年Jerome H. Friedman將GBDT算法用于回歸分析[2][3]。隨后幾年,陸續(xù)有學(xué)者對(duì)GBDT回歸算法進(jìn)行了改進(jìn)和優(yōu)化,GBDT在回歸問題中取得了很好的效果。陳天奇博士還根據(jù)GBDT多年的發(fā)展,對(duì)GBDT進(jìn)行修改和優(yōu)化,得到了XGboost算法[4]。在Apache Spark的Mllib庫中也整合了GBDT回歸算法,可以方便地在Spark平臺(tái)上使用GBDT做回歸預(yù)測(cè)分析。
GBDT的原理是利用梯度下降學(xué)習(xí)出多個(gè)弱學(xué)習(xí)器,組合產(chǎn)生一個(gè)強(qiáng)學(xué)習(xí)器。假設(shè)初始得到的學(xué)習(xí)器是公式1,其中 指的是模型 的損失函數(shù), 是訓(xùn)練集,特征 對(duì)應(yīng)的結(jié)果是 。初始化模型可以使用決策樹算法,也可以使用最小二乘法。初始化模型是根據(jù)當(dāng)前數(shù)據(jù),使得損失函數(shù)最小的模型。
(公式1)
設(shè)定迭代次數(shù)是M,那么GBDT算法就是要根據(jù)公式1,使用梯度下降算法通過M次迭代后得到的優(yōu)化模型。下面簡(jiǎn)單分析下,第一次迭代的得到 的過程。
第一步,計(jì)算梯度:
分別對(duì) 計(jì)算梯度,梯度如公式2所示。
(公式2)
第二步,訓(xùn)練一個(gè)基學(xué)習(xí)器,根據(jù)訓(xùn)練集特征可以計(jì)算得到梯度:
使用特征和梯度 作為訓(xùn)練集,訓(xùn)練學(xué)習(xí)器,得到 。使用的訓(xùn)練算法可以是決策樹算法,也可以是最小二乘法。
第三步,尋找合適的步長(zhǎng):
在梯度下降算法中,需要用步長(zhǎng)確定梯度下降的速度,步長(zhǎng)是自己指定的,在GBDT算法中用到的梯度下降,步長(zhǎng)是通過計(jì)算得到的。計(jì)算的規(guī)則是使得到的新學(xué)習(xí)器 損失函數(shù)值最小數(shù)。
(公式3)
第四步,根據(jù)梯度和步長(zhǎng),迭代得到模型 ,如公式4所示。
(公式4)
通過上面四個(gè)步驟,利用梯度下降算法,可以從初始模型 優(yōu)化得到第二個(gè)模型 。迭代操作以上四個(gè)步驟M-1次,就可以得到最終的GBDT模型。GBDT模型就是這樣由多個(gè)弱學(xué)習(xí)器組合而成的。
簡(jiǎn)而言之,GBDT是一種迭代的決策樹算法,該算法由多棵決策樹持續(xù)迭代而成,這個(gè)迭代過程就是一個(gè)機(jī)器學(xué)習(xí)的過程,直至所有樹的結(jié)論和殘差等于或趨近于0為止,進(jìn)而得到一個(gè)高準(zhǔn)確度的預(yù)測(cè)模型。
基于GBDT的傳統(tǒng)數(shù)據(jù)科學(xué)家工作模式
在使用GBDT算法進(jìn)行預(yù)測(cè)分析之前,首先需要對(duì)原始的數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理,然后才可以使用處理好的數(shù)據(jù)進(jìn)行預(yù)測(cè)分析。
2.1 數(shù)據(jù)預(yù)處理
拿到數(shù)據(jù)的第一件事情就是對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,將原始數(shù)據(jù)處理成可以分析的形式。數(shù)據(jù)預(yù)處理一般包括特征提取、數(shù)據(jù)清洗、標(biāo)準(zhǔn)化等操作。
①特征提取
特征提取是根據(jù)要預(yù)測(cè)的內(nèi)容,選擇可能會(huì)影響到預(yù)測(cè)結(jié)果的特征,在不同的問題中需要提取的特征是不一樣的。
比如想要預(yù)測(cè)下個(gè)月豬肉的平均價(jià)格,通過分析影響豬肉價(jià)格的特征可能有“生豬個(gè)數(shù)”、“玉米價(jià)格”、“豆粕價(jià)格”、“是否包含節(jié)假日”、“豬類疾病”等。如果原始數(shù)據(jù)中包含這些特征值,那么直接將這些特征選取出來;如果數(shù)據(jù)中沒有這些特征,但是可以計(jì)算得到,那就通過計(jì)算來獲取這些特征,提取完特征后進(jìn)行數(shù)據(jù)處理。
再比如想要預(yù)測(cè)下個(gè)月書店里某本書的下個(gè)月的銷量,通過分析影響該書店某本書銷量的因素可能有“該書店上個(gè)月該書的月銷量”、“該書去年同一時(shí)間該書的月銷量”、“該書的作者影響力”、“該書所屬出版社的影響力”等。如果原始數(shù)據(jù)中包含這些特征值,那么直接將這些特征選取出;如果數(shù)據(jù)中沒有這些特征,但是可以計(jì)算得到,那就通過計(jì)算來獲取這些特征,提取完特征后進(jìn)行數(shù)據(jù)處理。
②數(shù)據(jù)清洗
在完成了特征提取之后,并不能將數(shù)據(jù)直接用于計(jì)算,很多情況下需要對(duì)數(shù)據(jù)進(jìn)行一些基本的處理。這些基本的處理包括缺失值的處理、非數(shù)字形式的特征值處理、異常值的處理等等。
缺失值可以根據(jù)項(xiàng)目需要采取多種方式進(jìn)行處理。最簡(jiǎn)單的方法是補(bǔ)充一個(gè)統(tǒng)一的值,顯然這樣的方法在大多數(shù)情況下不是很好。還可以通過相關(guān)的特征值計(jì)算得到缺失位置的數(shù)值,然后補(bǔ)充該值。對(duì)于缺失值,在有必要的情況下,還可以專門訓(xùn)練一個(gè)模型,預(yù)測(cè)缺失位置的數(shù)值。在某些情況下,也可以不處理缺失值。
如果特征值不是數(shù)值形式的,需要首先進(jìn)行轉(zhuǎn)化,將取值轉(zhuǎn)成數(shù)值形式。轉(zhuǎn)化的方式有很多種,可以根據(jù)相關(guān)的數(shù)值特征計(jì)算得到該特征的數(shù)值,也可以用枚舉的方法為不同取值分別賦值。
不可避免的在原始數(shù)據(jù)中會(huì)在一些異常值,在數(shù)據(jù)預(yù)處理中需要能夠檢測(cè)到異常值,并做相應(yīng)的處理??梢赃x擇直接過濾掉異常值,也可以對(duì)異常值進(jìn)行修正。
③標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化在很多情況下是一個(gè)很重要的步驟,其目的是將各種各樣的特征進(jìn)行歸一化處理。直接選取和計(jì)算出的特征取值范圍往往很不規(guī)則,標(biāo)準(zhǔn)化能解決這些不規(guī)則的問題。
2.2 模型調(diào)用
對(duì)數(shù)據(jù)進(jìn)行預(yù)處理之后,就需要使用GBDT模型對(duì)預(yù)處理好的數(shù)據(jù)進(jìn)行擬合?;貧w模型是用一個(gè)模型擬合已有的數(shù)據(jù),在得到這樣的模型之后,如果知道想要預(yù)測(cè)數(shù)據(jù)的特征,就可以通過特征預(yù)測(cè)出目標(biāo)值了。
如果你的編程能力足夠好,完全可以自己動(dòng)手寫自己的GBDT模型。不過目前已經(jīng)有很多成熟的GBDT代碼,可以直接使用。
如果不需要在Spark平臺(tái)上運(yùn)行程序,可以使用Python語言直接調(diào)用Scikit-learn中的GradientBoostingRegressor包。如果需要在Spark平臺(tái)上運(yùn)行程序,則可以直接調(diào)用Apache Spark Mllib中包裝好的GBTRegressor。借助這些已經(jīng)存在的庫,可以很容易地調(diào)用GBDT回歸算法。同時(shí)根據(jù)上面介紹的GBDT算法的原理,數(shù)據(jù)科學(xué)家會(huì)基于對(duì)GBDT算法中各個(gè)參數(shù)的理解,對(duì)模型進(jìn)行調(diào)參。
經(jīng)過上述操作,可以實(shí)際得到一個(gè)GBDT回歸模型。
2.3 基于GBDT的預(yù)測(cè)示例
問題:預(yù)測(cè)書店里每本書在2017年12月份的月銷量
數(shù)據(jù):書店中2017年12月之前的所有銷售數(shù)據(jù),書店里每本書的基本信息
圖1 數(shù)據(jù)的簡(jiǎn)單處理之后的形式
對(duì)原始的數(shù)據(jù)進(jìn)行簡(jiǎn)單的預(yù)處理之后,得到圖1中的數(shù)據(jù)形式。第一行是每一列數(shù)據(jù)的含義,之后的每一行是書的月銷量以及影響月銷量的特征。其中第二列是書的月銷量,第三列及之后的列是影響書的月銷量的相關(guān)特征(其中第三列是書的歷史總銷量,第四列是書所屬作者所著所有書的歷史總銷量,第五列是書所屬出版出版的所有書的歷史總銷量,書的標(biāo)價(jià),……)。從中可以看出,不同特征的取值范圍差異很大,因此對(duì)數(shù)據(jù)進(jìn)行歸一化操作是有必要的。
在訓(xùn)練模型時(shí),需要將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集兩個(gè)部分。在這里,將2017年11月之前的數(shù)據(jù)當(dāng)做訓(xùn)練集,將2017年11月的數(shù)據(jù)當(dāng)做測(cè)試集,通過這種方式對(duì)模型進(jìn)行調(diào)參和訓(xùn)練,得到更優(yōu)化的模型,使得模型的預(yù)測(cè)能力更好。
圖2 2017年11的實(shí)際月銷量和預(yù)測(cè)月銷量對(duì)比圖
圖2是2017年11月的月銷量預(yù)測(cè)結(jié)果和實(shí)際結(jié)果的對(duì)比。其中橫坐標(biāo)是書本的編號(hào),縱坐標(biāo)是書的月銷量。從圖中可以看出,預(yù)測(cè)的月銷量和實(shí)際月銷量是很相近。
基于GBDT的業(yè)務(wù)驅(qū)動(dòng)創(chuàng)新應(yīng)用模式
3.1 平民化一鍵完成GBDT分析
在實(shí)際的企業(yè)應(yīng)用中,預(yù)測(cè)分析的場(chǎng)景有很多,除了案例中介紹的可以預(yù)測(cè)圖書的月銷量之外,還可以預(yù)測(cè)股票的價(jià)格、預(yù)測(cè)某種蔬菜的價(jià)格、預(yù)測(cè)景區(qū)人流量、預(yù)測(cè)高速路某斷路的車流量、預(yù)測(cè)餐廳的就餐人數(shù)、預(yù)測(cè)服裝店的月銷售量等等,基本的覆蓋了所有的預(yù)測(cè)分析案例。
盡管預(yù)測(cè)分析的應(yīng)用場(chǎng)景很多,但是將GBDT算法應(yīng)用到實(shí)際場(chǎng)景中卻很難。很多企業(yè)并沒有雇傭數(shù)據(jù)科學(xué)家,普遍缺乏使用GBDT算法做預(yù)測(cè)分析能力,但是卻有預(yù)測(cè)分析方面的普遍需求。另外,這個(gè)應(yīng)用過程還需要選擇合適的特征數(shù)據(jù),需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,如果數(shù)據(jù)量過多,還需要考慮Spark部署和Spark編程等等。
綜合上述,企業(yè)預(yù)測(cè)需求和能力短板之間的差距,用友分析云基于GBDT算法進(jìn)行預(yù)測(cè)分析應(yīng)用方面有了創(chuàng)新應(yīng)用模式,力求讓所有企業(yè)能夠普及使用這個(gè)強(qiáng)大的機(jī)器學(xué)習(xí)預(yù)測(cè)工具。
使用用友分析云,不需要做數(shù)據(jù)預(yù)處理工作,也不需要?jiǎng)邮謱懘a,就可以使用GBDT算法進(jìn)行預(yù)測(cè)分析,所有的這些工作,用友分析云會(huì)在后臺(tái)的Spark平臺(tái)上進(jìn)行分布式計(jì)算,幫助企業(yè)方便、快捷、高效地將GBDT算法應(yīng)用到需要的大樣本數(shù)據(jù)分析場(chǎng)景中。
在用友分析云中,可以將數(shù)據(jù)導(dǎo)入用友分析云的數(shù)據(jù)集中,用友分析云會(huì)在后臺(tái)做一些數(shù)據(jù)預(yù)處理的操作。接下來只需要將影響月銷量的特征拖拽進(jìn)維度里,將需要預(yù)測(cè)的列名拖拽進(jìn)指標(biāo)里,分析云就可以幫助企業(yè)使用GBDT回歸算法對(duì)指標(biāo)列的內(nèi)容進(jìn)行預(yù)測(cè)。圖3是在分析云中預(yù)測(cè)生成的,對(duì)某書店的書“海底兩萬里”的月銷量的高準(zhǔn)確度預(yù)測(cè)結(jié)果。用友分析云可以幫助企業(yè)輕松地做預(yù)測(cè)分析。
圖3 分析云中預(yù)測(cè)書店中“海底兩萬里”的月銷量
3.2 基于算法競(jìng)爭(zhēng)的模型優(yōu)化
用友分析云中的預(yù)測(cè)分析,除了使用GBDT算法外,還使用了時(shí)間序列算法。GBDT算法做預(yù)測(cè)分析時(shí)考慮到一些影響目標(biāo)值的因素,而時(shí)間序列主要考慮到數(shù)據(jù)在時(shí)序上的一些規(guī)律,忽略了其他因素對(duì)目標(biāo)值的影響。這兩種算法在實(shí)際應(yīng)用中剛好互補(bǔ)。如果原始數(shù)據(jù)中包含足夠的數(shù)據(jù)特征,通常情況下使用GBDT回歸做預(yù)測(cè)分析效果會(huì)比時(shí)間序列更好。如果原始數(shù)據(jù)缺乏特征信息,使用時(shí)間序列進(jìn)行預(yù)測(cè)反而很好。
在用友分析云中,同時(shí)使用了時(shí)間序列和GBDT回歸算法做預(yù)測(cè)分析。用友分析云會(huì)自動(dòng)將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集兩部分,分別使用GBDT回歸算法和時(shí)間序列算法在訓(xùn)練集上訓(xùn)練模型,并使用測(cè)試集對(duì)模型進(jìn)行調(diào)優(yōu)。在具體使用時(shí),用戶不用關(guān)心具體選用底層實(shí)現(xiàn),只需要在界面上進(jìn)行簡(jiǎn)單的拖拽,后臺(tái)就會(huì)自動(dòng)地幫用戶選擇合適的模型進(jìn)行預(yù)測(cè)分析,并將結(jié)果用圖形界面顯示出來。
總結(jié)
在數(shù)據(jù)量日益遞增的今天,對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)分析是很有必要的。本文介紹了GBDT算法的基本原理,講述了如何在項(xiàng)目中使用GBDT算法進(jìn)行預(yù)測(cè)分析,描述了在用友分析云中如何使用GBDT算法做預(yù)測(cè)分析,用友分析云將大數(shù)據(jù)預(yù)測(cè)分析簡(jiǎn)單化,為有預(yù)測(cè)分析需求的企業(yè)降低了使用門檻,讓沒有數(shù)據(jù)科學(xué)家的企業(yè)可以方便地使用大數(shù)據(jù)算法進(jìn)行預(yù)測(cè)分析,推進(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ù)助力“企宣”向上生長(zhǎng)
- 新能源車技術(shù)升級(jí)搶先看,ChatGPT崩了引熱議:未來科技如何破局?
- 自動(dòng)駕駛行業(yè)大洗牌即將結(jié)束,小馬智行引領(lǐng)千臺(tái)車隊(duì)新篇章
- 微軟反壟斷風(fēng)暴:Office捆綁銷售引質(zhì)疑,云服務(wù)策略遭調(diào)查,巨頭陷困境
- 顯卡漲價(jià)風(fēng)暴來襲!NVIDIA/AMD緊急應(yīng)對(duì),全力加速生產(chǎn)運(yùn)回本土
- 微軟新目標(biāo):用1000億美元打造實(shí)用通用AI,未來可期但需謹(jǐn)慎
- 亞馬遜云科技陳曉建預(yù)測(cè):未來三年內(nèi),生成式AI將引發(fā)云市場(chǎng)新革命
- 林肯中國辟謠:財(cái)務(wù)調(diào)整非合并,業(yè)務(wù)不變穩(wěn)如泰山
- 字節(jié)跳動(dòng)研發(fā)大手筆:2024年投入接近BAT之和,能否引領(lǐng)中國OpenAI新潮流?
- 跨境匯款平臺(tái)新舉措:螞蟻集團(tuán)開發(fā)者服務(wù)限每日10萬美元,助力全球交易更便捷
- 我國充電樁建設(shè)提速,50%增長(zhǎng)背后的高速服務(wù)區(qū)充電新篇章
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。