Facebook 時間序列預測算法 Prophet 的研究

2021-02-14 數學人生
Facebook 時間序列預測算法 Prophet 的研究Prophet 簡介

Facebook 去年開源了一個時間序列預測的算法,叫做 fbprophet,它的官方網址與基本介紹來自於以下幾個網站:

Github:

https://github.com/facebook/prophet

官方網址:

https://facebook.github.io/prophet/

論文名字與網址:

Forecasting at scale,https://peerj.com/preprints/3190/

從官網的介紹來看,Facebook 所提供的 prophet 算法不僅可以處理時間序列存在一些異常值的情況,也可以處理部分缺失值的情形,還能夠幾乎全自動地預測時間序列未來的走勢。從論文上的描述來看,這個 prophet 算法是基於時間序列分解和機器學習的擬合來做的,其中在擬合模型的時候使用了 pyStan 這個開源工具,因此能夠在較快的時間內得到需要預測的結果。除此之外,為了方便統計學家,機器學習從業者等人群的使用,prophet 同時提供了 R 語言和 Python 語言的接口。從整體的介紹來看,如果是一般的商業分析或者數據分析的需求,都可以嘗試使用這個開源算法來預測未來時間序列的走勢。

Prophet 的算法原理Prophet 數據的輸入和輸出

首先讓我們來看一個常見的時間序列場景,黑色表示原始的時間序列離散點,深藍色的線表示使用時間序列來擬合所得到的取值,而淺藍色的線表示時間序列的一個置信區間,也就是所謂的合理的上界和下界。prophet 所做的事情就是:

輸入已知的時間序列的時間戳和相應的值;

輸入需要預測的時間序列的長度;

輸出未來的時間序列走勢。

輸出結果可以提供必要的統計指標,包括擬合曲線,上界和下界等。

就一般情況而言,時間序列的離線存儲格式為時間戳和值這種格式,更多的話可以提供時間序列的 ID,標籤等內容。因此,離線存儲的時間序列通常都是以下的形式。其中 date 指的是具體的時間戳,category 指的是某條特定的時間序列 id,value 指的是在 date 下這個 category 時間序列的取值,label 指的是人工標記的標籤('0' 表示異常,'1' 表示正常,'unknown' 表示沒有標記或者人工判斷不清)。

而 fbprophet 所需要的時間序列也是這種格式的,根據官網的描述,只要用 csv 文件存儲兩列即可,第一列的名字是 'ds', 第二列的名稱是 'y'。第一列表示時間序列的時間戳,第二列表示時間序列的取值。通過 prophet 的計算,可以計算出 yhat,yhat_lower,yhat_upper,分別表示時間序列的預測值,預測值的下界,預測值的上界。兩份表格如下面的兩幅圖表示。

結束語

對於商業分析等領域的時間序列,Prophet 可以進行很好的擬合和預測,但是對於一些周期性或者趨勢性不是很強的時間序列,用 Prophet 可能就不合適了。但是,Prophet 提供了一種時序預測的方法,在用戶不是很懂時間序列的前提下都可以使用這個工具得到一個能接受的結果。具體是否用 Prophet 則需要根據具體的時間序列來確定。

參考文獻:

https://otexts.org/fpp2/components.html

https://en.wikipedia.org/wiki/Decomposition_of_time_series

A review of change point detection methods, CTruong, L. Oudre, N.Vayatis

https://github.com/facebook/prophet

https://facebook.github.io/prophet/

歡迎大家關注公眾帳號數學人生

(長按圖片,識別二維碼即可添加關注)

相關焦點

  • Prophet: 時間序列預測庫
    prophet是facebook開源的python預測庫,該庫的api設計與sklearn很像,也是分為fit方法和predict方法。
  • prophet,一款功能非常強大的時間序列預測利器!
    在日常工作中,作為一名從事數據工作的小夥伴,或多或少的都需要接觸一些算法場景,基於算法的應用方向很多,比如聚類、分類、自然語言、預測,但使用最頻繁的是就是時間序列的預測了。基於時間序列的預測,方法比較多。
  • 業界 Facebook開源大規模預測工具Prophet:支持Python和R
    對於「規模(scale)」的通常考慮涉及到計算和存儲,但這些都不是預測的核心問題。我們發現預測大量時間序列(time series)的計算和基礎設施問題是相對簡單的——通常這些擬合過程可以很容易地並行化,而預測本身也能容易地被存儲在 MySQL 這樣的關係資料庫或 Hive 這樣的數據倉庫中。
  • 基於Prophet的時間序列預測
    按照上述的四個部分,prophet的預測過程為:a.Modeling:建立時間序列模型。分析師根據預測問題的背景選擇一個合適的模型。b.Forecast Evaluation:模型評估。根據模型對歷史數據進行仿真,在模型的參數不確定的情況下,我們可以進行多種嘗試,並根據對應的仿真效果評估哪種模型更適合。
  • 時序預測框架 — Prophet介紹
    簡介Prophet[1]是 Facebook 在2017年開源的時間序列預測算法,提供了 R 和 Python 語言的支持[2]。Prophet容易上手,短短幾行代碼就能建立時序預測模型,算法的基本思想類似於時間序列分解,將時間序列分成為趨勢(Trend),季節性(seasonality)和節日(holiday)。
  • 我用Facebook開源神器Prophet,預測時間序列基於Python(代碼+論文)
    推薦乾貨:2018第三季度最受歡迎的券商金工研報前50安裝說明可以在這裡找到:https://facebook.github.io/prophet/需要有一個包含datetime欄位的'ds'列和一個包含我們想要建模/預測的值的'y'列。在我們對這些數據進行分析之前,我們需要對y變量進行log變換,嘗試將非平穩數據轉換為平穩數據。這也將趨勢轉換為更線性的趨勢。這並不是處理時間序列數據的完美方法,但它可以提高工作頻率,在你第一次了解代碼時不用擔心這個問題。
  • Prophet:Facebook 簡單高效的時間序列模型
    為此,Facebook 的研究員進行了大量的研究,並提出了 Prophet 模型,該模型非常簡單靈活,適用於沒有進行過時序預測的人員,同時也提供了非常人性化的配置。2 Prophet 預測模型這是 Facebook 的真實數據集,每一天都有一個點,點的顏色按照星期進行編碼,以展示一個星期的周期性。從這張圖中我們可以看到:這個時間序列具有周期性 (weekly、yearly)、趨勢變化性 (Trend)、異常點 (outliers) 和節假日效應 (holiday)。
  • 【時間序列】詳解Prophet模型以及代碼示例
    一、模型Propher模型使用一個可分解的時間序列模型,主要由趨勢項(trend),季節項(seasonality)和假期因素(holidays)組成會默認使用linear模型進行預測。預測增長時,通常會有承載力限制:如市場總規模,人口總數等。此時預測應達到飽和。
  • prophet應用——快速入門
    《時間序列預測—prophet算法篇》已經介紹了prophet的算法原理。接下來我們說下如何使用Prophet,本文主要翻譯自官方教程。(https://facebook.github.io/prophet/docs/quick_start.html#python-api)1 快速入門Prophet 遵循 sklearn 的API。
  • Prophet中文文檔
    Prophet是一個基於STL分解思想的預測時間序列數據的機器學習框架它對具有強烈的季節性效應和幾個季節的歷史數據的時間序列擬合效果較好。此外,Prophet對數據缺失和趨勢變化具有很強的穩健性,通常能很好地處理異常值。
  • 教程 | Prophet:教你如何用加法模型探索時間序列數據
    幾乎每個數據科學家都會在日常工作中遇到時間序列,學習如何對時間序列進行建模是一項重要的數據科學技能。用於分析和預測周期性數據時,一種強大而簡單的方法是加法模型(additive model)。這個想法很簡單:將時間序列表示為每日、每周、每季度和每年度等不同時間維度的組合模式,並加以整體趨勢。你的能源使用量可能會在夏天上升,在冬天下降,但是隨著你家庭能源使用效率的提高,能源使用量總體呈下降趨勢。
  • 時間序列預測:I概述
    常用的模型,以下基本可以涵蓋主流思想:企業研究來自工業屆的研究經驗與創新模型,值得一看的文章和模型:Uber:Time-series Extreme Event Forecasting with Neural Networks at UberUber:How Uber Manages Uncertainty in Time-Series
  • Keras 實現 LSTM時間序列預測
    向AI轉型的程式設計師都關注了這個號👇👇👇人工智慧大數據與深度學習  公眾號:datayx本文將介紹如何用 keras 深度學習的框架搭建 LSTM 模型對時間序列做預測1 項目簡單介紹1.1 背景介紹本項目的目標是建立內部與外部特徵結合的多時序協同預測系統。數據集採用來自業界多組相關時間序列(約40組)與外部特徵時間序列(約5組)。課題通過進行數據探索,特徵工程,傳統時序模型探索,機器學習模型探索,深度學習模型探索(RNN,LSTM等),算法結合,結果分析等步驟來學習時序預測問題的分析方法與實戰流程。
  • NeuralProphet中文文檔
    NeuralProphet是一個Facebook Prophet和AR-Net的啟發,在PyTorch上構建的基於神經網絡的時間序列模型我們的願景是為用戶開發一個簡單易用的預測工具,同時保留Prophet的原始目標,如可解釋性、可配置性,並通過使用PyTorch作為後端提供更多的功能,如自動差分功能。
  • 時間序列可預測性度量
    前言是否容易預測,不是能否預測的問題,而是是否可以精確預測。精確一詞,用業界最常用的MAE度量:1.序列長度當拿到樣本數據,首先會看序列的長短,很短的序列,往往意味著只有很少的信息提供給我們,比如在一份有24期的月氣溫數據的時候,只有前面5期的數據,就無法判斷其周期性。
  • AIOps系列(1):時間序列分析的方法
    談到時間序列分析,大多數的故事都是機票訂單數這樣的東西,各位學起來難,數據也屬於非常理想的季節性和趨勢性的那種,毫無意義。
  • 基於 Keras 用深度學習預測時間序列
    時間序列預測一直以來是機器學習中的一個難題。
  • MATLAB 基於灰色神經網絡的預測算法研究—訂單需求預測
    ,部分信息未知的「小樣本」,「貧信息」不確定系統為研究對象,通過對「部分」已知信息的生成、開發,提取有價值的信息,實現對系統運行行為、演化規律的正確描述和有效監控。灰色理論強調通過對無規律的系統已知信息的研究,提煉和挖掘有價值的信息,進而用已知信息取揭示未知信息,使系統不斷「白化」。灰色系統中建立的模型稱為灰色模型(Grey Model),簡稱GM模型,該模型是以原始數據序列為基礎建立的微分方程。
  • R語言基於遞歸神經網絡RNN的溫度時間序列預測
    我們演示有關溫度預測問題的三個概念,我們使用建築物屋頂上的傳感器的時間數據序列。概述在本文中,我們將介紹三種提高循環神經網絡性能和泛化能力的高級技術。在最後,您將了解有關將循環網絡與Keras一起使用的大部分知識。您可以訪問來自建築物屋頂上的傳感器的時間數據序列,例如溫度,氣壓和溼度,這些數據點可用於預測最後一個數據點之後24小時的溫度。
  • 時間序列資料庫是數據的未來
    您可以研究它們的行為,發現模式,甚至可以想像到更多。但是將來,您的數據將成為可能。時間序列時代您將能夠分析過去,現在和未來!與僅保留數據最新狀態的舊方法相比,發生了什麼變化?您每分鐘都在生成更多數據!我們正在獲得更好的硬體,存儲和更智能的算法。數據是做任何事情的標準。