「Python量化基础」时间序列的⾃相关性与平稳性
01 引⾔
⾦融数据主要分为时间序列(时间维度)、横截⾯(个体维度)和⾯板数据(时间+截⾯)。⽐如上证综指2019年1⽉⾄今的⽇收盘价数据就是时间序列,⽽2019年8⽉12⽇所有A股收盘价数据则是横截⾯数据,2018-2019年3000多只个股收盘价数据便是⾯板数据。⾦融时间序列分析是量化投资建模的重要基础,今天给⼤家分享时间序列的⼀些基础概念,包括⾃相关性、偏⾃相关性、⽩噪声和平稳性,以及Python的简单实现,为后续关于时间序列建模专题做⼀个铺垫。Python中的statsmodels包提供了强⼤的统计和计量建模函数,其中⼦模块tsa(time series analysis)专门⽤于时间序列分析。
python入门教程非常详细电子书
02 ⾃相关性
相关性⼀般是指两个变量之间的统计关联性,那么⾃相关性则是指⼀个时间序列的两个不同时间点的变量是否相关联。时间序列具有⾃相关性是我们能够进⾏分析的前提,若时间序列的⾃相关性为0,也就是说各个时点的变量不相互关联,那么未来与现在和过去就没有联系,根据过去信息来推测未来就变得毫⽆根据。时间序列的⾃相关性⼀般⽤时间序列的⾃协⽅差函数、⾃相关系数函数和偏⾃相关系数函数等统计量来衡量。遇到问题没⼈解答,⼩编创建了⼀个Python学习交流裙:五⼆⼋ 三九七 六⼀七, 寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的学习视频教程和PDF电⼦书分享!
⾃协⽅差函数
⾃协⽅差(Autocovariance,简称AF)是时间序列与其滞后项的协⽅差,假设X为随机变量(即随着时间变化取值随机的变量,⽐如股票价格),则k阶⾃协⽅差使⽤数学公式表⽰为:
其中,E表⽰求数学期望,u是随机变量X的均值,当k=0时,可得
即为随机变量X的⽅差。
⾃相关函数
⾃协⽅差跟变量的单位有很⼤关系,⽐如X放⼤10倍,则⾃协⽅差将放⼤100倍,因此其值⼤⼩并不能反映相关性的⼤⼩。为了消除量纲(单位)的影响,使⽤⾃相关系数来刻画变量与其滞后项的相关性。⾃相关系数(Autocorrelation Coefficient,简称ACF)本质是相关系数,等于⾃协⽅差除以⽅差,k阶⾃相关系数数可以表⽰为:
上过⾼中数学的都知道协⽅差和相关系数的含义,从统计上描述两个不同变量的相互影响关系(⾮因果),那么⾃协⽅差和⾃相关系数则是刻画同⼀个变量在不同时期取值的相关程度,⽐如描述上证综指过去价格对今天价格的影响。
偏⾃相关函数
假设对于上证综指价格序列,⼀阶⾃相关系数⼤于0,说明今天的价格与昨天的价格相关,⽽昨天价格⼜与前⼀⽇价格相关,依次类推,可见当你计算今天与昨天价格之间的⾃相关系数时,同时包含了更早之前所有各期的信息对今天的间接影响,度量的是过去所有信息加总的影响效果。为了剔除其他各期的影响,单纯考察过去某⼀单期对今天的影响,引⼊偏⾃相关函数(Partial Autocorrelation Coefficient,简称PACF),即条件⾃相关系数,使⽤数学公式表⽰为:
偏⾃相关函数可以通过⾃回归模型(后续关于时间序列建模会进⼀步分析)来表述和求解,⽤
表⽰k阶⾃回归式中第j个回归系数,则k阶⾃回归模型表⽰为ug编程自学网站
其中
用java设计简单的小游戏是最后⼀个系数。若把
看作滞后期k的函数,则称
,k = 1,2… 为偏⾃相关函数。
⾃相关系数和偏⾃相关系数越⼤,说明过去对现在的影响越⼤。
Python计算⾃相关和偏⾃相关系数
Python的pandas库提供了计算基本统计量的函数,包括均值df.mean(),协⽅差df.cov(),相关系数df.corr(),⽅差df.var()(或标准差
df.std())等,其中df为数据列表;⽽⾃相关系数和偏⾃相关系数的计算则要⽤到statsmodels库(acf()和pacf())。statsmodels这是⼀个很强⼤的统计数理模型库,在后⾯的时间序列分析与建模会进⼀步介绍相关函数及其运⽤。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline
#正常显⽰画图时出现的中⽂和负号
from pylab import mpl
token='输⼊你的token'
pro=ts.pro_api(token)
def get_data(code,n=250*3):
df=pro.index_daily(ts_code=code)
#将⽇期设置为索引
df._ade_date)
#最近n⽇价格⾛势
df=df.sort_index()[-n:]
#只保留收盘价数据
del df.index.name
return df.close
df=get_data('000300.SH')
计算⾃相关和偏⾃相关系数
import statsmodels.tsa.api as smt
#tsa是Time Series analysis缩写
#tsa的stattools(统计⼯具)提供了计算acf和pacf以及后⾯要⽤到的adfuller单位根检验函数#使⽤help(smt.stattools.acf)可以查看相关参数设置
#计算⾃相关系数,这⾥设置滞后项为5期,默认是40期滞后
acf=smt.stattools.acf(df,nlags=5)
#计算偏⾃相关系数
pacf=smt.stattools.pacf(df,nlags=5)
dc socket什么意思print(f'⾃相关系数为:{acf};\n偏⾃相关系数为:{pacf}')
⾃相关系数为:[1. 0.99098764 0.98189466 0.97312885 0.96252012 0.95335064];
偏⾃相关系数为:[ 1. 0.99231072 -0.01047826 0.01620047 -0.12635305 0.09200772]⾃相关系数和偏⾃相关系数可视化
def acf_pacf_plot(data, lags=None):
#判断是否为pandas的Series格式数据
if not isinstance(data, pd.Series):
data = pd.Series(data)
#设定画⾯风格,这⾥设置为'bmh', colspan=2
with t('bmh'):
fig = plt.figure(figsize=(10, 8))
#设置⼦图
layout = (3,1)
ts_ax = plt.subplot2grid(layout, (0, 0))
acf_ax = plt.subplot2grid(layout, (1, 0))原码相加相减怎么算
pacf_ax = plt.subplot2grid(layout, (2, 0))
data.plot(ax=ts_ax)
ts_ax.set_title('时间序列图')
acf_ax.set_title('⾃相关系数')
pacf_ax.set_title('偏⾃相关系数')
plt.tight_layout()
return
#设置20阶滞后期
acf_pacf_plot(df,lags=20)
03 平稳性
时间序列分析的主要⽬的是利⽤事物特征变量的历史和现状来推测未来可能出现的状况,即假设时间序列的基本特性必须能从过去维持到我们推测的时期,否则,基于历史和现状来预测未来将变得不可靠。时间序列的平稳性,简单理解是时间序列的基本特性维持不变,换句话说,所谓平稳性就是要求由样本时间序列所得到的曲线在未来的⼀段时期内仍能沿着现有的形态持续下去。⾦融领域很多变量之所以难以估计,是因为这些变量经常发⽣突变,不是平稳的时间序列。时间序列的平稳性是经典时间序列分析的基本假设前提,只有基于平稳的时间序列进⾏的预测才是有效的。平稳性有强平稳和若平稳之分,⼀般所说的平稳时间序列指的是若平稳时间序列。
强平稳(Strictly Stationary)
强平稳要求时间序列随着时间的推移,其统计性质保持不变,对于任意的τ,其联合概率密度函数满⾜:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论