<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 如何使用 Python 檢查時間序列數據是否是固定的 > 原文: [https://machinelearningmastery.com/time-series-data-stationary-python/](https://machinelearningmastery.com/time-series-data-stationary-python/) 時間序列不同于更傳統的分類和回歸預測建模問題。 時間結構為觀察增加了順序。這種強加的順序意味著需要專門處理關于這些觀察的一致性的重要假設。 例如,在建模時,假設觀測的匯總統計數據是一致的。在時間序列術語中,我們將此期望稱為時間序列是靜止的。 通過添加趨勢,季節性和其他依賴于時間的結構,可以在時間序列中容易地違反這些假設。 在本教程中,您將了解如何使用 Python 檢查時間序列是否固定。 完成本教程后,您將了解: * 如何使用線圖識別明顯的靜止和非平穩時間序列。 * 如何查看隨時間變化的均值和方差等匯總統計信息。 * 如何使用具有統計顯著性的統計檢驗來檢查時間序列是否靜止。 讓我們開始吧。 * **2017 年 2 月更新**:修正了 p 值解釋的拼寫錯誤,增加了要點,使其更加清晰。 * **更新于 May / 2018** :改進了拒絕與拒絕統計測試的語言。 ![How to Check if Time Series Data is Stationary with Python](https://img.kancloud.cn/37/de/37dedcf48cfe2c5fbdc0659ca34a9e9f_640x427.jpg) 如何使用 Python 檢查時間序列數據是否是固定的 照片由 [Susanne Nilsson](https://www.flickr.com/photos/infomastern/16011098565/) 保留,保留一些權利。 ## 固定時間序列 靜止時間序列中的觀察結果不依賴于時間。 如果沒有趨勢或季節性影響,時間序列是[靜止](https://en.wikipedia.org/wiki/Stationary_process)。按時間序列計算的匯總統計數據隨時間變化是一致的,例如觀察值的均值或方差。 當時間序列靜止時,可以更容易建模。統計建模方法假定或要求時間序列是靜止的以使其有效。 以下是靜止的[每日女性出生](https://datamarket.com/data/set/235k/daily-total-female-births-in-california-1959)數據集的示例。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) series.plot() pyplot.show() ``` 運行該示例將創建以下圖表。 ![Daily Female Births Dataset Plot](https://img.kancloud.cn/4e/b3/4eb3708b59d0dbf97da9b606bb8da472_800x600.jpg) 每日女性出生數據集圖 ## 非定時時間序列 來自非平穩時間序列的觀測顯示了季節性影響,趨勢和依賴于時間指數的其他結構。 像平均值和方差這樣的匯總統計數據會隨著時間的推移而發生變化,從而使模型可能嘗試捕獲的概念發生偏差。 經典時間序列分析和預測方法涉及通過識別和消除趨勢以及消除季節性影響來使非平穩時間序列數據靜止。 下面是一個非靜止的[航空公司乘客](https://datamarket.com/data/set/22u3/international-airline-passengers-monthly-totals-in-thousands-jan-49-dec-60#!)數據集的示例,顯示趨勢和季節性組件。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('international-airline-passengers.csv', header=0) series.plot() pyplot.show() ``` 運行該示例將創建以下圖表。 ![Non-Stationary Airline Passengers Dataset](https://img.kancloud.cn/af/52/af52a763e94dedced5b78441effbc1df_800x600.jpg) 非固定航空公司乘客數據集 ## 固定時間序列的類型 平穩性的概念來自時間序列的理論研究,它在預測時是一個有用的抽象。 如果你深入研究這個話題,你可能會遇到一些更細微的平穩性概念。他們是: 他們是: * **固定過程**:生成一系列固定觀測的過程。 * **固定模型**:描述固定觀測系列的模型。 * **Trend Stationary** :沒有趨勢的時間序列。 * **季節性文具**:沒有季節性的時間序列。 * **嚴格固定**:靜止過程的數學定義,特別是觀測的聯合分布對時移是不變的。 ## 固定時間序列與預測 你應該讓你的時間序列固定嗎? 一般來說,是的。 如果您的時間序列中有明確的趨勢和季節性,那么對這些組件進行建模,將其從觀察中移除,然后在殘差上訓練模型。 > 如果我們將靜態模型擬合到數據中,我們假設我們的數據是靜止過程的實現。因此,我們分析的第一步應該是檢查是否有任何趨勢或季節性影響的證據,如果有,則刪除它們。 - 第 122 頁,[介紹時間序列與 R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 。 統計時間序列方法甚至現代機器學習方法將受益于數據中更清晰的信號。 但… 當經典方法失敗時,我們轉向機器學習方法。當我們想要更多或更好的結果時。我們不知道如何最好地模擬時間序列數據中的未知非線性關系,并且一些方法在處理非平穩觀測或者問題的靜態和非靜態視圖的某種混合時可以產生更好的表現。 這里的建議是將時間序列的屬性視為靜止或不作為另一個信息源,可以在使用機器學習方法時在時間序列問題中使用特征工程和特征選擇。 ## 檢查平穩性 有許多方法可以檢查時間序列(直接觀察,殘差,否則)是靜止的還是非靜止的。 1. **看一下情節**:您可以查看數據的時間序列圖,并目視檢查是否有任何明顯的趨勢或季節性。 2. **摘要統計**:您可以查看季節或隨機分區數據的摘要統計信息,并檢查明顯或顯著的差異。 3. **統計檢驗**:您可以使用統計檢驗來檢查是否滿足或已經違反了平穩性的期望。 在上文中,我們已經將每日女性出生和航空旅客數據集分別定為靜止和非靜止,并且圖表顯示趨勢和季節性成分明顯缺乏和存在。 接下來,我們將看一個快速而骯臟的方法來計算和查看我們的時間序列數據集的摘要統計數據,以檢查它是否是靜止的。 ## 摘要統計 快速而骯臟的檢查以確定您的時間序列是非靜止的是查看摘要統計信息。 您可以將時間序列拆分為兩個(或更多)分區,并比較每個組的均值和方差。如果它們不同并且差異具有統計顯著性,則時間序列可能是非平穩的。 接下來,讓我們在 Daily Births 數據集上嘗試這種方法。 ### 每日出生數據集 因為我們正在研究均值和方差,所以我們假設數據符合高斯(也稱為鐘形曲線或正態)分布。 我們還可以通過觀察我們觀察的直方圖來快速檢查這一點。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) series.hist() pyplot.show() ``` 運行該示例繪制時間序列中的值的直方圖。我們清楚地看到高斯分布的鐘形曲線形狀,也許右尾更長。 ![Histogram of Daily Female Births](https://img.kancloud.cn/ab/5c/ab5c6e22aca1eb0103f05a96ff0abdbe_800x600.jpg) 每日女性出生的直方圖 接下來,我們可以將時間序列分成兩個連續的序列。然后我們可以計算每組數字的均值和方差并比較這些數值。 ```py from pandas import Series series = Series.from_csv('daily-total-female-births.csv', header=0) X = series.values split = len(X) / 2 X1, X2 = X[0:split], X[split:] mean1, mean2 = X1.mean(), X2.mean() var1, var2 = X1.var(), X2.var() print('mean1=%f, mean2=%f' % (mean1, mean2)) print('variance1=%f, variance2=%f' % (var1, var2)) ``` 運行此示例顯示均值和方差值不同,但在同一個球場中。 ```py mean1=39.763736, mean2=44.185792 variance1=49.213410, variance2=48.708651 ``` 接下來,讓我們在 Airline Passengers 數據集上嘗試相同的技巧。 ### 航空公司乘客數據集 直接切入追逐,我們可以分割我們的數據集并計算每個組的均值和方差。 ```py from pandas import Series series = Series.from_csv('international-airline-passengers.csv', header=0) X = series.values split = len(X) / 2 X1, X2 = X[0:split], X[split:] mean1, mean2 = X1.mean(), X2.mean() var1, var2 = X1.var(), X2.var() print('mean1=%f, mean2=%f' % (mean1, mean2)) print('variance1=%f, variance2=%f' % (var1, var2)) ``` 運行示例,我們可以看到均值和方差看起來非常不同。 我們有一個非平穩的時間序列。 ```py mean1=182.902778, mean2=377.694444 variance1=2244.087770, variance2=7367.962191 ``` 也許。 讓我們退一步,檢查在這種情況下假設高斯分布是否有意義,將時間序列的值繪制為直方圖。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('international-airline-passengers.csv', header=0) series.hist() pyplot.show() ``` 運行該示例表明,值的分布確實看起來不像高斯,因此均值和方差值的意義不大。 這種觀察的壓扁分布可能是非平穩時間序列的另一個指標。 ![Histogram of Airline Passengers](https://img.kancloud.cn/22/7c/227cc21787fa72587092401249c5e807_800x600.jpg) 航空公司乘客的直方圖 再次回顧時間序列的情節,我們可以看到有一個明顯的季節性成分,看起來季節性成分正在增長。 這可能表明一個季節的指數增長。可以使用對數變換將指數變化平坦回到線性關系。 下面是具有時間序列的對數變換的相同直方圖。 ```py from pandas import Series from matplotlib import pyplot from numpy import log series = Series.from_csv('international-airline-passengers.csv', header=0) X = series.values X = log(X) pyplot.hist(X) pyplot.show() pyplot.plot(X) pyplot.show() ``` 運行該示例,我們可以看到更熟悉的高斯類或類似統一的值分布。 ![Histogram Log of Airline Passengers](https://img.kancloud.cn/a8/37/a837b86041740f1de3cbcf87713fee92_800x600.jpg) 航空公司乘客的直方圖記錄 我們還創建了對數轉換數據的線圖,可以看到指數增長似乎減少了,但我們仍然有趨勢和季節性元素。 ![Line Plot Log of Airline Passengers](https://img.kancloud.cn/b2/1f/b21f978927069bf5f08816c9067e3856_800x600.jpg) 航空公司乘客的線路圖 我們現在可以計算對數變換數據集的值的均值和標準差。 ```py from pandas import Series from matplotlib import pyplot from numpy import log series = Series.from_csv('international-airline-passengers.csv', header=0) X = series.values X = log(X) split = len(X) / 2 X1, X2 = X[0:split], X[split:] mean1, mean2 = X1.mean(), X2.mean() var1, var2 = X1.var(), X2.var() print('mean1=%f, mean2=%f' % (mean1, mean2)) print('variance1=%f, variance2=%f' % (var1, var2)) ``` 運行示例顯示了每組的平均值和標準偏差值,這些值又相似但不相同。 也許,僅從這些數字來看,我們就會說時間序列是靜止的,但我們堅信在審查線圖時并非如此。 ```py mean1=5.175146, mean2=5.909206 variance1=0.068375, variance2=0.049264 ``` 這是一種快速而骯臟的方法,很容易被愚弄。 我們可以使用統計檢驗來檢查兩個高斯隨機變量樣本之間的差異是真實的還是統計的僥幸。我們可以探索統計顯著性檢驗,例如 Student t 檢驗,但由于值之間的序列相關性,事情變得棘手。 在下一節中,我們將使用統計測試來明確評論單變量時間序列是否是靜止的。 ## 增強 Dickey-Fuller 測試 統計測試對您的數據做出了強有力的假設。它們只能用于通知零假設可被拒絕或未被拒絕的程度。必須解釋結果才能使給定問題有意義。 然而,他們可以提供快速檢查和確認證據,證明您的時間序列是靜止的或非靜止的。 [增強 Dickey-Fuller 檢驗](https://en.wikipedia.org/wiki/Augmented_Dickey%E2%80%93Fuller_test)是一種稱為[單位根檢驗](https://en.wikipedia.org/wiki/Unit_root_test)的統計檢驗。 單位根檢驗背后的直覺是它確定趨勢定義時間序列的強度。 有許多單位根測試,Augmented Dickey-Fuller 可能是更廣泛使用的之一。它使用自回歸模型并優化跨多個不同滯后值的信息標準。 測試的零假設是時間序列可以由單位根表示,它不是靜止的(具有一些時間相關的結構)。替代假設(拒絕零假設)是時間序列是靜止的。 * **空假設(H0)**:如果未能被拒絕,則表明時間序列具有單位根,這意味著它是非平穩的。它有一些時間依賴的結構。 * **替代假設(H1)**:零假設被拒絕;它表明時間序列沒有單位根,這意味著它是靜止的。它沒有時間依賴的結構。 我們使用測試中的 p 值來解釋這個結果。低于閾值的 p 值(例如 5%或 1%)表明我們拒絕零假設(靜止),否則高于閾值的 p 值表明我們未能拒絕零假設(非靜止)。 * **p 值&gt; 0.05** :未能拒絕原假設(H0),數據具有單位根并且是非平穩的。 * **p 值&lt; = 0.05** :拒絕原假設(H0),數據沒有單位根并且是靜止的。 下面是在 Daily Female Births 數據集上計算 Augmented Dickey-Fuller 測試的示例。 statsmodels 庫提供實現測試的 [adfuller()](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.stattools.adfuller.html)函數。 ```py from pandas import Series from statsmodels.tsa.stattools import adfuller series = Series.from_csv('daily-total-female-births.csv', header=0) X = series.values result = adfuller(X) print('ADF Statistic: %f' % result[0]) print('p-value: %f' % result[1]) print('Critical Values:') for key, value in result[4].items(): print('\t%s: %.3f' % (key, value)) ``` 運行該示例將打印測試統計值-4。這個統計數據越負,我們就越有可能拒絕零假設(我們有一個固定的數據集)。 作為輸出的一部分,我們得到一個查找表,以幫助確定 ADF 統計數據。我們可以看到,我們的統計值-4 小于-3.449 的值,1%。 這表明我們可以拒絕具有小于 1%的顯著性水平的零假設(即,結果是統計僥幸的低概率)。 拒絕原假設意味著該過程沒有單位根,反過來,時間序列是靜止的或沒有時間依賴的結構。 ```py ADF Statistic: -4.808291 p-value: 0.000052 Critical Values: 5%: -2.870 1%: -3.449 10%: -2.571 ``` 我們可以在 Airline Passenger 數據集上執行相同的測試。 ```py from pandas import Series from statsmodels.tsa.stattools import adfuller series = Series.from_csv('international-airline-passengers.csv', header=0) X = series.values result = adfuller(X) print('ADF Statistic: %f' % result[0]) print('p-value: %f' % result[1]) print('Critical Values:') for key, value in result[4].items(): print('\t%s: %.3f' % (key, value)) ``` 運行該示例給出了與上面不同的圖片。檢驗統計量是正的,這意味著我們不太可能拒絕零假設(它看起來是非平穩的)。 將測試統計量與臨界值進行比較,看起來我們不得不拒絕零假設,即時間序列是非平穩的并且具有時間依賴性結構。 ```py ADF Statistic: 0.815369 p-value: 0.991880 Critical Values: 5%: -2.884 1%: -3.482 10%: -2.579 ``` 讓我們再次對數據集進行日志轉換,使值的分布更加線性,更好地滿足此統計檢驗的預期。 ```py from pandas import Series from statsmodels.tsa.stattools import adfuller from numpy import log series = Series.from_csv('international-airline-passengers.csv', header=0) X = series.values X = log(X) result = adfuller(X) print('ADF Statistic: %f' % result[0]) print('p-value: %f' % result[1]) for key, value in result[4].items(): print('\t%s: %.3f' % (key, value)) ``` 運行該示例顯示測試統計信息的負值。 我們可以看到該值大于臨界值,這意味著我們不能拒絕零假設,反過來說時間序列是非平穩的。 ```py ADF Statistic: -1.717017 p-value: 0.422367 5%: -2.884 1%: -3.482 10%: -2.579 ``` ## 摘要 在本教程中,您了解了如何使用 Python 檢查時間序列是否固定。 具體來說,你學到了: * 時間序列數據靜止用于統計建模方法甚至一些現代機器學習方法的重要性。 * 如何使用線圖和基本摘要統計來檢查時間序列是否靜止。 * 如何計算和解釋統計顯著性檢驗以檢查時間序列是否靜止。 您對固定和非固定時間序列或此帖有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看