内容摘要
特征工程是指将原始数据标记处理为价值密度更高,更容易解释目标问题的工程化过程,在面向大量原始采集的数据集统计分析,尤其是对于高通量持续采集、且价值密度较低的时序数据更是如此。时序数据特征工程则是指利用有效方法,将原始时序数据转化为带有含义分类标签的序列数据片段或特征数值,例如,我们可以将指定时间窗口序列数据标识为特定异常关联数据,并保留平均、最大、最小值作为该序列的特征值。这样我们就可以围绕要解决的特定问题,在尽量保留与问题相关的数据特征前提下,尽可能压缩原始数据量来提升算法运行效率,得到有价值的输出结果。时序特征自动提取生成包可以帮助我们在分析过程中,快速构建所需的特征集合,大幅度降低工作量。本文介绍了时序数据工程的典型实现过程和常用的工具软件包,为实现业务感知的高效时序数据存储分析系统提供参考。
为什么需要面向时序数据的特征工程
时序数据可以被定义为所有在采集、存储过程中带有时间戳属性,并直接关联时间涵义的数据。在实际生产环境下,时序数据往往来源于物联网、车联网、工业互联网、金融量化分析等需要定频不定频高通量采集带时间戳的数据的场景,经常被用来实时监测目标实体或环境状态、风险,预测未来趋势,推理相关事件,定位根源问题等,是设备预防性维护、安全管理、生产过程管理等场景的关键支撑数据。
相比其他类型数据,时序数据具有时间相关、采集通量高、价值密度低、计算实效性要求高的特点,在时序数据存储分析实践过程中,为了能够保障机器学习算法能够快速、有效处理海量数据,在指定时间范围内围绕业务目标计算出期望结果,往往需要对原始采集的时序数据(raw data)进行特征工程,围绕目标选择、定义、提取、存储特征。由于时效性要求往往较高,时序特征工程既不能太多使计算成本太高,还要保障有足够信息支撑有效输出。常用的泛机器学习算法大多数并没专门设计具有时间序列特征的数据处理机制,因此很多传统特征工程方法不能直接用来处理时序数据。为适应时序数据特点,我们在时序数据分析场景下需要针对以上时序数据本身和目标应用场景的业务特点,围绕持续产生的时间序列数据使用合适的方法,选择适合的工具来构建特征工程系统,实现生产环境下能自动根据预定规则提取特征,实现业务目标的能力。
时序数据特征类别
根据计算方法的差别,常用的时序特征提取算法包支持提取的时序特征可以分为时域特征(Temporal Domain), 统计域特征(Statistical Domain) 和谱域特征(Spectral Domain)三大类,详细如下表所示:
表1 常用的时序数据特征汇总
提取时序数据特征关键操作过程
在做时序特征工程过程中,影响结果有效性的关键过程包括围绕业务目标选择时序数据特征、确定时序数据长度、先验知识建模、特征提取工具选择几个主要步骤:
选择要提取的时序数据特征
在对指定时序数据规划特征工程的过程中,我们需要首先判断需要提取哪些特征,这就要了解具体业务场景和分析目标的前提下,在数据理解和清洗过程中考虑以下时序数据的特点:
-
稳定性(Stationarity) : 时序数据稳定性是衡量指定时间窗口数学期望和方差是否变化的特性,对于指定时间窗口时序数据期望和方差恒定的时序数据,此特征才有意义,对于期望和方差持续变化的数据,稳定性特征只会带来干扰和冗余信息。
-
遍历性(Ergodicity) : 对在不同时间点采集的观测数据集中,能够抽取出描述全集数据信息的子集,则说明此时序数据具备遍历性。相比要求期望和方差相同的稳定性特征,遍历性相对约束较弱。遍历性通常要求指定时间窗口时序数据包含等价的信息,不强制要求期望和方差相等。
确定输入时序数据长度
实际分析过程中,我们需要根据要提取的时序特征来选择进行特征提取的时序数据长度,这和输出结果信息量直接相关。对于具备稳定性特征的时序数据,某些稳定性敏感的特征会随着时序数据窗口范围增加变得不稳定,比如数据最大、最小、平均值;对于时间范围较长,采集观测点较多的时序数据,除了提取基本特征外,往往还需要提取额外特征来补充,比如极大、极小值等,因此时序数据长度与需要提取的特征类型强相关。
场景关联先验知识建模
在做时序数据特征提取之前首先围绕业务场景理解数据含义,并围绕先验知识提取数据特征至关重要比。如,我们已经知道某设备传感器采集的数据具备以天为周期的周期性,或与天气变化、温度变化等其他指标观测数据存在相关性,那就可以事先定义出更准确有效的特征。再比如,股票交易市场中股票连续三个交易日出现收盘价格涨幅或者跌幅偏离累计达到20%,就有可能被定义为异常事件,导致停盘。我们在分析股票交易时序数据时,就需要考虑是否根据此先验知识提取对映特征。
时序特征提取工具选择
在选择了需要提取的特征,确定了时序数据特征提取数据集的长度并对先验知识建模之后,就需要利用工具搭建特征提取系统。科研机构围绕不同问题域搭建的开源时序数据特征提取工具已经不少,我们可以利用这些工具快速实现希望达成的算法效果。下面介绍几种常用的时序特征提取工具(如python tsfresh,Time Series Feature Extraction Library (TSFEL),cesium、fats和hctsa),以供我们在做时序数据分析过程中技术选型参考。这些工具包提供的特征提取算法能力和支持的特征范围差别较大,适用场景也有所不同,比如FATS是哈佛大学起初为天文学光曲线时序数据特征提取专门设计的,hctsa 主要用来做生物学自动化时序表型量测(Phenotype measurements)大规模特征提取,加州大学伯克利分校开发的Cesium则更适合用来做通用场景的特征提取工具。
Python tsrefresh (Time Series FeatuRe Extraction on basis of Scalable Hypothesis tests)
Python tsrefresh[1]是比较常用的时序特征生成库,已经实现了相对比较全面的时序特征提取,目前tsrefresh提供了63种方法来识别时序数据特点,能够识别提取794种时序特征,通过实现python机器学习算法包pandas 和scikit-learn的API接口,tsrefresh能够无缝对接时序数据机器学习探索式分析或生产系统分析过程中,帮助降低通用算法开发定制工作量。
图1 时序特征提取过程三个主要步骤:特征提取(feature extraction),特征关联(feature relevance),多项测试(multiple testing)[1]
目前tsrefresh主要覆盖一下几大类:
-
描述性统计特征:用统计学方法提取的时序数据特征,例如:Augmented Dickey–Fuller test value,AR(k) coefficient,autocorrelation for a lag(k)。
-
物理原理启发式特征:物理启发的非线性和复杂性特征指标,例如:c3()函数,用来衡量时序数据非线性特性的方法,利用滞后运算符L通过公式计算量化值;cid_ce()函数,衡量时序复杂性的特征指标,通过计算从0到的平方根获得量化值;friedrich_coefficients()函数,用来衡量复杂非线性运动的模型拟合系数,作为特征提取度量。
-
历史数据压缩计数:此类特征包涵在指定时间窗口序列中出现多次的数据值求和;在时序数据中连续出现大于/小于平均值的最长序列长度;时序中最先出现最大值或最小值。
Time Series Feature Extraction Library (TSFEL)
TSFEL[2]是基于Numpy和Scipy包基于 Python3扩展开发的时序数据特征提取软件包,能够兼容常用的机器学习软件包Pandas和scikit-learn。功能上,TSFEL支持涵盖时域和频域统计的60种的特征提取,支持扩展订制开发。除软件包之外,TSFEL提供了基于Google Sheets API开发的电子表单界面,方便用户通过界面配置特征提取参数配置。在设计上,TSFEL借鉴了同类时序特征分析工具cesium、hctsa、tsfresh和fats的设计理念,并在应用场景上进一步扩展了在计算能力有限的边缘设备,甚至终端设备(如手机、可穿戴设备、在场部署安防设备等)上提取时序数据特征(如人行为识别Human Activity Recognition (HAR),异常情况识别等)的能力。
相比同类型工具,TSFEL提供的主要能力特点包括:
-
面向终端客户提供更加直观的界面选择特征和定制化特征提取过程的能力
-
计算复杂度评估,支持在提取特征之前评估计算成本,以适应算力有限的终端设备和边缘计算节点运行环境。
-
每一种特征提取算法都提供至少一种单元测试工具来验证有效性,支持通过域合成的已知概率分布的时序数据对比来验证提取出来的如周期性、常量、额外噪音等参数的有效性。
-
提供扩展框架,支持自定特征提取算法实现。
Cesium开源Python时序数据特征提取框架
Cesium[3]是加州大学伯克利分校劳伦斯伯克利国家实验室的Brett Naul等人用Python语言开发的端到端时序数据分析框架,以补充现有机器学习算法只处理特征提取后的数据集的不足。Cesium除了包涵工具算法包之外,还提供web前端管控界面用以支持图形化方式的时序原始数据标记和围绕特定机器学习算法的特征匹配。在Cesium的web前端操作的每一个步骤都可以导出同步到Jupyter notebook以方便结合时序分析其他步骤算法使用,图2为利用Cesium自动提取时序特征图形效果。
图2 拟合multi-harmonic Lomb-Scargle模型,用于周期性米拉级恒星的光曲线。cesium根据 Lomb-Scargle 周期图分析自动生成多种特征。
Cesium依赖xarray, dask, Celery, Flask, 和scikit-learn等Python包开发,旨在简化时序数据分析过程中特征提取通用算法的开发实现,让数据分析人员更聚焦围绕具体问题的时序数据分析算法设计。相比同类型工具,Cesium不但提供了算法包和服务,也有图形化界面(如图3所示),更适合机器学习背景知识不多的业务数据分析人员来用,除了代码集成调用,内置的web工具可以方便初学者快速入手。Cesium算法框架以python包的形式提供代码集成,主要包含以下功能:
-
支持处理通过常规采样和非常规采样方式得到的时序数据集;
-
能够侦测记录量测错误,精度达到特定时刻的特定数据点;
-
支持多通道数据,输入数据的每一个维度的数据都能够单独计算特征。
图3 Cesium 默认提供的Web端管控界面
FATS: FEATURE ANALYSIS FOR TIME SERIES
FATS是哈佛大学工程与应用科学学院的Isadora Nu等人在2015年提出的针对天文学光曲线时序数据特征提取工具。天文学望远镜采集的时序数据通常为分布在时间序列范围内的特定天体明暗变化数据,有周期性,通常被称为亮度曲线(light-curve)。通过从亮度曲线提取变量特征,我们可以将天体划分为类星体特征(quasars)、长周期变量特征(long period variables)等。
FATS工具库聚焦天文学特定场景时序数据分析,可以从实际业务需求出发设计更加具体、目标明确的特征提取算法,但对于其他场景时序分析,可以借鉴同类型数据的特征提取算法设计,但直接拿来用则缺少通用性和普适性。
hctsa 自动化时序表型量测(Phenotype measurements)大规模特征提取计算框架
生物学中有机体可被观测到的结构、功能等表面形态方面的特征,如行为等通常被称为表型(Phenotype)数据,这些数据通常也以时序数据流的形式采集存储分析。实际使用过程中,这些数据通常要经过统计和关联分析,比如,将有机体动态移动特征和遗传特征关联,将大脑活动量测数据与某种疾病诊断特征匹配,这就需要对大量高维表型时序数据做特征提取,关联分析。hctsa[5]就是针对这种场景设计开发的海量特征提取工具软件包,它能够实现超过7700种时序特征的提取,并支持自动匹配分析和数据可视化算法。通过hctsa提供的图形化工具,时序数据特征提取结果可以以特征矩阵的方式展现,行数据代表输入的时间序列,列数据代表提取出的特征值。
参考文献
[1] Maximilian Christa, et.al, Blue Yonder GmbH, Karlsruhe, Germany, Time Series FeatuRe Extraction on basis of Scalable Hypothesis tests (tsfresh – A Python package), Neurocomputing,Volume 307, 13 September 2018, Pages 72-77
[2] Marília Barandas, et.al,Associação Fraunhofer Portugal Research, TSFEL: Time Series Feature Extraction Library, SoftwareX 11 (2020) 100456
[3] cesium Team. cesium: Open-Source Machine Learning for Time Series Analysis. 2016. URL: http://cesium.ml
[4] Isadora Nun, et.al., Institute for Applied Computational Science, Harvard University, Cambridge, MA, USA, FATS: FEATURE ANALYSIS FOR TIME SERIES. 2015.
[5] Ben D.Fulcher, Monash Institute of Cognitive and Clinical Neurosciences (MICCN), Monash University, hctsa: A Computational Framework for Automated Time-Series Phenotyping Using Massive Feature Extraction. Cell Systems,Volume 5, Issue 5, 22 November 2017, Pages 527-531.e3