来源:DeepHub IMBA
本文约1300字,建议阅读5分钟 本文带你利用一维随机游走为时间序列算法生成数据。
随机游走是随机过程。它们由数学空间中的许多步骤组成。最常见的随机游走从值 0 开始,然后每一步都以相等的概率加或减 1。
随机游走可用于为不同的机器学习应用程序生成合成数据。例如当没有可用信息或没有实时数据可用时,具有随机游走的合成数据可以近似实际数据。
这篇文章利用一维随机游走为时间序列算法生成数据。
生成数据
在创建和测试时间序列模型时,以随机数据为基准测试模型是有益的。随机游走可以模拟库存、产能利用率甚至粒子运动的趋势。
通过每一步概率的调整,行为被添加到随机游走中。此外,这些游走被修改为具有不同的步长,以产生更大或更小的波动。
在 Pandas 中使用“date_range”函数快速生成时间序列数据。下面是一个示例,它为 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()
随机游走
虽然此处的数据可用于时间序列模型,但看不到任何模式。由于实际数据包含与先前点的紧急模式关系,因此需要改进合成数据。随机游走是生成一些逼真行为的可行解决方案。在 Pandas 中创建随机游走需要遍历df的每一行。步行中的每一步都取决于上一步。
下面是生成随机游走的代码。第一个“previous_value”作为步行的起点。接下来,步长设置为 1。最后,“阈值”将正向或负向行走的概率设置为 50%。
此外,随机游走受到最小值和最大值的限制。对于许多数据集,例如股票价值,这些值都是严格的正数。
随机游走的图是用‘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
修改随机游走
这些随机游走被调整以显示所需的行为。例如,添加对随机游走的最小值和最大值的限制来模拟容量利用率。
随机游走的行为通过改变其他初始条件进一步改变,例如,强加整体积极趋势。正趋势是通过调整概率阈值来实现的。通过增加正向步骤的概率,随机游走会产生正向趋势。对于这个代码,它是通过降低阈值来实现的。
以这种方式设置随机游走可以更接近股票趋势。如果总体趋势是积极的还是消极的,则可以将详细信息纳入合成数据中。
有几个选项可以进一步调整随机游走。例如,在每一步都包含高斯噪声或将步长增加到更大的值会导致不同的步行跨越更大的空间。但是,还有一些其他调整会导致非常不同的行为。
随着时间的推移增加波动性是通过在每个步骤后增加少量步长来实现的。因此,随着时间的推移,步长会慢慢变大。
平滑行走也可以通过修改步长来实现,但也可以通过在正步之后增加大小并在负步之后将大小减小一个小值来实现。
总结
随机游走是一个有趣的随机过程。在很少的起始条件下,生成了许多不同的模式。因此,随机游走可以用作合成时间序列数据并针对您的特定问题实例进行调整。
编辑:黄继彦