【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_iX_{i+1}が類似していれば、t時点は変化点でない、逆に大きく異なっていれば変化点であると判別する。類似度の計算には特異値分解を用いる。

(1)   \begin{eqnarray*} \alpha(t) = 1- ||U_m^{(t)T}Q_m^{(t)T}||_2^2 \end{eqnarray*}


今回は心電図データセット(http://www.cs.ucr.edu/~eamonn/discords/)を使っています。
異常を含む区間で異常度が高くなりました。

404 NOT FOUND | Python入門速報

コメント