自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解一個算法,AutoARIMAProphet

人工智能
AutoARIMA 是 ARIMA(自回歸移動平均)模型的高級實現(xiàn),可自動選擇最佳的參數(shù)組合,以優(yōu)化模型的預測性能。傳統(tǒng)的 ARIMA(p, d, q) 模型是一種強大的統(tǒng)計工具,通過結(jié)合三個組成部分來預測時間序列數(shù)據(jù)。

今天給大家分享一個強大的算法模型,AutoARIMAProphet

AutoARIMAProphet (AAP) 是一種混合模型,旨在結(jié)合兩種突出的時間序列預測技術(shù)的優(yōu)勢:AutoARIMA (AA) 和 Facebook Prophet (FBP)。

它由 Nixtla 開發(fā),旨在通過利用 AutoARIMA 的「自動超參數(shù)選擇功能」和 Facebook Prophet 的趨勢季節(jié)性分解方法提供更穩(wěn)健、更準確、更靈活的預測解決方案。

關鍵概念和組成部分

1.AutoARIMA

AutoARIMA 是 ARIMA(自回歸移動平均)模型的高級實現(xiàn),可自動選擇最佳的參數(shù)組合,以優(yōu)化模型的預測性能。

傳統(tǒng)的 ARIMA(p, d, q) 模型是一種強大的統(tǒng)計工具,通過結(jié)合三個組成部分來預測時間序列數(shù)據(jù)。

ARIMA 模型組成

  1. 自回歸 (AR) 部分
    這部分模型是一個回歸模型,使用前 p 個時刻的觀測值作為自變量來預測當前值。

    其中,??? 是模型參數(shù),ε 是誤差項。
  2. 差分 (I) 部分
    為了使時間序列數(shù)據(jù)穩(wěn)定,可能需要對原始數(shù)據(jù)進行一次或多次差分。d 是差分次數(shù)。
  3. 移動平均 (MA) 部分
    這部分模型用前幾個時間點的預測誤差來做預測。q 是MA部分的階數(shù)。

    其中,θθθ 是模型參數(shù)。

AutoARIMA 的優(yōu)點

  1. 參數(shù)選擇
    AutoARIMA 的主要優(yōu)點是它可以自動選擇最合適的 p、d 和 q 參數(shù)。
  2. 交叉驗證
    為防止過擬合,AutoARIMA 可以使用時間序列的交叉驗證方法,例如滾動預測起點,來確保模型在未見數(shù)據(jù)上也表現(xiàn)良好。
  3. 模型優(yōu)化
    自動化的過程不僅試圖找到最佳的超參數(shù),還會嘗試不同的模型組合和轉(zhuǎn)換方法,如對數(shù)轉(zhuǎn)換或去趨勢方法,以找到最佳的模型。

在 Python 中,可以通過 pmdarima 庫中的 auto_arima 函數(shù)輕松實現(xiàn) AutoARIMA 模型。這使得它在商業(yè)分析、財務預測、天氣預測等領域得到廣泛應用。

2.Prophet

Prophet 是一個由 Facebook 開發(fā)的開源時間序列預測庫,專門設計用于處理表現(xiàn)出強烈季節(jié)性影響和趨勢的時間序列數(shù)據(jù)。

基本原理

Prophet 模型基于一個可加模型,其中時間序列被假設為三個主要組成部分的和:趨勢、季節(jié)性和節(jié)假日效應。

數(shù)學上可以表示為:

其中

  •  是預測值。
  •  是趨勢組件,用于模擬時間序列的非周期性變化。
  •  是季節(jié)性組件,捕捉周期性變化如日季節(jié)性、周季節(jié)性等。
  •  是節(jié)假日組件,用于模擬節(jié)假日對時間序列的影響。
  •  是誤差項,通常假設為正態(tài)分布。

主要特點

  • 易于使用
  • 靈活性,可以定制處理各種類型的時間序列數(shù)據(jù)和特定業(yè)務場景。
  • 穩(wěn)健性,有效管理異常值和缺失數(shù)據(jù),在各種條件下提供可靠的預測。
  • 加法模型,它將時間序列數(shù)據(jù)建模為趨勢、季節(jié)性和假期的加法組合。
  • 處理缺失數(shù)據(jù),它對缺失數(shù)據(jù)點具有很強的魯棒性,并且可以處理趨勢或季節(jié)性的變化。

3.AutoARIMAProphet 模型

AutoARIMAProphet 結(jié)合了 AutoARIMA 和 Facebook Prophet 的優(yōu)勢,創(chuàng)建了一個強大的混合預測模型。

這種集成旨在利用 AutoARIMA 的自動參數(shù)選擇和 Facebook Prophet 的趨勢季節(jié)性分解功能。

圖片圖片

如上圖所示,它說明了 AutoARIMAProphet (AAP) 算法的一般工作流程。

以下是算法中每個步驟的詳細說明。

  1. 輸入歷史數(shù)據(jù)
    AutoARIMAProphet 算法的第一步是輸入歷史時間序列數(shù)據(jù)。該數(shù)據(jù)通常包括需要預測的變量的過去觀測值以及任何相關日期或時間戳。
  2. 使用 Prophet 模型檢測時間序列特征
    Facebook 的 Prophet 模型用于分析和檢測時間序列數(shù)據(jù)的關鍵特征。
    這包括識別趨勢、季節(jié)性以及可能影響數(shù)據(jù)的假期或其他事件。
  3. 生成一組 ARIMA 模型
    基于 Prophet 模型檢測到的特征,生成一系列 ARIMA 模型。
    每個模型代表 ARIMA 參數(shù)(p、d、q)和潛在季節(jié)性成分的不同組合。
  4. 在時間序列數(shù)據(jù)上評估每個模型
    評估每個生成的 ARIMA 模型以確定其在時間序列數(shù)據(jù)上的性能。
  5. 選擇性能最佳的模型
    根據(jù)評估指標選擇性能最佳的 ARIMA 模型。
  6. 將選定的模型與數(shù)據(jù)擬合
    然后將選定的 ARIMA 模型擬合到整個時間序列數(shù)據(jù),以優(yōu)化其預測參數(shù)。
  7. 使用擬合模型進行預測
    擬合模型用于生成時間序列未來值的預測。
  8. 輸出預測和關鍵模型參數(shù)
    最后一步輸出預測值和模型的關鍵參數(shù)。

案例分享

首先加載數(shù)據(jù)并切分為訓練集和測試集。

from sklearn.model_selection import train_test_split as TTS
import pandas as pd
import time

data_full = pd.read_csv('test.csv',index_col=0)
data_full['ds'] = pd.to_datetime(data_full['ds'])
df_dataCol = data_full.drop('y', axis = 1)

X = data_full[df_dataCol.columns]
Y = data_full['y']
# Y = df["Closing Price"] / df["Closing Price"].max()

X_train, X_test, Y_train, Y_test = TTS(X, Y,
                                       test_size = 0.05,
                                       random_state = 0,
                                       shuffle=False)

df_train = X_train.join(Y_train)
df_test = X_test.join(Y_test)

接下來,構(gòu)建模型并訓練。

from statsforecast.adapters.prophet import AutoARIMAProphet
from tqdm import tqdm

start = time.time()
# Initialize the AutoARIMAProphet model configurations
model_config = {
    "growth": "logistic",
    "yearly_seasonality": True,
    "seasonality_mode": "multiplicative",
    "seasonality_prior_scale": 10,
    "holidays_prior_scale": 10,
    "changepoint_prior_scale": 0.05,
    "interval_width": 0.75,
    "uncertainty_samples": 1000
}

cap = 10
floor = 5.5

# Instantiate models
aap = AutoARIMAProphet(**model_config)
aapM2 = AutoARIMAProphet(**model_config)

df_train['cap'] = cap
df_train['floor'] = floor

# Fit the first model
with tqdm(total=1, desc="Fitting First Model") as pbar:
    aap1 = aap.fit(df_train, disable_seasonal_features=False)
    pbar.update(1)

# aap = aap.fit(df_train)
print("Train:", time.time() - start)

combined_df = pd.concat([df_train, df_test])

df_train['cap'] = cap
df_train['floor'] = floor

df_test['cap'] = cap
df_test['floor'] = floor

combined_df['cap'] = cap
combined_df['floor'] = floor

# Fit the second model
with tqdm(total=1, desc="Fitting Second Model") as pbar:
    aap2 = aapM2.fit(combined_df, disable_seasonal_features=False)
    pbar.update(1)


aap_pred_forecast = aap2.make_future_dataframe(periods = 1826, freq = 'D', include_history = True)
aap_pred_forecast['cap'] = cap
aap_pred_forecast['floor'] = floor

# Making predictions
with tqdm(total=2, desc="Making Predictions") as pbar:
    aap_pred_test = aap1.predict(df_test)
    aap_pred_train = aap1.predict(df_train)
    aap_pred_forecast = aap2.predict(aap_pred_forecast)
    pbar.update(2)

print("Pred:", time.time() - start)

最后,我們來看一下預測的結(jié)果。

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))

plt.plot(df_train['ds'], df_train['y'], label='Train Data')
plt.plot(aap_pred_train['ds'], aap_pred_train['yhat'], label='Train Validation - Prediction')

plt.plot(df_test['ds'], df_test['y'], label='Test Data')
plt.plot(aap_pred_test['ds'], aap_pred_test['yhat'], label='Test Validation Data - Prediction')


plt.fill_between(aap_pred_forecast['ds'], aap_pred_forecast['yhat_lower'], aap_pred_forecast['yhat_upper'], color='gray', alpha=0.2)
plt.legend()
plt.xlabel('Date')
plt.ylabel('IDX KOMPAS 100 Stock Price')
plt.show()

圖片圖片

責任編輯:武曉燕 來源: 程序員學長
相關推薦

2009-07-15 13:41:00

JDBC實例

2024-07-30 08:08:49

2024-08-08 12:33:55

算法

2024-07-19 08:21:24

2024-06-03 08:09:39

2024-06-06 09:44:33

2024-12-19 00:16:43

2024-07-12 08:38:05

2024-08-02 10:28:13

算法NLP模型

2024-08-21 08:21:45

CNN算法神經(jīng)網(wǎng)絡

2024-09-09 23:04:04

2024-08-12 00:00:05

集成學習典型算法代碼

2024-06-20 08:52:10

2024-08-22 08:21:10

算法神經(jīng)網(wǎng)絡參數(shù)

2009-07-22 17:15:04

C#實現(xiàn)

2024-08-29 09:18:55

2009-07-06 18:28:26

Java Socket

2011-08-23 17:42:42

Lua腳本

2010-01-26 13:15:42

ASP.NET MVC

2024-11-11 00:00:02

卷積神經(jīng)網(wǎng)絡算法
點贊
收藏

51CTO技術(shù)棧公眾號