在本文中,我将介绍两种能够对时间序列进行建模的模型:随机游走和移动平均过程。随机游走模型随机游走模型用以下公式表示:即当前时刻t的位置是前一时刻(t-1)的位置与噪声(记为z)之和。这里我们假设噪声服从正态分布(均值为0,方差为1)。我们从0开始随机游走,即任何时间点都是该时间之前所有噪声的总和。数学上表示为:让我们用Python模拟一次随机游走。首先,我们导入所需的Python库:fromstatsmodels.graphics.tsaplotsimportplot_acffromstatsmodels.tsa.arima_processimportArmaProcessfromstatsmodels.tsa.stattoolsimportacfimportmatplotlib.pyplotaspltimportnumpyasnp%matplotlibinline然后,我们生成一个包含1000个数据点的数据集。起点为0,我们在上一个点上加上随机噪声生成下一个点:steps=np.random.standard_normal(1000)steps[0]=0random_walk=np.cumsum(steps)绘制的Python代码数据集如下:plt.figure(figsize=[10,7.5]);#Setdimensionsforfigureplt.plot(random_walk)plt.title("SimulatedRandomWalk")plt.show()模拟随机游走你的随机游走可能和上面的不一样由于噪音的情节是随机的。现在,让我们看看随机游走的自相关图(或相关图):random_walk_acf_coef=acf(random_walk)plot_acf(random_walk,lags=20);像任何事情一样,您最终应该得到一个非常相似的相关图。现在,一切都指向数据集中的趋势。我们能改变这种趋势吗?答案是肯定的。让我们用Python来验证一下。random_walk_diff=np.diff(random_walk,n=1)然后我们绘制结果:plt.figure(figsize=[10,7.5]);#Setdimensionsforfigureplt.plot(random_walk_diff)plt.title('Noise')plt.show()可以看到,上图没有趋势也没有季节性,是一个完全随机的过程。查看相关图的python代码如下:plot_acf(random_walk_diff,lags=20);我们看到这是一个纯随机过程的相关图,自相关系数在滞后1处下降。移动平均过程我们先直观地了解一下什么是移动平均过程。假设您将一块石头扔进池塘,您想要追踪一滴水在水面上的位置。当石头碰到水面时,会形成涟漪,所以我们追踪的水滴会上下移动。让我们假设涟漪只持续两秒钟,之后水就完全变平了。我们水滴的位置可以表示为:上式表明X在t时刻的位置取决于t时刻的噪声,加上t-1时刻的噪声(有一定权重THETA),加上噪声在时间t-2(具有一定的权重)。这称为二阶移动平均过程,可以表示为MA(2)。一个常见的符号是MA(q)。在上面的例子中,q=2。让我们在Python中模拟这个过程。具体来说,我们将模拟以下过程:这是一个我们指定权重的二阶移动平均过程。随意更改权重并试验参数。我们首先指定滞后,我们使用的是2。ar2=np.array([2])然后,我们指定权重,它们是[1,0.9,0.3]。ma2=np.array([1,0.9,0.3])最后,我们模拟该过程并生成1000个数据点:MA2_process=ArmaProcess(ar2,ma2).generate_sample(nsample=1000)现在,让我们可视化该过程及其相关性图:plt.figure(figsize=[10,7.5]);#Setdimensionsforfigureplt.plot(MA2_process)plt.title('MovingAverageProcessofOrder2')plt.show()plot_acf(MA2_process,lags=20);由于噪音是随机的,所以你的图表可能与我的不同。但是相关图应该类似于下面的图:正如您所注意到的,相关性在滞后2之前是显着的。这是有道理的,因为我们指定了2的滞后。这意味着您可以使用相关图来推断时间滞后系列。如果您发现滞后q后相关性不显着,则可以将时间序列建模为MA(q)过程。最后,通过本文,您了解了什么是随机游走以及如何模拟它。此外,您还了解了移动平均过程以及如何对其建模。
