文章目录

  • 一. 时间序列的定义
  • 二. 时间序列在金融上的应用
  • 2.1 资产收益率
  • 三. 平稳性
  • 四. 白噪声
  • 五. 线性时间序列
  • 六. AR模型
  • 七. MA模型
  • 八. ARMA模型
  • 九. 实战
  • 9.1 绘制简单收益率与对数收益率
  • 参考:


一. 时间序列的定义

时间序列(Time Series)是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为定值间隔(如1秒,1分钟,1天,1个月,1年等),因此时间序列可以作为离散时间数据进行分析处理。时间序列广泛应用于数理统计、信号处理、计量经济学、天气预报、地震预测、脑电图、控制工程、航空学、通信工程以及绝大多数涉及到时间数据测量的应用科学与工程学。

股票价格走势:

时间序列的机器学习方法 时间序列算法模型_算法

地震强度时序图:

时间序列的机器学习方法 时间序列算法模型_深度学习_02

二. 时间序列在金融上的应用

时间序列和金融资产的属性(价格、交易量、收益率等)是紧密关联的。Robert Fry Engle与Clive Granger因对时间序列模型的贡献获得了2003年的诺贝尔经济学奖。通过对金融资产属性的时序研究,投资者不仅可以预测价格或收益率的走势,还可以进一步估计资产未来的风险范围,也可以根据标的物的价格预测来决定衍生品的定价。

时间序列模型的发展是较为迅速的。在时间序列模型发展的早期,较多的理论集中在单一时序的研究上,即一维随机变量在时间上的趋势。随着一维时序理论的蓬勃发展,多维时序的研究开始兴起。例如,从单只股票的价格的时序拓展到多只股票(彼此有较强关联)的价格的时序。又例如,随着深度学习模型的发展,类似循环神经网络(RNN)模型之类的算法被发明出来后,极大地扩展了时序数据建模的能力与应用范畴。

2.1 资产收益率

在实际研究中,资产价格反映出来的收益率是很好的时序模型建模的变量。原因在于:

  1. 对于一般投资者而言,收益率是与投资规模无关的变量,能很好地反映投资机会
  2. 与价格相比,收益率的统计属性更加优良

收益率的计算

对于t时刻的资产价格𝑃_𝑡,收益率的计算为

简单收益率:

时间序列的机器学习方法 时间序列算法模型_算法_03

对数收益率(复合收益率):

时间序列的机器学习方法 时间序列算法模型_时间序列_04

三. 平稳性

从Yahoo!Finance上搜集了S&P500过去2年的调整后的收盘价,并计算了每日的简单收益率与对数收益率,结果如下:

时间序列的机器学习方法 时间序列算法模型_时间序列_05

从图中可以看到
股价本身是上涨趋势的
简单收益率和对数收益率分别围绕0.0624%和0.0603%上下浮动
看起来,收益率总比价格本身更加“平稳”一些。
如何定义时间序列{𝑋_𝑡}的平稳性?

强平稳性: 对于任意正整数k和n,如果时间序列的机器学习方法 时间序列算法模型_算法_06时间序列的机器学习方法 时间序列算法模型_人工智能_07的联合分布是一致的,则称时间序列的机器学习方法 时间序列算法模型_算法_08具有强平稳性

**弱平稳性:**如果时间序列的机器学习方法 时间序列算法模型_时间序列_09是常数,且时间序列的机器学习方法 时间序列算法模型_人工智能_10仅与k相关,则称时间序列的机器学习方法 时间序列算法模型_算法_08具有弱平稳性

注:强、弱平稳性并不具有包含性。$ {𝑋_𝑡}$即使满足强平稳性,也未必满足弱平稳性。反之亦然。

四. 白噪声

如果一组时间序列Font metrics not found for font: .满足以下条件:

  1. Font metrics not found for font: .是独立同分布的,即对任意k,都有Font metrics not found for font: .与Font metrics not found for font: .的分布函数一致
  2. Font metrics not found for font: .的期望和方差是存在且有限的

那么称Font metrics not found for font: .为白噪声。

特别地,如果Font metrics not found for font: .服从均值为零、方差有限的正态分布,则成为高斯白噪声。

在时间序列模型中,我们一般将数据分解成可以拟合(或者预测)的一部分,再加上有白噪声引起的随机性。

五. 线性时间序列

时间序列的机器学习方法 时间序列算法模型_算法_12

六. AR模型

时间序列的机器学习方法 时间序列算法模型_时间序列的机器学习方法_13

AR(1)模型:

时间序列的机器学习方法 时间序列算法模型_深度学习_14

时间序列的机器学习方法 时间序列算法模型_算法_15

时间序列的机器学习方法 时间序列算法模型_时间序列的机器学习方法_16

时间序列的机器学习方法 时间序列算法模型_算法_17

时间序列的机器学习方法 时间序列算法模型_算法_18

时间序列的机器学习方法 时间序列算法模型_时间序列_19

自相关函数:

时间序列的机器学习方法 时间序列算法模型_时间序列_20

时间序列的机器学习方法 时间序列算法模型_时间序列的机器学习方法_21

时间序列的机器学习方法 时间序列算法模型_算法_22

AR§模型:

时间序列的机器学习方法 时间序列算法模型_时间序列的机器学习方法_23

偏自相关函数:
自相关函数,autocorrelation function(ACF),描述了时间序列数据与其之后版本的相关性(如:Y(t) 与 Y(t-1) 之间的相关性)。

偏自相关函数,partial autocorrelation function(PACF),描述了各个序列的相关性。

时间序列的机器学习方法 时间序列算法模型_深度学习_24

时间序列的机器学习方法 时间序列算法模型_深度学习_25

时间序列的机器学习方法 时间序列算法模型_时间序列的机器学习方法_26

AR(p)模型的参数估计与预测:

时间序列的机器学习方法 时间序列算法模型_人工智能_27

七. MA模型

MA模型:

时间序列的机器学习方法 时间序列算法模型_深度学习_28

自相关函数:

时间序列的机器学习方法 时间序列算法模型_人工智能_29

时间序列的机器学习方法 时间序列算法模型_算法_30

MA模型的参数估计与预测:

时间序列的机器学习方法 时间序列算法模型_时间序列_31

八. ARMA模型

ARMA模型:

时间序列的机器学习方法 时间序列算法模型_深度学习_32

ARMA模型的阶:

时间序列的机器学习方法 时间序列算法模型_时间序列的机器学习方法_33

ARIMA模型:

时间序列的机器学习方法 时间序列算法模型_深度学习_34

九. 实战

9.1 绘制简单收益率与对数收益率

测试数据路径:
链接:https://pan.baidu.com/s/1mWEHe-EJSfkhbEJoDNB4Zg
提取码:xb3w

python 代码:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from datetime import datetime
import matplotlib.pylab as plt
from random import random
from statsmodels.tsa import stattools as ts

data = pd.read_csv("E:\GSPC.csv",index_col = 'Date')
data.index = pd.to_datetime(data.index)
data = data[['Adj Close']].copy()

#计算每日简单收益率与对数收益率
price_lag = list(data.iloc[:-1]['Adj Close'])
data_lag = data.iloc[1:]
data_lag['Adj Close Lag'] = price_lag
data_lag['simple_return'] = data_lag.apply(lambda x: x['Adj Close']/x['Adj Close Lag']-1, axis=1)
data_lag['log_return'] = data_lag.apply(lambda x: np.log(x['Adj Close']/x['Adj Close Lag']), axis=1)

print("{:.4%}".format(np.mean(data_lag['simple_return'])))
print("{:.4%}".format(np.mean(data_lag['log_return'])))

# 调整窗口尺寸
#plt.figure()
plt.figure(figsize=(15, 9))
plt.subplot(1,3,1)
plt.plot(data.index, data['Adj Close'])
plt.title('S&P500 Daily Closed Price')
plt.subplot(1,3,2)
plt.plot(data_lag.index, data_lag.simple_return)
plt.title('S&P500 Daily Simple Return')
plt.subplot(1,3,3)
plt.plot(data_lag.index, data_lag.log_return)
plt.title('S&P500 Daily Log Return')
plt.show()

参考:

  1. http://www.dataguru.cn/mycourse.php?mod=intro&lessonid=1701
  2. https://www.zhihu.com/column/c_1288975560480276480
  3. https://www.jianshu.com/p/4130bac8ebec
  4. https://zhuanlan.zhihu.com/p/430365631
  5. https://zhuanlan.zhihu.com/p/383004983