时间序列分析 ARIMA
1. 指数平滑法
-
特点
指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映市场实际的变化 -
参考 预测算法——指数平滑法
- ARIMA 是常用的时间序列预测模型,不过通常用于短期预测,---在实际编码的时候
pd.Index(sm.tsa.datetools.dates_from_range('2001','2200'))
时间的范围貌似存在限制,待解
2. 时间序列的预处理
构建模型之前,需要得到 dataset,一般来说,我们都需要对 dataset 进行预处理,比如去除某些数据,归一化,数据填充等.对于时间序列分析的数据,首先需要检验 平稳性 和 纯随机性.下面分别介绍:
2.1. 平稳性
平稳的基本思想是:时间序列的行为并不随时间改变
平稳性分为强平稳过程和弱平稳过程
强平稳过程:时间序列的任意子集之间的联合分布是一致的
弱平稳过程:均值函数是常数函数并且协防差函数仅仅与时间相关
关于强平稳和弱平稳的差别:
* 强平稳是事实上的平稳(同分布);
* 弱平稳是统计量在观测意义上的平稳(均值、方差)。
在时间序列分析中,对数据的处理是弱平稳过程,强平稳条件太强,无论从理论上还是从实际出发,证明一个序列是强平稳一般很难.
对于实际的股票数据,由于会受到各种外界因素的影响,比如国家政策,市场调控等,所以一般很难达到平稳条件.
对于不平稳的股票数据,需要使用一些方法让它看起来平稳,然后做预测,比如使用差分变换方法 diff
refer
2.2. 纯随机性(白噪声检验)
纯随机序列,又称为白噪声序列,序列的各项数值之间没有任何相关的联系,序列完全无序的随机波动,可以终止对该序列的分析。
barlett 定理
如果一个时间序列是纯随机的,得到一个观察期为n的观察序列,那么该序列的延迟非零期的样本自相关系数将近似服从均值为零,方差为序列观察期数倒数的正态分布
p^\~N(0,1n)
p
^
\~
N
(
0
,
1
n
)
refer
3. 平稳时间序列建模
我们需要得到的是一个平稳的,非白噪声的时间序列,然后对其进行建模。
3.1. ARIMA模型
ARIMA:自回归积分滑动模型(Autoregressive Integrated Moving Average Model, 简记ARIMA)
根据时间序列是否平稳以及回归中所含部分的不同,可分为:
移动平均过程(MA(q))
自回归过程(AR(p))
自回归移动平均过程( ARMA(p,q) )
自回归积分滑动平均过程 ( ARIMA(p,d,q) )
3.2. 时间序列建模步骤
- 首先获取时间序列数据,并对数据进行预处理
-
对获取的数据进行绘图,检验是否是平稳的,以及是否是白噪声。参考白噪声序列
- 若为非平稳时间序列要先进行d阶差分运算后化为平稳时间序列,此处的d即为ARIMA(p,d,q)模型中的d;
- 若为平稳序列,则用ARMA(p,q)模型。所以ARIMA(p,d,q) 模型区别于ARMA(p,q)之处就在于前者的自回归部分的特征多项式含有d个单位根。
- 得ARIMA模型
对得到的平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q。由以上得到的d、q、p ,得到ARIMA模型。 - 模型诊断
进行诊断分析,以证实所得模型确实与所观察到的数据特征相符。若不相符,重新回到第(3)步。
3.3.细节分析
3.3.1. 平稳性的检验
如果序列有明显的趋势或者周期性,那么就不是平稳序列,因为平稳条件是有常数均值和常数方差.检验方法有:
- 时序图:观察趋势变化.
- 自相关和偏自相关的相关图:随着延迟期数的增加,平稳序列的自相关系数会很快的衰减到0,这涉及到延迟的相关系数的计算
- 单位根检验: 检验序列中是否存在单位根,如果存在则非平稳时间序列
- DF检测(Dickey-Fuller): 是一种检查数据稳定性的统计测试。无效假设:时间序列是不稳定的。测试结果由测试统计量和一些置信区间的临界值组成。如果“测试统计量”少于“临界值”,我们可以拒绝无效假设,并认为序列是稳定的。
3.3.2. 模型的选择
根据得到的自相关图和偏自相关图如何选择模型,我们在3.1节提出ARIMA模型包含四种:
移动平均过程(MA(q))
自回归过程(AR(p))
自回归移动平均过程( ARMA(p,q) )
自回归积分滑动平均过程 ( ARIMA(p,d,q) )
依据:
-
用AIC和SBC准则判断得到的p和q参数值的好坏,这两个指标越小越好,python中有函数可以直接求AIC,BIC,HQIC值。
-
注意:
在pd.Index(sm.tsa.datetools.dates_from_range('2001','2200'))
中,dates_from_range
貌似有范围的限制(#262)
3.3.3. 模型的检验
观察ARIMA模型的残差是否是平均值为0且方差为常数的正态分布(服从零均值、方差不变的正态分布),同时也要观察连续残差是否(自)相关。
1. 对所选择的模型产生的残差做自相关图
fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40, ax=ax1)
2. 做D-W检验
德宾-沃森(Durbin-Watson)检验。德宾-沃森检验,简称D-W检验,是目前检验自相关性最常用的方法,但它只使用于检验一阶自相关性。因为自相关系数ρ的值介于-1和1之间,所以 0≤DW≤4。当DW值显著的接近于0或4时,则存在自相关性,而接近于2时,则不存在(一阶)自相关性。这样只要知道DW统计量的概率分布,在给定的显著水平下,根据临界值的位置就可以对原假设
H0
H
0
进行检验。sm.stats.durbin_watson(arma_mod20.resid.values)
3. 观察是否符合正态分布
使用QQ图,它用于直观验证一组数据是否来自某个分布,或者验证某两组数据是否来自同一(族)分布fig = qqplot(resid, line='q', ax=ax, fit=True)
4. Ljung-Box检验
Ljung-Box test是对randomness的检验,或者说是对时间序列是否存在滞后相关的一种统计检验。对于滞后相关的检验,我们常常采用的方法还包括计算ACF和PCAF并观察其图像。LB检验则是基于一系列滞后阶数,判断序列总体的相关性或者说随机性是否存在。
时间序列中一个最基本的模型就是高斯白噪声序列。而对于ARIMA模型,其残差被假定为高斯白噪声序列,所以当我们用ARIMA模型去拟合数据时,拟合后我们要对残差的估计序列进行LB检验,判断其是否是高斯白噪声,如果不是,那么就说明ARIMA模型也许并不是一个适合样本的模型。
r,q,p = sm.tsa.acf(resid.values.squeeze(), qstat=True)
data = np.c_[range(1,41), r[1:], q, p]
table = pd.DataFrame(data, columns=['lag', "AC", "Q", "Prob(>Q)"])
print(table.set_index('lag'))
检验的结果就是看最后一列前十二行的检验概率(一般观察滞后1~12阶),如果检验概率小于给定的显著性水平,比如0.05、0.10等就拒绝原假设,其原假设是相关系数为零。就结果来看,如果取显著性水平为0.05,那么相关系数与零没有显著差异,即为白噪声序列。
refer
支持向量机
支持向量机是一种分类算法,所以不想ARIMA算法基于时序对股票进行预测,使用这种方法主要是通过对历史数据分析对未来几天的股票进行涨跌预测。
数据处理
使用的数据是从* 获得的,主要的数据有:最大,最小,等
处理:主要是对price进行操作,提取两天之间的差值,以及当天最高和最低的差值。
refer
LSTM
- 数据的处理涉及到对缺失日期部分的处理:使用缺失日期前的交易信息对缺失日期进行替代,使得数据在时间上是连续的。
- 将数据分为三个部分:训练集、验证集、测试集,不过一般都是分为两个部分,没有验证集合。
- 在训练的时候,对训练数据进行多个epoch的循环,每个循环对数据中的batch进行循环,在每个epoch之后,使用测试集合对其进行测试。
- 针对不同的问题测试标准有很多,在股票方面,一个评价交易策略指标是 夏普比率(Sharpe Ratio),其值越大越好,一般认为超过 1 就可以了,超过 2 就很好, 超过 3 就更好了。
- 在训练数据的时候,由于超参数的限制,主要是硬件限制以及参数的组合爆炸问题,使对参数的设置一般采取 随机初始化或者启发式的方法。
- 训练得到的结果要有一定的泛化能力,避免过拟合或者欠拟合。
- 在LSTM中,选取连续 5 天的收盘价作为特征输入,当然不排除其他的特征对结果的影响力
refer: 用深度学习LSTM炒股:对冲基金案例分析
数据分析-个股与指数的回归分析
code: RNN-stock_predict
朴素贝叶斯模型
贝叶斯分类的基本思想是:对于多分类(大于等于2类)的问题,计算在已知条件下各类别的条件概率,取条件概率最大的那一类作为分类结果。
它的具体做法是:首先基于特征条件独立假设来学习输入/输出的联合概率分布;然后基于学习的模型,对给定的输入,利用贝叶斯定理求出后验概率最大的输出。
f(x)=argmaxykΠni=1P(xi│yk)P(yk)
f
(
x
)
=
a
r
g
m
a
x
y
k
Π
i
=
1
n
P
(
x
i
│
y
k
)
P
(
y
k
)
贝叶斯模型通常包含三种模型:
- 多项式模型:适用于离散特征的情况
- 高斯模型: 处理连续的特征变量,应该采用高斯模型, 假设每一维度的特征都服从高斯正态分布
- 伯努利模型:与多项式模型一样适用于离散特征的情况,不同的是,伯努利模型中每个特征的取值只能是1和0
朴素贝叶斯理论推导与三种常见模型
算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
支持向量机模型
支持向量机(Support Vector Machine ,SVM)的主要思想是:建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力。
对于一个多维的样本集,系统随机产生一个超平面并不断移动,对样本进行分类,直到训练样本中属于不同类别的样本点正好位于该超平面的两侧,满足该条件的超平面可能有很多个,SVM正是在保证分类精度的同时,寻找到这样一个超平面,使得超平面两侧的空白区域最大化,从而实现对线性可分样本的最优分类。