Python/NumPyで特異スペクトル変換法を実装し、時系列データの異常部位を検出する方法について紹介します。
【応用例】時系列データの異常検知
特異スペクトル変換法では、時系列データの変化点を検出する手法の1つです。
– | 処理の流れ |
---|---|
1 | ある時点tを起点とし、その前のw時点分のデータ(部分時系列データ)を1時点ずつ前にずらす。 |
2 | それをk個だけ束ねた($X_i$)と、そこからL時点分後ろにずらして同様にk個だけ集めたもの($X_{i+1}$)を比較する。($X_i$は、1行につき窓幅$w$時点分のデータが並び、さらにそれをk行分束ねるため、$k\times w$の行列となる) |
3 | $X_i$と$X_{i+1}$が類似していれば、t時点は変化点でない、逆に大きく異なっていれば変化点であると判別する。類似度の計算には特異値分解を用いる。 |
$ \alpha(t) = 1- ||U_m^{(t)T}Q_m^{(t)T}||_2^2 $
今回は心電図データセット(http://www.cs.ucr.edu/~eamonn/discords/)を使っています。
異常を含む区間で異常度が高くなりました。

404 NOT FOUND | Python入門速報
コメント