0
雷鋒網(wǎng)按:上個(gè)月(2月23日),F(xiàn)acebook開源了一款基于 Python 和 R 語言的數(shù)據(jù)預(yù)測工具——“Prophet”(詳細(xì)報(bào)道請看雷鋒網(wǎng)此前文章 《支持Python!Facebook開源預(yù)測工具Prophet》)。本文則詳細(xì)介紹了Prophet的貝葉斯推理實(shí)踐,具體展示了研究人員把兩個(gè)數(shù)據(jù)集用在Prophet上的運(yùn)行效果。
如今,市面上已經(jīng)許多Python 和 R語言可適用的時(shí)間序列預(yù)測模型了,那么Facehook的Prophet在這一領(lǐng)域又有什么優(yōu)勢呢?
Prophet在進(jìn)行預(yù)測,其后端系統(tǒng)是一個(gè)概率程序語言Stan,這代表Prophet能發(fā)揮出很多貝葉斯算法的優(yōu)勢,比如說:
使模型具有簡單、易解釋的周期性結(jié)構(gòu);
預(yù)測結(jié)果包括才完全后驗(yàn)分布中導(dǎo)出的置信區(qū)間,即Prophet提供的是一個(gè)數(shù)據(jù)驅(qū)動(dòng)的風(fēng)險(xiǎn)估計(jì)。
在下面研究中,研究者讓Prophet對兩組數(shù)據(jù)進(jìn)行預(yù)測,在后端使用概率程序語言,讀者可以借此看到使用Stan的一些工作細(xì)節(jié)。
Prophet使用了一種通用時(shí)間序列模型,這種模型可適用于Facebook上的數(shù)據(jù),并且具有分段走向(piecewise trends)、多周期及彈性假期(floating holiday)三種特性。
Prophet的把時(shí)間序列預(yù)測問題轉(zhuǎn)變成了一個(gè)曲線擬合練習(xí)(exercise)。在這個(gè)曲線中,因變量是增長、周期和holiday的總體表現(xiàn)。
增長(growth)
這一部分采用一個(gè)隨時(shí)間變化的邏輯增長模型,屬于非線性增長,所以,要用簡單的分段常數(shù)函數(shù)來模擬線性增長。
用比率調(diào)整向量模擬分段點(diǎn),每個(gè)分段點(diǎn)都對應(yīng)一個(gè)具體的時(shí)間點(diǎn)。用拉普拉斯分布(Laplace distribution)模擬比率調(diào)整變量,位置參數(shù)(location parameter)設(shè)定為0。
Prophet 模型周期(periodic seasonality)
采用標(biāo)準(zhǔn)傅里葉級數(shù)。年、周的周期性(seasonality)近似值分別為20和6,周期性成分(seasonal component)在正常情況下是平滑狀態(tài)。
假期(Holiday)
用一個(gè)指標(biāo)函數(shù)來模擬。
使用者可以調(diào)節(jié)擴(kuò)散參數(shù)(spread parameter),以模擬未來會(huì)有多少歷史季節(jié)性變化(historical seasonal variation)。
用戶在用Prophet時(shí),不需要了解Stan代碼,僅僅使用大家熟知的Python 或 R編程語言即可。
下面,研究者讓它在一個(gè)周期性極強(qiáng)的數(shù)據(jù)集上運(yùn)行(運(yùn)行過程如下圖所示)。
該數(shù)據(jù)集為摩納哥夏威夷火山上測量的大氣二氧化碳含量。
設(shè)置好程序后,只用了幾秒鐘,模型就給出了下圖所示的預(yù)測結(jié)果:
Prophet很容易就探測到該數(shù)據(jù)以年為周期,并且長期增長的趨勢。在這里要提一下,Prophet自帶數(shù)據(jù)驅(qū)動(dòng)的置信區(qū)間,這是概率編程系統(tǒng)的一個(gè)重要優(yōu)點(diǎn)。
另外,Prophet也為時(shí)間序列的組成部分(例如一周中某天、或一年中的某天)提供了簡單、易解釋的預(yù)測結(jié)果,如下圖所示:
這里要注意的是,以周為單位的預(yù)測數(shù)據(jù)要比其他兩個(gè)的數(shù)據(jù)小得多,而且噪點(diǎn)也更大。知道這一點(diǎn)非常有意義:這表明,在全球范圍內(nèi),大氣中化學(xué)物質(zhì)的含量并不是以周為周期變化的;另外,年數(shù)據(jù)也顯示出北半球植被對二氧化碳含量的影響:夏天過后含量降低,冬天過后含量升高。
下面,研究人員讓Prophet對一組更具挑戰(zhàn)性的數(shù)據(jù)集(美國年出生人數(shù))進(jìn)行預(yù)測。
該數(shù)據(jù)集用高斯過程(雷鋒網(wǎng)注:也叫正態(tài)隨機(jī)過程)進(jìn)行分析,它同時(shí)具有周期性和“假期效果”。
Prophet能夠通過調(diào)整轉(zhuǎn)折點(diǎn)平滑參數(shù)自動(dòng)探測到轉(zhuǎn)折點(diǎn)。研究者把轉(zhuǎn)折點(diǎn)平滑參數(shù)設(shè)為0.1,而不是默認(rèn)的0.05。這可使預(yù)測結(jié)果更靈活,更少平滑,但也更容易顯示噪點(diǎn)。
Prophet用了大概1分鐘來理解這些數(shù)據(jù)集下圖中的黑點(diǎn)),然后給出了預(yù)測結(jié)果(下圖中的藍(lán)線)。
Prophet預(yù)測出,出生率會(huì)在每年的八月到十月有所提高。
從下圖中能看出,新年期間出生人數(shù)較少,而情人節(jié)期間則偏高。Prophet通過定義指示變量系列(indicator variable series),把這種一年某些天數(shù)據(jù)猛然增高的現(xiàn)象自動(dòng)看做“holidays”,這個(gè)指示變量系列能說明(或預(yù)測)該點(diǎn)的數(shù)據(jù)是不是(或是否將是)一個(gè)假期。
以上概率程序報(bào)告中展示了Prophet在貝葉斯算法中的實(shí)踐效果,結(jié)果發(fā)現(xiàn):
開發(fā)者和數(shù)據(jù)員們能通過概率編程語言(例如Stan和pymc3),更容易地量化所有結(jié)果的概率值,而不僅僅是選出最有可能性的那一個(gè);
在做預(yù)測時(shí),它能為通用時(shí)間序列模擬合適的函數(shù)。但在模擬函數(shù)時(shí),為了達(dá)到Prophet用戶想要的效果,可能會(huì)犧牲一些靈活性;
Prophet使研究人員能更簡單、快捷地運(yùn)行Stan,省掉了使用Python和R的復(fù)雜;
Prophet的魯棒性良好,作為一個(gè)概率程序產(chǎn)品,用戶很容易就能上手。
via:fastforwardlabs
相關(guān)文章,請參看雷鋒網(wǎng)此前報(bào)道:
Cloudera 發(fā)布自助式數(shù)據(jù)科學(xué)開發(fā)環(huán)境 原生支持 R、Python、Scala 和各大開源框架
谷歌開源 Python Fire;一張圖讀懂 Python、R 的大數(shù)據(jù)應(yīng)用等 | AI 開發(fā)者頭條
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。