1. 时间序列

时间序列是指将同一统计指标的数值按其发生时间的先后顺序排列而成的数列,时间序列隐藏着过去与未来的关系,通过研究过去来预测未来。时间序列分析在工程、金融、科技等众多领域有着广泛的应用。在大数据时代,时间序列分析已经成为 AI 技术的一个分支,通过将时间序列分析与分类模型相结合,更好的应用于数据检测、预测等场景。


1.1  时间序列的平稳性

经典回归分析的一个重要假设是:数据是平稳的。非平稳数据往往导致“虚假回归”,表现为两个没有任何因果关系的变量,却有很高的相关性。平稳性要求: (1)均值μ是与时间 t 无关的常数;(2) 对于任意时刻 t 和任意时间间隔 k,时间序列的自协方差只与 k 有关,与 t 无关。从统计学的角度讲,平稳性的要求就是对于一个时间序列(分布未知),这个时间序列的取值一定满足一个确定的分布。


1.2  时间序列平稳性判断

通常采用 ADF(Augment Dickey-Fuller)检验时间序列是否平稳。先来看两个特殊的时间序列:

读书笔记(19) 时间序列分析_java

显然对于白噪声序列,它满足正态分布,均值与方差都与时间t无关,满足平稳性要求。对于随机游走,它的均值为0,方差与时间t有关,不满足平稳性要求。ADF 大致的思想就是基于随机游走的,对待估计的时间序列回归,如果发现p=1,则非平稳(见下式)。

读书笔记(19) 时间序列分析_java_02

平稳性对于我们分析时间序列至关重要,如果一个时间序列不是平稳的,通常需要通过移动平均或者差分等方式将其转化为平稳时间序列。


1.3  ARIMA模型

ARIMA模型的全称叫做自回归移动平均模型 (Autoregressive Integrated Moving Average Model),也记作ARIMA(p,d,q),是统计模型(statistic model)中最常见的一种用来进行时间序列预测的模型。


ARIMA模型参数:

☆ p--代表预测模型中采用的时序数据本身的滞后数(lags) ,也叫做AR/Auto-Regressive项,描述当前值与历史值之间的关系。

☆ d--代表时序数据需要进行几阶差分化,才是稳定的,也叫Integrated项。假设y表示t时刻的Y的差分。

读书笔记(19) 时间序列分析_java_03

☆ q--代表预测模型中采用的预测误差的滞后数(lags),也叫做MA/Moving Average项,关注的是自回归模型中的误差项的累加。


ARIMA数学形式:

读书笔记(19) 时间序列分析_java_04

读书笔记(19) 时间序列分析_java_05


参考:https://zhuanlan.zhihu.com/p/60023855

​https://wenku.baidu.com/view/5ee498f4aa00b52acfc7ca5b.html​

​https://www.jianshu.com/p/305c4961ee06​

​https://www.cnblogs.com/bradleon/p/6827109.html​

​https://www.kaggle.com/kanncaa1/time-series-prediction-tutorial-with-eda​


2. 数据分析及可视化

本节我们介绍一种极为强大的绘图工具—plotly。 Plotly 是个交互式可视化的第三方库,官网提供了Python,R,Matlab,JavaScript,Excel等的接口,本节我们调用Plotly,可视化二战时期气象站和空袭行动等数据,实现与可视化图片的互动。


2.1  调库和载入数据

数据内容:空袭数据;气象站数据;天气数据。

读书笔记(19) 时间序列分析_java_06

2.2  数据清洗

空袭数据含有NAN值,在这里我们丢掉NAN值,并提取有用数据。

读书笔记(19) 时间序列分析_java_07

读书笔记(19) 时间序列分析_java_08

读书笔记(19) 时间序列分析_java_09

2.3  数据可视化

我们可视化前十受袭国家、袭击国家、袭击路线等数据。


可视化前十受袭国家数据:

读书笔记(19) 时间序列分析_java_10

读书笔记(19) 时间序列分析_java_11


可视化袭击国家数据,选中可显示详细信息:

读书笔记(19) 时间序列分析_java_12



可视化袭击路线数据,选中可显示详细袭击和受袭国家信息:

读书笔记(19) 时间序列分析_java_13

读书笔记(19) 时间序列分析_java_14



可视化气象站分布数据:


下面我们分析USA和BURMA 之间的战争(1942-1945年),离这场战争最近的气象站是BINDUKURI(有1943-1945年的温度记录),我们可视化温度数据:


读书笔记(19) 时间序列分析_java_15


整合气象站温度记录和空袭行动日期记录,并可视化显示:

读书笔记(19) 时间序列分析_java_16

读书笔记(19) 时间序列分析_java_17

读书笔记(19) 时间序列分析_java_18


3. 案例应用—时间序列预测

本节我们通过一个具体实例——二战时期空袭时间与温度的关系,来介绍如何应用ARMIA模型进行时间序列预测。

3.1  创建时间序列

读书笔记(19) 时间序列分析_java_19

读书笔记(19) 时间序列分析_java_20

3.2  平稳性分析

绘制滚动统计图和应用ADF方法来检验时间序列的平稳性。

读书笔记(19) 时间序列分析_java_21

读书笔记(19) 时间序列分析_java_22

据图可看出方差基本稳定而均值具有很大的波动性, 这暗示了时间序列的非平稳性;此外通过ADF的输出,可以看到 test statistic 大于三个 critical value值,这也暗示了非平稳的时间序列。下面我们应用差分方法来实现时间序列的平稳。

读书笔记(19) 时间序列分析_java_23

读书笔记(19) 时间序列分析_java_24

根据上图和输出可发现经过一阶差分后,时间序列变得平稳。下面我们进行时间序列的预测。


3.3  时间序列预测

我们应用ARIMA来预测二战空袭时间与温度的关系。首先我们用ACF 和PACF 来确定ARIMA模型参数(具体的模型参数确定方法此处就不赘述了,感兴趣可参考https://www.jianshu.com/p/305c4961ee06)

读书笔记(19) 时间序列分析_java_25

读书笔记(19) 时间序列分析_java_26

图中两条虚线为置信区间,我们分别选择两图中实线与上虚线的第一个交点为p值和q值,由此确定模型参数为 (1,0,1),下面我们利用ARIMA(1,0,1)来进行预测。

读书笔记(19) 时间序列分析_java_27

读书笔记(19) 时间序列分析_java_28


4. 小节

本期我们简单介绍了强大的Plotly绘图工具以及应用ARIMA模型来进行时间序列预测。仅做基础介绍,知识讲解较为简单,大家如有想法,欢迎留言