关注微信公众号“时序人”获取更好的阅读体验
前几次的文章分享,我们了解了时间序列分析的基础方法以及预测方法。但在使用这些方法一般都需要我们分析时间序列的特征,对原始时序做一定的处理;再者,挖掘时间序列的特征可以提供可解释的信息,让我们更充分了解时间序列。那么,我们如何进行时间序列的特征工程呢?
时间序列的特征工程大体上分为:基础特征、转换特征、分类特征这三大类,涉及统计分析、机器学习、深度学习等多个领域。这里要注意的是,特征工程技巧是一方面,更重要的是看实际问题背景,不同问题有不同问题适合的方法,甚至需要为其量身打造提取特征的方法,关键在于如果你先抛开对于算法的依赖而是先自己尝试去分析这个问题,并且可以把自己想到的那些特征用算法实现,那也是一次成功的特征工程过程。
在正式讲时间序列特征工程之前,我们先聊一聊时间序列的预处理。一般来说,真实世界的时间序列常常取值范围多样,长短不一,形态各异。如果要做统一的分析,需要我们进行初步的处理,将时间序列整合到统一的范畴下,进行分析。这里基本的方法有:标准化、归一化、定量特征二值化。
标准化是使时间序列中的数值符合平均值为0,标准差为1。具体来说,对于给定的时间序列 { x 1 , x 2 , . . . , x t , . . . , x T } \{x_1, x_2, ..., x_t, ..., x_T\} {x1,x2,...,xt,...,xT},有如下公式:
x t ^ = x t − a v g ( { x t } t T ) s t d ( { x t } t T ) \hat{x_t} = \frac{x_t - \sf{avg}(\{x_t\}_t^T)}{\sf{std}(\{x_t\}_t^T)} xt^=std({xt}tT)xt−avg({xt}tT)
标准化的目标是将原始数据分布转换为标准正态分布,它和整体样本分布有关,每个样本点都能对标准化产生影响。这里,如果只考虑将均值缩放到0,不考虑标准差的话,为数据中心化处理。
归一化是把数据变成区间 [0, 1] 或 [-1, 1] 其之间的小数,其主要是为了数据处理方便而提出来的。把数据映射到[0, 1]范围之内进行处理,可以更加便捷快速。具体公式如下:
x t ^ = x t − min ( { x t } t T ) max ( { x t } t T ) − min ( { x t } t T ) \hat{x_t} = \frac{x_t - \min(\{x_t\}_t^T)}{\max(\{x_t\}_t^T) - \min(\{x_t\}_t^T)} xt^=max({xt}tT)−min({xt}tT)xt−min({xt}tT)
归一化是将样本的特征值转换到同一范围(量纲)下,把数据映射到 [0,1] 或者 [-1, 1] 区间内,它仅由变量的极值所决定。这里也可以将源数据减去均值,进行平均归一化:
x t ^ = x t − a v g ( { x t } t T ) max ( { x t } t T ) − min ( { x t } t T ) \hat{x_t} = \frac{x_t - \sf{avg}(\{x_t\}_t^T)}{\max(\{x_t\}_t^T) - \min(\{x_t\}_t^T)} xt^=max({xt}tT)−min({xt}tT)xt−avg({xt}tT)
如果不需要数据的连续信息,只需要对定量的特征进行“好与坏”的划分,我们可以使用定量特征二值化来剔除冗余信息。举个例子,银行对5名客户的征信进行打分,分别为50,60,70,80,90。现在,我们不在乎一个人的征信多少分,只在乎他的征信好与坏(如大于90为好,低于90就不好);再比如学生成绩,大于60及格,小于60就不及格。这种“好与坏”、“及格与不及格”的关系可以转化为0-1变量,这就是二值化。变化方式如下所示:
自然的,我们也可以设计更多的规则,进行多值化的处理。
对时间序列进行统计分析是最容易想到的特征提取方法,这里包括的特征有:
维度特征是提取时间序列在时间维度上的信息,包括:
将时间序列在时间轴上划分窗口是一个常用且有效的方法,包括滑动窗口(根据指定的单位长度来框住时间序列,每次滑动一个单位),与滚动窗口(根据指定的单位长度来框住时间序列,每次滑动窗口长度的多个单位)。窗口分析对平滑噪声或粗糙的数据非常有用,比如移动平均法等,这种方式结合基础的统计方法,即按照时间的顺序对每一个时间段的数据进行统计,从而可以得到每个时间段内目标所体现的特征,进而从连续的时间片段中,通过对同一特征在不同时间维度下的分析,得到数据整体的变化趋势。
我们对时序数据进行分析的时候,常常会发现数据中存在一些问题,使得不能满足一些分析方法的要求(比如:正态分布、平稳性等),其常常需要我们使用一些变换方法对数据进行转换;另一方面,人工的特征分析方法局限于人的观察经验,许多高维且隐秘的特征单单靠人力难以发现。因此,许多工作尝试对时序数据进行转换,从而捕捉更多的特征。
1964年提出的Box-Cox变换可以使得线性回归模型满足线性性、独立性、方差齐次性和正态性的同时又不丢失信息,其变换的目标有两个:一个是变换后,可以一定程度上减小不可观测的误差和预测变量的相关性。主要操作是使得变换后的因变量于回归自变量具有线性相依关系,误差也服从正态分布,误差各分量是等方差且相互独立。第二个是用这个变换来使得因变量获得一些性质,比如在时间序列分析中的平稳性,或者使得因变量分布为正态分布。
在做线性回归的过程中,一般线性模型假定的前提是
Y = X ∗ β + ε , ε ∼ N ( 0 , σ 2 I ) Y = X * \beta + \varepsilon, \varepsilon \sim N(0, \sigma^2 I) Y=X∗β+ε,ε∼N(0,σ2I)
通过各种数据转函数将非正态分布的数据转换为正态分布,例如原始值为 x i x_i xi,转换后为 y i y_i yi,常用的几种转换方式为:
高维空间转换特征直白点说就是把一维的时序转化到高维。这个高维可能是二维(例如图片),或者更高维(例如相空间重构)。这种转换可以使得时序的信息被放大,从而暴露更多的隐藏信息。同时,这种方法增加了数据分析的计算量,一般不适用于大规模的时序分析。
格拉姆角场(GAF)
该转化在笛卡尔坐标系下,将一维时间序列转化为极坐标系表示,再使用三角函数生成GAF矩阵。
计算过程:
马尔科夫随机场(MRF)
MRF的基本思想是将时间序列的值状态化,然后计算时序的转化概率,其构建的是一个概率图(Graph),一种无向图的生成模型,主要用于定义概率分布函数。
这里用到了时序窗口分析方法先构建随机场。随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。举个例子,假如时序划分片段,所有的片段聚成若干的状态,将时序映射回这些状态上,我们便得到了一个随机场。有关这个例子可以参考文章《AAAI 2020 | 时序转化为图用于可解释可推理的异常检测》
马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,与其不相邻的位置的赋值无关。例如时序片段 X t X_t Xt与 X t − 1 X_{t-1} Xt−1有关,与 X t − 2 X_{t-2} Xt−2没有关系。
构建马尔科夫随机场,可以更清晰的展现时序分布的转化过程,捕捉更精确的分布变化信息。
时频分析
时频分析是一类标准方法,常用在通信领域信号分析中,包括傅里叶变换,短时傅里叶变换,小波变换等,逐步拟合更泛化的时间序列。
傅里叶变换是一种线性的积分变换,常在将信号在时域(或空域)和频域之间变换时使用。其主要处理平稳的时间序列。当时序数据非平稳时,一般的傅里叶变换便不再适用,这里便有了短时傅里叶变换方法,其主要通过窗口分析,把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率。然而,我们无法保证所有等长的窗口都是平稳的,手动调整窗口的宽窄成本大,耗费人力。小波分解尝试解决这个问题,其直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间。
与高维空间转换特征相反,提取时间序列的降维特征常出现在多维时间序列分析方面,其主要是更快捕捉复杂时间序列中的主要特征,提高分析效率与速度,包括主成分分析(PCA),tSNE,张量分解等等,可以帮助我们从相关因素的角度来理解时间序列。
主成分分析是一种分析、简化数据集的技术。其通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但这也不是一定的,要视具体应用而定。
张量分解从本质上来说是矩阵分解的高阶泛化,常出现在推荐系统中。在实际应用中,特征张量往往是一个稀疏矩阵,即很多位置上的元素是空缺的,或者说根本不存在。举个例子,如果有10000个用户,同时存在10000部电影,我们以此构造一个用户评分行为的张量,这里不经想问:难道每个用户都要把每部电影都看一遍才知道用户的偏好吗?其实不是,我们只需要知道每个用户仅有的一些评分就可以利用矩阵分解来估计用户的偏好,并最终推荐用户可能喜欢的电影。
最后一种转换特征便是通过神经网络的方式自抽取特征表达。这种方式通常特征的解释性差,但效果很好。一般来说,训练好的网络中间层输出可以被当做特征,例如自编码器模型“Encoder-Decoder”,如果输入输出是时间序列的话,Encoder的输出可以当做一个输入被“压缩”的向量,那么当网络效果得还不错的时候,可以简单看做这个向量具备了这个时序的特征。
分类特征一般结合具体的任务,比如时序预测,时序分类等,常常有标签(Label)信息来引导,其分析的特征也为具体的任务所服务,是一类常用的特征分析方法,一般通过机器学习中的有监督方式进行抽取。
字典特征 (BoP)
字典方法旨在将时间序列通过变换,找到划分的阈值,进而将每个时序实值划分开,对应到某个字母表中。其通过滑动窗提取不同“单词”的出现频率,作为分类依据。这种方法的优势在于速度很快,而且抗噪效果好,缺点在于会损失很多有效的时序信息,只能进行粗粒度的时序分类分析。
形态特征(Shapelet)
形态方法旨在捕捉时间序列分类任务中作为分类依据的有代表性的子序列形状,2012年提出的Shapelet方法就是搜索这些候选的子序列形状以找到分类的依据,因为在真实世界中的时间序列往往存在有特征明显的形状,例如心电图数据一次正常心跳简化一下就是前后两个小的峰中间加一个高峰,那么如果其中缺了一块形状的话,可能就是作为鉴别异常心跳的依据。
更多原创内容与系列分享,欢迎关注微信公众号“时序人”获取。