<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 如何用 Python 可視化時間序列殘差預測錯誤 > 原文: [https://machinelearningmastery.com/visualize-time-series-residual-forecast-errors-with-python/](https://machinelearningmastery.com/visualize-time-series-residual-forecast-errors-with-python/) 時間序列回歸問題的預測誤差稱為殘差或殘差。 仔細探索時間序列預測問題中的殘差可以告訴您很多關于您的預測模型,甚至建議改進。 在本教程中,您將了解如何從時間序列預測中可視化殘差。 完成本教程后,您將了解: * 如何創建和查看殘余錯誤隨時間變化的線圖。 * 如何查看殘差圖分布的摘要統計和圖表。 * 如何探討殘差的相關結構。 讓我們開始吧。 ## 剩余預測錯誤 時間序列預測問題的預測誤差稱為殘差或殘差。 剩余誤差計算為預期結果減去預測,例如: ```py residual error = expected - forecast ``` 或者,更簡潔,并使用標準術語: ```py e = y - yhat ``` 我們經常停在那里并總結模型的技巧作為此錯誤的摘要。 相反,我們可以在所有預測中收集這些個別殘差,并使用它們來更好地理解預測模型。 通常,在探索殘差時,我們正在尋找模式或結構。模式的標志表明錯誤不是隨機的。 我們期望殘差是隨機的,因為這意味著模型已經捕獲了所有結構,剩下的唯一錯誤是無法建模的時間序列中的隨機波動。 模式或結構的標志表明模型可以捕獲并使用更多信息來進行更好的預測。 在我們開始探索在殘差中尋找模式的不同方法之前,我們需要上下文。在下一節中,我們將查看一個數據集和一個簡單的預測方法,我們將使用它們來生成本教程中要探索的殘差。 ## 每日女性出生數據集 該數據集描述了 1959 年加利福尼亞州每日女性出生人數。 單位是計數,有 365 個觀測值。數據集的來源歸功于牛頓,1988 年。 [在此處下載并了解有關數據集的更多信息](https://datamarket.com/data/set/235k/daily-total-female-births-in-california-1959)。 下載數據集并將其放在當前工作目錄中,文件名為“ _daily-total-female-births.csv_ ”。 以下是從 CSV 加載每日女性出生數據集的示例。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) print(series.head()) series.plot() pyplot.show() ``` 運行該示例將打印加載文件的前 5 行。 ```py Date 1959-01-01 35 1959-01-02 32 1959-01-03 30 1959-01-04 31 1959-01-05 44 Name: Births, dtype: int64 ``` 數據集也以隨時間變化的觀察線圖顯示。 ![Daily Female Births Dataset](https://img.kancloud.cn/4e/b3/4eb3708b59d0dbf97da9b606bb8da472_800x600.jpg) 每日女性出生數據集 ### 持久性預測模型 我們可以做的最簡單的預測是預測上一個時間步驟中發生的事情將與下一個時間步驟中發生的情況相同。 這稱為“_ 樸素預測 _”或持久性預測模型。 我們可以在 Python 中實現持久性模型。 加載數據集后,它被定性為監督學習問題。創建數據集的滯后版本,其中先前時間步長(t-1)用作輸入變量,下一時間步驟(t + 1)用作輸出變量。 ```py # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] ``` 接下來,數據集分為訓練集和測試集。共有 66%的數據用于訓練,其余 34%用于測試集。持久性模型不需要訓練;這只是一種標準的測試工具方法。 拆分后,訓練和測試裝置將分為輸入和輸出組件。 ```py # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] ``` 通過預測輸出值( _y_ )作為輸入值( _x_ )的副本來應用持久性模型。 ```py # persistence model predictions = [x for x in test_X] ``` 然后將殘余誤差計算為預期結果( _test_y_ )和預測(_ 預測 _)之間的差異。 ```py # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] ``` 該示例將所有這些放在一起,并為我們提供了一組殘余預測錯誤,我們可以在本教程中探討這些錯誤。 ```py from pandas import Series from pandas import DataFrame from pandas import concat series = Series.from_csv('daily-total-female-births.csv', header=0) # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model predictions = [x for x in test_X] # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] residuals = DataFrame(residuals) print(residuals.head()) ``` 運行該示例將打印預測殘差的前 5 行。 ```py 0 9.0 1 -10.0 2 3.0 3 -6.0 4 30.0 ``` ## 剩余線圖 第一個圖是將殘差預測誤差隨時間變化作為線圖。 我們期望該圖在 0 的值附近是隨機的,并且不顯示任何趨勢或循環結構。 剩余錯誤數組可以包裝在 Pandas DataFrame 中并直接繪制。下面的代碼提供了一個示例。 ```py from pandas import Series from pandas import DataFrame from pandas import concat from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model predictions = [x for x in test_X] # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] residuals = DataFrame(residuals) # plot residuals residuals.plot() pyplot.show() ``` 運行該示例顯示了剩余時間序列的看似隨機的圖。 如果我們確實看到趨勢,季節性或循環結構,我們可以回到我們的模型并嘗試直接捕獲這些元素。 ![Line Plot of Residual Errors for the Daily Female Births Dataset](https://img.kancloud.cn/6d/40/6d40209b1e3a7ed83f0ba5736e1c390d_800x600.jpg) 每日女性出生數據集殘差的線圖 接下來,我們將查看可用于查看錯誤如何在零周圍傳播的摘要統計信息。 ## 剩余摘要統計 我們可以計算剩余誤差的匯總統計數據。 首先,我們對殘差的平均值感興趣。接近于零的值表明預測中沒有偏差,而正值和負值表明預測中存在正偏差或負偏差。 了解預測中的偏差很有用,因為它可以在使用或評估之前直接在預測中進行校正。 下面是計算殘差分布的匯總統計量的示例。這包括分布的均值和標準差,以及百分位數和觀察到的最小和最大誤差。 ```py from pandas import Series from pandas import DataFrame from pandas import concat from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model predictions = [x for x in test_X] # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] residuals = DataFrame(residuals) # summary statistics print(residuals.describe()) ``` 運行該示例顯示接近零的平均錯誤值,但可能不夠接近。 它表明可能存在一些偏差,我們可以通過執行偏差校正來進一步改進模型。這可以通過將平均殘差(0.064000)添加到預測來完成。 這可能適用于這種情況,但它是一種樸素的偏差校正形式,并且有更復雜的方法可用。 ```py count 125.000000 mean 0.064000 std 9.187776 min -28.000000 25% -6.000000 50% -1.000000 75% 5.000000 max 30.000000 ``` 接下來,我們將超越摘要統計,并查看可視化殘差錯誤分布的方法。 ## 殘差直方圖和密度圖 可以使用繪圖來更好地理解除摘要統計之外的錯誤分布。 我們希望預測誤差通常分布在零均值附近。 圖可以幫助發現此分布中的偏差。 我們可以使用直方圖和密度圖來更好地理解殘差的分布。下面是創建每個繪圖之一的示例。 ```py from pandas import Series from pandas import DataFrame from pandas import concat from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model predictions = [(x-0.064000) for x in test_X] # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] residuals = DataFrame(residuals) # histogram plot residuals.hist() pyplot.show() # density plot residuals.plot(kind='kde') pyplot.show() ``` 我們可以看到分布確實具有高斯外觀,但可能更尖,顯示具有一些不對稱性的指數分布。 如果繪圖顯示明顯非高斯分布,則表明建模過程所做的假設可能不正確,并且可能需要不同的建模方法。 大的偏斜可能表明在建模之前對數據執行變換的機會,例如采用對數或平方根。 ![Histogram Plot of Residual Errors for the Daily Female Births Dataset](https://img.kancloud.cn/93/f5/93f5d39d022ce5b0421675f94da85412_800x600.jpg) 每日女性出生數據集殘差的直方圖 ![Density Plot of Residual Errors for the Daily Female Births Dataset](https://img.kancloud.cn/6d/95/6d958d4710f9a9bedcdf9370b2a64564_800x600.jpg) 每日女性出生數據集殘差的密度圖 接下來,我們將看另一種快速,可能更可靠的方法來檢查殘差的分布是否為高斯分布。 ## 剩余 Q-Q 圖 Q-Q 圖或[分位數圖](https://en.wikipedia.org/wiki/Q%E2%80%93Q_plot)比較兩個分布,可用于查看它們恰好相似或不同。 我們可以使用 statsmodels 庫中的 [qqplot()](http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot.html)函數創建 Q-Q 圖。 Q-Q 圖可用于快速檢查殘差分布的正態性。 對這些值進行排序并與理想化的高斯分布進行比較。比較顯示為散點圖(在 x 軸上為理論值并在 y 軸上觀察),其中兩個分布之間的匹配顯示為從圖的左下到右上的對角線。 該情節有助于發現明顯的偏離這種期望。 下面是殘差的 Q-Q 圖的示例。 x 軸表示理論分位數,y 軸表示樣本分位數。 ```py from pandas import Series from pandas import DataFrame from pandas import concat from matplotlib import pyplot import numpy from statsmodels.graphics.gofplots import qqplot series = Series.from_csv('daily-total-female-births.csv', header=0) # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model predictions = [(x-0.064000) for x in test_X] # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] residuals = numpy.array(residuals) qqplot(residuals) pyplot.show() ``` 運行該示例顯示了 Q-Q 圖,該分布看起來很正常,有一些凸起和異常值。 ![Q-Q Plot of Residual Errors for the Daily Female Births Dataset](https://img.kancloud.cn/8a/3f/8a3f53f37310af6509e52e0f331d958b_800x600.jpg) 每日女性出生數據集殘差的 Q-Q 圖 接下來,我們可以檢查錯誤隨時間的相關性。 ## 殘差自相關圖 自相關計算觀察和先前時間步驟的觀察之間關系的強度。 我們可以計算剩余誤差時間序列的自相關并繪制結果。這稱為自相關圖。 我們不希望殘差之間存在任何相關性。這將通過自相關分數低于顯著性閾值(圖上的虛線和虛線水平線)來顯示。 剩余圖中的顯著自相關表明該模型可以更好地結合觀察與滯后觀察之間的關系,稱為自回歸。 Pandas 提供了一個用于計算自相關圖的內置函數,稱為 autocorrelation_plot()。 下面是可視化殘差的自相關的示例。 x 軸顯示滯后,y 軸顯示觀察值和滯后變量之間的相關性,其中相關值分別在-1 和 1 之間,用于負相關和正相關。 ```py from pandas import Series from pandas import DataFrame from pandas import concat from matplotlib import pyplot from pandas.tools.plotting import autocorrelation_plot series = Series.from_csv('daily-total-female-births.csv', header=0) # create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model predictions = [x for x in test_X] # calculate residuals residuals = [test_y[i]-predictions[i] for i in range(len(predictions))] residuals = DataFrame(residuals) autocorrelation_plot(residuals) pyplot.show() ``` 運行該示例會創建其他殘差的自回歸圖。 整個情節我們沒有看到明顯的自相關趨勢。可能存在一些值得進一步調查的正自相關,這在滯后 7 處似乎很重要。 ![Autocorrelation Plot of Residual Errors for the Daily Female Births Dataset](https://img.kancloud.cn/6c/8a/6c8a2e23d8ea9f363a060e0054d4c989_800x600.jpg) 每日女性出生數據集殘差的自相關圖 ## 摘要 在本教程中,您了解了如何使用 Python 探索殘差預測錯誤的時間序列。 具體來說,你學到了: * 如何將預測殘差的時間序列繪制為線圖。 * 如何使用統計,密度圖和 Q-Q 圖來探索殘差的分布。 * 如何檢查自相關的剩余時間序列。 您對探索剩余錯誤時間序列或本教程有任何疑問嗎? 在下面的評論中提出您的問題。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看