使用Python的ARIMA模型進行預測


ARIMA是一種用於時間序列預測的統計模型,它結合了三個組成部分:自迴歸 (AR)、差分積分 (I) 和移動平均 (MA)。

  • 自迴歸 (AR) − 此元件模擬觀測值與多個滯後觀測值之間的依賴關係。它基於這樣的思想:時間序列的過去值可用於預測未來值。自迴歸的階數,用“p”表示,指定要使用多少個滯後觀測值作為預測因子。

  • 差分積分 (I) − 此元件透過去除趨勢和季節性來處理時間序列資料的非平穩性。積分階數,用“d”表示,是指原始時間序列資料需要差分多少次才能使其平穩,即消除趨勢和季節性。

  • 移動平均 (MA) − 此元件模擬應用 AR 和 I 元件後時間序列殘差誤差之間的依賴關係。移動平均的階數,用“q”表示,指定要使用多少個滯後殘差誤差作為預測因子。

ARIMA 模型的一般形式為 ARIMA (p, d, q),其中 p、d 和 q 分別是自迴歸、差分積分和移動平均的階數。要將 ARIMA 模型用於預測,首先必須確定最適合資料的 p、d 和 q 值。這可以透過稱為模型選擇的流程來完成,該流程涉及擬合具有不同 p、d 和 q 組合的各種 ARIMA 模型,並選擇誤差最小的模型。

預測未來12個月的銷售額

使用 ARIMA 預測銷售額是使用統計技術根據公司的歷史銷售資料預測公司未來銷售額的過程。此過程通常包含以下步驟

  • 收集歷史銷售資料並將其轉換為時間序列格式。

  • 視覺化資料以識別任何趨勢、季節性或模式。

  • 確定使時間序列平穩所需的差分階數。

  • 根據資料中的模式選擇 ARIMA 模型的階數 (p, d, q)。

  • 將 ARIMA 模型擬合到資料並對未來銷售額進行預測。

  • 評估模型的效能並根據需要進行調整。

  • 使用模型預測未來銷售額並根據預測做出決策。

ARIMA 是銷售預測中的一種常用方法,因為它可以捕獲資料中的複雜模式並處理時間序列中的趨勢和季節性。但是,模型的效能可能會受到各種因素的影響,例如資料的質量、引數的選擇以及模型捕獲資料中潛在模式的能力。

現在讓我們來看一個使用 ARIMA 進行預測的示例。

下面使用的 dataset (sales_data.csv) 可在此處獲取。

示例

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

# Load the time series data
data = pd.read_csv('sales_data.csv')

# Fit the ARIMA model
model = sm.tsa.ARIMA(data['sales'], order=(2, 1, 1))
model_fit = model.fit()

# Forecast future values
forecast = model_fit.forecast(steps=12)

# Print the forecast
print(forecast[0])

# Plot the time series
data2=np.append(data,forecast[0])
plt.plot(data2)
plt.xlabel('Date')
plt.ylabel('Sales')
plt.title('Synthetic Time Series Data')
plt.show()

輸出

[56.29545598 56.60345925 56.90298063 57.19449608 57.47839568 57.7550522
 58.02482013 58.28803659 58.54502221 58.79608193 59.04150576 59.28156952]

在此示例中,時間序列資料是特定產品的銷售資料,從 CSV 檔案載入到 pandas 資料框中。使用 sm.tsa.ARIMA 函式將 ARIMA 模型擬合到銷售資料,並將自迴歸的階數設定為 2,差分積分的階數設定為 1,移動平均的階數設定為 1。

然後使用 model_fit 物件使用 forecast 方法生成未來銷售額的預測,其中 steps 引數為 12,以指定要預測的未來值的個數。然後列印預測結果,其中給出了未來 12 個月的預期銷售額。

自定義資料集

在本例中,我們將直接在程式碼中定義資料集。資料最初將以列表的形式存在,稍後將轉換為 Pandas 資料框。

此程式碼隨後將 ARIMA 模型擬合到自定義資料集,對接下來的 12 個時間步長進行預測,並將預測結果儲存在 predictions 變數中。在此示例中,自定義資料集是包含 12 個值的列表,但是對於任何時間序列資料,擬合 ARIMA 模型和進行預測的過程都是相同的。

示例

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# Load custom dataset
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]

# Convert data to a pandas DataFrame
df = pd.DataFrame({'values': data})

# Fit the ARIMA model
model = ARIMA(df['values'], order=(1,0,0))
model_fit = model.fit()

# Make predictions
predictions = model_fit.forecast(steps=12)
print(predictions)
# Plot the original dataset and predictions
plt.plot(df['values'], label='Original Data')
plt.plot(predictions, label='Predictions')
plt.legend()
plt.show()

輸出

12   118.967858
13   117.955086
14   116.961320
15   115.986203
16   115.029385
17   114.090523
18   113.169280
19   112.265326
20   111.378335
21   110.507989
22   109.653977
23   108.815991
Name: predicted_mean, dtype: float64

波士頓房價資料集

import numpy as np
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
import warnings
warnings.filterwarnings("ignore")

# Load the Boston dataset
boston = load_boston()
data = boston.data

# Convert data to a pandas DataFrame
df = pd.DataFrame(data, columns=boston.feature_names)

df=df.head(20)
# Fit the ARIMA model
model = ARIMA(df['CRIM'], order=(1,0,0))
model_fit = model.fit()

# Make predictions
predictions = model_fit.forecast(steps=12)
print(predictions.tolist())
# Plot the original dataset and predictions
plt.plot(df['CRIM'], label='Original Data')
plt.plot(predictions, label='Predictions')
plt.legend()
plt.show()

輸出

[0.6738187961066762, 0.6288621548198372, 0.5899808007068923, 
0.5563537401796019, 0.5272709259231514, 0.5021182639951554, 
0.4803646470141665, 0.46155073963886595, 0.44527927953934654, 
0.4312066890620576, 0.41903582046573945, 0.40850968154143097]

圖表中的所有 X 值均為索引值。

結論

ARIMA 是一種強大的時間序列預測方法,可用於在 Python 中預測股票價格。使用 ARIMA 進行預測的過程包括將時間序列資料轉換為平穩格式,確定差分、自迴歸和移動平均項的階數,將 ARIMA 模型擬合到資料,生成預測並評估模型的效能。Python 中的 statsmodels 庫提供了一種方便且高效的方法來執行 ARIMA 預測。但是,必須記住,ARIMA 只是眾多可用於股票價格預測的方法之一,並且模型的結果可能會因所用資料的質量和特性而異。

更新於:2023年10月4日

634 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.