第2章 时间序列建模简介

市场行为需要大量历史数据(例如外汇或股票的高频买卖报价)来进行研究。虽然不能进行对照实验,但可以基于历史数据进行广泛的测试。

——Sergio Focardi

绝大多数金融数据都具有时间维度,这一点令时间序列建模成为金融业的必要工具。本章将介绍传统的时间序列建模。第3章将介绍现代化的、在数据准备和模型结构方面完全不同的、基于深度学习的时间序列建模。传统的时间序列模型包括移动平均(Moving Average,MA)模型、自回归(Autoregressive,AR)模型和差分自回归移动平均(Autoregressive Integrated Moving Average,ARIMA)模型。这些模型的共同点是包含历史观测值。如果观测值来自误差项,将其称为移动平均模型。如果观测值来自变量自身,即用变量自身的历史数据对自身进行预测,则称为自回归模型。ARIMA则是这两类模型的扩展。

以下是关于时间序列的定义(Brockwell和Davis,2016)[1]


[1] 译者注:本章代码所用到的statsmodels库是基于Brockwell和Davis所开发的1987版本和2010版本的,详情参见statsmodels官网。

时间序列是指这样一组观测值Xt,每个观测值都在特定的时间t记录。离散时间序列是指这样一组时间序列:观测时间集T0是一个离散时间序列,表示以固定时间间隔进行观测。连续时间序列是指在一定时间间隔内连续记录观测值时得到的连续时间序列。

我们先来看看带有时间维度的数据是什么样的。图2-1展示了2010—2020年的石油价格,以下是生成这张图的Python代码:

In [1]: import quandl
        import matplotlib.pyplot as plt
        import warnings
        warnings.filterwarnings('ignore')
        plt.style.use('seaborn')
 
In [2]: oil = quandl.get("NSE/OIL", authtoken="insert you api token", 
                         start_date="2010-01-01", 
                         end_date="2020-01-01") ❶
 
In [3]: plt.figure(figsize=(10, 6))
        plt.plot(oil.Close)
        plt.ylabel('$')
        plt.xlabel('Date')
        plt.show()

❶ 从Quandl中读取数据。

图2-1 2010年1月1日—2020年1月1日的石油价格

API是一种使用代码来检索数据的工具。本书将会用到各种API。在前面这段代码中,我们使用了Quandl API。

通过Quandl API可以访问Quandl网站上关于金融、经济和其他方面的数据。

从前面的定义可以看到,时间序列建模适用于如下领域。

医疗。

金融。

经济。

网络分析。

天文。

气象。

时间序列建模方法之所以优越,是因为该方法认为过去的数据点之间的相关性能够更好地解释当前值。因此,由于时间上的相关性,同一时期股价的动态可以通过其自身的历史值更好地来理解。我们如何了解数据的动态呢?这个问题我们可以通过阐述时间序列的成分来回答。