時(shí)間序列(time series)系列2—Prophet

1.Prophet簡(jiǎn)介

Prophet是Facebook開(kāi)源的一個(gè)關(guān)于時(shí)間序列的框架营勤。Prophet功能完善旁舰,既可以做未來(lái)預(yù)測(cè)而线,也可以填補(bǔ)缺失值铭污,并且可以檢測(cè)異常恋日。
Prophet的整體框架,整個(gè)過(guò)程分為四部分:Modeling嘹狞、Forecast Evaluation岂膳、Surface Problems以及Visually Inspect Forecasts

  • a.Modeling:建立時(shí)間序列模型。分析師根據(jù)預(yù)測(cè)問(wèn)題的背景選擇一個(gè)合適的模型磅网。
  • b.Forecast Evaluation:模型評(píng)估谈截。根據(jù)模型對(duì)歷史數(shù)據(jù)進(jìn)行仿真,在模型的參數(shù)不確定的情況下涧偷,我們可以進(jìn)行多種嘗試簸喂,并根據(jù)對(duì)應(yīng)的仿真效果評(píng)估哪種模型更適合。
  • c.Surface Problems:呈現(xiàn)問(wèn)題燎潮。如果嘗試了多種參數(shù)后喻鳄,模型的整體表現(xiàn)依然不理想,這個(gè)時(shí)候可以將誤差較大的潛在原因呈現(xiàn)給分析師确封。
  • d.Visually Inspect Forecasts:以可視化的方式反饋整個(gè)預(yù)測(cè)結(jié)果除呵。當(dāng)問(wèn)題反饋給分析師后,分析師考慮是否進(jìn)一步調(diào)整和構(gòu)建模型爪喘。

2.Prophet流程

Prophet 采取類(lèi)似 Sklearn 模式的 API竿奏,先創(chuàng)建一個(gè)Prophet的實(shí)例,然后調(diào)用它的 fit 和 predict 方法腥放。
輸入是一個(gè)DataFrame泛啸,必須包含這兩列:ds 和 y。ds 必須是一個(gè) date 或者 datetime秃症。y 必須是數(shù)字候址,代表我們需要預(yù)測(cè)的序列的值。構(gòu)造效果如下:

index ds y
0 2000-01-01 1
1 2000-01-03 2
2 2000-01-04 3
... ... ...

然后在代入prophet模型進(jìn)行擬合种柑,最后預(yù)測(cè)岗仑。因?yàn)槟P褪褂梅绞奖容^簡(jiǎn)單,直接附上代碼聚请。
原始data:數(shù)據(jù)如下荠雕,5min粒度


在這里插入圖片描述
import pandas as pd
import numpy as np
from fbprophet import Prophet
import matplotlib.pyplot as plt
#配置matplotlib
plt.rcParams['figure.figsize'] = (20, 10)
plt.style.use('ggplot')
df = pd.read_csv("../data.csv")
dataf = df[0:len(df)-1*288]#取前面為訓(xùn)練數(shù)據(jù),后288個(gè)為測(cè)試數(shù)據(jù)
#按照prophet格式更改數(shù)據(jù)名稱(chēng)
df = df.rename(columns={"sump":"y", "time":"ds"})

Prophet可以添加特殊的額外因素驶赏,不如國(guó)慶節(jié)等炸卑。

#設(shè)定特殊節(jié)假日
special_days = pd.DataFrame({
  'holiday': 'big_date',
  'ds': pd.to_datetime(['2018-10-01', '2018-10-02', '2018-10-03',
                        '2018-10-04', '2018-10-05', '2018-10-06', '2018-10-07']),
  'lower_window': 0,
  'upper_window': 1,
})
normal_days = pd.DataFrame({
    "holiday":"small_date",
    "ds":pd.to_datetime(["2018-10-13","2018-10-14", "2018-10-20",
                         "2018-10-21","2018-10-27","2018-10-28","2018-11-03","2018-11-04" ]),
    "lower_window":-1,
    "upper_window":0,
})
holidays = special_days
#prophet擬合
model = Prophet(holidays= holidays)
model.fit(dataf)
#預(yù)測(cè)后288個(gè)數(shù)據(jù)
future = model.make_future_dataframe(periods = 288, freq = "5min")
forecast = model.predict(future)
forecast.tail()#顯示預(yù)測(cè)結(jié)果
model.plot(forecast)
model.plot_components(forecast)

Prophet能很好的將數(shù)據(jù)的特性進(jìn)行分解∶喊可以看到整體的trend盖文,數(shù)據(jù)在每周,每天的變化情況蚯姆,以及節(jié)假日的影響等五续。


在這里插入圖片描述

預(yù)測(cè)結(jié)果如下:ds為時(shí)間洒敏,trend為預(yù)測(cè),yhat_lower,yhat_upper為置信區(qū)間疙驾。


預(yù)測(cè)結(jié)果
#計(jì)算error
def mean_absolute_percentage_error(y_true, y_pred):
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
error = mean_absolute_percentage_error(df.y[-288*1:].values,
                                       forecast.yhat[-288*1:].values)
print(error)

預(yù)測(cè)值與真實(shí)值對(duì)比

#預(yù)測(cè)與真實(shí)對(duì)比顯示
plt.figure(figsize = (16,6))
plt.plot(forecast.yhat[-288*1:].reset_index())#預(yù)測(cè)
plt.plot(df.y[-288*1:].reset_index())#真實(shí)
plt.plot(forecast.yhat_lower[-288*1:].reset_index())#預(yù)測(cè)下限
plt.plot(forecast.yhat_upper[-288*1:].reset_index())#預(yù)測(cè)上限
在這里插入圖片描述

3.學(xué)習(xí)資料

不同時(shí)間序列預(yù)測(cè)問(wèn)題的解決方案也各有不用凶伙。Prophet適用于有如下特征的業(yè)務(wù)問(wèn)題:
a.有至少幾個(gè)月(最好是一年)的每小時(shí)、每天或每周觀察的歷史數(shù)據(jù)它碎;
b.有多種人類(lèi)規(guī)模級(jí)別的較強(qiáng)的季節(jié)性趨勢(shì):每周的一些天和每年的一些時(shí)間镊靴;
c.有事先知道的以不定期的間隔發(fā)生的重要節(jié)假日(比如國(guó)慶節(jié));
d.缺失的歷史數(shù)據(jù)或較大的異常數(shù)據(jù)的數(shù)量在合理范圍內(nèi)链韭;
e.有歷史趨勢(shì)的變化(比如因?yàn)楫a(chǎn)品發(fā)布)偏竟;
f.對(duì)于數(shù)據(jù)中蘊(yùn)含的非線(xiàn)性增長(zhǎng)的趨勢(shì)都有一個(gè)自然極限或飽和狀態(tài)。

上述內(nèi)容敞峭,只是大概敘述了Prophte的使用踊谋,沒(méi)有特別具體的函數(shù)等內(nèi)容。下面提供一些鏈接旋讹,有助于大家深入了解Prophet殖蚕。
Prophet簡(jiǎn)介及示例
Seasonality, Holiday Effects, And Regressors | Prophet
Forecasting Time Series data with Prophet - Jupyter Notebook - Python Data
基于Prophet的時(shí)間序列預(yù)測(cè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沉迹,隨后出現(xiàn)的幾起案子睦疫,更是在濱河造成了極大的恐慌,老刑警劉巖鞭呕,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤育,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡葫松,警方通過(guò)查閱死者的電腦和手機(jī)瓦糕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腋么,“玉大人咕娄,你說(shuō)我怎么就攤上這事∩豪蓿” “怎么了圣勒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)摧扇。 經(jīng)常有香客問(wèn)我圣贸,道長(zhǎng),這世上最難降的妖魔是什么扳剿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任旁趟,我火速辦了婚禮昼激,結(jié)果婚禮上庇绽,老公的妹妹穿的比我還像新娘锡搜。我一直安慰自己,他們只是感情好瞧掺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布耕餐。 她就那樣靜靜地躺著,像睡著了一般辟狈。 火紅的嫁衣襯著肌膚如雪肠缔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天哼转,我揣著相機(jī)與錄音明未,去河邊找鬼。 笑死壹蔓,一個(gè)胖子當(dāng)著我的面吹牛趟妥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佣蓉,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼披摄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了勇凭?” 一聲冷哼從身側(cè)響起疚膊,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虾标,沒(méi)想到半個(gè)月后寓盗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璧函,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年贞让,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柳譬。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喳张,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出美澳,到底是詐尸還是另有隱情销部,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布制跟,位于F島的核電站舅桩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雨膨。R本人自食惡果不足惜擂涛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聊记。 院中可真熱鬧撒妈,春花似錦恢暖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棋蚌,卻和暖如春嫁佳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谷暮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蒿往, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人湿弦。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓熄浓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親省撑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赌蔑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容