オンラインで時系列の変化点検出を行うpythonライブラリ。Change Finderアルゴリズムを利用。
一サンプルずつ与えて変化点スコアを逐次に計算するようになっているので、センサーデータの監視なんかに使いやすそう。
忘却型ARモデルで動いてるChange Finderとその場その場でARIMAとかを当てはめるChangeFinderARIMAを実装。
普通のChangeFinderはかなり計算早いですがパラメータにセンシティブ、ChangeFinderARIMAは計算が重いのと非定常な時系列に対して時間窓を区切ってARIMAモデルを独立に作成しているので妥当なモデルかどうかは不明ですが、それほどパラメータにセンシティブではないようです。
pip install changefinder
平均を変えて適当なガウスノイズを300サンプルづつ、計1200サンプル生成して、changefinderに掛けてみる。
# -*- coding: utf- import matplotlib.pyplot as plt import changefinder import numpy as np data=np.concatenate([np.random.normal(0.7, 0.05, 300), np.random.normal(1.5, 0.05, 300), np.random.normal(0.6, 0.05, 300), np.random.normal(1.3, 0.05, 300)]) cf = changefinder.ChangeFinder(r=0.01, order=1, smooth=7) ret = [] for i in data: score = cf.update(i) ret.append(score) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(ret) ax2 = ax.twinx() ax2.plot(data,'r') plt.show()
赤線が生成した時系列データで、青線が変化点スコア
忘却係数の設定が結構重要っぽい。