0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Facebook出品的時(shí)序分析庫(kù)Prophet

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-11-18 09:03 ? 次閱讀

編者按:Mail.Ru Search數(shù)據(jù)分析負(fù)責(zé)人Egor Polusmak介紹了Facebook出品的時(shí)序分析庫(kù)Prophet.

時(shí)序預(yù)測(cè)在數(shù)據(jù)分析中有廣泛應(yīng)用,例如:

在線(xiàn)服務(wù)明年需要的服務(wù)器數(shù)量

指定日期超市的日用品需求量

可交易的金融資產(chǎn)明天的收盤(pán)價(jià)

有相當(dāng)多預(yù)測(cè)未來(lái)趨勢(shì)的不同方法,例如,ARIMA、ARCH、回歸模型、神經(jīng)網(wǎng)絡(luò)。

本文將介紹Prophet,F(xiàn)acebook在2017年2月23日開(kāi)源的時(shí)序預(yù)測(cè)庫(kù)。我們也將用它預(yù)測(cè)Medium每天發(fā)表的文章數(shù)。

概覽

導(dǎo)言

Prophet預(yù)測(cè)模型

Prophet實(shí)踐

安裝

數(shù)據(jù)集

探索性可視分析

進(jìn)行預(yù)測(cè)

預(yù)測(cè)質(zhì)量評(píng)估

可視化

Box-Cox變換

總結(jié)

相關(guān)資源

導(dǎo)言

據(jù)Facebook研究院的文章所言,Prophet原本是為創(chuàng)建高質(zhì)量的商業(yè)預(yù)測(cè)而研發(fā)的。Prophet嘗試處理許多商業(yè)時(shí)序數(shù)據(jù)中常見(jiàn)的困難:

人類(lèi)行為導(dǎo)致的季節(jié)性效應(yīng):周、月、年循環(huán),公共假期的峰谷;

新產(chǎn)品和市場(chǎng)事件導(dǎo)致的趨勢(shì)變動(dòng);

離群值。

據(jù)稱(chēng)在許多情形下,默認(rèn)配置的Prophet就可以生成媲美經(jīng)驗(yàn)豐富的分析師的預(yù)測(cè)。

此外,Prophet有一些直觀而易于解釋的定制功能,以供逐漸改善預(yù)測(cè)模型。特別重要的是,即使不是時(shí)序分析的專(zhuān)家,也可以理解這些參數(shù)。

據(jù)文章所言,Prophet的適用對(duì)象和場(chǎng)景很廣泛:

面向廣泛的分析師受眾,這些受眾可能在時(shí)序領(lǐng)域沒(méi)有很多經(jīng)驗(yàn);

面向廣泛的預(yù)測(cè)問(wèn)題;

自動(dòng)估計(jì)大量預(yù)測(cè)的表現(xiàn),包括標(biāo)出可能的問(wèn)題,以供分析師進(jìn)一步調(diào)查。

Prophet預(yù)測(cè)模型

下面讓我們仔細(xì)看看Prophet是如何工作的。本質(zhì)上,這個(gè)庫(kù)使用的是加性回歸模型:y(t) = g(t) + s(t) + h(t) + ?t

其中:

趨勢(shì)g(t)建模非周期性變動(dòng);

季節(jié)性s(t)建模周期性變動(dòng);

假日成分h(t)提供關(guān)于假日和事件的信息。

下面我們將討論這些模型成分的一些重要性質(zhì)。

趨勢(shì)

Prophet庫(kù)實(shí)現(xiàn)兩種趨勢(shì)模型。

第一種是非線(xiàn)性飽和增長(zhǎng)。它可以用邏輯增長(zhǎng)模型表示:

其中:

C是承載量(曲線(xiàn)的最大值)

k是增長(zhǎng)率(曲線(xiàn)的“陡峭程度”)

m是偏置參數(shù)

這一邏輯回歸等式可供建模非線(xiàn)性飽和增長(zhǎng),即數(shù)值的增長(zhǎng)率隨增長(zhǎng)而下降。一個(gè)典型的例子是應(yīng)用或網(wǎng)站的用戶(hù)增長(zhǎng)。

C和k實(shí)際上不一定是常量,可能隨著時(shí)間而發(fā)生變動(dòng)。Prophet支持自動(dòng)和手動(dòng)調(diào)整這兩個(gè)參數(shù),既可以通過(guò)擬合提供的歷史數(shù)據(jù)自行選擇最佳的趨勢(shì)改變點(diǎn),也可以讓分析師手動(dòng)指定增長(zhǎng)率和承載量變動(dòng)的時(shí)間點(diǎn)。

第二種趨勢(shì)模型是增長(zhǎng)率恒定的簡(jiǎn)單分段線(xiàn)性模型,最適合不存在飽和的線(xiàn)性增長(zhǎng)。

季節(jié)性

周季節(jié)性通過(guò)虛擬變量建模:monday、tuesday、wednesday、thursday、friday、saturday(周一到周六)。這些變量的值為0還是為1取決于是星期幾。sunday(周日)變量沒(méi)有加入,因?yàn)樯鲜隽鶄€(gè)變量都取0即可表示周日。相反,如果再引入周日變量,那么每個(gè)變量都可以通過(guò)另外六個(gè)變量的線(xiàn)性組合表示,這種變量之間的相關(guān)性會(huì)對(duì)模型產(chǎn)生不利影響。

年季節(jié)性通過(guò)傅里葉級(jí)數(shù)建模。

0.2版加入了新的日季節(jié)性特性,可以使用日以下尺度的時(shí)序數(shù)據(jù)并做出日以下尺度的預(yù)測(cè)。

假日和事件

h(t)表示每年的可預(yù)測(cè)反常日期,例如黑色星期五。

分析師需要提供定制的事件列表以利用這一特性。

誤差

最后的誤差項(xiàng)?t表示模型未反映的信息,通常建模為高斯噪聲。

Prophet評(píng)測(cè)

Facebook的論文(見(jiàn)相關(guān)資源)對(duì)比了Prophet和其他幾種時(shí)序預(yù)測(cè)方法。根據(jù)他們的研究,相比其他模型,Prophet顯著降低了預(yù)測(cè)誤差(使用平均絕對(duì)百分誤差測(cè)量預(yù)測(cè)精確度)。

為了便于理解上面的評(píng)測(cè)結(jié)果,下面簡(jiǎn)單溫習(xí)下平均絕對(duì)百分誤差(MAPE)的概念。

將實(shí)際(歷史)值記為yi,模型給出的預(yù)測(cè)值記為?i。那么預(yù)測(cè)誤差ei= yi- ?i,相對(duì)預(yù)測(cè)誤差pi= ei/yi.

由此,我們定義MAPE = mean(|pi|)

MAPE廣泛用于測(cè)量預(yù)測(cè)精確性,因?yàn)樗鼘⒄`差表示為百分比,因此可以用于不同數(shù)據(jù)集上的模型評(píng)估。

此外,評(píng)估預(yù)測(cè)算法時(shí),為了了解誤差的絕對(duì)值,可以計(jì)算平均絕對(duì)誤差(MAE):MAE = mean(|ei|)

稍微講下和Prophet作對(duì)比的算法。大多數(shù)都相當(dāng)簡(jiǎn)單,經(jīng)常用作基線(xiàn):

naive是一個(gè)過(guò)度簡(jiǎn)化的預(yù)測(cè)方法,僅僅根據(jù)上一時(shí)間點(diǎn)的觀測(cè)預(yù)測(cè)所有未來(lái)值。

snavie,類(lèi)似naive,不過(guò)考慮了季節(jié)性因素。例如,在周季節(jié)性數(shù)據(jù)的情形下,用上周一的數(shù)據(jù)預(yù)測(cè)未來(lái)每周一的數(shù)據(jù),用上周二的數(shù)據(jù)預(yù)測(cè)未來(lái)每周二的數(shù)據(jù),以此類(lèi)推。

mean,使用數(shù)據(jù)的平均值作為預(yù)測(cè)。

arima是自回歸集成移動(dòng)平均的簡(jiǎn)稱(chēng),參見(jiàn)第9課了解這一算法的細(xì)節(jié)。

ets是指數(shù)平滑的簡(jiǎn)稱(chēng),參見(jiàn)第9課了解詳情。

Prophet實(shí)踐

安裝

首先安裝Prophet庫(kù)。Prophet支持Python和R語(yǔ)言。選擇哪種語(yǔ)言取決于個(gè)人偏好和項(xiàng)目需求。我們這里將使用Python。

Python下可以通過(guò)pip安裝:

pip install fbprophet

R也有對(duì)應(yīng)的CRAN包。

引入所需模塊并初始化環(huán)境:

import warnings

warnings.filterwarnings('ignore')

import numpy as np

import pandas as pd

from scipy import stats

import statsmodels.api as sm

import matplotlib.pyplot as plt

%matplotlib inline

數(shù)據(jù)集

我們將預(yù)測(cè)Medium上每天發(fā)布的文章數(shù)。

首先載入數(shù)據(jù)集(數(shù)據(jù)集下載地址見(jiàn)文末):

df = pd.read_csv('../../data/medium_posts.csv', sep=' ')

接著,我們丟棄除了published(發(fā)布日期)和url(可以作為文章的唯一標(biāo)識(shí))之外的所有特征,順便移除可能存在的重復(fù)值和缺失值。

df = df[['published', 'url']].dropna().drop_duplicates()

接下來(lái)我們需要轉(zhuǎn)換published為時(shí)間日期格式,因?yàn)閜andas默認(rèn)視為字符串。

df['published'] = pd.to_datetime(df['published'])

根據(jù)時(shí)間排序dataframe,然后查看前三條記錄。

df.sort_values(by=['published']).head(n=3)

Medium是從2012年8月15日起開(kāi)放的。然而,如你所見(jiàn),至少有一些行的發(fā)布日期更早,這些極可能是不合法的。我們將清洗時(shí)序數(shù)據(jù),限制一下時(shí)間范圍:

df = df[(df['published'] > '2012-08-15') &

(df['published'] < '2017-06-26')].

sort_values(by=['published'])

df.head(n=3)

最后3條:

df.tail(n=3)

由于需要預(yù)測(cè)發(fā)布文章數(shù),我們將聚合、計(jì)數(shù)給定時(shí)間點(diǎn)的不同文章數(shù)。我們將相應(yīng)的新增列命名為posts(帖子):

aggr_df = df.groupby('published')[['url']].count()

aggr_df.columns = ['posts']

實(shí)踐中我們感興趣的是一天發(fā)布的文章數(shù),但是當(dāng)前數(shù)據(jù)屬于日尺度以下的時(shí)序:

aggr_df.head(n=3)

為了修正這一點(diǎn),我們需要根據(jù)時(shí)間“箱”聚合文章數(shù)。在時(shí)序分析中,這一過(guò)程稱(chēng)為重采樣。并且,如果我們降低了數(shù)據(jù)的采樣率,那么這稱(chēng)為降采樣。

幸運(yùn)的是,pandas內(nèi)置這一功能:

daily_df = aggr_df.resample('D').apply(sum)

daily_df.head(n=3)

探索性可視分析

一般來(lái)說(shuō),查看數(shù)據(jù)的圖形表示可能提供幫助和指引。我們將在整個(gè)時(shí)間區(qū)間上創(chuàng)建時(shí)序圖,這可能提供季節(jié)性和明顯的異常偏離的線(xiàn)索。

首先我們引入并初始化Plotly庫(kù),以創(chuàng)建美觀的交互圖:

from plotly.offline import init_notebook_mode, iplot

from plotly import graph_objs as go

# 初始化plotly

init_notebook_mode(connected=True)

我們還將定義一個(gè)用于繪圖的幫助函數(shù):

def plotly_df(df, title=''):

"""可視化dataframe所有列為線(xiàn)圖。"""

common_kw = dict(x=df.index, mode='lines')

data = [go.Scatter(y=df[c], name=c, **common_kw) for c in df.columns]

layout = dict(title=title)

fig = dict(data=data, layout=layout)

iplot(fig, show_link=False)

讓我們?cè)囍苯永L制數(shù)據(jù)集:

plotly_df(daily_df, title='Posts on Medium (daily)')

即使Plotly提供了縮放功能,這樣的高頻數(shù)據(jù)仍舊很難分析。除了明顯的增長(zhǎng)和加速趨勢(shì)外,很難從這樣的圖形中推斷出什么有意義的結(jié)論。

為了減少噪聲,我們將按周重采樣文章數(shù)。順便提下,分箱之外,其他降噪的技術(shù)還包括移動(dòng)平均平滑和指數(shù)平滑等。

我們將降采樣的dataframe保存到另一個(gè)變量中,因?yàn)橹笪覀儗慈仗幚頂?shù)據(jù):

weekly_df = daily_df.resample('W').apply(sum)

plotly_df(weekly_df, title='Posts on Medium (weekly)')

從幫助分析師預(yù)測(cè)的角度來(lái)說(shuō),這張圖的效果更好。

Plotly提供的最有用的功能之一是快速深入不同時(shí)間段,這有助于更好地理解數(shù)據(jù)以及找到關(guān)于可能的趨勢(shì)、周期性、反常效應(yīng)的線(xiàn)索。

例如,放大連續(xù)幾年會(huì)顯示對(duì)應(yīng)基督教節(jié)日的時(shí)間點(diǎn),這些對(duì)人類(lèi)行為有重大影響。

根據(jù)上圖,我們將省略2015年之前的觀測(cè)。頭幾年每天發(fā)布的文章數(shù)很低,可能給預(yù)測(cè)增加噪聲,因?yàn)槟P涂赡懿坏貌粩M合這些異常的歷史數(shù)據(jù)而不能更好地利用最近幾年更相關(guān)、更具指示性的數(shù)據(jù)。

daily_df = daily_df.loc[daily_df.index >= '2015-01-01']

daily_df.head(n=3)

基于可視化分析,我們可以看到我們的數(shù)據(jù)集呈現(xiàn)出一個(gè)顯著的不斷增長(zhǎng)的趨勢(shì)。同時(shí)也展示了周積極性和年季節(jié)性,還有每年中的一些異常日期。

進(jìn)行預(yù)測(cè)

Prophet的API和sklearn很相似。首先創(chuàng)建一個(gè)模型,接著調(diào)用fit方法,最后做出預(yù)測(cè)。fit方法的輸入是一個(gè)包含兩列的DataFrame:

ds(datestamp),類(lèi)型必須是date或datetime。

y是想要預(yù)測(cè)的數(shù)值。

我們先引入庫(kù)并關(guān)閉不重要的診斷信息:

from fbprophet importProphet

import logging

logging.getLogger().setLevel(logging.ERROR)

轉(zhuǎn)換dataframe至Prophet要求的格式:

df = daily_df.reset_index()

df.columns = ['ds', 'y']

df.tail(n=3)

Prophet的作者建議至少根據(jù)幾個(gè)月的數(shù)據(jù)進(jìn)行預(yù)測(cè),如果有超過(guò)一年的歷史數(shù)據(jù)就最理想了。很幸運(yùn),我們這里有好幾年的數(shù)據(jù)可供模型擬合。

為了測(cè)量預(yù)測(cè)的質(zhì)量,我們需要將數(shù)據(jù)集分為歷史部分(數(shù)據(jù)的前部,也是最大部分)和預(yù)測(cè)部分(時(shí)間線(xiàn)的最后部分)。我們從數(shù)據(jù)集中移除最后一個(gè)月的數(shù)據(jù),作為測(cè)試目標(biāo):

prediction_size = 30

train_df = df[:-prediction_size]

train_df.tail(n=3)

現(xiàn)在我們需要?jiǎng)?chuàng)建一個(gè)新的Prophet對(duì)象(模型),我們可以傳入模型的參數(shù),但是這里我們將使用默認(rèn)值。接著在訓(xùn)練數(shù)據(jù)集上調(diào)用fit方法訓(xùn)練模型。

m = Prophet()

m.fit(train_df);

然后我們使用輔助函數(shù)Prophet.make_future_dataframe創(chuàng)建一個(gè)dataframe,其中包括所有歷史日期,以及之前留置的未來(lái)30天。

future = m.make_future_dataframe(periods=prediction_size)

future.tail(n=3)

調(diào)用predict方法,傳入我們想要?jiǎng)?chuàng)建預(yù)測(cè)的日期后就可以預(yù)測(cè)新值了。如果像這里一樣同時(shí)提供歷史數(shù)據(jù),那除了預(yù)測(cè)之外我們還能得到歷史的內(nèi)擬合。

forecast = m.predict(future)

forecast.tail(n=3)

在結(jié)果dataframe中,我們可以看到很多描繪預(yù)測(cè)的列,包括趨勢(shì)成分、季節(jié)性成分,還有它們的置信區(qū)間。預(yù)測(cè)本身存儲(chǔ)于yhat列。

Prophet庫(kù)內(nèi)置可視化工具,方便迅速評(píng)估結(jié)果。

首先,Prophet.plot方法可以繪制所有預(yù)測(cè)的數(shù)據(jù)點(diǎn):

m.plot(forecast);

這張圖沒(méi)有提供多少信息。我們唯一能得出的結(jié)論是模型將許多數(shù)據(jù)點(diǎn)視為離群值。

在我們的情形中,Prophet.plot_components函數(shù)也許要有用得多。它讓我們可以分別觀察模型的不同成分:趨勢(shì)、年季節(jié)性、周季節(jié)性。如果給模型提供了關(guān)于假日和事件的信息,圖形也會(huì)顯示相關(guān)信息。

m.plot_components(forecast);

從趨勢(shì)圖中,我們可以看到,Prophet很好地?cái)M合了2016年末后的加速增長(zhǎng)趨勢(shì)。從周季節(jié)性圖中,我們可以得出結(jié)論,和工作日相比,周六、周日的新文章較少。而年季節(jié)性圖清楚地顯示了圣誕節(jié)那一天的迅猛下跌。

預(yù)測(cè)質(zhì)量評(píng)估

讓我們計(jì)算預(yù)測(cè)的最后30天的誤差測(cè)度,以便評(píng)估算法的質(zhì)量。為此,我們需要觀測(cè)yi和相應(yīng)的預(yù)測(cè)值?i。

看下Prophet為我們創(chuàng)建的forecast對(duì)象:

print(', '.join(forecast.columns))

結(jié)果:

ds, trend, trend_lower, trend_upper, yhat_lower, yhat_upper, seasonal, seasonal_lower, seasonal_upper, seasonalities, seasonalities_lower, seasonalities_upper, weekly, weekly_lower, weekly_upper, yearly, yearly_lower, yearly_upper, yhat

我們看到,其中沒(méi)有歷史值。我們需要從原數(shù)據(jù)集df中獲取實(shí)際值y,然后和forecast對(duì)象中的預(yù)測(cè)值比較。為此我們定義一個(gè)輔助函數(shù):

def make_comparison_dataframe(historical, forecast):

return forecast.set_index('ds')[['yhat', 'yhat_lower', 'yhat_upper']].join(historical.set_index('ds'))

應(yīng)用這一函數(shù):

cmp_df = make_comparison_dataframe(df, forecast)

cmp_df.tail(n=3)

我們?cè)俣x一個(gè)計(jì)算MAPE和MAE的輔助函數(shù):

def calculate_forecast_errors(df, prediction_size):

df = df.copy()

df['e'] = df['y'] - df['yhat']

df['p'] = 100 * df['e'] / df['y']

predicted_part = df[-prediction_size:]

error_mean = lambda error_name: np.mean(np.abs(predicted_part[error_name]))

return {'MAPE': error_mean('p'), 'MAE': error_mean('e')}

然后用它計(jì)算MAPE和MAE:

for err_name, err_value in

calculate_forecast_errors(cmp_df, prediction_size).items():

print(err_name, err_value)

結(jié)果:

MAPE 22.7243579814

MAE 70.452857085

可視化

現(xiàn)在讓我們自行可視化Prophet創(chuàng)建的模型。它將包括實(shí)際值、預(yù)測(cè)值和置信區(qū)間。

首先,我們繪制較短時(shí)期內(nèi)的圖形,這樣數(shù)據(jù)點(diǎn)更容易分辨。接著,我們只顯示模型在預(yù)測(cè)期間內(nèi)的表現(xiàn)(最后30天)。這兩個(gè)測(cè)度看起來(lái)能帶來(lái)更清晰的圖形。

最后,我們將使用Plotly讓圖形可以交互,這對(duì)探索很重要。

我們將定義一個(gè)輔助函數(shù)show_forecast并調(diào)用它:

def show_forecast(cmp_df, num_predictions, num_values, title):

def create_go(name, column, num, **kwargs):

points = cmp_df.tail(num)

args = dict(name=name, x=points.index, y=points[column], mode='lines')

args.update(kwargs)

return go.Scatter(**args)

lower_bound = create_go('Lower Bound', 'yhat_lower', num_predictions,

line=dict(width=0),

marker=dict(color="444"))

upper_bound = create_go('Upper Bound', 'yhat_upper', num_predictions,

line=dict(width=0),

marker=dict(color="444"),

fillcolor='rgba(68, 68, 68, 0.3)',

fill='tonexty')

forecast = create_go('Forecast', 'yhat', num_predictions,

line=dict(color='rgb(31, 119, 180)'))

actual = create_go('Actual', 'y', num_values,

marker=dict(color="red"))

data = [lower_bound, upper_bound, forecast, actual]

layout = go.Layout(yaxis=dict(title='Posts'), title=title, showlegend = False)

fig = go.Figure(data=data, layout=layout)

iplot(fig, show_link=False)

show_forecast(cmp_df, prediction_size, 100, 'New posts on Medium')

初看起來(lái)模型預(yù)測(cè)的均值還挺合理的。從圖上看,之所以之前算出來(lái)的MAPE值比較高,可能是因?yàn)槟P蜎](méi)能捕捉周季節(jié)性增長(zhǎng)高峰的放大效應(yīng)。

我們還可以從圖中得出的結(jié)論是,許多實(shí)際值位于置信區(qū)間之外。Prophet也許不太適合方差不穩(wěn)定的時(shí)序,至少在默認(rèn)設(shè)置下是如此。我們將通過(guò)轉(zhuǎn)換數(shù)據(jù)來(lái)嘗試修正這一點(diǎn)。

Box-Cox變換

目前為止,我們使用的都是Prophet的默認(rèn)設(shè)置,數(shù)據(jù)也基本上是原始數(shù)據(jù)。我們這里不打算討論如何調(diào)整模型的參數(shù),不過(guò),即使在不動(dòng)默認(rèn)參數(shù)的情況下,還是有提升的空間。在這一節(jié),我們將在原始時(shí)序上應(yīng)用Box-Cox變換,看看會(huì)有什么效果。

簡(jiǎn)單介紹下這一變換。這一單調(diào)數(shù)據(jù)變換可以穩(wěn)定方差。我們將使用單參數(shù)Box-Cox變換:

使用上式的逆函數(shù)可以還原至原數(shù)據(jù)的尺度:

相應(yīng)的Python函數(shù):

def inverse_boxcox(y, lambda_):

return np.exp(y) if lambda_ == 0else np.exp(np.log(lambda_ * y + 1) / lambda_)

首先,我們準(zhǔn)備數(shù)據(jù),設(shè)置索引

train_df2 = train_df.copy().set_index('ds')

接著,我們應(yīng)用Scipy的stats.boxcox函數(shù)(Box-Cox變換)。這里它將返回兩個(gè)值,第一個(gè)值是轉(zhuǎn)換后的序列,第二個(gè)值是找到的最優(yōu)λ值(最大似然):

train_df2['y'], lambda_prophet = stats.boxcox(train_df2['y'])

train_df2.reset_index(inplace=True)

創(chuàng)建一個(gè)新Prophet模型,并重復(fù)之前的擬合-預(yù)測(cè)流程:

m2 = Prophet()

m2.fit(train_df2)

future2 = m2.make_future_dataframe(periods=prediction_size)

forecast2 = m2.predict(future2)

然后通過(guò)逆函數(shù)和已知的λ值反轉(zhuǎn)Box-Cox變換:

for column in ['yhat', 'yhat_lower', 'yhat_upper']:

forecast2[column] = inverse_boxcox(forecast2[column],

lambda_prophet)

復(fù)用之前創(chuàng)建對(duì)比dataframe和計(jì)算誤差的代碼:

cmp_df2 = make_comparison_dataframe(df, forecast2)

for err_name, err_value in calculate_forecast_errors(cmp_df2, prediction_size).items():

print(err_name, err_value)

結(jié)果:

MAPE 11.5921879552

MAE 39.072031256

毫無(wú)疑問(wèn),模型的質(zhì)量提升了。

最后,讓我們繪制最新結(jié)果的可視化圖形,和之前的放一起對(duì)比下。

show_forecast(cmp_df, prediction_size, 100, 'No transformations')

show_forecast(cmp_df2, prediction_size, 100, 'Box–Cox transformation')

轉(zhuǎn)換前

轉(zhuǎn)換后

很明顯,第二張圖中的預(yù)測(cè)值更加接近真實(shí)值。

總結(jié)

我們介紹了Prophet這一開(kāi)源的時(shí)序預(yù)測(cè)庫(kù),并進(jìn)行了一些時(shí)序預(yù)測(cè)的實(shí)踐。

如我們所見(jiàn),Prophet并不神奇,開(kāi)箱即用的預(yù)測(cè)并不理想。它仍然需要數(shù)據(jù)科學(xué)家在必要的時(shí)候探索預(yù)測(cè)結(jié)果,調(diào)整模型參數(shù),轉(zhuǎn)換數(shù)據(jù)。

不過(guò),這一個(gè)用戶(hù)友好、易于定制的庫(kù)。在某些情形下,單單將分析師事先知道的異常日期納入考慮這一功能就會(huì)帶來(lái)很大的不同。

總的來(lái)說(shuō),Prophet庫(kù)值得收入你的分析工具箱。

相關(guān)資源

GitHub上的Prophet官方倉(cāng)庫(kù):https://github.com/facebook/prophet

Prophet官方文檔:https://facebookincubator.github.io/prophet/docs/quick_start.html

Sean J. Taylor和Benjamin Letham的論文Forecasting at scale解釋了作為Prophet基礎(chǔ)的算法。

Chris Moffitt寫(xiě)的Prophet概覽(以預(yù)測(cè)網(wǎng)站流量為例):http://pbpython.com/prophet-overview.html

Rob J. Hyndman和George Athanasopoulos寫(xiě)的Forecasting: principles and practice——很好的關(guān)于時(shí)序預(yù)測(cè)的一本書(shū)(有在線(xiàn)版)

本文配套的Jupyter Notebook: git.io/fpslo

Medium數(shù)據(jù)集:https://drive.google.com/file/d/1G3YjM6mR32iPnQ6O3f6rE9BVbhiTiLyU/view

課程回顧

機(jī)器學(xué)習(xí)開(kāi)放課程系列至此告一段落,所以這里列下之前的十課:

Pandas探索性分析

可視化

分類(lèi)、決策樹(shù)、K近鄰

線(xiàn)性分類(lèi)、線(xiàn)性回歸

Bagging、隨機(jī)森林

特征工程

PCA、聚類(lèi)

Vowpal Wabbit

時(shí)序數(shù)據(jù)

梯度提升

配套視頻(目前更新到第6課):https://youtu.be/QKTuw4PNOsU

連喵星人也被課程吸引(來(lái)源:Yulia Kameneva)

配套Kaggle競(jìng)賽:

基于網(wǎng)頁(yè)會(huì)話(huà)檢測(cè)惡意用戶(hù):https://www.kaggle.com/c/catch-me-if-you-can-intruder-detection-through-webpage-session-tracking2

預(yù)測(cè)Medium文章推薦數(shù):https://www.kaggle.com/c/how-good-is-your-medium-article/

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Facebook
    +關(guān)注

    關(guān)注

    3

    文章

    1429

    瀏覽量

    54610
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1200

    瀏覽量

    24621

原文標(biāo)題:機(jī)器學(xué)習(xí)開(kāi)放課程(終):基于Facebook Prophet預(yù)測(cè)未來(lái)

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【分享】靜態(tài)時(shí)序分析與邏輯設(shè)計(jì)華為出品

    靜態(tài)時(shí)序分析與邏輯設(shè)計(jì)
    發(fā)表于 05-27 12:28

    Facebook背后的軟件揭秘

    Facebook的擴(kuò)展性挑戰(zhàn)在我們討論細(xì)節(jié)之前,這里有一些Facebook已經(jīng)做的軟件規(guī)模:◆Facebook有570000000000每月頁(yè)面瀏覽量 (據(jù)Google Ad Planner
    發(fā)表于 07-16 06:48

    什么是時(shí)序數(shù)據(jù)庫(kù)

    本文根據(jù)演講視頻以及PPT整理而成。本文將主要圍繞以下四個(gè)方面進(jìn)行分享:時(shí)序數(shù)據(jù)與時(shí)序數(shù)據(jù)庫(kù)時(shí)序數(shù)據(jù)庫(kù)的演變時(shí)序數(shù)據(jù)庫(kù)對(duì)比總結(jié)一、時(shí)序數(shù)據(jù)與
    發(fā)表于 07-12 08:35

    時(shí)序約束與時(shí)序分析 ppt教程

    時(shí)序約束與時(shí)序分析 ppt教程 本章概要:時(shí)序約束與時(shí)序分析基礎(chǔ)常用
    發(fā)表于 05-17 16:08 ?0次下載

    基于時(shí)序路徑的FPGA時(shí)序分析技術(shù)研究

    基于時(shí)序路徑的FPGA時(shí)序分析技術(shù)研究_周珊
    發(fā)表于 01-03 17:41 ?2次下載

    靜態(tài)時(shí)序分析基礎(chǔ)及應(yīng)用

    靜態(tài)時(shí)序分析基礎(chǔ)及應(yīng)用
    發(fā)表于 01-24 16:54 ?7次下載

    時(shí)序分析基本概念介紹——時(shí)序庫(kù)Lib,除了這些你還想知道什么?

    時(shí)序分析基本概念介紹——時(shí)序庫(kù)Lib。用于描述物理單元的時(shí)序和功耗信息的重要庫(kù)文件。lib
    的頭像 發(fā)表于 12-15 17:11 ?1.2w次閱讀
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>分析</b>基本概念介紹——<b class='flag-5'>時(shí)序</b><b class='flag-5'>庫(kù)</b>Lib,除了這些你還想知道什么?

    區(qū)塊鏈移動(dòng)社交類(lèi)預(yù)測(cè)平臺(tái)“Prophet Set”可為用戶(hù)提供不同類(lèi)型的預(yù)測(cè)事件

    Prophet 的移動(dòng)端 Prophet Set 基于公信寶布洛克城開(kāi)發(fā),未來(lái)一年共享布洛克城的千萬(wàn)用戶(hù)。Prophet Set 從布洛克城公民最感興趣的數(shù)字代幣話(huà)題切入,快速獲得用戶(hù),通過(guò)多元社交
    發(fā)表于 09-06 10:11 ?1304次閱讀

    時(shí)序基礎(chǔ)分析

    時(shí)序分析是以分析時(shí)間序列的發(fā)展過(guò)程、方向和趨勢(shì),預(yù)測(cè)將來(lái)時(shí)域可能達(dá)到的目標(biāo)的方法。此方法運(yùn)用概率統(tǒng)計(jì)中時(shí)間序列分析原理和技術(shù),利用時(shí)序系統(tǒng)的
    的頭像 發(fā)表于 11-15 07:02 ?2867次閱讀
    <b class='flag-5'>時(shí)序</b>基礎(chǔ)<b class='flag-5'>分析</b>

    超過(guò)4.19億的Facebook用戶(hù)ID電話(huà)信息被泄露,數(shù)據(jù)庫(kù)已被刪除

    據(jù)消息報(bào)道,當(dāng)?shù)貢r(shí)間9月4日Facebook證實(shí),存儲(chǔ)了超4億條與Facebook賬戶(hù)關(guān)聯(lián)的電話(huà)號(hào)碼數(shù)據(jù)庫(kù)被曝光。Facebook發(fā)言人表示,目前數(shù)據(jù)
    的頭像 發(fā)表于 09-05 15:04 ?3649次閱讀

    正點(diǎn)原子FPGA靜態(tài)時(shí)序分析時(shí)序約束教程

    靜態(tài)時(shí)序分析是檢查芯片時(shí)序特性的一種方法,可以用來(lái)檢查信號(hào)在芯片中的傳播是否符合時(shí)序約束的要求。相比于動(dòng)態(tài)時(shí)序
    發(fā)表于 11-11 08:00 ?62次下載
    正點(diǎn)原子FPGA靜態(tài)<b class='flag-5'>時(shí)序</b><b class='flag-5'>分析</b>與<b class='flag-5'>時(shí)序</b>約束教程

    時(shí)序數(shù)據(jù)庫(kù)的前世今生

    ? 時(shí)序數(shù)據(jù)庫(kù)忽然火了起來(lái)。Facebook開(kāi)源了beringei時(shí)序數(shù)據(jù)庫(kù),基于PostgreSQL打造的時(shí)序數(shù)據(jù)庫(kù)TimeScaleDB也開(kāi)源了。
    的頭像 發(fā)表于 12-17 17:51 ?3539次閱讀

    時(shí)序分析的靜態(tài)分析基礎(chǔ)教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是時(shí)序分析的靜態(tài)分析基礎(chǔ)教程。
    發(fā)表于 01-14 16:04 ?14次下載
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>分析</b>的靜態(tài)<b class='flag-5'>分析</b>基礎(chǔ)教程

    《pcb設(shè)計(jì)秘笈》ADI智庫(kù)出品

    《pcb設(shè)計(jì)秘笈》ADI智庫(kù)出品
    發(fā)表于 11-16 16:52 ?0次下載

    時(shí)序分析基本概念介紹—時(shí)序庫(kù)Lib

    今天主要介紹的時(shí)序概念是時(shí)序庫(kù)lib,全稱(chēng)liberty library format(以? lib結(jié)尾),
    的頭像 發(fā)表于 07-07 17:15 ?2856次閱讀
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>分析</b>基本概念介紹—<b class='flag-5'>時(shí)序</b><b class='flag-5'>庫(kù)</b>Lib