使用prophet庫分析航空出行人次規律

語言: CN / TW / HK

Python爬蟲與Stata應用能力提升與實證前沿  寒假工作坊

Author: Greg Rafferty Title: Forecasting in Python with Facebook Prophet-How to tune and optimize Prophet using domain knowledge to add greater control to your forecasts. Site https://towardsdatascience.com/forecasting-in-python-with-facebook-prophet-29810eb57e66

網路上有很多prophet教程,但大多都比較膚淺,沒有教程教我們如何優化Prophet模型,也沒有說清楚如何結合分析師經驗進行分析預測。在本篇教程中,我試圖在這兩個問題上多下點功夫。

之前我分享過用ARIMA演算法來預測美國商業飛行市場乘客數。ARIMA能很好的預測短期趨勢,但是Facebook的工程師構建的Prophet框架還能做ARIMA做不了的事情。Prophet底層是STAN語言,這是一種概率程式語言。這使Prophet具有貝葉斯統計提供的許多優勢,包括季節性,領域知識的和使用置信區間來進行風險估計。

安裝

文章末尾會有jupyter notebook下載方式

航空乘客資料集

prophet需要傳入的時間序列資料有兩個欄位

  • ds 日期

  • y 所在日期對應的值

簡單的繪圖,趨勢是上升的,我們想了解更多,這裡就需要用到prophet庫。

Prophet引數解讀

這裡看不懂可以先跳過去,之後看到實際例子再回來瞅瞅

  • growth: 趨勢預設為線性增長'linear', 還有 'logistic'

  • changepoints : 預設不指定改變點,prophet會根據趨勢自動搜尋潛在的改變點

  • n_ changepoints :如果changepoints設定了,該引數不起作用;如果changepoints沒有設定,那麼改變點將在changepoint range範圍內搜尋。預設設定為25

  • changepoint_range : 範圍0-1,表示改變點落在趨勢中的可能的範圍。

  • yearly_seasonality : 即資料存在年度週期性變化,擬合年度趨勢。引數有'auto', 引數有'auto'、True和False

  • weekly_seasonality : 同上,擬合周度趨勢,預設為auto, 引數有'auto'、True和False

  • daily_seasonality: 同上,擬合日度趨勢,預設為auto, 引數有'auto'、True和False

  • holidays :預設為None,如果要指定傳入節假日資料,資料格式為dataframe,有兩個指定的欄位holiday和ds,其中holiday列的資料為字串, ds列為date資料型別

  • seasonality_mode : 趨勢模式有'additive'和'multiplicative',預設為加法'additive'

  • seasonality_ prior_ scale : 趨勢縮放係數,如果該引數大,會讓後續趨勢波動變大。如果係數較小,會抑制趨勢甚至熨平趨勢。預設引數設定為10

  • holiday_ prior_ scale : 類似於seasonality prior scale引數的作用,主要用於解釋節假日對趨勢波動幅度起到熨平或者加**動強度對作用。預設也是10

  • changepoint_ prior_ scale :類似於seasonality prior scale引數的作用,主要用於解釋改變點對趨勢波動幅度起到熨平或者加**動強度對作用。預設是0.05

  • mcmc_samples :引數為整數。如果大於0, 模型使用貝葉斯推斷;如果設定為0,使用最大後驗概率估計(MAP)

  • interval_ width :浮點數型別,為預測提供不確定性區間的寬度。如果mcmc samples = 0,則模型使只使用MAP估計得出的趨勢中的不確定性;如果mcmc.samples> 0,則將對所有模型引數進行積分,其中將包括季節性不確定性。

  • uncertainty_samples :用於估計不確定性間隔的模擬次數,預設為1000

趨勢分解

我們想看看乘客出行的規律,比如

  • 乘客出行的總體趨勢是上升還是下降

  • 每週的星期幾是出行高峰

  • 12個月份是否存在季度或者月份區別

這裡我做一個6年的預測,頻率是月份,即未來 6*12=72 期的預測。


看圖總結

  • 航空出行的總體趨勢是穩步發展。

  • 每週的週五是出行高峰期,這跟我們的常識一致。

  • 每年年度範圍內,2月, 678航空乘客較多。

還有一個要注意的地方, 而且我們發現在1954-1956之前趨勢有轉折,在此之後增長加快了一些。這說明在1954-1956年區間段有較大的轉折,可能是政策發生改變。

標註改變

在趨勢圖中加入 改變的 標註

  • ax : 趨勢圖,這裡我們輸入的fig.gca() gca是get current axis的意思

  • m :prophet模型

  • fcst: prophet的預測

這裡我們可以在圖中標註改變點,使用到 add changepoints to_plot 函式

近期文章

精選課程 | Python資料分析實戰(學術)

Python爬蟲與Stata應用能力提升與實證前沿  寒假工作坊

使用Python讀取圖片中的文字資料

Loughran&McDonald金融文字情感分析庫

股評師分析報告文字情感分析預測股價

如何使用seaborn繪製組合圖

程式碼不到40行的超燃動態排序圖

使用Python自動生成事件分析圖譜

使用分析師報告中含有的情感資訊預測上市公司股價變動

日期資料操作第1期 datetime庫

日期資料操作第2期 pandas庫

史上最大規模1.4億中文知識圖譜開源下載

【公開視訊課】Python語法快速入門

【公開視訊課】Python爬蟲快速入門

文字資料分析文章彙總(2016-至今)

當文字分析遇到亂碼(ง'⌣')ง怎麼辦?

當pandas遇上資料型別問題

如何理解pandas中的transform函式

一行pandas程式碼生成啞變數

Python最被低估的庫,用好了效率提升10倍!

課件獲取方式,請在公眾號後臺回覆關鍵詞“ 20191214

覺得本文有用,請不吝點贊評論轉發~謝謝支援~