【Python/NumPy】特異スペクトル変換法で時系列データの異常検出

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入門速報
この記事を書いた人
西住技研

Python使用歴10年以上。研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
NumPy

コメント