使用prophet庫分析航空出行人次規律
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爬蟲與Stata應用能力提升與實證前沿 寒假工作坊
課件獲取方式,請在公眾號後臺回覆關鍵詞“ 20191214 ”
覺得本文有用,請不吝點贊評論轉發~謝謝支援~
- R語言 | 使用ggsci包繪製sci風格圖表
- Python資料清洗 & 預處理入門完整指南!
- R語言 | ggplot2簡明繪圖之散點圖
- 視訊分享 | 文字分析在經管研究中的應用
- MS | 使用網路演算法識別創新的顛覆性與否
- 超級安全!Python 合成多張圖片到PDF格式
- 降本增效!12 個必須嘗試的 Python 工具包!
- 爬蟲福音:Github星標14K ,一個開源的IP代理池
- 機器學習 CatBoost 模型是如何自動處理文字資訊的?
- 這次終於徹底理解了 CatBoost 原理及應用
- Matplotlib 視覺化之箭頭與標註的高階應用
- 25個Matplotlib圖的Python程式碼,複製直接可用!
- 用了這個工具,我節省電腦幾十G儲存空間
- Asent庫 | 英文文字資料情感分析
- 使用 Auto-TS 自動化時間序列預測
- 視訊分享 | Python文字挖掘與金融科技
- 機器學習實戰 | 信用卡欺詐檢測
- 一文徹底搞懂自動機器學習AutoML:TPOT
- 使用 EvalML 自動機器學習完成 NLP 任務
- 保姆級教程,用 PyTorch 和 BERT 進行文字分類