文章目录
参考文章:时间序列分析
一、时间序列介绍
1.时间序列分析介绍
时间序列:依照时间顺序组织的一组数据,数据通常是有规律的进行采集。
对于时间序列问题,存在以下特点:数据可能和时间相关; 通常是不稳定的(难以建模);需要大量数据。并且,对某一时间的预测会用在之后一段时间的预测,如果出错就会导致后续的一连串错误。因此,原始的回归方法对于时间序列模型无法进行有效的预测
在评估时间序列的预测结果方面也充满着挑战。例如在商业分析中对于销量的预测还要考虑成本等许多问题,在得到结果时也需要很长的时间。
预测问题的分类:
- 单变量:单一的时间序列,包括连续型数据、类别型数据和两类别数据。可以同时预测多个不相关的序列
- 多变量:多个相关的序列,例如利润由销量、成本等有关。
2.时间序列分解
时间序列数据可以被分解为几个部分:
- 趋势(trend):长期的方向,例如房价一直都是上涨的趋势
- 季节性(seasonality):阶段性表现,例如冬天羽绒服卖得好,夏天短袖卖得好
- 残差(residual):不规律的波动,从原始时间序列移除趋势和季节性得到的随机波动。
大体上讲,如果我们能够首先移除已知来源的方差(例如趋势和季节性),模型能够表现的更好。
分解模型:
- 加法分解:value(观察值)=T(趋势)+S(季节性)+R(残差)
- 乘法分解,通过log变换可以将乘法分解转变为加法分解:value = T x S x R
- 混合分解:加法分解和乘法分解的结合
加法分解适用于季节性和趋势无关,乘法分解适用于季节性和趋势有关。混合分解则适用于时间序列中的一些值趋近或等于0。
分解时间序列的方法有很多,以下列举几个:
- 指数平滑法
- 本地散点平滑估计(locally estimated scatterplot smoothing)
- 基于频率的方法
分解模型的python实现statsmodels.tsa.seasonal.seasonal_decompose
二、平稳性和时间序列平滑
1.稳定性和自相关
平稳性影响建模和预测的能力。一个平稳的序列有如下特征:稳定的均值;稳定的方差;没有阶段性成分(季节性变量);稳定的自相关结构(某一天的数值与之前的数据相关)。不平稳的序列很难建模,对于不平稳序列,处理方法如下:
- 识别不平稳的来源
- 转换序列使其变得平稳
- 通过平稳的序列进行建模
识别不平稳数据的方法:
- Run-sequence plots:该方法是未经调整的时间序列数据的可视化图,通常是进行时间序列分析的第一步,通过观察曲线图,可以初步了解是否有趋势、季节性以及自相关性
- 总结统计特征(summary statistics):计算随时间进行的均值和方差,一种做法是将数据分桶然后计算每个桶的统计特征量
- 直方图统计(histogram plot);如果数据分布呈现正态分布,数据很可能是平稳的,反之不平稳
- Dickey-Fuller检验:ADF检验是一种假设检验,返回一个p值,若p值小于0.05则认为是不稳定的。对于小数据集或者方差变化较大的数据,应将该方法和其他方法一同使用
将不平稳序列转换为平稳序列的方法:
- 通过时间序列分解移除趋势和季节性
- 使用log变换移除异方差性
- 使用differencing方法移除自相关,参考文章:应该如何理解和处理自相关(序列相关)?
2.时间序列平滑
平滑过程通常能够减少噪声的影响从而提升对序列的预测能力,平滑数据的方法有很多种,比如移动平均法、指数平均法等。
(1)移动平均法
移动平均法可以避免局部波动的敏感性,两种基本的方法分别是等权重移动平均和指数加权移动平均。
等权重移动平均:首先选择窗口的大小,这里假设为3,之后首先计算前三个数的平均值,之后将窗口向后滑动,得到第2-4个数的平均值,以此类推直到到达最后一个数。等权重移动平均法在处理存在趋势变化较大的数据时效果不好,因此可以采用指数加权移动平均法。
指数加权移动平均:首先选择窗口的大小,这里假设为3,之后不同于直接计算三个数的平均值,这里我们对这三个数进行指数加权,加权方法例如w+w^2+ w^3=1,这里可以算出w约等于0.543。因此和预测目标距离越近的数有更大的权重。
(2)指数平均法
一阶指数平均:
二阶指数平均:可以减小趋势的影响
三阶指数平均:可以减小趋势和季节性的影响
三、ARMA模型
1.ARMA模型
ARMA模型包括两个模型:AR(autoregression)和MA(moving average),该方法也叫做Box-Jenkins方法:
- 自回归模型:依靠模型本身过去p个值,使用类似线性回归的方式预测序列
- 移动平均模型:依靠过去的q个预测误差赋予不同权重来预测序列
确定p和q的方法是可以通过自相关图和部分自相关图确定,也可以将其作为超参数用网格搜索的方式确实
使用ARMA模型需要注意的是:
- 时间序列需要是稳定的
- 序列中至少要有100个值
- 判断序列是否包含季节性
判断季节性是否存在的几种方法:
- 自相关图和部分自相关图:
- 季节性子序列图
- 直觉:在特点情境中例如节假日
选择模型的方法:
2.ARIMA和SARIMA模型
ARIMA
ARIMA模型是ARMA模型在整合时间序列(integrated time seires)上的扩展。
整合时间序列:由于将过去的值累加到一起形成的时间序列,例如股票价格。通过差分的方法可以将其转换成平稳序列。
ARIMA模型包含三个模型,每个模型都有对应的参数p、d、q:
- AR模型:同上
- MA模型:同上
- 整合部分模型:将不平稳时间序列经过多次差分可使其变得平稳,定义参数d作为差分的次数
SARIMA
SARIMA(Seasinal-ARIMA)是ARIMA在季节性方面的扩展。相比与ARIMA的参数,SARIMA多了三个参数(P、D、Q),这三个参数表示的含义和p、d、q相同,区别在于这三个参数只在某一个季节应用
四、深度学习和存活分析预测
1.用于预测的深度学习
利用RNN、LSTM等深度学习方法可以更有效的对时间序列问题进行预测
2.生存分析
参考文章:生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及C-index,【技术分享】生存回归
Kaplan-Meier曲线python实现:lifelines.KaplanMeierFitter