作者 | 时序人  责编 | 张文

头图 | CSDN 下载自视觉中国

来源 | 时序人(ID:TSer2020)

前几次的分享,我们了解了时间序列分析的基础方法以及预测方法。在使用这些方法之前,一般需要我们对原始时序做一定的处理,抽取若干特征;再者,为了更充分了解时间序列,我们也需要挖掘时间序列的特征以获得可解释的信息。那么,我们如何进行时间序列的特征工程呢?

时间序列的特征工程大体上分为:基础特征、转换特征、分类特征这三大类,涉及统计分析、机器学习、深度学习等多个领域。这里要注意的是,特征工程技巧是一方面,更重要的是看实际问题背景,不同问题有不同的方法,甚至需要为其量身打造提取特征的方法,关键在于先自己尝试去分析这个问题,将想到的特征用算法实现并有效,那这也是一次成功的特征工程。

图 | 时间序列基础特征构造

那么,了解并掌握基本的时序特征分析方法,将对我们分析时间序列有很大的帮助。我们可以从哪些方面来分析时序的特征呢?本文就这个话题整理有关领域的工作,供大家阅读。

时间序列预处理

在正式讲时间序列特征工程之前,我们先聊一聊时间序列的预处理。一般来说,真实世界的时间序列常常取值范围多样,长短不一,形态各异。如果要做统一的分析,需要我们进行初步的处理,将时间序列整合到统一的范畴下,进行分析。这里基本的方法有:标准化、归一化、定量特征二值化

标准化

标准化是使时间序列中的数值符合平均值为 0,标准差为 1。具体来说,对于给定的时间序列,有如下公式:

标准化的目标是将原始数据分布转换为标准正态分布,它和整体样本分布有关,每个样本点都能对标准化产生影响。这里,如果只考虑将均值缩放到 0,不考虑标准差的话,为数据中心化处理。

归一化

归一化是把数据变成区间 [0, 1] 或  [-1, 1] 其之间的小数,其主要是为了数据处理方便而提出来的。把数据映射到[0, 1]范围之内进行处理,可以更加便捷快速。具体公式如下:

归一化是将样本的特征值转换到同一范围(量纲)下,把数据映射到 [0,1] 或者 [-1, 1] 区间内,它仅由变量的极值所决定。这里也可以将源数据减去均值,进行平均归一化:

什么时候用归一化?什么时候用标准化?

  1. 如果对输出结果范围有要求,用归一化。

  2. 如果数据较为稳定,不存在极端的最大最小值,用归一化。

  3. 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

定量特征二值化

如果不需要数据的连续信息,只需要对定量的特征进行“好与坏”的划分,我们可以使用定量特征二值化来剔除冗余信息。举个例子,银行对 5 名客户的征信进行打分,分别为 50,60,70,80,90。现在,我们不在乎一个人的征信多少分,只在乎他的征信好与坏(如大于 90 为好,低于 90 就不好);再比如学生成绩,大于 60 及格,小于 60 就不及格。这种“好与坏”、“及格与不及格”的关系可以转化为 0-1 变量,这就是二值化。变化方式如下所示:

自然的,我们也可以设计更多的规则,进行多值化的处理。

时间序列基础特征

统计特征

对时间序列进行统计分析是最容易想到的特征提取方法,这里包括的特征有:

  • 简单特征:均值、标准差、极值、分位数、尖峰个数、缺失个数、偏差等等;

  • 高级特征:自相关性、周期性、趋势(斜率)、频率、随机噪音等等。

维度特征

维度特征是提取时间序列在时间维度上的信息,包括:

  • 连续型特征:持续时间(比如:单页面浏览时长)、时间间隔(比如:上次购买、距离现在购买的时间)

  • 离散型特征:

    • 小时级特征:哪个时间段(0-24)

    • 天级特征:一周中的星期几、工作日、周末、法定假日

    • 星期级特征:一个月中的第几个星期、一年中哪个星期

    • 月份级的特征:第几个月份

窗口特征

将时间序列在时间轴上划分窗口是一个常用且有效的方法,包括滑动窗口(根据指定的单位长度来框住时间序列,每次滑动一个单位),与滚动窗口(根据指定的单位长度来框住时间序列,每次滑动窗口长度的多个单位)。窗口分析对平滑噪声或粗糙的数据非常有用,比如移动平均法等,这种方式结合基础的统计方法,即按照时间的顺序对每一个时间段的数据进行统计,从而可以得到每个时间段内目标所体现的特征,进而从连续的时间片段中,通过对同一特征在不同时间维度下的分析,得到数据整体的变化趋势。

图 | 时间序列滑动窗口

时间序列转换特征

我们对时序数据进行分析的时候,常常会发现数据中存在一些问题,使得不能满足一些分析方法的要求(比如:正态分布、平稳性等),其常常需要我们使用一些变换方法对数据进行转换;另一方面,人工的特征分析方法局限于人的观察经验,许多高维且隐秘的特征单单靠人力难以发现。因此,许多工作尝试对时序数据进行转换,从而捕捉更多的特征。

统计转换特征

1964 年提出的 Box-Cox 变换可以使得线性回归模型满足线性性、独立性、方差齐次性和正态性的同时又不丢失信息,其变换的目标有两个:一个是变换后,可以一定程度上减小不可观测的误差和预测变量的相关性。主要操作是使得变换后的因变量与回归自变量具有线性相依关系,误差也服从正态分布,误差各分量是等方差且相互独立。第二个是用这个变换来使得因变量获得一些性质,比如在时间序列分析中的平稳性,或者使得因变量分布为正态分布。‍

‍在做线性回归的过程中,一般线性模型假定的前提是:

  • 线性性:E(Y)是X中各变量的线性函数

  • 独立性:之间互相独立

  • 方差齐次性:

  • 正态性:服从正态分布

通过各种数据转函数将非正态分布的数据转换为正态分布,例如原始值为,转换后为,常用的几种转换方式为:

  • 对数转换:

  • 平方根转换:

  • 倒数转换:

  • 平方根后取倒数:

  • 平方根后再取反正弦:

  • 幂转换:,其中,其中参数

高维空间转换特征

高维空间转换特征直白点说就是把一维的时序转化到高维。这个高维可能是二维(例如图片),或者更高维(例如相空间重构)。这种转换可以使得时序的信息被放大,从而暴露更多的隐藏信息。同时,这种方法增加了数据分析的计算量,一般不适用于大规模的时序分析

格拉姆角场(GAF)

该转化在笛卡尔坐标系下,将一维时间序列转化为极坐标系表示,再使用三角函数生成 GAF 矩阵。

计算过程:

  • 数值缩放:将笛卡尔坐标系下的时间序列缩放到[0,1]或[-1,1]区间

  • 极坐标转换:使用坐标变换公式,将笛卡尔坐标系序列转化为极坐标系时间序列

  • 角度和/差的三角函数变换:若使用两角和的 cos 函数则得到 GASF,若使用两角差的 cos 函数则得到 GADF

马尔科夫随机场(MRF)

MRF 的基本思想是将时间序列的值状态化,然后计算时序的转化概率,其构建的是一个概率图(Graph),一种无向图的生成模型,主要用于定义概率分布函数。

这里用到了时序窗口分析方法先构建随机场。随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。举个例子,假如时序划分片段,所有的片段聚成若干的状态,将时序映射回这些状态上,我们便得到了一个随机场。有关这个例子可以参考文章《AAAI 2020 | 时序转化为图用于可解释可推理的异常检测》

马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,与其不相邻的位置的赋值无关。

构建马尔科夫随机场,可以更清晰的展现时序分布的转化过程,捕捉更精确的分布变化信息。

时频分析

时频分析是一类标准方法,常用在通信领域信号分析中,包括傅里叶变换,短时傅里叶变换,小波变换等,逐步拟合更泛化的时间序列。

傅里叶变换是一种线性的积分变换,常在将信号在时域(或空域)和频域之间变换时使用。其主要处理平稳的时间序列

当时序数据非平稳时,一般的傅里叶变换便不再适用,这里便有了短时傅里叶变换方法,其主要通过窗口分析,把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率。然而,我们无法保证所有等长的窗口都是平稳的,手动调整窗口的宽窄成本大,耗费人力。小波分解尝试解决这个问题,其直接把傅里叶变换的基换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间。

降维转换特征

与高维空间转换特征相反,提取时间序列的降维特征常出现在多维时间序列分析方面,其主要是更快捕捉复杂时间序列中的主要特征,提高分析效率与速度,包括主成分分析(PCA),tSNE,张量分解等等,可以帮助我们从相关因素的角度来理解时间序列。

主成分分析是一种分析、简化数据集的技术。其通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但这也不是一定的,要视具体应用而定。

张量分解从本质上来说是矩阵分解的高阶泛化,常出现在推荐系统中。在实际应用中,特征张量往往是一个稀疏矩阵,即很多位置上的元素是空缺的,或者说根本不存在。举个例子,如果有 10000 个用户,同时存在 10000 部电影,我们以此构造一个用户评分行为序列的张量,这里不经想问:难道每个用户都要把每部电影都看一遍才知道用户的偏好吗?其实不是,我们只需要知道每个用户仅有的一些评分就可以利用矩阵分解来估计用户的偏好,并最终推荐用户可能喜欢的电影。

基于神经网络的特征工程

还有一种转换特征便是通过神经网络的方式自抽取特征表达。这种方式通常特征的解释性差,但效果好。一般来说,训练好的网络中间层输出可以被当做特征,例如自编码器模型 “Encoder-Decoder”,如果输入输出是时间序列的话,  Encoder 的输出可以当做一个输入被“压缩”的向量,那么当网络效果得还不错的时候,可以简单看做这个向量具备了这个时序的特征。

时间序列分类特征

分类特征一般结合具体的任务,比如时序预测,时序分类等,常常有标签(Label)信息来引导,其分析的特征也为具体的任务所服务,是一类常用的特征分析方法,一般通过机器学习中的有监督方式进行抽取。

字典特征(BoP)

字典方法旨在将时间序列通过变换,找到划分的阈值,进而将每个时序实值划分开,对应到某个字母表中。其通过滑动窗提取不同“单词”的出现频率,作为分类依据。这种方法的优势在于速度很快,而且抗噪效果好,缺点在于会损失很多有效的时序信息,只能进行粗粒度的时序分类分析。

形态特征(Shapelet)

形态方法旨在捕捉时间序列分类任务中作为分类依据的有代表性的子序列形状。2012 年提出的 Shapelet 方法就是搜索这些候选的子序列形状以找到分类的依据,因为在真实世界中的时间序列往往存在有特征明显的形状,例如心电图数据一次正常心跳简化一下就是前后两个小的峰中间加一个高峰,那么如果其中缺了一块形状的话,可能就是作为鉴别异常心跳的依据。

写在最后

本次为大家整理总结了时间序列的特征工程方法。相信各位读者通过这篇文章能初步了解时间序列的特征分析方法。应用这些方法你可以尝试驾驭不同场景下的时序分析,做到“心中有数,胸有成竹”。

我们目前所接触到的时间序列都是完整的,但在真实场景中,由于采集能力或网络传输的原因,常常会有数据缺失,断点的情况。那么,请大家想一想,我们如何处理这些质量欠佳的时间序列呢?

更多精彩推荐
☞C语言能够被替换吗?
☞开源将走向何方?☞为什么苹果 M1 芯片如此之快?☞百密一疏,防不胜防,细数那些大型数据库建设过程中绕不开的坑
☞被微软称为 “世界的电脑” ,Azure 到底有多牛?☞程序员才懂的“凡尔赛语录”
点分享点点赞点在看

如何进行时间序列的特征工程?相关推荐

  1. python 特征工程_[译] 基于时序数据的特征工程 --- Python实现

    基于时序数据的回归预测问题,在工作中经常遇到的.它与一般的监督学习的回归模型的区别在于数据本身是基于时序的.而常用的时序预测模型,比如arima等,添加其他特征时又不方便,不得不求助于经典的监督学习预 ...

  2. ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码

    ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码 目录 特殊类型数据分割 5.1.时间序列数据分割TimeSeriesSplit 特殊类型数据分割 ...

  3. 特征工程:时间特征构造以及时间序列特征构造

    0x00 前言 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键. 那特征工程是什 ...

  4. 这或许是全网最全时间序列特征工程构造的文章了

    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键. 那特征工程是什么? 特征工程是 ...

  5. Python预测 数据分析与算法 学习笔记(特征工程、时间序列)

    微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...

  6. 手动特征工程已经OUT了!自动特征工程才是改进机器学习的方式

    作者 | William Koehrsen 译者 | linstancy 编辑 | Jane 出品 | AI科技大本营 [导读]近年来,我们在自动模型选择和超参数调优方面取得了进展,但机器学习流程中最 ...

  7. 「特征工程」之零基础入门数据挖掘

    Datawhale 作者:吴忠强,Datawhale优秀学习者 摘要:对于数据挖掘项目,本文将学习应该从哪些角度做特征工程?从哪些角度做数据清洗,如何对特征进行增删,如何使用PCA降维技术等. 特征工 ...

  8. 一文讲解特征工程 | 经典外文PPT及中文解析

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 "More data beats clever algorithms, bu ...

  9. 竞赛专题(四)特征工程-竞赛中的必杀技

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力.Data ...

最新文章

  1. Task和Activity相关(转)
  2. ADO.NET中异步处理的方式
  3. 关于Docker目录挂载的总结
  4. 2018-2019-1 20165315 实验三 实时系统
  5. PPR data model
  6. derhams to php,基于laravel belongsTo使用详解
  7. MongoDB的安装与使用
  8. 一步步构建大型网站架构 [转]
  9. MyBatis中SQL语句相关内容
  10. linux df和du常用命令
  11. 开发iOS百度地图大头针可以重复点击
  12. XUbuntu20.04开机logo定制,主题修改启动背景
  13. 机器学习(一):数据预处理
  14. 完整版linux下android源码下载、编译、模拟器启动运行
  15. V模型、W模型、测试工具的介绍
  16. bp神经网络的主要功能,BP神经网络的实现包括
  17. ThinkPad E450 10.11 驱动HD4400的注意即解决方法
  18. Mysql 刷题笔记 0104 求出NAME中每组累加/每组总数的比例大于0.6的ID和NAME
  19. CSS 实现色彩渐变
  20. java内存泄露direct_详解SpringCloudGateway内存泄漏问题

热门文章

  1. 【三层】无法直接启动带有“类库输出类型”的项目
  2. 冒泡排序及其三种优化方案
  3. Tensorflow训练神经网络
  4. 64位/32位操作系统ODBC的设定方法
  5. Web worker总结
  6. sql2005通用分页存储过程
  7. 【转】当inline-block和text-indent遇到IE6,IE7
  8. Pytorch 编译cpp、cuda扩展时卡在import
  9. python读取一个文件的大小_Python-读取文件的大小
  10. [SQL实战]之从titles表获取按照title进行分组