一、什麼是fbprophet
fbprophet是Facebook開源的預測工具,它可以幫助我們快速、準確地預測時間序列數據的趨勢和季節性變化。fbprophet的模型基於擬合多個周期和非周期的季節性,並且能夠自動檢測特殊事件(例如節日)對於預測結果的影響。它與Python的數據科學生態系統密切集成,例如pandas、matplotlib和scikit-learn等。
fbprophet所提供的主要功能如下:
- 可預測性:對於給定的歷史數據,能夠自動檢測和預測未來的趨勢和季節性變化。
- 可解釋性:對於每個預測結果,都能夠提供詳細的分解圖表,以便了解到底哪些因素影響了預測結果。
- 可擴展性:儘管fbprophet在簡單性和準確性方面都相對較好,但它也可以通過自定義季節性和非周期性來滿足更複雜的時間序列分析需求。
二、如何使用fbprophet
使用fbprophet進行時間序列預測通常需要如下步驟:
- loading data
- 數據預處理
- 建立並擬合模型
- 進行預測和模型評估
以下代碼演示了如何使用fbprophet進行股市指數預測:
import pandas as pd from fbprophet import Prophet # 載入數據 df = pd.read_csv('daily_stocks.csv') df['ds'] = pd.to_datetime(df['date']) df = df[['ds', 'close']].rename(columns={'close': 'y'}) # 建立並擬合模型 model = Prophet() model.fit(df) # 進行預測 future = model.make_future_dataframe(periods=365) forecast = model.predict(future) # 模型評估 fig = model.plot(forecast)
三、如何進行模型調整
當我們發現預測結果與實際數據存在巨大偏差時,需要進行模型調整。fbprophet的主要調整參數如下:
- seasonality_prior_scale:控制季節性的先驗規模,如果值較大,則季節性特徵將更具優先順序。
- changepoint_prior_scale:控制時間突變的先驗規模,如果值較大,則趨勢將更加靈活。
- yearly_seasonality:布爾值,控制模型是否考慮年度季節性。
- weekly_seasonality:布爾值,控制模型是否考慮周季節性。
- daily_seasonality:布爾值,控制模型是否考慮日季節性。
以下代碼演示了如何使用fbprophet進行模型調整:
import pandas as pd from fbprophet import Prophet # 載入數據 df = pd.read_csv('daily_stocks.csv') df['ds'] = pd.to_datetime(df['date']) df = df[['ds', 'close']].rename(columns={'close': 'y'}) # 建立並擬合模型 model = Prophet(changepoint_prior_scale=0.05, seasonality_prior_scale=10.0, yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=True) model.fit(df) # 進行預測 future = model.make_future_dataframe(periods=365) forecast = model.predict(future) # 模型評估 fig = model.plot(forecast)
四、如何處理多變數時間序列
如果數據集包含多個變數,那麼我們可以使用fbprophet的多變數模型來進行預測。在多變數模型中,我們需要將所有變數一起傳遞給model.add_regressor() 方法來讓fbprophet建立模型。以下是一個示例:
import pandas as pd from fbprophet import Prophet # 載入數據 df = pd.read_csv('multi_var_time_series.csv') df['ds'] = pd.to_datetime(df['date']) df = df[['ds', 'y1', 'y2']] # 建立並擬合模型 model = Prophet() model.add_regressor('y2') model.fit(df) # 進行預測 future = model.make_future_dataframe(periods=365) future['y2'] = df['y2'].values forecast = model.predict(future) # 模型評估 fig = model.plot(forecast)
五、使用fbprophet進行交叉驗證
為了評估fbprophet模型的預測性能,我們可以使用交叉驗證技術。給定一個歷史時間段,我們將其分為訓練數據和測試數據。訓練數據用來訓練模型,測試數據用來評估預測結果與實際結果之間的誤差。
以下代碼演示了如何使用fbprophet進行交叉驗證:
import pandas as pd from fbprophet import Prophet from fbprophet.diagnostics import cross_validation # 載入數據 df = pd.read_csv('daily_stocks.csv') df['ds'] = pd.to_datetime(df['date']) df = df[['ds', 'close']].rename(columns={'close': 'y'}) # 進行交叉驗證 cv_results = cross_validation(Prophet(), initial='730 days', period='180 days', horizon='365 days', data=df) # 輸出誤差評估 from fbprophet.diagnostics import performance_metrics print(performance_metrics(cv_results))
六、結論
fbprophet是一個方便易用且功能強大的時間序列分析工具。它具有很強的可解釋性和可擴展性,能夠幫助我們快速、準確地預測時間序列數據的趨勢和季節性變化。在實際使用中,我們需要根據數據集的特點和預測要求進行模型選擇和參數調整,以達到最佳的預測效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/292682.html