用隨機游動生成時間序列的合成數(shù)據(jù)
來源:DeepHub IMBA
隨機游走是隨機過程。它們由數(shù)學(xué)空間中的許多步驟組成。最常見的隨機游走從值 0 開始,然后每一步都以相等的概率加或減 1。
隨機游走可用于為不同的機器學(xué)習(xí)應(yīng)用程序生成合成數(shù)據(jù)。例如當(dāng)沒有可用信息或沒有實時數(shù)據(jù)可用時,具有隨機游走的合成數(shù)據(jù)可以近似實際數(shù)據(jù)。
這篇文章利用一維隨機游走為時間序列算法生成數(shù)據(jù)。
生成數(shù)據(jù)
在創(chuàng)建和測試時間序列模型時,以隨機數(shù)據(jù)為基準測試模型是有益的。隨機游走可以模擬庫存、產(chǎn)能利用率甚至粒子運動的趨勢。
通過每一步概率的調(diào)整,行為被添加到隨機游走中。此外,這些游走被修改為具有不同的步長,以產(chǎn)生更大或更小的波動。
在 Pandas 中使用“date_range”函數(shù)快速生成時間序列數(shù)據(jù)。下面是一個示例,它為 2019 年每天生成一個具有一個隨機值的df。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import random DATE_START = '2019-01-01' DATE_END = '2019-12-31' dates = pd.date_range(DATE_START, DATE_END) df = pd.DataFrame({ 'date': dates, 'value': np.random.normal(0,1,dates.size) }) df.set_index('date', inplace=True) plt.plot(df['value']) plt.ylabel('Value') plt.xlabel('Date') plt.title('Random Values') plt.show()
隨機游走
雖然此處的數(shù)據(jù)可用于時間序列模型,但看不到任何模式。由于實際數(shù)據(jù)包含與先前點的緊急模式關(guān)系,因此需要改進合成數(shù)據(jù)。隨機游走是生成一些逼真行為的可行解決方案。在 Pandas 中創(chuàng)建隨機游走需要遍歷df的每一行。步行中的每一步都取決于上一步。
下面是生成隨機游走的代碼。第一個“previous_value”作為步行的起點。接下來,步長設(shè)置為 1。最后,“閾值”將正向或負向行走的概率設(shè)置為 50%。
此外,隨機游走受到最小值和最大值的限制。對于許多數(shù)據(jù)集,例如股****價值,這些值都是嚴格的正數(shù)。
隨機游走的圖是用‘matplotlib’生成的。
def random_walk( df, start_value=0, threshold=0.5, step_size=1, min_value=-np.inf, max_value=np.inf ): previous_value = start_value for index, row in df.iterrows(): if previous_value < min_value: previous_value = min_value if previous_value > max_value: previous_value = max_value probability = random.random() if probability >= threshold: df.loc[index, 'value'] = previous_value + step_size else: df.loc[index, 'value'] = previous_value - step_size previous_value = df.loc[index, 'value'] return df
修改隨機游走
這些隨機游走被調(diào)整以顯示所需的行為。例如,添加對隨機游走的最小值和最大值的限制來模擬容量利用率。
隨機游走的行為通過改變其他初始條件進一步改變,例如,強加整體積極趨勢。正趨勢是通過調(diào)整概率閾值來實現(xiàn)的。通過增加正向步驟的概率,隨機游走會產(chǎn)生正向趨勢。對于這個代碼,它是通過降低閾值來實現(xiàn)的。
以這種方式設(shè)置隨機游走可以更接近股****趨勢。如果總體趨勢是積極的還是消極的,則可以將詳細信息納入合成數(shù)據(jù)中。
有幾個選項可以進一步調(diào)整隨機游走。例如,在每一步都包含高斯噪聲或?qū)⒉介L增加到更大的值會導(dǎo)致不同的步行跨越更大的空間。但是,還有一些其他調(diào)整會導(dǎo)致非常不同的行為。
隨著時間的推移增加波動性是通過在每個步驟后增加少量步長來實現(xiàn)的。因此,隨著時間的推移,步長會慢慢變大。
平滑行走也可以通過修改步長來實現(xiàn),但也可以通過在正步之后增加大小并在負步之后將大小減小一個小值來實現(xiàn)。
總結(jié)
隨機游走是一個有趣的隨機過程。在很少的起始條件下,生成了許多不同的模式。因此,隨機游走可以用作合成時間序列數(shù)據(jù)并針對您的特定問題實例進行調(diào)整。
編輯:黃繼彥
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。