FrontPage

changefinder

オンラインで時系列の変化点検出を行うpythonライブラリ。Change Finderアルゴリズムを利用。
一サンプルずつ与えて変化点スコアを逐次に計算するようになっているので、センサーデータの監視なんかに使いやすそう。

忘却型ARモデルで動いてるChange Finderとその場その場でARIMAとかを当てはめるChangeFinderARIMAを実装。
普通のChangeFinderはかなり計算早いですがパラメータにセンシティブ、ChangeFinderARIMAは計算が重いのと非定常な時系列に対して時間窓を区切ってARIMAモデルを独立に作成しているので妥当なモデルかどうかは不明ですが、それほどパラメータにセンシティブではないようです。

Install

pip install changefinder

usage

  • 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

平均を変えて適当なガウスノイズを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

赤線が生成した時系列データで、青線が変化点スコア

changefinder.png

忘却係数の設定が結構重要っぽい。


  トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
添付ファイル: filechangefinder.png 1084件 [詳細]
Last-modified: 2014-03-20 (木) 14:36:12 (1223d)