时间序列学习(1):平稳性、自相关性
时间序列学习(1):平稳性、自相关性
- 1、基本统计概念
- 2、啥是时间序列
- 3、平稳性
- 4、自相关性
- 5、相关图
做量化始终逃不掉对时间序列的分析。这个系列笔记是作为小白的我对时间序列分析基础知识的整理。不到之处,多多包涵。
1、基本统计概念
在一切开始之间得先回顾一下统计中的一些基本概念,这将有助于后续介绍时间序列。
协方差
X,YX,YX,Y是两个随机变量(分布未知),X,YX,YX,Y的总体协方差为:
Cov(X,Y)=E[(X−μX)(Y−μY)]Cov(X,Y)=E[(X-\mu_X)(Y-\mu_Y)]Cov(X,Y)=E[(X−μX)(Y−μY)]
其中,μX,μY\mu_X,\mu_YμX,μY为X,YX,YX,Y的均值。
基于样本计算协方差:
1n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ)\frac{1}{n-1}\sum^n_{i=1}(X_i-\bar{X})(Y_i-\bar{Y})n−11i=1∑n(Xi−Xˉ)(Yi−Yˉ)
相关系数
X,YX,YX,Y是两个随机变量,X,YX,YX,Y的总体相关系数为:
ρ(X,Y)=E[(X−μX)(Y−μY)]σXσY\rho(X,Y)=\frac{E[(X-\mu_X)(Y-\mu_Y)]}{\sigma_X\sigma_Y}ρ(X,Y)=σXσYE[(X−μX)(Y−μY)]
σX,σY\sigma_X,\sigma_YσX,σY分别为X,YX,YX,Y的总体标准差。
注意:
- ρ(X,Y)\rho(X,Y)ρ(X,Y)取值为1:正相关;0:不相关;-1:负相关;
- ρ(X,Y)\rho(X,Y)ρ(X,Y)只能描述X,YX,YX,Y的线性相关性,不能描述非线性相关性。
基于样本计算相关系数:
ρ^(X,Y)=∑i=1n(Xi−Xˉ)(Yi−Yˉ)∑i=1n(Xi−Xˉ)2(Yi−Yˉ)2\hat{\rho}(X,Y)=\frac{\sum^n_{i=1}(X_i-\bar{X})(Y_i-\bar{Y})}{\sqrt{\sum^n_{i=1} (X_i-\bar{X})^2(Y_i-\bar{Y})^2}}ρ^(X,Y)=∑i=1n(Xi−Xˉ)2(Yi−Yˉ)2∑i=1n(Xi−Xˉ)(Yi−Yˉ)
其中,Xˉ,Yˉ\bar{X},\bar{Y}Xˉ,Yˉ为X,YX,YX,Y的样本均值;分母的n−1n-1n−1使得样本协方差为总体协方差的无偏估计。
2、啥是时间序列
从统计角度来讲,时间序列就是随机过程
(离散的情形叫随机序列
)。因为是在时间轴上的随机变量集合{rt}\{r_t\}{rt},又叫时间序列。
注意,每一个时间点上是一个随机变量,有自己的分布。
我们平时看到的在时间轴上的曲线图,是给定时间段以及每个时间点的随机变量得到一个观测值后的数值序列。这个数值序列是千万种可能中的一种而已。
下图是沪深300自2018年1月1日至2019年12月13日的走势图。它每个时间点是指数的点数。这个走势图是某个时间序列的一个观测(因为历史只有一个,我们也只能观测到一种现实)。
# 基于聚宽接口
prices = get_price('000300.XSHG', start_date='2018-01-01', end_date='2019-12-13', frequency='daily', fields='close')
fig = plt.figure(figsize=(10, 6))
ax = fig.add_axes([0.2, 0.2, 1.2, 1.2])ax.plot(prices, color="blue", linewidth=1.5, linestyle="-", label=r'hs300')
plt.legend(loc='upper right', frameon=False)
光看上图,我们看不出这个时间序列有啥规律可循。2018年年初到年底,有很明显的下降趋势(我们都知道为什么);2019年至今又是一个上涨加盘整的趋势。不管怎么样,对于指数点数来说,我们看不出什么周期性和规律性。
3、平稳性
研究者们觉得,对不那么上蹿下跳的时间序列进行分析应该更加靠谱。如果存在这样的时间序列,那么分析它们也许也能做出一定的预测。研究者们称这类时间序列为平稳时间序列。
要使得时间序列平稳,那么一个较为宽松的条件就是使它们的统计特征保持不变。下面是时间序列弱平稳性的要求:
时间序列rt{r_t}rt是弱平稳的,那么:
- 均值平稳性:对于任意的ttt,有E[rt]=μE[r_t]=\muE[rt]=μ,其中μ\muμ为常数;
- 二阶平稳性: 对于任意的ttt及间隔kkk,rtr_trt和rt−kr_{t-k}rt−k的协方差σ(rt,rt−k)=γk\sigma(r_t,r_{t-k})=\gamma_kσ(rt,rt−k)=γk仅依赖kkk;σ(rt,rt)=γ0\sigma(r_t,r_t)=\gamma_0σ(rt,rt)=γ0不随时间变化,是方差平稳的。
均值平稳性说的是序列在某个固定值上下波动;二阶平稳性说的是,两个子序列波动的相关性。如果时间间隔为0,就是单个时间点自身,它与自己肯定是相关的,其方差(或者波动的幅度)必须是固定的。如果时间间隔为k,那么这相距k的两个时间点的波动相关性只与k有关。
更为严格的,如果任意两个时间段内的子序列中的随机变量的联合概率分布是一样的,那么这类时间序列是严平稳的。这个条件比较难以达到。我们平时要求时间序列达到弱平稳的就够用了。
第2节的指数走势图看上去不那么“平稳”,那么我们看看它的日收益曲线如何(见下图)。
import pandas as pdreturns = {'return':{}}
for i in range(len(prices)):current_price = prices.iloc[i,0]if i == 0:current_return = 0else:last_price = prices.iloc[i-1,0]current_return = (current_price-last_price)/last_pricedate = list(prices.index)[i]returns['return'][date] = current_return
return_df = pd.DataFrame(returns, columns=['return'], index=list(prices.index))fig = plt.figure(figsize=(10, 6))
ax = fig.add_axes([0.2, 0.2, 1.2, 1.2])
ax.plot(return_df, color="blue", linewidth=1.5, linestyle="-", label=r'hs300-daily-returns')
plt.legend(loc='upper right', frameon=False)
日收益曲线看上去比指数走势图要“平稳”一些,表现在:
(1)序列看上去都在某个值(均值,貌似是0)上下波动;
(2)序列似乎有个波动范围(方差),上图的单日波动都在6%以下(毕竟,个股单日涨跌停最大是10%)。
上述日收益曲线究竟是不是平稳还需要严格的检验,这个后面再说。
4、自相关性
上一节谈到了相关性:两个时间点的波动相关性用它们的协方差来衡量。但是,对于不同的标的,由于价格相差很大,算出来的协方差也差别很大,看不出究竟谁更相关,谁更不相关。
所以,一个简单的处理就是将协方差归一化到[-1,-1]
的范围内。这样对于任意的时间序列相关性度量,都可以用统一的标准。
于是,结合第1节的相关系数,很自然地给出了下面的时间序列相关系数的算法:
ρk=Cov(rt,rt−k)σrtσrt−k=Cov(rt,rt−k)σrtσrt=γkγ0\rho_k=\frac{Cov(r_t,r_{t-k})}{\sigma_{r_t}\sigma_{r_{t-k}}}=\frac{Cov(r_t,r_{t-k})}{\sigma_{r_t}\sigma_{r_t}}=\frac{\gamma_k}{\gamma_0}ρk=σrtσrt−kCov(rt,rt−k)=σrtσrtCov(rt,rt−k)=γ0γk
一些性质:
- 当k=0,ρ0=1k=0,\rho_0=1k=0,ρ0=1;
- ρk=ρ−k\rho_k=\rho_{-k}ρk=ρ−k;
- −1≤ρk≤1-1\le\rho_k\le1−1≤ρk≤1.
上面这个相关系数又自相关系数,是因为它衡量的是同一个时间序列内的两个不同的时间段的相关性。我们当然可以研究两个不同时间序列同一时间段的相关性(比如不同到期合约的价差分析),其相关系数同样采用上面的式子给出。
当然,我们只能通过样本计算相关系数。下面是基于样本计算自相关系数的公式:
ζk=ckc0;ck=1n∑t=1n−k(rt−rˉ)(rt+k−rˉ)\zeta_k=\frac{c_k}{c_0}; c_k=\frac{1}{n}\sum_{t=1}^{n-k}(r_t-\bar{r})(r_{t+k}-\bar{r})ζk=c0ck;ck=n1t=1∑n−k(rt−rˉ)(rt+k−rˉ)
其中ckc_kck为样本自协方差,ζk\zeta_kζk为样本自相关系数。
5、相关图
上面给出的相关系数(或者自相关系数)只与时间间隔有关。因此,我们可以把不同时间间隔的相关系数算出来并且绘制在图中。这个图就是相关图。
我们用statsmodels来绘制相关图。statsmodels是大部分用python的朋友做时间序列分析首选的工具包。下面绘制的相关图是上面沪深300自2018年1月1日至2019年12月13日的日收益率的相关图。
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acffig = plt.figure(figsize=(10, 6))
ax = fig.add_axes([0.2, 0.2, 1.2, 1.2])
plot_acf(return_df, ax)
plt.show()
可以看到,当时间间隔为0的时候,相关系数为1,很显然,每个点和自己都是完全相关的。当时间间隔大于1,相关系数便只是在0附近波动,说明不同时间点的单日收益相关性不大。
图中浅蓝色区域是95%的置信区间,如果相关系数在置信区间内,我们可以认为这个间隔下的子序列是不相关的。图中有个别间隔的序列相关系数超过置信区间,说明子序列还不是完全不相关的。不过大致上,我们可以认为沪深300的单日收益和其它交易日关联度不大。
时间序列学习(1):平稳性、自相关性相关推荐
- 金融时间序列Note 1 —— 平稳性,相关系数,自相关函数(ACF)及其平稳性检验
本文用于<金融时间序列>的相关介绍,适合快速入门和期末复习.(才怪我感觉自己考的超烂) OK,首先用自己的话讲一下什么是时间序列,首先我们会考得最多得时间序列肯定是线性的,既然说了有线性的 ...
- 时间序列中的平稳性检验之单位根检验
对序列的平稳性的检验中最常用的方法是单位根的检验.单位根检验是指检查序列中是否存在单位根,如果存在单位根就是非平稳时间序列了.下面是找的解释为什么单位根存在就是非平稳时间序列的原因. 作者:五雷 链接 ...
- 时间序列的预处理——平稳性检验的R语言实现(二)
这一部分是时间序列预处理R语言的实现. 目标是将课本和上课知识点整合. 老师是用一节课讲完的,本篇文章只做了平稳性检验~~~ 下一篇再写纯随机性检验 全部代码 #input data yield &l ...
- python平稳性检验_时间序列中单位根平稳性检验adfuller详解 (ADF Test in Python)
在 statsmodels.tsa.stattools.adfuller statsmodels.tsa.stattools.adfuller(x,maxlag = None,regression = ...
- python时间序列平稳性检验_Python量化投资基础:时间序列的平稳性检验
主要内容: 1. 自相关性和自相关系数 2. 强平稳和弱平稳 3. Python平稳性检验实战 重要性:10分 (1-10). 时间序列数据的平稳性对于我们采用什么样的分析方式.选择什么样的模型有着至 ...
- python平稳性检验_时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python)...
时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python) 发布时间:2019-01-10 00:02, 浏览次数:620 , 标签: Python 导读: 本文介绍了数据平稳 ...
- 时间序列分析学习笔记:时间序列的预处理(平稳性检验、纯随机性检验)
1 时间序列预处理 2 平稳性检验 2.1 特征统计量(概率分布的意义) 2.2 时间序列的概率分布 2.3 概率分布族应用的局限性 2.4 特征统计量(均值.方差) 2.5 平稳时间序列的定义(严平 ...
- 计量经济学之时间序列的平稳性、单位根检验、协整检验、时间序列数据的一般处理流程
时间序列的平稳性 为什么要把时间序列变成平稳的?--平稳性的意义 如何检验时间序列数据的平稳性?--单位根检验 数据不平稳怎么办?--协整检验 单整.协整(cointegration) 协整检验 总结 ...
- 关于时间序列分析中的平稳性的理解笔记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.什么是平稳性? 二.时间序列中的不平稳性 例子 时间序列的平稳化 差分化 季节性差分 总结 前言 为什么要平稳? ...
- 如何深入理解时间序列分析中的平稳性?
来自 :http://www.zhihu.com/question/21982358 在引入ARMA模型之前,一般课本都会对时间序列的平稳性作一个描述,但是总感觉没有描述特别清晰: 1. 通常时间序列 ...
最新文章
- SAP RETAIL 如何确定自动补货触发的单据类型 III
- Java并发之公平锁
- 公共基础——树,二叉树,软件结构图
- C语言经典例21-猴子吃桃问题
- mysql的隔离级别_MySQL的四种事务隔离级别
- ECC椭圆曲线算法(3)加密解密过程
- vue城市三级联动组件 vue-area-linkage
- 在Exchange 2010中批量导入用户
- 内存和显存_【硬件资讯】显存再升级?Nvidia新卡实锤GDDR6X!显存大升级能否带来性能提升??...
- Linux学习笔记-调用pthead_create创建线程
- FastJSON 简介及其Map/JSON/String 互转
- c语言 16进制编辑器,十六进制编辑器(010 Editor 32位)
- linux 查看网卡厂商,linux下查看网卡信息的命令
- CentOS6.5 yum源配置
- 记一次勒索病毒的遭遇
- 【Codecs系列】HEVC-SCC(四):SCC IBC句法
- NLP实战之textCNN中文文本分类
- 死区特性函数以及MATLAB验算
- c语言函数变量的作用域与生存期
- CSS进阶(6)- 居中总结