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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 用 Python 簡要介紹時間序列的時間序列預測 > 原文: [https://machinelearningmastery.com/gentle-introduction-random-walk-times-series-forecasting-python/](https://machinelearningmastery.com/gentle-introduction-random-walk-times-series-forecasting-python/) 你怎么知道你的時間序列問題是否可以預測? 這是一個時間序列預測的難題。有一種稱為隨機游走的工具可以幫助您了解時間序列預測問題的可預測性。 在本教程中,您將在 Python 中發現隨機游走及其屬性。 完成本教程后,您將了解: * 隨機游走是什么以及如何在 Python 中從頭開始創建一個。 * 如何分析隨機游走的屬性并識別時間序列是否是隨機游走。 * 如何對隨機游走進行預測。 讓我們開始吧。 ![A Gentle Introduction to the Random Walk for Times Series Forecasting with Python](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2017/01/A-Gentle-Introduction-to-the-Random-Walk-for-Times-Series-Forecasting-with-Python.jpg) 使用 Python 照片由 [Sam valadi](https://www.flickr.com/photos/132084522@N05/17086570218/) 進行隨機游走時間序列預測,保留一些權利。 ## 隨機系列 Python 標準庫包含[隨機模塊](https://docs.python.org/2.7/library/random.html),可以訪問一組用于生成隨機數的函數。 [randrange()](https://docs.python.org/2.7/library/random.html#random.randrange)函數可用于生成 0 和上限之間的隨機整數。 我們可以使用 _randrange()_ 函數生成 0 到 10 之間的 1,000 個隨機整數的列表。下面列出了這個例子。 ```py from random import seed from random import randrange from matplotlib import pyplot seed(1) series = [randrange(10) for i in range(1000)] pyplot.plot(series) pyplot.show() ``` 運行該示例繪制了隨機數序列。 這真是一團糟。它看起來不像時間序列。 ![Random Series](https://img.kancloud.cn/2a/a3/2aa38ae0fed43d57c9c0d2fbde64b167_800x600.jpg) 隨機系列 這不是隨機游走。它只是一系列隨機數。 初學者犯的一個常見錯誤就是認為隨機游走是一個隨機數列表,而事實并非如此。 ## 隨機漫步 隨機游走與隨機數列表不同,因為序列中的下一個值是序列中先前值的修改。 用于生成序列的過程強制從一次性步驟到下一步驟的依賴性。這種依賴性提供了一步到位的一致性,而不是一系列獨立的隨機數提供的大跳躍。 正是這種依賴性使得該過程的名稱為“隨機游走”或“醉漢行走”。 隨機游走的簡單模型如下: 1. 以隨機數-1 或 1 開頭。 2. 隨機選擇-1 或 1 并將其添加到上一時間步的觀察中。 3. 只要您愿意,重復步驟 2。 更簡潔地說,我們可以將此過程描述為: ```py y(t) = B0 + B1*X(t-1) + e(t) ``` 其中 _y(t)_ 是系列中的下一個值。 _B0_ 是一個系數,如果設置為零以外的值,則向隨機游走添加恒定漂移。 _B1_ 是對前一時間步進行加權的系數,設定為 1.0。 _X(t-1)_ 是前一時間步的觀察結果。 _e(t)_ 是此時的白噪聲或隨機波動。 我們可以通過循環遍歷此過程并為隨機漫步構建 1,000 個時間步驟列表來在 Python 中實現此功能。下面列出了完整的示例。 ```py from random import seed from random import random from matplotlib import pyplot seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) pyplot.plot(random_walk) pyplot.show() ``` 運行該示例將創建隨機游走的線圖。 我們可以看到它與我們上面的隨機數序列看起來非常不同。事實上,形狀和運動看起來像是股票市場上證券價格的現實時間序列。 ![Random Walk Line Plot](https://img.kancloud.cn/09/74/09740dcfc7ae296aae3dc1ea24749245_800x600.jpg) 隨機行走線圖 在接下來的部分中,我們將仔細研究隨機游走的屬性。這很有用,因為它會為您提供上下文,以幫助確定您將來分析的時間序列是否可能是隨機游走。 讓我們從查看自相關結構開始。 ## 隨機游走和自相關 我們可以計算每個觀測值與之前時間步驟的觀測值之間的相關性。這些相關性的圖稱為自相關圖或[相關圖](https://en.wikipedia.org/wiki/Correlogram)。 考慮到構建隨機游走的方式,我們期望與先前的觀察結果具有強烈的自相關性,并且具有先前滯后值的線性下降。 我們可以使用 Pandas 中的 _autocorrelation_plot()_ 函數來繪制隨機游走的相關圖。 下面列出了完整的示例。 請注意,在我們生成隨機游走的每個示例中,我們對隨機數生成器使用相同的種子,以確保我們獲得相同的隨機數序列,并依次進行相同的隨機游走。 ```py from random import seed from random import random from matplotlib import pyplot from pandas.tools.plotting import autocorrelation_plot seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) autocorrelation_plot(random_walk) pyplot.show() ``` 運行這個例子,我們通常會看到預期的趨勢,在這種情況下,在前幾百個滯后觀察中。 ![Random Walk Correlogram Plot](https://img.kancloud.cn/c3/fb/c3fbfe85c2653d0993ff65b1822b7710_800x600.jpg) 隨機走路 Correlogram Plot ## 隨機游走和平穩性 靜止時間序列是值不是時間函數的時間序列。 考慮到構建隨機游走的方式和審查自相關的結果,我們知道隨機游走中的觀察結果取決于時間。 目前的觀察是從先前的觀察中隨機的一步。 因此,我們可以預期隨機游走是非平穩的。實際上,所有隨機游走過程都是非平穩的。請注意,并非所有非平穩時間序列都是隨機游走。 另外,非平穩時間序列隨時間不具有一致的均值和/或方差。對隨機走線圖的回顧可能表明情況就是如此。 我們可以使用統計顯著性檢驗來確認這一點,特別是 [Augmented Dickey-Fuller 檢驗](https://en.wikipedia.org/wiki/Augmented_Dickey%E2%80%93Fuller_test)。 我們可以使用 statsmodels 庫中的 [adfuller()](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.stattools.adfuller.html)函數執行此測試。下面列出了完整的示例。 ```py from random import seed from random import random from statsmodels.tsa.stattools import adfuller # generate random walk seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) # statistical test result = adfuller(random_walk) 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)) ``` 測試的零假設是時間序列是非平穩的。 運行該示例,我們可以看到測試統計值為 0.341605。這大于 1%,5%和 10%置信水平下的所有臨界值。因此,我們可以說時間序列確實看起來是非平穩的,結果是統計僥幸的可能性很小。 ```py ADF Statistic: 0.341605 p-value: 0.979175 Critical Values: 5%: -2.864 1%: -3.437 10%: -2.568 ``` 我們可以通過采取第一個差異使隨機游走靜止。 這就是將每個觀察結果替換為它與之前的值之間的差異。 考慮到這種隨機游走的構建方式,我們希望這會產生-1 和 1 值的時間序列。這正是我們所看到的。 下面列出了完整的示例。 ```py from random import seed from random import random from matplotlib import pyplot # create random walk seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) # take difference diff = list() for i in range(1, len(random_walk)): value = random_walk[i] - random_walk[i - 1] diff.append(value) # line plot pyplot.plot(diff) pyplot.show() ``` 運行該示例會生成一個線圖,顯示-1 和 1 的 1,000 次移動,這是一個真正的混亂。 ![Random Walk Difference Line Plot](https://img.kancloud.cn/48/69/4869341d18105d249e101b45527db209_800x600.jpg) 隨機游走差異線圖 這個差異圖也清楚地表明,除了一系列隨機移動之外,我們確實沒有任何信息可以使用。 沒有結構可供學習。 現在時間序列是靜止的,我們可以重新計算差異序列的相關圖。下面列出了完整的示例。 ```py from random import seed from random import random from matplotlib import pyplot from pandas.tools.plotting import autocorrelation_plot # create random walk seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) # take difference diff = list() for i in range(1, len(random_walk)): value = random_walk[i] - random_walk[i - 1] diff.append(value) # line plot autocorrelation_plot(diff) pyplot.show() ``` 運行這個例子,我們可以看到滯后觀察之間沒有顯著的關系,正如我們對隨機游走的生成方式所期望的那樣。 所有相關性都很小,接近于零且低于 95%和 99%的置信水平(超過一些統計吸蟲)。 ![Random Walk Differenced Correlogram Plot](https://img.kancloud.cn/fb/4b/fb4b171accf9718cac0bb4fad973756a_800x600.jpg) 隨機游走差分曲線圖 ## 預測隨機游走 隨機游走是不可預測的;它無法合理預測。 考慮到隨機游走的構建方式,我們可以預期,我們可以做出的最佳預測是使用前一時間步的觀察,就像下一個時間步中將發生的那樣。 僅僅因為我們知道下一個時間步驟將是前一個時間步的函數。 這通常被稱為樸素預測或持久性模型。 我們可以在 Python 中實現這一點,首先將數據集拆分為訓練集和測試集,然后使用持久性模型使用滾動預測方法預測結果。一旦為測試集收集了所有預測,就計算出均方誤差。 ```py from random import seed from random import random from sklearn.metrics import mean_squared_error # generate the random walk seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) # prepare dataset train_size = int(len(random_walk) * 0.66) train, test = random_walk[0:train_size], random_walk[train_size:] # persistence predictions = list() history = train[-1] for i in range(len(test)): yhat = history predictions.append(yhat) history = test[i] error = mean_squared_error(test, predictions) print('Persistence MSE: %.3f' % error) ``` 運行該示例估計模型的均方誤差為 1。 這也是預期的,因為我們知道從一個時間步到下一個的變化總是在正方向或負方向上為 1,并且該預期誤差的平方為 1(1 ^ 2 = 1) 。 ```py Persistence MSE: 1.000 ``` 隨機游走的初學者犯的另一個錯誤是假設如果已知誤差范圍(方差),那么我們可以使用隨機游走生成類型過程進行預測。 也就是說,如果我們知道錯誤是-1 或 1,那么為什么不通過向先前的值添加隨機選擇的-1 或 1 來進行預測。 我們可以在下面的 Python 中演示這種隨機預測方法。 ```py from random import seed from random import random from sklearn.metrics import mean_squared_error # generate the random walk seed(1) random_walk = list() random_walk.append(-1 if random() < 0.5 else 1) for i in range(1, 1000): movement = -1 if random() < 0.5 else 1 value = random_walk[i-1] + movement random_walk.append(value) # prepare dataset train_size = int(len(random_walk) * 0.66) train, test = random_walk[0:train_size], random_walk[train_size:] # random prediction predictions = list() history = train[-1] for i in range(len(test)): yhat = history + (-1 if random() < 0.5 else 1) predictions.append(yhat) history = test[i] error = mean_squared_error(test, predictions) print('Random MSE: %.3f' % error) ``` 運行該示例,我們可以看到算法確實導致比持久性方法更差的表現,均方誤差為 1.765。 ```py Random MSE: 1.765 ``` 持久性或樸素的預測是我們可以為隨機游走時間序列做出的最佳預測。 ## 你的時間序列是隨機游走嗎? 您的時間序列可能是隨機游走。 檢查您的時間序列是否是隨機游走的一些方法如下: * 時間序列顯示出強烈的時間依賴性,其線性衰減或以類似模式衰減。 * 時間序列是非平穩的并且使其靜止,在數據中沒有明顯可學習的結構。 * 持久性模型提供了可靠預測的最佳來源。 最后一點是時間序列預測的關鍵。使用持久性模型的基線預測可以快速充實您是否可以做得更好。如果你做不到,你可能會隨機散步。 許多時間序列都是隨機游走,尤其是隨著時間推移的安全價格。 [隨機游走假設](https://en.wikipedia.org/wiki/Random_walk_hypothesis)是股票市場價格是隨機游走且無法預測的理論。 > 隨機游走是指根據過去的歷史無法預測未來步驟或方向的步行。當該術語適用于股票市場時,這意味著股票價格的短期變化是不可預測的。 - 第 26 頁,[隨機漫步華爾街:經過時間考驗的成功投資策略](http://www.amazon.com/dp/0393352242?tag=inspiredalgor-20) 人類的思想到處都是模式,我們必須保持警惕,我們不是在欺騙自己,而是通過為隨機游走過程開發精心設計的模型來浪費時間。 ## 進一步閱讀 如果您想深入了解 Random Walks,下面是一些進一步的資源。 * [隨機漫步華爾街:經過時間考驗的成功投資策略](http://www.amazon.com/dp/0393352242?tag=inspiredalgor-20) * [醉漢的行走:隨機性如何規范我們的生活](http://www.amazon.com/dp/0307275175?tag=inspiredalgor-20) * 第 7.3 節評估可預測性, [R 實用時間序列預測:動手指南](http://www.amazon.com/dp/0997847913?tag=inspiredalgor-20)。 * 第 4.3 節隨機游走, [R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 的時間序列介紹。 * 維基百科上的 [Random Walk](https://en.wikipedia.org/wiki/Random_walk) * [Robert F. Nau 的隨機游走模型](https://people.duke.edu/~rnau/411rand.htm) ## 摘要 在本教程中,您了解了如何使用 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>

                              哎呀哎呀视频在线观看