前言
随着云计算和物联网(IoT)的急速发展,我们无时无刻都被时间序列数据包围着。从经济管理再到工程领域,时间序列数据挖掘有着广泛应用。例如证券市场中股票的交易价格与交易量、外汇市场上的汇率、期货和黄金的交易价格以及各种类型的指数等,这些数据都形成一个持续不断的时间序列。利用时间序列数据挖掘,可以获得数据中蕴含的与时间相关的有用信息,实现知识的提取。时间序列数据挖掘是大数据挖掘研究领域里的一个重要方向之一。
众所周知,时间序列数据本身所具备的高维性、复杂性、动态性、高噪声特性以及容易达到大规模的特性。因此如何轻松进行时间序列数据挖掘是具有大挑战性。本文将介绍时间序列数据挖掘开源库——MatrixProfile,并在Python的环境下使用高效简洁的程序来完成复杂的时间序列数据挖掘。
MatrixProfile 工作原理
MatrixProfile的基本原理很简单。可以先试想一个问题,如果从时间序列数据中提取一个片段并沿着时间序列的其余部分滑动,那么它在每个新位置与时间序列片段的重叠相似的程度是什么样子的?更具体地说,我们可以计算子序列与同一长度的每个时间序列片段之间的欧几里德距离,从而建立所谓的时间序列片段的距离模式(distanceprofile)。
如果子序列在数据中重复自身,则将至少有一个完全匹配,并且最小欧氏距离将为零(或在存在噪声的情况下接近于零)。如图所示,如果提取的子序列为重复模式(RepeatedPatterns)片段,那么重复模式片段沿着整个时间序列滑动时,与自身重复片段的最小欧式距离为零(红色部分)。从红色曲线可以看出,相比之下,如果子序列是高度唯一的(比如它包含一个显著的异常值),那么匹配将很差(蓝色曲线中的anomaly)。然后,在时间序列中滑动每个可能的片段,建立一个距离模式的集合。
MatrixProfile 工作原理示意图
MatrixProfile主要是进行识别异常事件(或不协调“discords”)