机器学习——时间序列ARIMA模型(一):差分法详解

机器学习——时间序列ARIMA模型(一):差分法详解

一、所需数据的性质

平稳性

样本数据需随着时间序列而发生变化,且序列的均值和方差不发生明显变化。

预测出在未来的一段期间内数据顺着现有的“惯性”延续下去

现实案例如:股价预测,人口增长率预测

严平稳与弱平稳

严平稳:分布不随时间的改变而改变(期望为0,方差为1)

弱平稳:期望与依赖性不变(未来的值依赖于过去的值)

二、差分法

例如我们现在有一组数据,其随着时间的变化而呈现如下图趋势变化。

image-20220501144724690

那么我们需要将此数据的方差变小,即让此曲线能够更平稳,进而使用我们的ARIMA模型进行预测。

差分法定义:

当自变量x变到x+1时,函数y=y(x)的改变量
Δ y x = y ( x + 1 ) − y ( x ) , ( x = 0 , 1 , 2 , . . . ) \Delta y_{x} = y(x+1) - y(x) , (x = 0,1,2,...) Δyx=y(x+1)y(x),(x=0,1,2,...)
称为函数y(x)在点x的一阶差分。通常记作
Δ y x = y x + 1 − y x ( x = 0 , 1 , 2 , . . . ) \Delta y_{x} = y_{x+1} - y_{x} (x=0,1,2,...) Δyx=yx+1yx(x=0,1,2,...)
这里我写了些数据来进一步说明差分法,假设我们有的数据dif_test.csv如下:

data values
2015/1/2 20
2015/1/5 60
2015/1/6 130
2015/1/7 150
2015/1/8 160
2015/1/9 150
2015/1/12 130
2015/1/13 60
2015/1/14 20
2015/1/15 20

使用jupyter编写代码

#使用pandas读取数据
import pandas as pd
dif_data = 'dif_test.csv'
dif_data = pd.read_csv(dif_data, index_col=0, parse_dates=[0])
dif_data.head()

使用matplotlib和seaborn绘制曲线

import matplotlib.pylab as plt
import seaborn as sns
#绘制图像
dif_data.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("method of difference")
sns.despine()

image-20220501153708551

将原数据进行一阶差分

stock_diff = dif_data.diff()
stock_diff.plot(figsize=(9,5))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("first difference")
sns.despine()

一阶差分后结果如下图

image-20220501153917310

简单来说就是将values值改变成后项减去前项。例如values中的前两项之差(60-20=40)成为差分后的第一项。依此类推,使values趋于平稳。

40
70
20
10
-10
-20
-70
-40
0

猜你喜欢

转载自blog.csdn.net/tianhai12/article/details/124527948