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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何在 Python 中使用差異變換刪除趨勢和季節性 > 原文: [https://machinelearningmastery.com/remove-trends-seasonality-difference-transform-python/](https://machinelearningmastery.com/remove-trends-seasonality-difference-transform-python/) 時間序列數據集可能包含趨勢和季節性,可能需要在建模之前將其刪除。 趨勢可能導致隨時間變化的均值,而季節性可能導致隨時間變化的方差,兩者都將時間序列定義為非平穩。固定數據集是具有穩定均值和方差的數據集,并且反過來更容易建模。 差分是一種流行且廣泛使用的數據變換,用于使時間序列數據靜止。 在本教程中,您將了解如何使用 Python 將差異操作應用于時間序列數據。 完成本教程后,您將了解: * 靜止和非靜止時間序列之間的對比以及如何使用差分變換使一系列靜止。 * 如何應用差異變換從系列中刪除線性趨勢。 * 如何應用差異變換從系列中刪除季節性信號。 讓我們開始吧。 ![How to Remove Trends and Seasonality with a Difference Transform in Python](https://img.kancloud.cn/8a/fb/8afbdb323525e520f02a40d6bd10a217_640x480.jpg) 如何使用 Python 中的差異變換刪除趨勢和季節性 照片由 [NOAA](https://www.flickr.com/photos/noaaphotolib/5015132522/) ,保留一些權利。 ## 教程概述 本教程分為 4 個部分;他們是: 1. 平穩 2. 差異變換 3. 差異化去除趨勢 4. 區別于刪除季節性 ## 平穩 時間序列不同于更傳統的分類和回歸預測建模問題。 時間結構為觀察增加了順序。這種強加的順序意味著需要專門處理關于這些觀察的一致性的重要假設。 例如,在建模時,假設觀測的匯總統計數據是一致的。在時間序列術語中,我們將此期望稱為時間序列是靜止的。 通過添加趨勢,季節性和其他依賴于時間的結構,可以在時間序列中容易地違反這些假設。 ### 固定時間序列 靜止時間序列中的觀察結果不依賴于時間。 如果沒有趨勢或季節性影響,時間序列是固定的。按時間序列計算的匯總統計數據隨時間變化是一致的,例如觀察值的均值或方差。 當時間序列靜止時,可以更容易建模。統計建模方法假定或要求時間序列是靜止的。 ### 非定時時間序列 來自非平穩時間序列的觀測顯示了季節性影響,趨勢和依賴于時間指數的其他結構。 像平均值和方差這樣的匯總統計數據會隨著時間的推移而發生變化,從而使模型可能嘗試捕獲的概念發生偏差。 經典時間序列分析和預測方法涉及通過識別和消除趨勢以及消除靜止效應來使非平穩時間序列數據靜止。 ### 使系列數據固定 您可以通過查看系列隨時間變化的線圖來檢查您的時間序列是否靜止。 系列中明顯趨勢,季節性或其他系統結構的標志是非平穩序列的指標。 更準確的方法是使用統計測試,例如 Dickey-Fuller 測試。 你應該讓你的時間序列固定嗎? 一般來說,是的。 如果您的時間序列中有明確的趨勢和季節性,那么對這些組件進行建模,將其從觀察中移除,然后在殘差上訓練模型。 > 如果我們將靜態模型擬合到數據中,我們假設我們的數據是靜止過程的實現。因此,我們分析的第一步應該是檢查是否有任何趨勢或季節性影響的證據,如果有,則刪除它們。 - 第 122 頁,[介紹時間序列與 R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 。 統計時間序列方法甚至現代機器學習方法將受益于數據中更清晰的信號。 ## 差異變換 差分是一種轉換時間序列數據集的方法。 它可用于消除序列對時間的依賴性,即所謂的時間依賴性。這包括趨勢和季節性等結構。 > 差異可以通過消除時間序列水平的變化來幫助穩定時間序列的均值,從而消除(或減少)趨勢和季節性。 - 第 215 頁,[預測:原則和實踐](http://www.amazon.com/dp/0987507109?tag=inspiredalgor-20)。 通過從當前觀察中減去先前的觀察來執行差分。 ```py difference(t) = observation(t) - observation(t-1) ``` 當必須將預測轉換回原始比例時,需要反轉該過程。 通過將先前時間步驟的觀察值添加到差值,可以反轉該過程。 ```py inverted(t) = differenced(t) + observation(t-1) ``` 以這種方式,可以計算一系列差異和反轉差異。 ### 滯后差異 將連續觀察之間的差異稱為滯后-1 差異。 可以調整滯后差異以適應特定的時間結構。 對于具有季節性成分的時間序列,滯后可以預期為季節性的周期(寬度)。 ### 差異訂單 在執行差分運算之后,某些時間結構可能仍然存在,例如在非線性趨勢的情況下。 這樣,差分過程可以重復多次,直到所有時間依賴性都被消除。 執行差分的次數稱為差分順序。 ### 計算差分 我們可以手動區分數據集。 這涉及開發一個創建差異數據集的新功能。該函數將遍歷提供的序列并以指定的間隔或滯后計算差異值。 名為 difference()的下面的函數實現了這個過程。 ```py # create a differenced series def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i - interval] diff.append(value) return Series(diff) ``` 我們可以看到該函數在指定的時間間隔后小心地開始差異數據集,以確保實際上可以計算差值。定義默認間隔或滯后值 1。這是一個合理的默認值。 進一步的改進是還能夠指定執行差分操作的次序或次數。 下面名為 inverse_difference()的函數會反轉單個預測的差異運算。它還要求提供前一時間步的實際觀測值。 ```py # invert differenced forecast def inverse_difference(last_ob, value): return value + last_ob ``` ## 差異化去除趨勢 在本節中,我們將介紹使用差異變換來移除趨勢。 趨勢通過提高水平使時間序列非靜止。這具有隨時間改變平均時間序列值的效果。 下面的示例將 difference()函數應用于具有線性增加趨勢的人為數據集。 ```py # create a differenced series def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i - interval] diff.append(value) return diff # invert differenced forecast def inverse_difference(last_ob, value): return value + last_ob # define a dataset with a linear trend data = [i+1 for i in range(20)] print(data) # difference the dataset diff = difference(data) print(diff) # invert the difference inverted = [inverse_difference(data[i], diff[i]) for i in range(len(diff))] print(inverted) ``` 運行該示例首先使用線性趨勢打印設計序列。接下來,打印差異數據集,顯示每個時間步長增加一個單位。該序列的長度為 19 而不是 20,因為序列中第一個值的差異無法計算,因為沒有先前值。 最后,使用來自原始序列的先驗值作為每個變換的引物來反轉差異序列。 ```py [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] ``` ## 區別于刪除季節性 在本節中,我們將介紹使用差異變換來消除季節性。 季節性變化或季節性是隨著時間的推移而定期重復的循環。 > 每年內的重復模式稱為季節變化,盡管該術語更普遍地應用于任何固定時期內的重復模式。 - 第 6 頁, [R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 的時間序列介紹。 季節性有很多種類。一些明顯的例子包括:時間,每日,每周,每月,每年等。因此,確定時間序列問題中是否存在季節性因素是主觀的。 確定是否存在季節性方面的最簡單方法是繪制和檢查您的數據,可能是在不同的尺度和添加趨勢線。 下面的示例將 difference()函數應用于人為的季節性數據集。該數據集包括兩個循環,每個循環 360 個單元。 ```py from math import sin from math import radians from matplotlib import pyplot # create a differenced series def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i - interval] diff.append(value) return diff # invert differenced forecast def inverse_difference(last_ob, value): return value + last_ob # define a dataset with a linear trend data = [sin(radians(i)) for i in range(360)] + [sin(radians(i)) for i in range(360)] pyplot.plot(data) pyplot.show() # difference the dataset diff = difference(data, 360) pyplot.plot(diff) pyplot.show() # invert the difference inverted = [inverse_difference(data[i], diff[i]) for i in range(len(diff))] pyplot.plot(inverted) pyplot.show() ``` 首先運行示例創建并繪制 360 時間步長序列的兩個循環的數據集。 ![Line plot of a contrived sesonal dataset](https://img.kancloud.cn/1f/08/1f0895ad07fa2103b2bebbd1fb823a5c_640x480.jpg) 人工數據集的線圖 接下來,應用差異變換并繪制結果。該圖顯示了 360 個零值,并刪除了所有季節性信號。 在上面的去趨勢示例中,差值應用滯后為 1,這意味著犧牲了第一個值。這里整個周期用于差分,即 360 個時間步長。結果是犧牲整個第一循環以區分第二循環。 ![Line plot of the differenced seasonal dataset](https://img.kancloud.cn/c9/cb/c9cb354af686f9708e6107b74ac48505_640x480.jpg) 差異季節性數據集的線圖 最后,轉換反轉顯示第二周期恢復季節性。 ![Line plot of the differenced dataset with the inverted difference transform](https://img.kancloud.cn/cc/7f/cc7f45d699ea42ea531545c0d2b54170_640x480.jpg) 差分數據集的線圖與反向差分變換 ## 進一步閱讀 * 維基百科上的[固定過程](https://en.wikipedia.org/wiki/Stationary_process) * 維基百科上的[季節性調整](https://en.wikipedia.org/wiki/Seasonal_adjustment) * [如何使用 Python 檢查時間序列數據是否固定](http://machinelearningmastery.com/time-series-data-stationary-python/) * [如何區分時間序列數據集與 Python](http://machinelearningmastery.com/difference-time-series-dataset-python/) * [如何使用 Python 識別和刪除時間序列數據中的季節性](http://machinelearningmastery.com/time-series-seasonality-with-python/) * [使用 Python 進行季節性持久性預測](http://machinelearningmastery.com/seasonal-persistence-forecasting-python/) ## 摘要 在本教程中,您發現了靜態和非平穩時間序列之間的區別,以及如何使用差異變換來消除 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>

                              哎呀哎呀视频在线观看