©作者 | 董叶
时间序列是一种特殊类型的数据集,其中随时间测量一个或多个变量。
例如天气变化, 股票价格变动,时间序列分析即是通过构建模型反映时间序列中包含的动态依存关系,并借以对未来发生的变化做预测。对最近7天的天气、明天收盘股价的预判。
01 时间序列分析的模型分类
目前发展的时间序列分析模型主要有三种:
1.1 经典时间序列模型
经典时间序列模型是一系列统计模型,例如自回归模型(AR)、整合移动平均自回归模型(ARIMA), 广义自回归条件异方差模型(GARCH),它们基于时间序列内的时间变化,并且适用于单变量时间序列,这些模型一般只适用于时间序列。
1.2 监督模型
线性回归、随机森林、XGBoost 这类经典的机器学习算法,虽然不是专门为时间序列分析而设计,但是在变量预测问题有着很好的效果。
1.3 深度学习模型
长短时记忆模型LSTM、Facebook开源时间序列库Prophet,亚马逊DeepAR, 此类模型能够自动从原始数据和不完整数据中学习和提取特征,同时考虑时间序列长期和短期的数据依赖。
02 时间序列数据的主要特性
2.1 时间序列数据的三个组成部分:季节性、趋势和噪声
季节性是出现在时间序列变量中的重复运动。例如,一个地方的温度在夏季较高,而在冬季较低。可以计算平均每月温度并使用此季节性作为预测未来值的基础。
趋势可以是长期向上或向下的模式。在温度时间序列中,由于全球变暖可能会出现趋势。例如,除了夏季/冬季季节性之外,很可能会看到平均温度随着时间的推移略有上升。
噪声是时间序列中可变性的一部分,既不能用季节性也不能用趋势来解释的部分, 始终存在的误差项。
2.2 时间序列数据中的自相关
自相关是时间序列的当前值与过去值之间的相关性,这意味着可能用历史数据预测未来。自相关具有非常强的合理性,因为我们的历史观让我们自然的去相信:历史会重演,过去的经验可以被用来反映未来。
2.3 时间序列中的平稳性
平稳性是指时间序列数据的变化特征维持稳定,数据的历史分布和未来分布趋于一致。通常股价走势数据、天气温度数据具有趋势性、周期性,并不直接满足平稳性特征,一般通过差分法将非平稳数据转换成平稳数据,例如股价的涨幅,温度按月度同比变化值,通过去除时间序列中趋势、季节性变化来平稳化数据。
03 实际应用 - 股价预测
预测股市的表现是最困难的事情之一,但时间序列分析可以为股票的技术分析提供参考,下文将会采用经典时间序列模型ARIMA以及深度学习LSTM模型对股价进行预测。
其中我们将会使用 Akshare 库下载国内A股交易数据, 并且以平安银行(股票代码:000001)为例。
经典时间序列模型 – ARIMA
ARIMA 整合移动平均自回归模型,这个模型适用于非平稳非周期性时间序列分析ARIMA模型有三个分量,通常以ARIMA(p,d,q)表示模型。
AR为自回归项,p为自回归项数;
I为差分项,d为使之成为平稳序列所做的差分次数(阶数);
MA为"滑动平均",q为滑动平均项数。
其中L是滞后算子(Lag operator),d in Z, d>0。
通常分析时间序列数据,可以参照下图:
对序列平稳性判断,通常我们采用ADF检验:
股价的原始序列不满足平稳性条件, 我们需要进行平稳性处理,一般采用差分和变换的方法,下面是确定模型相关参数的步骤,
1对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列
2 对得到的平稳时间序列分别求其自相关系数ACF 和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q
3 由以上得到的d、p、q,得到ARIMA模型,然后开始对得到的模型进行模型检验。
从上图可以得出我们初步的模型可以选择 ARIMA(1,1,1)
Auto_ARIMA
除了用以上图形观察的方法选择模型参数之外,我们可以借用 pmdarima.arima 内置的Auto-ARIMA包自动迭代(p,d,q)三个参数,通过穷举的方法找出所有可能参数,从而求得最小AIC的模型。
采用模型作为预测:
逐点预测:
上面是采用ARIMA 模型预测最近一天的结果,属于逐点预测,如果用来预测未来N天的结果,模型反馈就比较差了,连续预测期数越长,效果越差。
上面的例子中,逐点预测的结果比完整序列预测更精确,但这有点欺骗性。
在这种情况下,除了预测点和最后一次预测的数据点之间的距离,模型其实不需要了解时间序列本身,因为即便它这次预测错误了,在进行下一次预测时,它也只会考虑真实结果,完全无视自己的错误,然后继续产生错误预测。
虽然这听起来不太妙,但其实这种方法还是有用的,它至少能反映下一个点的范围,可用于波动率预测等应用。
LSTM 长短期记忆模型
LSTM 广泛用于序列预测问题,并已被证明非常有效。它们运行良好的原因是因为 LSTM 能够存储重要的过去信息,而忘记不重要的信息。LSTM 有三个门:
输入门 input gate :输入门将信息添加到细胞状态
遗忘门forget gate :删除模型不再需要的信息
输出门output gate :选择要显示的信息作为输出
LSTM中采用专门设计的“门”来引入或者去除状态信息,类似信号处理中的滤波器,允许信号部分通过或者通过时被门加工了;有的门也跟数字电路中的逻辑门类似,允许信号通过或者不通过。
以下是Python实现过程:
1.导入数据,原始数据进行归一化处理,使数据介于[0,1]
2.利用前期数据预测当期,数据集(前期股价,当期股价)当做(X,Y)
3.建立及训练 LSTM 模型,模型很简单,就只有一個LSTM层及output层,其中并没有特别处理季节效应,模型训练100轮。
从预测结果上看,初次构建的LSTM 模型进行逐点预测的效果不如ARIMA模型,我们可以通过调整LSTM层数、添加dropout值或者增加epoch数来提高模型效果。
关于模型参数的调整,网络上有很多文章可以借鉴,就不在赘述了。
预测股市的表现是最困难的事情之一,预测涉及的因素很多——物理与心理、理性和非理性行为等。所有这些因素结合在一起,使股价波动且难以准确预测。
本文讨论的模型方法仅仅是用来展示时间序列预测的分析思路和方法,并不足以应用在实际投资当中。
时间序列预测是一个非常有趣的领域,除了股价、天气预测还有航班、门票销售相关的其他数据场景可以让我们探索。