prophet模型小結

1. Introduction
在許多自然科學或商業活動中,對於時間序列的預測起着非常重要的作用。但是,做出高精度的預測無論對計算機還是對人類分析師來說都不是一個簡單的事情。主要有兩個原因:1.完全自動化的預測模型靈活性很差,很難考慮到一些有用的假設或一些具有啓發性的條件。2.分析師一般對本領域有深刻的理解,但是對於時間序列的預測往往經驗不足。

本研究要做的是爲不同情況下的預測行爲提供一些有用的指導,主要有以下幾種情況:
1.衆多進行時間序列預測,卻沒有受過訓練的人;
2.衆多預測的任務,這些任務存在潛在的異常點;
3.在數量衆多的預測任務開展時,讓機器進行苛刻的對比和評價,而讓分析師進行反饋並提升模型的表現。

2. Features of Business Time Series

這裏寫圖片描述
圖1 Facebook上發生的事件數目

圖1所示的是Facebook上的事件隨時間變化的情況,每種顏色表示一週內的某天發生的事件數目,這些事件包括創建新網頁,邀請其他人等。從圖中可以看到幾個明顯的特點:
1.週期性特點,一週和一年的週期性;
2.節假日的影響,在新年和聖誕節發生了顯著的下降;
3.趨勢,最後六個月有明顯的上升,這是由於新產品發佈或市場發生了變動;
4.異常值,真實數據集中經常出現異常值。

這裏寫圖片描述
圖2 幾種自動預測模型的預測結果

圖2所示的是採用幾個不同的自動預測模型的預測結果,從圖1中的數據中選取了3個不同的點進行預測。具體如下:
1. auto.arima,擬合出一系列ARIMA模型,並自動選出最好的一個;
2. ets,擬合出一些列指數平滑模型,並選出最好的一個;
3. snaive,隨機行走模型,隨着一週的週期性做出固定的預測;
4. tbats,考慮一週和一年的週期性。
以上模型的不足:
當在預測點前存在趨勢變化時,auto.arima模型預測出的趨勢誤差較大,且不能考慮週期性特點。ets和snaive考慮了一週的週期性,但是不能考慮長期的週期性特點。所有這些模型在每一年的年末的預測都產生了過激的反應,因爲他們不能夠考慮一年的週期性,如圖3中2014年的位置,所有模型預測結果都偏低。

3. The Prophet Forecasting Model
prophet模型的構成如下:

y(t)=g(t)+s(t)+h(t)+ϵ

其中,g(t) 是趨勢(trend)函數,用來分析時間序列中非週期性的變化。s(t) 代表週期性的變化,例如一週或一年的週期性。h(t) 代表節假日等偶然一天或幾天造成的影響。ϵ 是誤差項,代表本模型沒有考慮到的誤差的影響。

這種設置與GAM(Hastile,1987)方法類似,GAM方差對迴歸量進行了各種非線性平滑後,加入到了迴歸模型中。本文的模型只採用時間作爲迴歸量,有時候也將幾個時間的線性或非線性函數加入進來。

GAM方法的優勢是它能夠很容易地進行分解,並適應新的成分,例如當新的週期性確定時。同時,GAM不論採用backfitting還是L-BFGS(本文采用後者)都能夠快速擬合,這將有利於用戶能夠交互地進行模型參數調整。

本文模型的主要優點如下:
1. 靈活性:能夠很容易地調整週期性,並且讓用戶對趨勢進行不同的假設。
2. 與ARIMA模型不同,這些測量值不需要具有規則地間隔,也不需要對缺失值進行插值。
3. 擬合速度快
4. 預測模型具有容易解釋的參數,能夠讓分析者針對不同的假設進行改進。

3.1 The Trend Model
3.1.1 Nonlinear, Saturating Growth
Facebook中模型的增長類似於生態系統中種族數量的增長,在經歷非線性增長後到達飽和值,這種類型的增長常採用logistic增長模型,基本形式如下:

g(t)=C1+exp(k(tm))

其中,C是飽和值(承載能力),k是增長率,m是偏置參數。
對於facebook,該模型需要改進,首先是飽和值C是隨時間變化的,其次增長率也會隨着新產品發佈等原因發生變化。
在時間序列中設置若干個轉變點sj,j=1,...,S ,在這些轉變點增長率會發生變化,變化量用δj 表示在時間tj 處的變化量,構建出向量a(t){0,1}S

aj(t)={1,tsj,0,otherwise

則增長率在時間t 的表達式變爲:
k+a(tT)δ

當增長率發生變化時,偏置參數m 也應該做出相應的調整,來連接時間片段的尾部。在轉折點j 處對偏置的調整量如下:
γj=(sjml<jγl)(1k+l<jδlk+ljδl)

那麼就得到分段logistic趨勢模型:
g(t)=C(t)1+exp((k+a(t)T)δ)(t(m+a(t)T)γ)

3.1.2 Linear Trend with Changepoints
當要預測的問題沒有飽和增長的趨勢時,分段連續增長率模型有時候非常有效,表達式如下:

g(t)=(k+a(t)Tδ)t+(m+a(t)Tγ)

與前面類似,k是增長率,δ 是增長率的調整值,m是偏置參數,γj 設置爲sjδj 來使得函數連續。

3.1.3 Automatic Changepoint Selection
轉變點sj 的選擇可以根據產品發佈時間或其他影響增長率變化事件時間來指定,或者給定一個待選值的集合並自動確定。自動確定轉變點可以通過將3.1.1和3.1.2中的方程中的δ 設置一個稀疏先驗來實現。

通常設置大量的轉折點(例如,連續幾年的時間內每個月設置一個轉折點),並採用先驗δ ~Laplace(0,τ) 。其中,τ 直接控制增長率改變的靈活性,δ 稀疏先驗對主要增長率k沒有影響,當τ 變爲0時,模型變爲標準的Logistic或線性模型。

3.1.4 Trend Forecast Uncertainty
當基於歷史數據對模型外推進行預測時,趨勢將會有一個固定值。爲了估計趨勢的不確定性,將生成模型向前擴展。針對趨勢的生成模型是這樣的,在T個歷史數據中的分佈着S個轉折點,每個轉折點的增長率改變量爲δ ~Laplace(0,τ)

對未來增長率的變化的預測按照以前的方式來,不過要將τ 替換爲一個從數據中推斷出的方差。在貝葉斯架構中,可以通過對τ 設置多層先驗分佈來得到它的後驗分佈,或者可以使用增長率尺度參數的極大似然估計:λ=1sj=1S|δj|

未來轉折點是隨機取樣的,用如下方式進行,來保證轉折點的平均頻率符合歷史分佈:

j>T,{δj=0w.p.TSTδjLaplace(0,λ)w.p.ST

這樣就可以設置未來的變化趨勢與歷史上的變化趨勢有相同的頻率和幅度,進而測量不確定性。

一旦λ 從數據中推斷出以後,我們採用這種生成模型來模擬可能的未來趨勢,並用這些模擬出的趨勢來計算不確定性的間隔。

3.2 Seasonality
商業活動經常具有多個不同時長的週期性,例如5天的工作日會在每週的數據產生影響,學校的假期也會對每年的數據產生影響。爲了擬合併預測這種作用,我們必須制定出季節性模型。

本研究主要依靠傅里葉級數來構造靈活的週期性模型,可以設置P爲我們想要的時間序列的規則週期長度(例如,當以天爲單位的時間序列,可以對年度數據設置P=365.25,週數據設置P=7)。這樣,就得到了任意平滑週期效應的估算值:

s(t)=n=1N(ancos(2πntP)+bnsin(2πntP)

爲了擬合週期性,需要估計這2N個參數β=[a1,b1,...,aN,bN] 。這是通過對歷史上和未來的每個t值構建一個季節性向量矩陣來實現的,例如對於每年的週期性,設置N=10,
X(t)=[cos(2π(1)t365.25),...,sin(2π(10)365.25)]

這時,季節性組分爲:
s(t)=X(t)β

在我們的生成模型中,我們採用β ~Normal(0,σ2) 來對季節性施加一個先驗分佈。

將傅里葉級數的項數N進行截斷相當於對季節性施加了一個低通濾波器,增加N能夠提高擬合效率,但是會有過擬合的風險。對於年和周的季節性,我們發現N=10和N=3效果最好。這些參數的選擇能夠通過模型選擇程序例如AIC來自動實現。

3.3 Holidays and Events
節假日和重要事件會對很多商業事件序列產生重要影響,這些的作用通常是可以預測的,但是由於它們的週期性不固定,使得它們不能通過週期性模型來實現。例如,美國感恩節是11月的第四個星期四,超級碗在每年一月或二月的一個週日,很難用程序來確定,還有很多亞洲國家的農曆節日等。這些特定節假日對時間序列的影響在每年通常都是類似的,把它們考慮進模型中非常重要。

整理出一個過去和未來事件的列表,指出事件和節假日的名字,如圖3所示。

這裏寫圖片描述
圖3 節假日和重要事件列表

直接認爲節假日的作用是獨立的,將這個列表考慮進模型中,對於每個節假日i ,讓Di 設置爲過去和未來節假日的集合。添加一個指示函數來表明時間t 是否在節假日i 中,並對每個節假日設定一個參數κi ,來對應出預測中的變化。與季節性模型處理方法類似,生成一個迴歸元的矩陣:

Z(t)=[1(tD1),...,1(tDL)]

設置
h(t)=Z(t)κ

與季節性模型類似,採用先驗κ ~Normal(0,ν2)

實際上,節假日前後一段時間都會受到影響,因此採用一個時間窗口,並把窗口期都認爲是節假日的做法經常被使用。

3.4 Model Fitting
當把季節和節假日特性組合起來放入矩陣X 中,轉折點指示器a(t) 放入矩陣A中時,整個模型

y(t)=g(t)+s(t)+h(t)+ϵ
可以表達爲簡單幾行Stan代碼,如下所示:
model {
// Priors
k ∼ normal(0, 5);
m ∼ normal(0, 5);
epsilon ∼ normal(0, 0.5);
delta ∼ double_exponential(0, tau);
beta ∼ normal(0, sigma);
// Logistic likelihood
y ∼ normal(C ./ (1 + exp(-(k + A * delta) .* (t - (m + A * gamma)))) +
X * beta, epsilon);
// Linear likelihood
y ∼ normal((k + A * delta) .* t + (m + A * gamma) + X * beta, sigma);
}

對模型的擬合採用Stan的L-BFGS來找出最大後驗估計,並且可以在考慮模型不確定性的情況下,對未來的不確定性做出完整的後驗推斷。
圖4是採用Prophet模型對facebook事件時間序列進行的預測結果,Prophet模型能夠預測周和年的週期性,而且不會在2014年年初有過激的反應。在第一個預測中,有過擬合的現象,這是由於只有一年的訓練數據。在第三個預測中,模型還沒有學習趨勢的變化。

這裏寫圖片描述圖4 Prophet模型預測結果

圖5爲預測模型學習了近3個月的數據後的預測結果,表現出了趨勢的變化(實線部分)。
這裏寫圖片描述圖5 Prophet模型採用所有可用的數據進行訓練,包括對歷史數據的插值。實線爲樣本內的擬合情況,虛線爲樣本外的預測。

可分解模型的一個重要特點是,可以看到預測模型的各個組成部分,圖6展示了圖5預測模型趨勢,周的季節性,年的季節性成分。這就爲分析人員深入理解預測問題提供了有力的工具,而不只是簡單地做出預測。

這裏寫圖片描述
圖6 圖5中Prophet預測模型的成分

Stan程序中參數tausigma 分別用於控制模型中轉折點和季節性的正則化程度。正則化參數對防止過擬合很重要,但是很難有足夠多的歷史數據來通過交叉驗證選擇出最佳的正則化參數。我們對大部分預測問題選取默認值,當需要優化時可以在分析循環過程中完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章