时间序列的聚类是高维度聚类(每个时间点作为一个维度出现)。所以很少使用经典聚类方法比如KMEANS。
最简单的时间序列特征是时域上以不同时间单位聚合作为特征。比如30天数据以日为单位,生成30维特征。最简单的聚类方法是直接以每个零售商各维度的特征为vector,用Euclidean distance为距离聚类。
这种方法的缺点是不考虑时域信号的位移信息:比如两家零售商在不同日期出现异常激活信号,用简单的聚类方法并不能把这两种信号归类为一类。在零售商数量多并且信号波形有很大差异时,这种方法会造成类别过多或完全不能区分正常和异常信号。
同样基于时域特征的相似性分析方法如动态时间归正(dynamic time warping, DTW)可以弥补欧几里得距离的缺陷,消除时域位移的影响。但是所有基于时域的特征提取都有维度过高和数据稀疏的缺点。尤其当业务关注的时间单位在小时级甚至以下,时域的特征个数和稀疏度会增加计算难度和影响聚类效果。
另一种提取时间序列特征的方法是通过频域变换,提取时间序列在频域的特征。频域特征可以降低特征空间的维度,使特征更集中。由于数据是离散采样数据,一般采用离散傅里叶变换或离散小波变换。
参考
[1] 高维稀疏向量聚类的挑战
[2] 不同时域和频域特征提取方法对比
傅里叶变换
傅里叶变换可以将时域信号转化为频域信号。在频域里,可以对信号使用比时域更简单的运算,比如滤波。
数字信号处理中常用的离散傅里叶变换DFT,是在离散信号的基础上使用傅里叶变换:
任何复数序列 { x n } : = x 0 , x 1 , ⋯   , x N − 1 \big\{ x_n \big\}:= x_0, x_1, \cdots, x_{N-1} { xn}:=x0,x1,⋯,xN−1 都可以通过公式:
X k = ∑ n = 0 N − 1 x n ⋅ e − 2 π i N k n = ∑ n = 0 N − 1 x n ⋅ [ c o s ( 2 π k n / N ) − i ⋅ s i n ( 2 π k n / N ) ] ( 1 ) \mathbf{X_k} = \sum_{n=0}^{N-1} x_n \cdot e^{- \frac{2 \pi i}{N}kn } = \sum_{n=0}{N-1} x_n \cdot [ cos(2\pi kn/N) - i \cdot sin(2\pi kn/N) ] \quad (1) Xk=n=0∑N−1xn⋅e−N2πikn=n=0∑N−1xn⋅[cos(2πkn/N)−i⋅sin(2πkn/N)](1)
转化为新的序列 { X k } : = X 0 , X 1 , ⋯   , X N − 1 \big\{ \mathbf{X_k} \big\} := \mathbf{X_0}, \mathbf{X_1}, \cdots, \mathbf{X_{N-1}} { Xk}:=X0,X1,⋯,XN−1
其中公式(1)也可以表示成 X = F { x } \mathbf{X} = \mathcal{F} \big\{ x \big\} X=F{ x}。
形象地说,DFT相当于把时域信号中的频率信息分别提取出来。
通常如果时域信号的频率特征不随时间变化而变化,可以使用DFT对时域信号作分解,经过滤波降噪后的信号(相当于降维)表示原始的时域信号。
对于在时域中有明显位置信息的信号波形(频域特征随时间有变化),采用傅里叶变换并不能识别时域的位置信息,造成提取后的特征信息丢失。
小波变换
另一种将时域信号转换为频域信号提取特征的方法是小波变换(wavelet transform)。选取小波变换而非傅里叶变换的主要原因是小波变换的基小波在时域有衰减,可以更好保留时域的位置信息,反映频域随时间的变化。
f ( t ) = 1 M ∑ k W ϕ ( 0 , k ) ϕ 0 , k ( t ) + 1 M ∑ j = 0 ∞ ∑ k W ψ ( j , k ) ψ j , k ( t ) ( 2 ) f(t) = \cfrac{1}{\sqrt{M}} \sum_{k} W_{\phi}(0,k) \phi_{0,k}(t) + \cfrac{1}{\sqrt{M}} \sum_{j=0}^{\infty} \sum_{k} W_{\psi}(j,k) \psi_{j,k}(t) \quad (2) f(t)=M1k∑Wϕ(0,k)ϕ