轉(zhuǎn)帖|使用教程|編輯:龔雪|2017-05-17 15:01:21.000|閱讀 2127 次
概述:本使用說明教程主要翻譯整理自 Prophet 的官方說明文檔。教程中使用的數(shù)據(jù)集可在 Prophet 的 github 主頁 中的 examples 文件夾 內(nèi)下載得到。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
本使用說明教程主要翻譯整理自
教程中使用的數(shù)據(jù)集可在 中的 內(nèi)下載得到。
Prophet 是 Facebook 推出的開源大規(guī)模預(yù)測(cè)工具,可以在 R 和 Python 中使用以預(yù)測(cè)時(shí)間序列數(shù)據(jù)。
下面將簡(jiǎn)單介紹 Prophet 在 R 中的使用。
下面實(shí)例中使用的是 每日訪問量的時(shí)間序列數(shù)據(jù)(2007/12/10 - 2016/01/20)。我們使用 R 中的 包獲取該數(shù)據(jù)集。這個(gè)數(shù)據(jù)集具有多季節(jié)周期性、不斷變化的增長(zhǎng)率和可以擬合特定日期(例如佩頓 · 曼寧的決賽和超級(jí)碗)的情況等 Prophet 適用的性質(zhì),因此可以作為一個(gè)不錯(cuò)的例子。(注:佩頓 · 曼寧為前美式橄欖球四分衛(wèi))
在 R 中,Prophet 提供了一個(gè) prophet
函數(shù)去擬合模型并且返回一個(gè)模型對(duì)象,可以對(duì)這個(gè)模型對(duì)象執(zhí)行“預(yù)測(cè)”( predict
)和“繪圖”( plot
)操作。
使用 prophet_plot_components
函數(shù)去展示預(yù)測(cè)中的趨勢(shì)、周效應(yīng)和年度效應(yīng)。
注: Windows 系統(tǒng)語言設(shè)置為中文的話,會(huì)導(dǎo)致 R 輸出成分分析圖時(shí),周效應(yīng)無法正常顯示,可在 R 中使用 Sys.setlocale("LC_ALL","English")
代碼將環(huán)境改為英文。
默認(rèn)情況下, Prophet 使用線性模型進(jìn)行預(yù)測(cè)。當(dāng)預(yù)測(cè)增長(zhǎng)情況時(shí),通常會(huì)存在可到達(dá)的最大極限值,例如:總市場(chǎng)規(guī)模、總?cè)丝跀?shù)等等。這被稱做承載能力,那么預(yù)測(cè)時(shí)就應(yīng)當(dāng)在接近該值時(shí)趨于飽和。
Prophet 可使用 趨勢(shì)模型進(jìn)行預(yù)測(cè),同時(shí)指定承載能力。下面使用 訪問量(取對(duì)數(shù))的實(shí)例來進(jìn)行說明。
默認(rèn)情況下, Prophet 將自動(dòng)監(jiān)測(cè)到突變點(diǎn),并對(duì)趨勢(shì)做適當(dāng)?shù)卣{(diào)整。
下面將會(huì)介紹幾種使用的方法可以對(duì)趨勢(shì)的調(diào)整過程做更好地控制。
如果趨勢(shì)的變化被過度擬合(即過于靈活)或者擬合不足(即靈活性不夠),可以利用輸入?yún)?shù) changepoint.prior.scale
來調(diào)整稀疏先驗(yàn)的程度。默認(rèn)下,這個(gè)參數(shù)被指定為 0.05 。
增加這個(gè)值,會(huì)導(dǎo)致趨勢(shì)擬合得更加靈活。如下代碼和圖所示:
減少這個(gè)值,會(huì)導(dǎo)致趨勢(shì)擬合得靈活性降低。如下代碼和圖所示:
如果你希望手動(dòng)指定潛在突變點(diǎn)的位置而不是利用自動(dòng)的突變點(diǎn)監(jiān)測(cè),可以使用 changepoints
參數(shù)。
代碼和圖如下所示:
如果需要專門對(duì)節(jié)假日進(jìn)行建模,你就必須得為此創(chuàng)建一個(gè)新的數(shù)據(jù)框,其中包含兩列(節(jié)假日 holiday
和日期戳 ds
),每行分別記錄了每個(gè)出現(xiàn)的節(jié)假日。
你可以在這個(gè)數(shù)據(jù)框基礎(chǔ)上再新建兩列 lower_window
和 upper_window
,從而將節(jié)假日的時(shí)間擴(kuò)展成一個(gè)區(qū)間 [ lower_window
, upper_window
] 。舉例來說,如果想將平安夜也加入到 “圣誕節(jié)” 里,就設(shè)置 lower_window = -1 , upper_window = 0
;如果想將黑色星期五加入到 “感恩節(jié)” 里,就設(shè)置 lower_window = 0 , upper_window = 1
。
下面我們創(chuàng)建一個(gè)數(shù)據(jù)框,其中包含了所有佩頓 · 曼寧參加過的決賽日期:
上述代碼中,我們將超級(jí)碗的日期既記錄在了決賽的日期數(shù)據(jù)框中,也記錄在了超級(jí)碗的日期數(shù)據(jù)框中。這就會(huì)造成超級(jí)碗日期的效應(yīng)會(huì)在決賽日期的作用下疊加兩次。
一旦這個(gè)數(shù)據(jù)框創(chuàng)建好了,就可以通過傳入 holidays
參數(shù)使得在預(yù)測(cè)時(shí)考慮上節(jié)假日效應(yīng)。
可通過 forecast
數(shù)據(jù)框,來展示節(jié)假日效應(yīng):
在成分分析的圖中,如下所示,也可以看到節(jié)假日效應(yīng)。我們可以發(fā)現(xiàn),在決賽日期附近有一個(gè)穿透,而在超級(jí)碗日期時(shí)穿透則更為明顯。
如果發(fā)現(xiàn)節(jié)假日效應(yīng)被過度擬合了,通過設(shè)置參數(shù) holidays.prior.scale
可以調(diào)整它們的先驗(yàn)規(guī)模來使之平滑,默認(rèn)下該值取 10 。
和之前相比,節(jié)假日效應(yīng)的規(guī)模被減弱了,特別是對(duì)觀測(cè)值較少的超級(jí)碗而言。類似的,還有一個(gè) seasonality.prior.scale
參數(shù)可以用來調(diào)整模型對(duì)于季節(jié)性的擬合程度。
在預(yù)測(cè)時(shí),不確定性主要來源于三個(gè)部分:趨勢(shì)中的不確定性、季節(jié)效應(yīng)估計(jì)中的不確定性和觀測(cè)值的噪聲影響。
預(yù)測(cè)中,不確定性最大的來源就在于未來趨勢(shì)改變的不確定性。Prophet 假定 “未來將會(huì)和歷史具有相似的趨勢(shì)” 。尤其重要的是,我們假定未來趨勢(shì)的平均變動(dòng)頻率和幅度和我們觀測(cè)到的歷史值是一樣的,從而預(yù)測(cè)趨勢(shì)的變化并通過計(jì)算,最終得到預(yù)測(cè)區(qū)間。
這種衡量不確定性的方法具有以下性質(zhì):變化速率靈活性更大時(shí)(通過增大參數(shù) changepoint.prior.scale
的值),預(yù)測(cè)的不確定性也會(huì)隨之增大。原因在于如果將歷史數(shù)據(jù)中更多的變化速率加入了模型,也就代表我們認(rèn)為未來也會(huì)變化得更多,就會(huì)使得預(yù)測(cè)區(qū)間成為反映過擬合的標(biāo)志。
預(yù)測(cè)區(qū)間的寬度(默認(rèn)下,是 80% )可以通過設(shè)置 interval.width
參數(shù)來控制:
默認(rèn)情況下, Prophet 只會(huì)返回趨勢(shì)中的不確定性和觀測(cè)值噪聲的影響。你必須使用貝葉斯取樣的方法來得到季節(jié)效應(yīng)的不確定性,可通過設(shè)置 mcmc.samples
參數(shù)(默認(rèn)下取 0 )來實(shí)現(xiàn)。
上述代碼將最大后驗(yàn)估計(jì)( MAP )取代為馬爾科夫蒙特卡洛取樣 ( MCMC ),并且將計(jì)算時(shí)間從 10 秒延長(zhǎng)到 10 分鐘。如果做了全取樣,就能通過繪圖看到季節(jié)效應(yīng)的不確定性了:
下面我們使用之前使用過的 R 語言維基百科主頁對(duì)數(shù)訪問量的數(shù)據(jù)來建模預(yù)測(cè),只不過使用存在時(shí)間間隔并不完整的數(shù)據(jù):
如上 R 輸出圖所示,趨勢(shì)預(yù)測(cè)看似合理,預(yù)測(cè)區(qū)間的估計(jì)卻過于廣泛。
處理異常值最好的方法是移除它們,而 Prophet 使能夠處理缺失數(shù)據(jù)的。如果在歷史數(shù)據(jù)中某行的值為空( NA
),但是在待預(yù)測(cè)日期數(shù)據(jù)框 future
中仍保留這個(gè)日期,那么 Prophet 依舊可以給出該行的預(yù)測(cè)值。
上述這個(gè)實(shí)例雖然影響了不確定性的估計(jì),卻沒有影響到主要的預(yù)測(cè)值 yhat
。但是,現(xiàn)實(shí)往往并非如此,接下來,在上述數(shù)據(jù)集基礎(chǔ)上加入新的異常值后再建模預(yù)測(cè):
這里 2015年 6 月存在一些異常值破壞了季節(jié)效應(yīng)的估計(jì),因此未來的預(yù)測(cè)也會(huì)永久地受到這個(gè)影響。最好的解決方法就是移除這些異常值:
Prophet 處理的對(duì)象并非必須是日數(shù)據(jù),不過要是試圖通過非日數(shù)據(jù)來預(yù)測(cè)每日的情況或擬合季節(jié)性效應(yīng),往往會(huì)得到奇奇怪怪的結(jié)果。下面使用美國(guó)零售業(yè)銷售量數(shù)據(jù)來預(yù)測(cè)未來 10 年的情況:
預(yù)測(cè)結(jié)果看起來非常雜亂,原因正是在于這個(gè)特殊的數(shù)據(jù)集使用的是月數(shù)據(jù)。當(dāng)我們擬合年度效應(yīng)時(shí),只有每個(gè)月第一天的數(shù)據(jù),而且對(duì)于其他天的周期效應(yīng)是不可測(cè)且過擬合的。當(dāng)你使用 Prophet 擬合月度數(shù)據(jù)時(shí),可以通過在 make_future_dataframe
中傳入頻率參數(shù)只做月度的預(yù)測(cè)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn