有哪些有效的可以衡量两段或多段时间序列相似度的方法？
最近在大量阅读时间序列挖掘相关的文献，今天特意系统性地回答一下这个问题。此回答主要做一个系统性科普，不会涉及太多数学/统计的细节。本回答的结构安排如下。 备注: 我这里说的Similarity Measure是指一般的相似度度量，而不局限于时间序列相似度度量(Time Series Similarity Measure). 2. Similarity Measure的结果应该和人类的直觉相符合。如果你告诉我上图中的枫叶和扇形叶子的形状很相似，那我只能说你在扯蛋。 3. Similarity Measure, 不管在全局(global)，还是局部(local)水平上，都应该重点关注一个物体的显著特征，而不是鸡毛蒜皮的无关细节。比如说，你告诉我上图中的枫叶和扇形叶子很相似，因为它们的边缘都是呈现小锯齿状(local feature)。你也告诉我，上图中的两片扇形叶子很相似，因为它们都是扇形(global feature)。我都会觉得你说得有道理。 但是如果你告诉我，上图中的枫叶和扇形叶子很相似，因为它们上面都有泥巴，我只能说“我不关心这个”。 上面三点描述的是通用的Similarity Measure，现在来讨论Time Series Similarity Measure. 4. 除了以上的通用方面外，对于一个好的Time Series Similarity Measure来讲，它应该能够比较两个长度不相等的时间序列。(然而，如果两条时间序列长度相差太大，计算它们的相似度也会变得没有意义[2]) 5. 一个好的Time Series Similarity Measure的复杂度应该越低越好。换句话说，Time Complexity 和 Space Complexity 都要小。 6. 一个好的Time Series Similarity Measure应该对各种扭曲(distortion)和变换(transformation)不敏感。具体有哪些distortion和transformation呢？具体见下图。 在理想情况下，上面六对时间序列应该被看作是相似的。也就是说，一个好的Time Series Similarity Measure应该对这些扭曲和变换不敏感。 Time Series Similarity Measure大概可以分为四类： 这一类方法的基本思想是，通过比较时间序列的整体形状来计算相似度。这一类方法包括了大名鼎鼎的Euclidean distance 和 DTW。 主要包括以下方法： 2. Edit Based Time Series Similarity Measure 这一类方法的基本思想是，通过计算“最少需要多少步基本操作来把一段时间序列变成另外一段时间序列”来衡量相似度。举个例子，给定两个序列：ABC，ABD，以及三个基本操作“删除、添加、替换”，我们最少需要一个基本操作“替换”(C替换成D)，将ABC编程ABD. 主要包括以下方法： 3. Feature Based Time Series Similarity Measure  这一类方法的基本思想是：首先提取出时间序列的特征，比如说统计学特征(最大值、最小值、均值，方差等)，或者是通过FFT提取出Amplitude, Energy, Phase, Damping Ratio, Frequency)等特征，然后直接计算这些特征之间的Eclidean distance 然后再求和。主要包括以下方法(也就是不同的特征提取和比较方法)： 4. Structure Based Time Series Similarity Measure 之前介绍的三种时间序列相似度度量方法适用于短的时间序列，然而对于较长的时间序列(比如说几万个点的时间序列)，前面三大类方法很可能会失效。于是，就有了第四类方法。前面三大类方法之所以失效，是因为它们过多关注局部特征(local feature)，而忽略了全局特征(Global feature)。而第四类方法的基本思想是：关注全局特征。 这一类方法可以进一步分为两类：基于模型的(model-based distance) 和 基于压缩的(Compression-based distance). Model-based distance假设时间序列服从某个分布/模型，然后估计模型参数，最后通过比较模型参数之间的差异来反映时间序列的相似度。主要包括以下方法： Compression-based distance通过研究两个时间序列在一起压缩的压缩率来反映相似度。直观上，如果两个时间序列比较相似，则它们在一起压缩就比较容易。 对于绝大部分同学来说，可能只知道Euclidean Distance的存在，更厉害一点的同学也知道DTW，或者还有LCSS. 然后，根据上面的梳理，大家可以看到，现有的时间序列相似度度量十分丰富，那么该如何选呢？这要取决于你的数据类型，以及你应用的领域。大体来说，根据[3]，可以给出以下几条建议： 最后放出一张总结表(感兴趣的同学可以去读原论文[3]，找每一个方法的参考文献)： [1] [PDF] Comparison of Leaf Recognition by Moments and Fourier Descriptors | Semantic Scholar [2] Keogh Eamonn [3] Esling, Philippe, and Carlos Agon. "Time-series data mining."ACM Computing Surveys (CSUR)45.1 (2012): 1-34.   