大厂面试机器学习算法(6)时间序列分析


时间序列:时间序列是将某种统计指标的数值,按时间先后顺序排序所形成的数列。

序列特征构造

常见的时间序列特征构造思路
在这里插入图片描述

时间序列分析任务

- Indexing/Query by Content

在这里插入图片描述

图1 二维搜索空间中按内容任务表示的典型查询关系图

按内容查询是时间序列分析中最活跃的研究领域。给定一个查询时间序列 Q Q Q和一些相似/不相似度量 D ( Q , C ) D(Q,C) D(Q,C),在序列数据库中找到最相似的时间序列。

- Clustering

聚类是在数据集中找到自然组/簇的过程,目标是找到与其他集群尽可能不同的最同质的集群,分组最大化簇间方差而最小化簇内方差。聚类问题(即使超出时间序列挖掘的范围)的主要困难通常是定义正确的聚类数量。时间序列聚类任务可分为完整序列聚类和子序列聚类。
在这里插入图片描述

图2 两个不同聚类簇的聚类结果图

- Classification

分类任务旨在为一组的每个系列分配标签。与聚类任务相比,主要的区别在于,类是预先已知的,算法是在一个示例数据集上训练的。
在这里插入图片描述

图3 分类任务的主要步骤

- Segmentation/Summarization

分割任务的目的是创建一个准确的时间序列的近似,通过降低维数,同时保留其基本特征。该任务的目标是使简化后的表示与原始时间序列之间的重构误差最小化。
在这里插入图片描述

图4 分割系统的应用实例

- Prediction

时间序列的预测就是通过分析时间序列,根据时间序列所反映出来的发展过程、方向和趋势,进行类推或延伸,预测下一段时间或以后若干年内可能达到的水平。时间序列通常很长,并且被认为是平滑的,后续的值彼此都在可预测的范围内。预测的任务是明确地对这种变量相关性建模,以预测一系列的下几个值。在时间序列方面,它是应用最广泛的任务之一。
在这里插入图片描述

图5 时间序列预测任务的典型例子

- Anomaly Detection

时间序列的异常检测就是通过历史的数据分析,查看当前的数据是否发生了明显偏离了正常的情况。异常检测的目的是在一系列异常子序列中找到异常子序列。给定一个时间序列 Q Q Q(假设是正常的)和一个没有注释的时间序列 R R R,找到 R R R中包含异常或有趣的子序列。
在这里插入图片描述

图6 异常检测任务的理想化示例

- Motif Discovery

Motif发现包括寻找在更长时间序列中出现的每个子序列。这个想法来源于生物信息学中的基因分析。Motif最初被定义为典型的不重叠子序列。
在这里插入图片描述

图7 较长时间序列中出现的子序列

时间序列分析算法

Autoregression, Moving Average系列

- Autoregression (AR)

使用方式:from statsmodels.tsa.ar_model import AutoReg
适用于:没有趋势和季节性成分的单变量时间序列
Autoregression (AR)方法将序列中的下一步预测结果为先前时间步长观测值的线性函数。
模型符号:模型 p 的阶数作为 AR 函数的参数,即AR( p)。例如,AR(1) 是一阶Autoregression model(自回归模型)。

时序数据 X t X_t Xt通常可由历史数据的加权和与随机扰动的叠加来表示:
X t = ∑ j = 1 p a j X t − j + ϵ t X_t=\sum_{j=1}^{p}a_jX_{t-j}+\epsilon_t Xt=j=1pajXtj+ϵt
式中 a j a_j aj为常系数, ϵ t \epsilon_t ϵt为随机扰动(噪声)项。

- Moving Average (MA)

使用方式:from statsmodels.tsa.arima.model import ARIMA, order=(0, 0, 1)
适用于:没有趋势和季节性成分的单变量时间序列。
Moving Average (MA)方法将序列中的下一步预测结果为来自先前时间步骤的平均过程的残差的线性函数。
模型符号:将模型 q 的阶指定为 MA 函数的参数,即MA(q)。例如,MA(1) 是一阶Moving Average模型。

不同于使用预测变量的历史值来进行回归,移动平均模型(moving average model)使用历史预测误差来建立一个类似回归的模型。
X t = c + ∑ j = 1 q θ j ϵ t − j X_t=c+\sum_{j=1}^{q}\theta_j\epsilon_{t-j} Xt=c+j=1qθjϵtj
上式中的 ϵ t \epsilon_t ϵt是白噪声。我们将这个模型称之为 M A ( q ) MA(q) MA(q)模型,即 q q q阶移动平均模型。当然,由于我们并不对 ϵ t \epsilon_t ϵt的值进行观测,因此这其实不是一个一般意义上的线性模型。

- Autoregressive Moving Average (ARMA)

使用方式:from statsmodels.tsa.arima.model import ARIMA, order=(2, 0, 1)
该方法适用于没有趋势和季节性成分的单变量时间序列
ARIMA 方法将序列中的下一步预测结果为先前时间步的观测值和残差的线性函数。 它结合了AR 和MA 模型。
模型符号: AR( p) 和 MA(q) 模型的阶数作为 ARMA 函数的参数,例如 ARMA(p,q)。ARIMA 模型可用于开发 AR 或 MA 模型。

大多应用场景中,需要高阶的AR或MA模型才能充分地描述数据的动态结构,这样问题会变得很繁琐。为了克服这个困难,提出了自回归滑动平均(ARMA)模型。基本思想是把AR和MA模型结合在一起,使所使用的参数个数保持很小。
模型形式为:
X t = a 0 + ∑ j = 1 p a j X t − j + ϵ t + ∑ i = 1 q β j ϵ t − i X_t=a_0+\sum_{j=1}^{p}a_jX_{t-j}+\epsilon_t+\sum_{i=1}^{q}\beta_j\epsilon_{t-i} Xt=a0+j=1pajXtj+ϵt+i=1qβjϵti
式中 ϵ t \epsilon_t ϵt为白噪声序列, p , q p,q p,q分别对应模型AR和MA,为非负整数。

- Autoregressive Integrated Moving Average (ARIMA)

使用方式:from statsmodels.tsa.arima.model import ARIMA, order=(1, 1, 1)
该方法适用于有趋势且无季节性成分的单变量时间序列
ARIMA方法将序列中的下一步建模为先前时间步长的差分观测值和残差的线性函数。
ARIMA结合了AR和MA模型以及序列的差分预处理步骤,使序列平稳。
模型符号:指定 AR( p)、I(d) 和 MA(q) 模型的阶数作为ARIMA 函数的参数,例如 ARIMA(p, d, q)。ARIMA 模型还可用于开发 AR、MA 和 ARMA 模型。

ARMA模型研究的对象为平稳序列。如果序列是非平稳的,就可以考虑使用差分自回归移动平均模型ARIMA。ARIMA里面的I指Integrated(差分), ARIMA(p,d,q)就表示p阶AR,d次差分,q阶MA。 ARIMA的前提是数据是stationary的,也就是说统计特性(mean,variance,correlation等)不会随着时间窗口的不同而变化。一个非平稳序列经过d次差分后,可以转化为平稳时间序列。
ARIMA模型的表示如下:
y ′ = c + ϕ 1 y t − 1 ′ + … + ϕ p y t − p ′ + θ 1 ϵ t − 1 + … + θ q ϵ t − q + ϵ t y'=c+\phi_1y'_{t-1}+…+\phi_py'_{t-p}+\theta_1\epsilon_{t-1}+…+\theta_q\epsilon_{t-q}+\epsilon_t y=c+ϕ1yt1++ϕpytp+θ1ϵt1++θqϵtq+ϵt
其中 y t ′ y'_t yt是差分序列(可能经过多次查分)。右侧的“预测变量”包括 y t y_t yt的延迟值和延迟的误差。

ARIMA建模的步骤:

  • 获取被观测系统时间序列数据;
  • 对数据绘图,观测是否为平稳时间序列;对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列
  • 经过第二步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q
    注:自相关系数和偏自相关系数即以时间序列 y t , y t − 1 , . . . , y t − k y_t,y_{t-1},...,y_{t-k} yt,yt1,...,ytk y t + h , y t − 1 + h , . . . , y t − k + h y_{t+h},y_{t-1+h},...,y_{t-k+h} yt+h,yt1+h,...,ytk+h为自变量求相关系数和偏相关系数,其中有基础细节需要注意:自相关系数和偏自相关系数.知乎
  • 由以上得到的d、q、p,得到ARIMA模型。然后开始对得到的模型进行模型检验。

拓展:

- Seasonal Autoregressive Integrated Moving-Average (SARIMA)

使用方式:from statsmodels.tsa.statespace.sarimax import SARIMAX
该方法适用于具有趋势且/或季节性成分的单变量时间序列
SARIMA方法将序列中的下一步预测值为先前时间步长的差异观测值、误差、差异季节性观测值和季节性误差的线性函数。
将 ARIMA 模型与在季节性水平上执行相同的自回归、差分和移动平均建模的能力相结合。
模型符号:指定 AR§、I(d) 和 MA(q) 模型的阶数作为ARIMA 函数和 AR§、I(D)、MA(Q) 和 m 的参数季节级别的参数,例如 SARIMA(p, d, q)(P, D, Q)m。其中“m”是每个季节(季节期间)的时间步长数。SARIMA 模型可用于开发 AR、MA、ARMA 和 ARIMA 模型。

- Seasonal Autoregressive Integrated Moving-Average with Exogenous Regressors (SARIMAX)

使用方式:from statsmodels.tsa.statespace.sarimax import
SARIMAX 适用于具有趋势且/或 季节性成分以及外生变量的单变量时间序列
SARIMAX模型是SARIMA模型的扩展,其中还包括外生变量的建模。外生变量也称为协变量,可以被认为是并行输入序列,它们在与原始序列相同的时间步长中进行观察。初级序列可被称为内源数据以将其与外源序列进行对比。外生变量的观测值在每个时间步直接包含在模型中,并且不以与主要内生序列相同的方式建模(例如作为AR、MA 等过程)。 SARIMAX 方法也可用于对包含外生变量的包含模型进行建模,例如 ARX、MAX、ARMAX 和 ARIMAX。

- Vector Autoregression (VAR)

使用方式:from statsmodels.tsa.vector_ar.var_model import VAR
该方法适用于没有趋势和季节性成分的多元时间序列
VAR 方法使用 AR 模型对每个时间序列的下一步进行建模。它是 AR对多个并行时间序列的推广,例如多元时间序列。 模型符号:指定 AR§ 模型的阶数作为 VAR 函数的参数,例如 VAR( p)。
VAR的自回归就是指一个时序变量的值是该变量本身过去的值和其他变量过去的值的线性函数。

- Vector Autoregression Moving-Average (VARMA)

使用方式:from statsmodels.tsa.statespace.varmax import VARMAX
该方法适用于没有趋势和季节性成分的多元时间序列
VARMA 方法使用 ARMA 模型对每个时间序列中的下一步进行建模。它是 ARMA对多个并行时间序列的推广,例如多元时间序列。
模型符号:指定 AR( p) 和 MA(q) 模型的阶数作为 VARMA 函数的参数,例如VARMA(p, q)。VARMA 模型也可用于开发 VAR 或 VMA 模型。

- Vector Autoregression Moving-Average with Exogenous Regressors(VARMAX)

使用方式:from statsmodels.tsa.statespace.varmax import VARMAX
该方法适用于具有外生变量的没有趋势和季节性成分的多元时间序列。 带有外生回归量的向量自回归移动平均 (VARMAX) 是 VARMA模型的扩展,它还包括外生变量的建模。它是 ARMAX 方法的多元版本。
外生变量也称为协变量,可以被认为是并行输入序列,它们在与原始序列相同的时间步长中进行观察。主要系列被称为内源数据,以将其与外源序列进行对比。外生变量的观测值在每个时间步直接包含在模型中,并且不以与主要内生序列相同的方式建模(例如作为AR、MA 等过程)。 VARMAX 方法也可用于对包含外生变量的包含模型进行建模,例如 VARX 和 VMAX。

Exponential Smoothing(指数平滑)系列

- Simple Exponential Smoothing (SES)

使用方式:from statsmodels.tsa.holtwinters import SimpleExpSmoothing
该方法适用于没有趋势和季节性成分的单变量时间序列
模型符号: l t l_t lt表示预测值, y t y_t yt表示实际值, α \alpha α表示记忆衰减因子, α \alpha α越大前期观测值作用衰减越快。

简单指数平滑 (一次指数平滑) 方法将下一个时间步预测结果为先前时间步观测值指数加权线性函数。
模型公式为:
l t = α y t + ( 1 − α ) l t − 1 l_t=\alpha y_t+(1-\alpha)l_{t-1} lt=αyt+(1α)lt1
递推到第一个观测值,即指数加权。观测值越早,权重越小。
l t = α y t + α ( 1 − α ) y t − 1 + α ( 1 − α ) 2 y t − 2 + . . . l_t=\alpha y_t+\alpha(1-\alpha)y_{t-1}+\alpha(1-\alpha)^2y_{t-2}+... lt=αyt+α(1α)yt1+α(1α)2yt2+...

- Holt’s Exponential Smoothing (HES)

使用方式:from statsmodels.tsa.holtwinters import ExponentialSmoothing
Holt 用来预测有趋势的时间序列
直观地看,就是对平滑值的一阶差分(可以理解为斜率)也作一次平滑。模型的预测结果是一条斜率不为0的直线。

模型形如:
l t = α y t + ( 1 − α ) ( l t − 1 + b t − 1 ) l_t=\alpha y_t+(1-\alpha)(l_{t-1}+b_{t-1}) lt=αyt+(1α)(lt1+bt1)
b t = β ( l t − l t − 1 ) + ( 1 − β ) b t − 1 b_t=\beta(l_t-l_{t-1})+(1-\beta)b_{t-1} bt=β(ltlt1)+(1β)bt1
在这里插入图片描述

Local Outlier Factor

使用方式:from sklearn.neighbors import LocalOutlierFactor

在 LOF(Local Outlier Factor) 之前的异常检测算法大多是基于统计方法的,或者是借用了一些聚类算法用于异常点的识别(比如DBSCAN,OPTICS)。但是,基于统计的异常检测算法通常需要假设数据服从特定的概率分布,这个假设往往是不成立的。而聚类的方法通常只能给出 0/1 的判断(即是否异常点),不能量化每个数据点的异常程度。相比较而言,基于密度的LOF算法要更简单、直观。它不需要对数据的分布做太多要求,还能量化每个数据点的异常程度(outlierness)。
LOF通过计算一个数值score来反映一个样本的异常程度。这个数值的大致意思是:一个样本点周围的样本点所处位置的平均密度比上该样本点所在位置的密度。比值越大于1,则该点所在位置的密度越小于其周围样本所在位置的密度,这个点就越有可能是异常点。

在这里插入图片描述

图8 二维LOF示例
LOF算法**核心概念**:

K-邻近距离(k-distance):在距离数据点 p 最近的几个点中,第 k 个最近的点跟点 p 之间的距离称为点 p 的 K-邻近距离,记为 k-distance § 。
可达距离(rechability distance):可达距离的定义跟K-邻近距离是相关的,给定参数k时, 数据点 p 到 数据点o 的可达距离 reach-dist(p, o) 为数据点o的K-邻近距离 和 数据点p与点o之间的直接距离的最大值。
局部可达密度(local rechability density):局部可达密度的定义是基于可达距离的,对于数据点 p,那些跟点p的距离小于等于 k-distance(p)的数据点称为它的 k-nearest-neighbor,记为 N k ( p ) N_k(p) Nk(p),数据点 p 的局部可达密度为它与邻近的数据点的平均可达距离的倒数。
局部异常因子(local outlier factor):根据局部可达密度的定义,如果一个数据点跟其他点比较疏远的话,那么显然它的局部可达密度就小。但LOF算法衡量一个数据点的异常程度,并不是看它的绝对局部密度,而是看它跟周围邻近的数据点的相对密度。这样做的好处是可以允许数据分布不均匀、密度不同的情况。局部异常因子即是用局部相对密度来定义的。数据点 p 的局部相对密度(局部异常因子)为点p的邻居们的平均局部可达密度跟数据点p的局部可达密度的比值。

One-Class SVM

使用方式:from sklearn.svm import OneClassSVM
Ref:One-Class CVM

严格地讲,OneClassSVM不是一种异常点检测方法,而是一种奇异值检测方法,因为它的训练集不应该掺杂异常点(训练集只有一类),否则的话,可能在训练时影响边界的选取。 但在数据维度很高,或者对相关数据分布没有任何假设的情况下,OneClassSVM也可以作为一种很好的outlier detection方法。传统意义上,很多的分类问题试图解决两类或者多类情况,机器学习应用的目标是采用训练数据,将测试数据属于哪个类进行区分。但是如果只有一类数据,而目标是测试新的数据并且检测它是否与训练数据相似。
One Class SVM这个问题的解决思路其中一种是SVDD,对于SVDD来说,我们期望所有不是异常的样本都是正类别,同时它采用一个超球体而不是一个超平面来做划分,该算法在特征空间中获得数据周围的球形边界,期望最小化这个超球体的体积,从而最小化异常点数据的影响。
在这里插入图片描述

Deep-SVDD

paper:Deep One-Class Classification. ICML.2018.
code:添加链接描述

Deep SVDD的核心思想是:利用神经网络提取数据特征,并且将正常的样本收缩在超球面(中心为C,半径为R,中心c需要提前确定)内,异常的样本远离超球面,落于球外。

异常检测
在这里插入图片描述

上图Deep-SVDD模型做法:训练一个神经网络,可以将输入的数据变成右边的一个输出空间,如果再来一个新的数据,经过模型之后,新数据落在了圆心为c,半径为R的圆(高维空间就叫超球面)里面,就认为是黑点(正样本),反之落在圆外就认为是白点(负样本)。优化模型:
在这里插入图片描述

第一项为尽量把半径缩小,半径就是区分黑白点的阈值;第二项是惩罚项,允许有一些点可以落在圈外;第三项就是模型各个隐藏层参数的正则化。
单分类
全是正常数据,即全是黑点,没有白点。目的是尽量将所有的数据靠近球心:
在这里插入图片描述

得分函数:
在这里插入图片描述

假设一个测试数据过来, s ( x ) s(x) s(x) 就是经过模型之后与球心的距离。可以设置一个阈值,超出阈值的是异常值,少于阈值的是正常值。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值