论文笔记:Forecasting at Scale(Prophet)
1 時間序列數據的特征
圖 2:在 Facebook 上創建的事件數量。 每天都有一個點,點按星期幾用顏色編碼以顯示每周周期。 這個時間序列的特征代表了很多業務時間序列:多重強季節性、趨勢變化、異常值、假期效應。
????????很多時間序列數據都有共同的特征。
????????圖 2 顯示了 Facebook 事件的時間序列。 用戶可以為事件創建頁面、邀請他人參與互動。
????????在這個時間序列中有幾個明顯的季節性影響:每周和每年的周期,以及圣誕節和新年前后的明顯下降。
?????????與此同時,時間序列在過去六個月中也顯示出明顯的趨勢變化,這可能出現在受新產品或市場變化影響的時間序列中。
???????? 最后,真實數據集通常有異常值,這個時間序列也不例外。
1.1 現有方法的局限性
?????????圖 3:使用幾個不同的時間序列模型對圖 2 中的時間序列進行預測。
????????預測使用的是過去的三個對應時間片的觀測值,因而每個點都只使用到這些點的時間序列。(個人理解是周一只用之前三周的周一;周二只用之前三周的周二。。。如此云云)
???????? 每天的預測按星期幾進行分組和著色,以可視化每周的季節性。
? ? ? ? 方便起見,我們在繪圖期間刪除了異常值。
????????圖 3 中的方法通常難以產生與實際的時間序列相匹配的預測。
????????當截止期附近的趨勢發生變化時,自動 ARIMA 預測容易出現大的趨勢錯誤,并且它們無法捕捉任何季節性。
?????????指數平滑(ets)和季節性樸素預測(snaive)捕捉每周季節性,但錯過了長期季節性。
???????? 所有方法都對年終下降反應過度,因為它們沒有充分模擬年度季節性。
????????當預測不佳時,我們希望能夠針對手頭的問題調整方法的參數。 調整這些方法需要徹底了解底層時間序列模型的工作原理。
????????例如,自動化 ARIMA 的第一個輸入參數是差分的最大階數、自回歸分量和移動平均分量。 但如何合理地確定這些變量,是一個較為深奧的問題??
2 Prophet 模型
????????我們使用具有三個主要模型組件的可分解時間序列模型:趨勢、季節性和假期。 它們組合在以下等式中: ?
????????
?????????這里 g(t) 是對時間序列值的非周期性變化建模的趨勢函數,
????????s(t) 代表周期性變化(例如,每周和每年的季節性)
????????而 h(t) 代表假期的影響 發生在一天或多天的潛在不規則時間表。
???????? 誤差項 εt 表示任何其他的特殊變化; 稍后我們將做參數假設,即 εt 是正態分布的。
2.1 建模趨勢
我們實現了兩種趨勢模型:飽和增長模型和分段線性模型。 ?
2.1.1 非線性,飽和增長模型
????????對于增長預測,數據生成過程的核心組成部分是關于人口如何增長以及預計如何繼續增長的模型。
???????? Facebook 的增長建模通常類似于自然生態系統中的人口增長(例如,Hutchinson 1978),其中非線性增長在承載能力下飽和。 例如,特定區域 Facebook 用戶數量的承載能力可能是可以訪問 Internet 的人數。
????????這種增長通常使用邏輯增長模型進行建模,其最基本的形式是
????????
?????????其中 C 是承載能力(最大漸進值),k 是增長率,m 是偏移參數(曲線的終點,等一C/2的位置)。(這是一個(0,C)的取值范圍)
????????Facebook 增長的兩個重要方面在(2)中沒有體現。
???????? 首先,承載能力C不是恒定的——隨著世界上可以訪問互聯網的人數增加,增長上限也隨之增加。 因此,我們用隨時間變化的容量 C(t) 替換固定容量 C。
???????? 二是增速k并非恒定。 新產品可以深刻地改變一個地區的增長率,因此模型必須能夠納入變化的增長率以擬合歷史數據。 ?
?2.1.1.1 變化增長率的計算
????????我們通過明確定義允許增長率變化的變化點將趨勢變化納入增長模型 ?
(這里借用一張圖,比較好地說明變點的情況)
? ? ? ? 假設我們由S個趨勢增長率變化點,每個變化點相當于是一個時刻,過了這個時刻變化率就需要變化
? ? ? ? 所以我們假設基礎增長率為k,那么時刻t的實際變化率為?
? ? ? ?
????????如果我們將所有的拼接成一個列向量,然后我們在每個時刻k設置一個這樣的指示向量a(t)
?????????
? ? ? ? 于是我們時刻t的增長率為: ;?
2.1.1.2 偏移參數的相應增長
?
設置γj的意思是為了讓函數連續,也就是考慮了和剛不考慮的時,值要一樣
?
?
所以此時分段邏輯增長模型是
?
?2.1.1.3 承載能力的確定
????????我們模型中的一組重要參數是 C(t),即系統在任何時間點的預期容量。 分析師通??梢远床焓袌鲆幠?#xff0c;并可以相應地進行設置。 也可能有外部數據源可以提供承載能力,例如世界銀行的人口預測。
?????????這里介紹的邏輯增長模型是廣義邏輯增長曲線的一個特例,它只是單一類型的 sigmoid 曲線。 將此趨勢模型擴展到其他曲線族很簡單。
2.1.2?帶有變化點的線性趨勢
????????對于不表現出飽和增長的預測問題,分段恒定增長率提供了一個簡潔且通常有用的模型。 這里的趨勢模型是
????????
? ? ? ? 這里k是基本增長率,δ是增長率調整向量(和2.1.1.1一樣),m是偏移量,γj被設置為?,作用和2.1.1.2一樣,也是為了連續
2.1.3?自動變更點選擇
????????變更點 sj 可以由已知的產品發布日期和其他改變增長的事件來指定,或者可以在給定一組候選者的情況下自動選擇。
???????? 通過在 δ 上放置稀疏先驗,可以使用 (3) 和 (4) 中的公式(邏輯斯蒂or線性)很自然地完成自動選擇。
???????? 我們經常指定大量的變化點(例如,對于幾年的時間跨度,每月一個變更點)并使用先驗概率分布 δj ~ Laplace(0, τ )。
? ? ? ? 先驗概率中的參數 τ 直接控制模型改變其速率的靈活性。重要的是,調整 δ 的稀疏先驗對主要增長率 k 影響甚小,
????????當 τ 變為 0 時,擬合會降低到標準(非分段)邏輯或線性增長
2.2 建模季節性
? ? ? ? 時間序列通常具有多周期季節性。 例如,一周工作 5 天可以對每周重復的時間序列產生影響,而假期安排和學校假期可以產生每年重復的影響。 為了擬合和預測這些影響,我們建模時間序列的季節性特征。
? ? ? ? 我們使用傅里葉級數來表示周期特點
?
? ? ? ? 要建模時間序列的周期性,我們需要預測這2N個參數
? ? ? ? ?比如我們令
那么
這里提供一個先驗(σ越大,表示季節的效應越明顯)
2.2.1 傅里葉級數N的選擇? ? ??
???在 N 處截斷序列對季節性應用了低通濾波器,因此增加 N 可以擬合變化更快的季節性模式,盡管過度擬合的風險會增加。????????
???????? 對于每年和每周的季節性,我們發現 N = 10 和 N = 3 分別適用于大多數問題。
? ? ? ? 當然,可以使用模型選擇程序(例如 AIC)自動選擇這些參數。
2.3 假期和活動
?????????假期和事件為許多業務時間序列提供了大的、在某種程度上可預測的沖擊,并且通常不遵循周期性模式,因此它們的影響無法通過平滑周期很好地建模。 例如,美國的感恩節在 11 月的第四個星期四。 超級碗是美國最大的電視賽事之一,發生在 1 月或 2 月的一個周日。 世界上許多國家都有遵循農歷的重大假期。 特定假期對時間序列的影響通常年復一年地相似,因此將其納入預測非常重要。 ????????
????????我們允許分析師提供過去和未來事件的自定義列表,由事件或假期的唯一名稱標識,如表 1 所示。
? ? ? ?
?????????通過假設假期的影響是獨立的,可以直接將這個假期列表合并到模型中。
????????對于每個假期 i,令 Di 是受該假期影響的過去和未來日期的集合。
????????我們添加一個指標函數,表示時間 t 是否在假期 i 的影響范圍內,并為每個假期分配一個參數 κi,這是預測中的相應變化。
????????這是通過生成回歸量矩陣以與季節性相似的方式完成的
????????
? ? ? ? 表示當前時刻收到哪些假期的影響(受影響的為1,不受影響的為0)
????????
? ? ? ? 和周期性類似?,相應的加和
? ? ? ? 我們這里提供一個先驗(v越大,表示影響越大)
?2.4 模型整體
我們記變更點向量a(t)組成的矩陣為A,那么我們將2.1~2.3 結合一下
?在不考慮偏差的情況下?
3 實驗部分
????????圖 4 顯示了 Prophet 模型對圖 3 中 Facebook 事件時間序列的預測。這些預測是在與圖 3 中相同的配置進行預測的。(僅使用過去三周相同位置的數據)
???????? Prophet 預測能夠預測每周和每年的季節性,與圖 3 中的基線不同,它不會對第一年的假期下降反應過度。
????????在第一個預測中,Prophet 模型在僅給定一年數據的情況下略微過度擬合了年度季節性。 在第三次預測中,模型還沒有了解到趨勢已經改變。
圖 5 顯示 使用最近三個月數據的預測,將會顯示出趨勢變化(虛線)。 ?
?
???????可分解模型的一個重要好處是它允許我們分別查看預測的每個組成部分。 圖 6 顯示了與圖 4(圖注標的是與圖5) 中最后一次預測相對應的趨勢、每周季節性和年度季節性成分。這為分析師提供了一個有用的工具來深入了解他們的預測問題,而不僅僅是產生 一個預測。
?
4 總結
4.1 Prophet算法
?????????prophet 算法是基于時間序列分解和機器學習的擬合來做的。不僅可以處理時間序列存在一些異常值的情況,也可以處理部分缺失值的情形,還能夠幾乎全自動地預測時間序列未來的走勢。
prophet 的輸入輸出是:
?4.2 時間序列分解
?????????做時間序列分解(Decomposition of Time Series)時間序列??分成幾個部分,分別是季節項??,趨勢項,剩余項。
????????也就是說對所有的?,都有
- 加法形式?
- 乘法形式?
? ? ? ? 當然,對于乘法形式來說,只要兩邊同時加log,那么就又轉換回了加法形式。
總結
以上是生活随笔為你收集整理的论文笔记:Forecasting at Scale(Prophet)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git 笔记 上传文件至github
- 下一篇: pytorch 笔记:gather 函数