#author("2021-03-08T23:40:45+09:00","default:aihara","aihara") [[FrontPage]] *changefinder [#s91f6ff5] オンラインで時系列の変化点検出を行うpythonライブラリ。Change Finderアルゴリズムを利用。~ 一サンプルずつ与えて変化点スコアを逐次に計算するようになっているので、センサーデータの監視なんかに使いやすそう。 忘却型ARモデルで動いてるChange Finderとその場その場でARIMAとかを当てはめるChangeFinderARIMAを実装。~ 普通のChangeFinderはかなり計算早いですがパラメータにセンシティブ、ChangeFinderARIMAは計算が重いのと非定常な時系列に対して時間窓を区切ってARIMAモデルを独立に作成しているので妥当なモデルかどうかは不明ですが、それほどパラメータにセンシティブではないようです。 -Repository --https://bitbucket.org/aihara/changefinder --https://github.com/shunsukeaihara/changefinder -require --numpy --scipy --nose --statsmodels **Install [#q62f4abe] pip install changefinder **usage [#k363c3a1] -changefinder.ChangeFinder --changefinder.ChangeFinder(r=0.5,order = 1, smooth=7) : r | 忘却型ARモデルの係数。0< r < 1 : order | 忘却型ARモデルの次数 : smooth | 計算した外れ値スコアを移動平均平滑化する際の区間長 : 返り値 | ChangeFinderインスタンス --changefinder.ChangeFinder.update(sample) : sample | 最新の観測サンプル : 返り値 | 現時点での変化点スコア -changefinder.ChangeFinderARIMA --changefinder.ChangeFinderARIMA(term=30,smooth=7,order=(1,0,0)) : term | 逐次的にARモデルを計算する際に利用する時系列長 : smooth | 計算した外れ値スコアを移動平均平滑化する際の区間長 : order | ARIMAモデルのパラメータ(ARモデルの次数、差分の階数、移動平均の次数) : 返り値 | ChangeFinderARIMAインスタンス --changefinder.ChangeFinderARIMA.update(sample) : sample | 最新の観測サンプル : 返り値 | 現時点での変化点スコア **sample [#v6e92a1d] 平均を変えて適当なガウスノイズを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() ***result [#d8d8e084] 赤線が生成した時系列データで、青線が変化点スコア #ref(changefinder.png,,50%) 忘却係数の設定が結構重要っぽい。 &hatena_bookmark_anywhere();