<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 時(shí)序分析:Python 中的 ARIMA 模型

時(shí)序分析:Python 中的 ARIMA 模型

發(fā)布人:ygtu 時(shí)間:2023-08-11 來(lái)源:工程師 發(fā)布文章

時(shí)間序列分析廣泛用于預測和預測時(shí)間序列中的未來(lái)點(diǎn)。自回歸積分移動(dòng)平均線(xiàn)(ARIMA)模型廣泛用于時(shí)間序列預測,被認為是最流行的方法之一。在本教程中,我們將學(xué)習如何在 Python 中構建和評估用于時(shí)間序列預測的 ARIMA 模型。

時(shí)序分析:Python 中的 ARIMA 模型

推薦:使用NSDT場(chǎng)景編輯器快速助你搭建可二次編輯的3D應用場(chǎng)景
什么是ARIMA模型?

ARIMA 模型是用于分析和預測時(shí)間序列數據的統計模型。ARIMA 方法明確迎合了時(shí)間序列中的標準結構,為制作熟練的時(shí)間序列預測提供了一種簡(jiǎn)單而強大的方法。

ARIMA 代表 自回歸積分移動(dòng)平均線(xiàn)。它結合了三個(gè)關(guān)鍵方面:

  • 自回歸 (AR):使用當前觀(guān)測值和滯后觀(guān)測值之間相關(guān)性的模型。滯后觀(guān)測值的數量稱(chēng)為滯后順序或 p。

  • 積分(I):使用原始觀(guān)測值的差分使時(shí)間序列平穩。差異運算的次數稱(chēng)為 d。

  • 移動(dòng)平均線(xiàn) (MA):模型考慮當前觀(guān)測值與應用于過(guò)去觀(guān)測值的移動(dòng)平均模型的殘差之間的關(guān)系。移動(dòng)平均線(xiàn)窗口的大小是階數或 q。

ARIMA 模型使用符號 ARIMA(p,d,q) 定義,其中 p、d 和 q 替換為整數值以指定所使用的確切模型。

采用 ARIMA 模型時(shí)的關(guān)鍵假設:

  • 時(shí)間序列是從基礎 ARIMA 過(guò)程生成的。

  • 參數 p、d、q 必須根據原始觀(guān)測值適當指定。

  • 在擬合 ARIMA 模型之前,必須通過(guò)差分使時(shí)間序列數據變得平穩。

  • 殘差應不相關(guān),如果模型擬合良好,則正態(tài)分布。

總之,ARIMA 模型提供了一種結構化且可配置的方法,用于為預測等目的對時(shí)間序列數據進(jìn)行建模。接下來(lái),我們將研究在 Python 中擬合 ARIMA 模型。

蟒蛇代碼示例

在本教程中,我們將使用 Kaggle 的 Netflix 股票數據使用 ARIMA 模型預測 Netflix 股票價(jià)格。

數據加載

我們將加載我們的股票價(jià)格數據集,并將“日期”列作為索引。

import pandas as pd


net_df = pd.read_csv("Netflix_stock_history.csv", index_col="Date", parse_dates=True)
net_df.head(3)
時(shí)序分析:Python 中的 ARIMA 模型數據可視化

我們可以使用熊貓“繪圖”功能來(lái)可視化股票價(jià)格和交易量隨時(shí)間的變化。很明顯,股價(jià)呈指數級增長(cháng)。

net_df[["Close","Volume"]].plot(subplots=True, layout=(2,1));
時(shí)序分析:Python 中的 ARIMA 模型滾動(dòng)預測 ARIMA 模型

我們的數據集已拆分為訓練集和測試集,我們繼續訓練 ARIMA 模型。然后預測了第一個(gè)預測。

通用ARIMA模型的結果很差,因為它產(chǎn)生了一條平線(xiàn)。因此,我們決定嘗試滾動(dòng)預測方法。

注意:代碼示例是 BOGDAN IVANYUK 筆記本的修改版本。

from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error, mean_absolute_error
import math


train_data, test_data = net_df[0:int(len(net_df)*0.9)], net_df[int(len(net_df)*0.9):]


train_arima = train_data['Open']
test_arima = test_data['Open']


history = [x for x in train_arima]
y = test_arima
# make first prediction
predictions = list()
model = ARIMA(history, order=(1,1,0))
model_fit = model.fit()
yhat = model_fit.forecast()[0]
predictions.append(yhat)
history.append(y[0])

在處理時(shí)間序列數據時(shí),由于依賴(lài)于先前的觀(guān)測值,滾動(dòng)預測通常是必要的。執行此操作的一種方法是在收到每個(gè)新觀(guān)測值后重新創(chuàng )建模型。

為了跟蹤所有觀(guān)察結果,我們可以手動(dòng)維護一個(gè)名為 history 的列表,該列表最初包含訓練數據,每次迭代都會(huì )附加新的觀(guān)察結果。這種方法可以幫助我們獲得準確的預測模型。

# rolling forecasts
for i in range(1, len(y)):
    # predict
    model = ARIMA(history, order=(1,1,0))
    model_fit = model.fit()
    yhat = model_fit.forecast()[0]
    # invert transformed prediction
    predictions.append(yhat)
    # observation
    obs = y[i]
    history.append(obs)
模型評估

我們的滾動(dòng)預測 ARIMA 模型顯示,與簡(jiǎn)單實(shí)施相比,改進(jìn)了 100%,產(chǎn)生了令人印象深刻的結果。

# report performance
mse = mean_squared_error(y, predictions)
print('MSE: '+str(mse))
mae = mean_absolute_error(y, predictions)
print('MAE: '+str(mae))
rmse = math.sqrt(mean_squared_error(y, predictions))
print('RMSE: '+str(rmse))
MSE: 116.89611817706545
MAE: 7.690948135967959
RMSE: 10.811850821069696

讓我們可視化并將實(shí)際結果與預測結果進(jìn)行比較。很明顯,我們的模型已經(jīng)做出了高度準確的預測。

import matplotlib.pyplot as plt
plt.figure(figsize=(16,8))
plt.plot(net_df.index[-600:], net_df['Open'].tail(600), color='green', label = 'Train Stock Price')
plt.plot(test_data.index, y, color = 'red', label = 'Real Stock Price')
plt.plot(test_data.index, predictions, color = 'blue', label = 'Predicted Stock Price')
plt.title('Netflix Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Netflix Stock Price')
plt.legend()
plt.grid(True)
plt.savefig('arima_model.pdf')
plt.show()
時(shí)序分析:Python 中的 ARIMA 模型結論

在這個(gè)簡(jiǎn)短的教程中,我們概述了 ARIMA 模型以及如何在 Python 中實(shí)現它們以進(jìn)行時(shí)間序列預測。ARIMA 方法提供了一種靈活且結構化的方式來(lái)對依賴(lài)于先前觀(guān)測值和過(guò)去預測誤差的時(shí)間序列數據進(jìn)行建模。如果您對 ARIMA 模型和時(shí)間序列分析的全面分析感興趣,我建議您查看使用時(shí)間序列分析進(jìn)行股票市場(chǎng)預測。

原文鏈接:時(shí)序分析:Python 中的 ARIMA 模型 (mvrlink.com)


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: python 語(yǔ)言模型

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>