<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/time-series-seasonality-with-python/](https://machinelearningmastery.com/time-series-seasonality-with-python/) 時間序列數據集可以包含季節性組件。 這是一個循環,隨著時間的推移重復,如每月或每年。這種重復循環可能會模糊我們希望在預測時建模的信號,進而可能為我們的預測模型提供強有力的信號。 在本教程中,您將了解如何使用 Python 識別和更正時間序列數據中的季節性。 完成本教程后,您將了解: * 時間序列中季節性的定義以及它為機器學習方法預測提供的機會。 * 如何使用差異法創建季節性調整的日常溫度數據時間序列。 * 如何直接對季節性成分進行建模,并從觀測中明確地減去它。 讓我們開始吧。 ![How to Identify and Remove Seasonality from Time Series Data with Python](https://img.kancloud.cn/73/93/73936de0e8b9ee8fad6b059c5ef0c7e1_640x480.jpg) 如何使用 Python 識別和刪除時間序列數據的季節性 照片來自 [naturalflow](https://www.flickr.com/photos/vizpix/6550049695/) ,保留一些權利。 ## 時間序列的季節性 時間序列數據可能包含季節性變化。 季節性變化或季節性是隨著時間的推移而定期重復的循環。 > 每年內的重復模式稱為季節變化,盡管該術語更普遍地應用于任何固定時期內的重復模式。 - 第 6 頁, [R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 入門時間序列 時間序列中的循環結構可能是季節性的,也可能不是季節性的。如果它以相同的頻率一致地重復,則它是季節性的,否則它不是季節性的并且被稱為循環。 ### 機器學習的好處 了解時間序列中的季節性組件可以提高機器學習建模的表現。 這可以通過兩種主要方式實現: * **更清晰的信號**:從時間序列中識別和刪除季節性成分可以使輸入和輸出變量之間的關系更加清晰。 * **更多信息**:有關時間序列的季節性組件的其他信息可以提供新信息以提高模型表現。 這兩種方法都可能對項目有用。在數據清理和準備期間,可能會出現季節性建模并將其從時間序列中刪除。 在特征提取和特征工程活動期間,可以直接或以摘要形式提取季節性信息并將其作為輸入要素提供。 ### 季節性的類型 季節性有很多種;例如: * 一天的時間。 * 日常。 * 每周。 * 每月。 * 每年。 因此,確定時間序列問題中是否存在季節性因素是主觀的。 確定是否存在季節性方面的最簡單方法是繪制和檢查您的數據,可能是在不同的尺度和添加趨勢線。 ### 消除季節性 一旦確定了季節性,就可以對其進行建模。 季節性模型可以從時間序列中刪除。此過程稱為[季節性調整](https://en.wikipedia.org/wiki/Seasonal_adjustment),或稱為延長期。 刪除季節性成分的時間序列稱為季節性靜止。具有明確季節性成分的時間序列被稱為非平穩的。 在時間序列分析領域,有時間序列研究和提取季節性的復雜方法。由于我們主要對預測建模和時間序列預測感興趣,因此我們僅限于可以根據歷史數據開發并在對新數據進行預測時可用的方法。 在本教程中,我們將介紹兩種方法,用于對具有強附加季節性成分的日常溫度的經典氣象類型問題進行季節性調整。接下來,讓我們看一下我們將在本教程中使用的數據集。 ## 最低每日溫度數據集 該數據集描述了澳大利亞墨爾本市 10 年(1981-1990)的最低日常溫度。 單位為攝氏度,有 3,650 個觀測值。數據來源被稱為澳大利亞氣象局。 下面是前 5 行數據的示例,包括標題行。 ```py "Date","Temperature" "1981-01-01",20.7 "1981-01-02",17.9 "1981-01-03",18.8 "1981-01-04",14.6 "1981-01-05",15.8 ``` 下面是從[數據市場](https://datamarket.com/data/set/2324/daily-minimum-temperatures-in-melbourne-australia-1981-1990)中獲取的整個數據集的圖表,您可以在其中下載數據集并了解有關它的更多信息。 ![Minimum Daily Temperatures](https://img.kancloud.cn/a2/09/a209bd3b69a5ae4c7c140dd5bb73ac1f_713x375.jpg) 最低每日溫度 該數據集顯示了一個強大的季節性組件,并具有良好,細粒度的細節。 ## 加載最低每日溫度數據集 下載最低每日溫度數據集并將其放在當前工作目錄中,文件名為“ _daily-minimum-Temperats.sv_ ”。 **注意**:下載的文件包含一些問號(“?”)字符,必須先將其刪除才能使用數據集。在文本編輯器中打開文件并刪除“?”字符。同時刪除文件中的任何頁腳信息。 下面的代碼將加載并繪制數據集。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures.csv', header=0) series.plot() pyplot.show() ``` 運行該示例將創建以下數據集圖。 ![Minimum Daily Temperature Dataset](https://img.kancloud.cn/4f/30/4f30c95f7611e9a7bbbb080410ec5623_800x600.jpg) 最低每日溫度數據集 ## 具有差異的季節性調整 校正季節性組件的一種簡單方法是使用差分。 如果在一周的水平上存在季節性成分,那么我們今天可以通過減去上周的值來刪除它。 在最低每日溫度數據集的情況下,看起來我們每年都有季節性成分顯示從夏季到冬季的秋千。 我們可以減去去年同一天的每日最低溫度來糾正季節性。這需要在[閏年](https://en.wikipedia.org/wiki/Leap_year) 2 月 29 日進行特殊處理,這意味著第一年的數據無法用于建模。 下面是在 Python 中對日常數據使用差異方法的示例。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures.csv', header=0) X = series.values diff = list() days_in_year = 365 for i in range(days_in_year, len(X)): value = X[i] - X[i - days_in_year] diff.append(value) pyplot.plot(diff) pyplot.show() ``` 運行此示例將創建一個新的季節性調整數據集并繪制結果。 ![Differencing Sesaonal Adjusted Minimum Daily Temperature](https://img.kancloud.cn/39/f8/39f86270f7026750e1ed8f50d735239a_800x600.jpg) 區分季節調整的最低日常溫度 我們的數據集(1984 年和 1988 年)有兩個閏年。他們沒有明確處理;這意味著 1984 年 3 月以來的觀察結果偏差是錯誤的一天,而在 1988 年 3 月之后,抵消錯誤了兩天。 一種選擇是將代碼示例更新為閏日。 另一種選擇是考慮一年中任何給定時期內的溫度可能穩定。也許過了幾個星期。我們可以簡化這個想法,并考慮一個日歷月內的所有溫度都是穩定的。 改進的模型可以是從前一年的相同日歷月而不是同一天減去平均溫度。 我們可以從數據集重新采樣到月平均最低溫度開始。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures.csv', header=0) resample = series.resample('M') monthly_mean = resample.mean() print(monthly_mean.head(13)) monthly_mean.plot() pyplot.show() ``` 運行此示例打印前 13 個月的平均每月最低溫度。 ```py Date 1981-01-31 17.712903 1981-02-28 17.678571 1981-03-31 13.500000 1981-04-30 12.356667 1981-05-31 9.490323 1981-06-30 7.306667 1981-07-31 7.577419 1981-08-31 7.238710 1981-09-30 10.143333 1981-10-31 10.087097 1981-11-30 11.890000 1981-12-31 13.680645 1982-01-31 16.567742 ``` 它還繪制了月度數據,清楚地顯示了數據集的季節性。 ![Minimum Monthly Temperature Dataset](https://img.kancloud.cn/38/14/38140edcacdc57150399817318e61d3b_800x600.jpg) 最低月度溫度數據集 我們可以在月度數據上測試相同的差分方法,并確認經季節性調整的數據集確實消除了年度周期。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures.csv', header=0) resample = series.resample('M') monthly_mean = resample.mean() X = series.values diff = list() months_in_year = 12 for i in range(months_in_year, len(monthly_mean)): value = monthly_mean[i] - monthly_mean[i - months_in_year] diff.append(value) pyplot.plot(diff) pyplot.show() ``` 運行該示例將創建一個新的季節性調整月度最低溫度數據集,跳過第一年的數據以創建調整。然后繪制調整后的數據集。 ![Seasonal Adjusted Minimum Monthly Temperature Dataset](https://img.kancloud.cn/df/43/df43677aa7f881e75a620908efbaa010_800x600.jpg) 季節性調整的最低月度溫度數據集 接下來,我們可以使用上一年同月的月平均最低溫度來調整每日最低溫度數據集。 同樣,我們只是跳過第一年的數據,但使用每月數據而不是每日數據進行更正可能是一種更穩定的方法。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures.csv', header=0) X = series.values diff = list() days_in_year = 365 for i in range(days_in_year, len(X)): month_str = str(series.index[i].year-1)+'-'+str(series.index[i].month) month_mean_last_year = series[month_str].mean() value = X[i] - month_mean_last_year diff.append(value) pyplot.plot(diff) pyplot.show() ``` 再次運行該示例將創建經季節性調整的數據集并繪制結果。 這個例子對前一年的每日波動很有抵抗力,并抵消了因閏年 2 月 29 日而導致的誤差。 ![More Stable Seasonal Adjusted Minimum Monthly Temperature Dataset With](https://img.kancloud.cn/15/a7/15a7213c82759493b1b63bc69e78346d_800x600.jpg) 更穩定的季節性調整最低月度溫度數據集 日歷月的邊緣提供了對溫度數據可能沒有意義的硬邊界。 采用更靈活的方法,可以采用上一年同一天任一周的平均值,這可能是一種更好的方法。 此外,可能存在多個尺度的溫度數據的季節性,可以直接或間接地進行校正,例如: * 日級別。 * 多天等級,例如一周或幾周。 * 多個周級別,例如一個月。 * 多個月級別,例如四分之一或季節。 ## 季節性調整與建模 我們可以直接對季節性成分進行建模,然后從觀測中減去它。 給定時間序列中的季節性分量可能是在一般固定的周期和幅度上的正弦波。這可以使用曲線擬合方法容易地近似。 可以構造數據集,其中正弦波的時間索引作為輸入或 x 軸,并且觀察作為輸出或 y 軸。 例如: ```py Time Index, Observation 1, obs1 2, obs2 3, obs3 4, obs4 5, obs5 ``` 適合后,該模型可用于計算任何時間索引的季節性分量。 在溫度數據的情況下,時間指數將是一年中的某一天。然后,我們可以估算出任何歷史觀測值或未來任何新觀測值的一年中的季節性因素。 然后,曲線可以用作使用監督學習算法建模的新輸入,或者從觀察中減去以創建季節性調整的系列。 讓我們首先將曲線擬合到最低每日溫度數據集。 NumPy 庫提供 [polyfit()](https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html)函數,可用于將所選順序的多項式擬合到數據集。 首先,我們可以創建一個時間索引(在這種情況下是一天)的數據集來觀察。我們可以采用一年的數據或所有年份。理想情況下,我們會嘗試兩者,看看哪種模型更適合。我們還可以使用以每個值為中心的移動平均值來平滑觀察。這也可能導致模型具有更好的擬合。 準備好數據集后,我們可以通過調用 polyfit()函數來傳遞 x 軸值(一年中的整數日),y 軸值(溫度觀測值)和多項式的階數來創建擬合。該順序控制術語的數量,進而控制用于擬合數據的曲線的復雜性。 理想情況下,我們需要最簡單的曲線來描述數據集的季節性。對于一致的正弦波式季節性,四階或五階多項式就足夠了。 在這種情況下,我通過反復試驗選擇了 4 的訂單。生成的模型采用以下形式: ```py y = x^4*b1 + x^3*b2 + x^2*b3 + x^1*b4 + b5 ``` 其中 _y_ 是擬合值, _x_ 是時間指數(一年中的某一天), _b1_ 到 _b5_ 是系數通過曲線擬合優化算法找到。 一旦適合,我們將有一組代表我們模型的系數。然后,我們可以使用此模型計算一個觀測值,一年觀測值或整個數據集的曲線。 下面列出了完整的示例。 ```py from pandas import Series from matplotlib import pyplot from numpy import polyfit series = Series.from_csv('daily-minimum-temperatures.csv', header=0) # fit polynomial: x^2*b1 + x*b2 + ... + bn X = [i%365 for i in range(0, len(series))] y = series.values degree = 4 coef = polyfit(X, y, degree) print('Coefficients: %s' % coef) # create curve curve = list() for i in range(len(X)): value = coef[-1] for d in range(degree): value += X[i]**(degree-d) * coef[d] curve.append(value) # plot curve over original data pyplot.plot(series.values) pyplot.plot(curve, color='red', linewidth=3) pyplot.show() ``` 運行該示例將創建數據集,擬合曲線,預測數據集中每天的值,然后將生成的季節性模型(紅色)繪制在原始數據集的頂部(藍色)。 該模型的一個限制是它沒有考慮閏日,增加了小的偏移噪聲,可以通過更新方法輕松糾正。 例如,我們可以在創建季節性模型時從數據集中刪除 2 月 29 日的兩個觀測值。 ![Curve Fit Seasonal Model of Daily Minimum Temperature](https://img.kancloud.cn/47/22/4722a3662c7a04c7d4219b30ee247cdd_800x600.jpg) 曲線擬合日最低溫度的季節模型 該曲線似乎非常適合數據集中的季節性結構。 我們現在可以使用此模型創建季節性調整的數據集版本。 下面列出了完整的示例。 ```py from pandas import Series from matplotlib import pyplot from numpy import polyfit series = Series.from_csv('daily-minimum-temperatures.csv', header=0) # fit polynomial: x^2*b1 + x*b2 + ... + bn X = [i%365 for i in range(0, len(series))] y = series.values degree = 4 coef = polyfit(X, y, degree) print('Coefficients: %s' % coef) # create curve curve = list() for i in range(len(X)): value = coef[-1] for d in range(degree): value += X[i]**(degree-d) * coef[d] curve.append(value) # create seasonally adjusted values = series.values diff = list() for i in range(len(values)): value = values[i] - curve[i] diff.append(value) pyplot.plot(diff) pyplot.show() ``` 運行該示例從原始觀察中減去季節性模型預測的值。該 然后繪制經季節性調整的數據集。 ![Curve Fit Seasonal Adjusted Daily Minimum Temperature](https://img.kancloud.cn/e0/d9/e0d91c1ba652de89a47a239d108d617a_800x600.jpg) 曲線擬合季節調整的每日最低溫度 ## 摘要 在本教程中,您了解了如何在 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>

                              哎呀哎呀视频在线观看