对某一个或者一组变量X(t)进行观察测量,将在一系列时刻t1, t2, …, tn所得的离散序列集合,称之为时间序列。(注意, X ( t i ) X(t_i) X(ti)是一个随机变量)
前提:我们相信数据的历史信息对未来的信息是有一定预测性的,且形式为多项式+高斯噪声
思路:我们分解t时间的值 x t x_t xt由两部分构成,一部分为由历史数据( x t − 1 , x t − 2 , . . . x_{t-1}, x_{t-2}, ... xt−1,xt−2,...)构造的多项式(ma, ar, arma就是多项式可能的形式);另一部分为高斯噪声;
时间序列的行为并不随时间改变
多元分布保持不变。(X1,X2,X3)是个三维随机变量,(X3,X4,X5)也是个三维随机变量,严格平稳表示任何形如(Xn-1,Xn,Xn+1)的三维随机变量分布都是一样的。当然不仅仅是三维,而是任何维的随机变量分布不变。
严平稳表示的分布不随时间的改变而改变。我研究第1到第n个随机变量跟第2到第n+1个随机变量性质是一样的。
我们假设由历史数据 { x 0 , x 1 , x 2 , x 3 } \{x_0, x_1, x_2, x_3\} {x0,x1,x2,x3},一顿操作猛如虎,得到了模型 x i ^ = f ( x i − 1 , x i − 2 ) \hat{x_i}=f(x_{i-1}, x_{i-2}) xi^=f(xi−1,xi−2),即我发现 x 2 ≈ f ( x 1 , x 0 ) x_2 \approx f(x_1, x_0) x2≈f(x1,x0); x 3 ≈ f ( x 2 , x 1 ) x_3 \approx f(x_2, x_1) x3≈f(x2,x1)。所以,我们下面用 f ( x 2 , x 3 ) f(x_2, x_3) f(x2,x3)去预测 x 4 x_4 x4。
当我们要清醒,这样做work的前提是 ( x 0 , x 1 , x 2 ) (x_0, x_1, x_2) (x0,x1,x2)的分布, ( x 1 , x 2 , x 3 ) (x_1, x_2, x_3) (x1,x2,x3)的分布与 ( x 2 , x 3 , x 4 ) (x_2, x_3, x_4) (x2,x3,x4)的分布要一样,如果获取 x 4 x_4 x4后要预测 x 5 x_5 x5,那还需要 ( x 3 , x 4 , x 5 ) (x_3, x_4, x_5) (x3,x4,x5)的分布要一样。如此类推,所以 ( x t − 2 , x t − 1 , x t ) (x_{t-2}, x_{t-1}, x_t) (xt−2,xt−1,xt)要不与t相关。这就是我们所说需要的严平稳
当时严平稳要求太高了,它要求概率分布和联合分布的各阶矩(如果存在)都要与时间无关。而弱平稳,只考察一阶矩(均值期望)以及二阶矩(协方差矩阵)与时间无关。
判断数据是稳定的常基于对于时间是常量的几个统计量:
c) 自协方差
一个时序数据的自协方差,就是它在不同两个时刻i,j的值的协方差。
如果序列有明显的趋势或者周期性,那么就不是平稳序列,因为平稳条件是有常数均值和常数方差.检验方法有:
实现例子(窗口12的滚动统计和DF校验):
from statsmodels.tsa.stattools import adfuller
def test_stationarity(timeseries):
#Determing rolling statistics
rolmean = pd.rolling_mean(timeseries, window=12)
rolstd = pd.rolling_std(timeseries, window=12)
#Plot rolling statistics:
orig = plt.plot(timeseries, color='blue',label='Original')
mean = plt.plot(rolmean, color='red', label='Rolling Mean')
std = plt.plot(rolstd, color='black', label = 'Rolling Std')
plt.legend(loc='best')
plt.title('Rolling Mean & Standard Deviation')
plt.show(block=False)
#Perform Dickey-Fuller test:
print 'Results of Dickey-Fuller Test:'
dftest = adfuller(timeseries, autolag='AIC')
dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
for key,value in dftest[4].items():
dfoutput['Critical Value (%s)'%key] = value
print dfoutput
假设我们是AR(1)模型,即 x t = ϕ x t − 1 + u t x_t=\phi x_{t-1}+u_t xt=ϕxt−1+ut,则可以写出通项公式 x t = ∑ i = 0 ∞ ϕ i u t − i x_t=\sum_{i=0}^{\infty}{{\phi}^iu_{t-i}} xt=∑i=0∞ϕiut−i,所以若 { x t } \{x_t\} {xt}是平稳的,需要 ∣ ϕ ∣ < 1 |\phi|<1 ∣ϕ∣<1。
我们观察一下 ϕ \phi ϕ是怎么来的, ϕ \phi ϕ是 x t = ϕ x t − 1 + u t x_t=\phi x_{t-1}+u_t xt=ϕxt−1+ut对应的特征方程 λ = ϕ \lambda=\phi λ=ϕ的解;也是 1 = ϕ B 1=\phi B 1=ϕB的解的导数(B是滞后算子)。
所以,我们希望我们序列中的根都在单位圆里面。
常用有三个信息准则(L是最大似然,k是自由参数个数,n是样本数量),基本都是拟合效果+自由参数个数的惩罚项,这几个信息准则都是越小越好:
我们通常采用AIC法则。
下面我们介绍的AR模型/MA模型/ARMA模型都是线性模型,他们能用有限的参数刻画时间序列的动态性。注意:线性关系的假定在解决实际问题时时一个比较苛刻的条件。
注因为时线性模型,所以用 R 2 R^2 R2和 A R 2 AR^2 AR2都有意义。具体见
我们可能会常常看到下图的情况,预测值只是真实值的平移,说明最好的预测值就是前一个时刻的真实值,这样的模型是失败的,没有挖掘更深层次的联系
AR模型是这样刻画时间序列的:时间序列过去的点( x t − 1 x_{t-1} xt−1, …, x t − p x_{t-p} xt−p)的线性组合+当前的白噪声 u t u_t ut。
注:AR模型特征方程的根需要都在单位圆内,不然得到的AR模型是不平稳的。
AR模型在金融模型中主要是对金融序列过去的表现进行建模,如交易中的动量与均值回归。
MA模型是这样刻画时间序列的:时间序列过去的白噪声( u t − 1 u_{t-1} ut−1, …, u t − q u_{t-q} ut−q)的线性组合+当前的白噪声 u t u_t ut。
注:MA模型一定是平稳的。
在金融模型中,MA常用来刻画冲击效应,例如预期之外的事件。
由前面的AR(1)模型,即 x t = ϕ x t − 1 + u t x_t=\phi x_{t-1}+u_t xt=ϕxt−1+ut,得到 x t = ∑ i = 0 ∞ ϕ i u t − i x_t=\sum_{i=0}^{\infty}{{\phi}^iu_{t-i}} xt=∑i=0∞ϕiut−i。
我们可以得知,AR(1)本质就是MA( ∞ \infty ∞)。我们进行推广得知:
x t = ∑ i = 0 ∞ ϕ i u t − i x_t=\sum_{i=0}^{\infty}{{\phi}^iu_{t-i}} xt=∑i=0∞ϕiut−i
典型的AR(1)
典型的MA(1)
典型的ARMA(1, 1)模型
Given a time series of data Xt , the ARMA model is a tool for understanding and, perhaps, predicting future values in this series. The AR part involves regressing the variable on its own lagged (i.e., past) values. The MA part involves modeling the error term as a linear combination of error terms occurring contemporaneously and at various times in the past.
注:因为MA模型一定是平稳的,所以ARMA模型的平稳性取决于AR模型
因为,我们由上面可以知道,AR模型和MA模型是等价的,但是如果用MA模型去刻画AR模型,需要无限阶(即无限的参数);用AR模型去刻画MA模型,需要无限阶(即无限的参数)。而AR模型和MA模型结合的ARMA模型去刻画时间序列,需要远小于用AR/MA模型的参数。
细想一下,如果单用AR,时间序列有一点点MA特性,就要用无穷的参数才能准确地描述;而单用MA也是这样。
最常用的技术是采用循环在p和q各自0到5(或者更大)的范围内搜索最小AIC或BIC的(p,q)组合。
ARIMA模型是在ARMA模型的基础上解决非平稳序列的模型,因此在模型中会对原序列进行差分,直至差分后的序列为平稳序列。
由 Cramer 分解定理知 : 时间序列 = 确定性影响 + 随机性影响。
确定性影响又可以由多项式决定 , 而对n阶多项式求 n 次差分 , 即能变成常数。(思考:如果确定性影响不能通过多项式表示则如何?答:对原数据进行处理后差分)
然而差分的过程中会丢失信息,如 a x 2 + b x + c ax^2+bx+c ax2+bx+c经过2次差分只剩下信息 2 a 2a 2a。
因此,我们是要经过最少次的差分得到平稳序列。
通常时间序列包括3个因素:
而这3个因素由3种组合成时间序列:
混合类型该怎么处理:https://wenku.baidu.com/view/641e9517ce84b9d528ea81c758f5f61fb7362833.html
方法1:移动平均
若是加法模型 x t = T t + S t + I t x_t = T_t+S_t+I_t xt=Tt+St+It
#Determing rolling statistics
rolmean = pd.rolling_mean(timeseries, window=12)
rolstd = pd.rolling_std(timeseries, window=12)
#Plot rolling statistics:
orig = plt.plot(timeseries, color='blue',label='Original')
mean = plt.plot(rolmean, color='red', label='Rolling Mean')
std = plt.plot(rolstd, color='black', label = 'Rolling Std')
plt.legend(loc='best')
plt.title('Rolling Mean & Standard Deviation')
plt.show(block=False)
方法2:利用sm.tsa.seasonal_decompose
进行分解
sm.tsa.seasonal_decompose
可以直接将时间序列分解为趋势,季节和残差,并有加法模型和乘法模型两种模式可选。
分解算法的本质:
from statsmodels.tsa.seasonal import seasonal_decompose
decomposition = seasonal_decompose(ts_log)
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid
plt.subplot(411)
plt.plot(ts_log, label='Original')
plt.legend(loc='best')
plt.subplot(412)
plt.plot(trend, label='Trend')
plt.legend(loc='best')
plt.subplot(413)
plt.plot(seasonal,label='Seasonality')
plt.legend(loc='best')
plt.subplot(414)
plt.plot(residual, label='Residuals')
plt.legend(loc='best')
plt.tight_layout()
https://blog.csdn.net/mengjizhiyou/article/details/82683448
http://shenhaolaoshi.blog.sohu.com/137715309.html
https://www.jianshu.com/p/221c86e1a56b
https://www.cnblogs.com/xuanlvshu/p/5447695.html
https://wenku.baidu.com/view/97301f2aaeaad1f347933fa2.html
https://www.jianshu.com/p/cced6617b423
https://blog.csdn.net/u014096903/article/details/79980036
https://blog.csdn.net/recoba2k1/article/details/73656074
对于金融时间序列,由于其具有volatility clustering的特性,时间序列的波动率(二阶矩)并不是一个不变的常数,AR、MA和ARMA模型是无法刻画这种条件异方差的特性,ARCH和GARCH模型可以解决这一问题
注:白噪声序列是没有信息可提取的平稳序列,没有进行序列分析的必要。