博客專欄

        EEPW首頁 > 博客 > 時序分析:Python 中的 ARIMA 模型

        時序分析:Python 中的 ARIMA 模型

        發布人:ygtu 時間:2023-08-11 來源:工程師 發布文章

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

        時序分析:Python 中的 ARIMA 模型

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

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

        ARIMA 代表 自回歸積分移動平均線。它結合了三個關鍵方面:

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

        • 積分(I):使用原始觀測值的差分使時間序列平穩。差異運算的次數稱為 d。

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

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

        采用 ARIMA 模型時的關鍵假設:

        • 時間序列是從基礎 ARIMA 過程生成的。

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

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

        • 殘差應不相關,如果模型擬合良好,則正態分布。

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

        蟒蛇代碼示例

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

        數據加載

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

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

        我們可以使用熊貓“繪圖”功能來可視化股票價格和交易量隨時間的變化。很明顯,股價呈指數級增長。

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

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

        通用ARIMA模型的結果很差,因為它產生了一條平線。因此,我們決定嘗試滾動預測方法。

        注意:代碼示例是 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])

        在處理時間序列數據時,由于依賴于先前的觀測值,滾動預測通常是必要的。執行此操作的一種方法是在收到每個新觀測值后重新創建模型。

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

        # 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)
        模型評估

        我們的滾動預測 ARIMA 模型顯示,與簡單實施相比,改進了 100%,產生了令人印象深刻的結果。

        # 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

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

        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()
        時序分析:Python 中的 ARIMA 模型結論

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

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


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: python 語言模型

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湛江市| 乳源| 潞城市| 修文县| 南城县| 宁远县| 抚州市| 红原县| 青龙| 固安县| 谷城县| 洱源县| 宣威市| 都江堰市| 榆林市| 罗定市| 高要市| 娄底市| 博爱县| 遂昌县| 石河子市| 广平县| 怀来县| 原阳县| 河曲县| 青州市| 正镶白旗| 金沙县| 定南县| 文山县| 秦皇岛市| 易门县| 观塘区| 昔阳县| 连平县| 龙川县| 桐梓县| 福泉市| 邛崃市| 定安县| 怀化市|