用随机游动生成时间序列的合成数据
![](https://filescdn.proginn.com/c537717cc0509a42eb27d6c04050b108/40799569cb907a11f383b758a51c23ef.webp)
来源:DeepHub IMBA 本文约1300字,建议阅读5分钟 本文带你利用一维随机游走为时间序列算法生成数据。
随机游走是随机过程。它们由数学空间中的许多步骤组成。最常见的随机游走从值 0 开始,然后每一步都以相等的概率加或减 1。
生成数据
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()
![](https://filescdn.proginn.com/1888354f2c55f669f92354d01face031/60bf1e02b10abbc5a6539a402cd4d36c.webp)
随机游走
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
![](https://filescdn.proginn.com/721dbc1c8fa620ad107f80116f4cc2b5/7769bd9d3026867dc067f13c98c50d64.webp)
修改随机游走
![](https://filescdn.proginn.com/02b9e14461882b87e05685eb2602384d/22e3e5a43a0528c0280f54f1b22bed15.webp)
随着时间的推移增加波动性是通过在每个步骤后增加少量步长来实现的。因此,随着时间的推移,步长会慢慢变大。 平滑行走也可以通过修改步长来实现,但也可以通过在正步之后增加大小并在负步之后将大小减小一个小值来实现。
![](https://filescdn.proginn.com/9e364b60c1d1174fc6c667f1dd163ebd/91f0f792ec0276ee39c82e543ee2c5b8.webp)
总结
编辑:黄继彦
评论