FrontPage

changefinder

オンラインで時系列の変化点検出を行うライブラリ。ChangeFinderアルゴリズムを利用(忘却型ARモデルは現状手抜き)。
一サンプルずつ与えて変化点スコアを逐次に計算するようになっているので、センサーデータの監視なんかに使いやすそう。

ARIMAモデルとかまじめに計算すると結構重いので普通にn次のARモデルぐらいしか実用的な速度でないかも。

Install

pip install changefinder

usage

  • changefinder.ChangeFinder(term=30,smooth=7,order=(1,0,0))
term
逐次的にARモデルを計算する際に利用する時系列長
smooth
計算した外れ値スコアを移動平均平滑化する際の区間長
order
ARモデル(ARIMA)のパラメータ。デフォルトでは1次のARモデル。
返り値
なし
  • changefinder.ChangeFinder.update(sample)
sample
最新の観測サンプル
返り値
現時点での変化点スコア

sample

平均を変えてホワイトノイズを100サンプルづつ、計400サンプル生成して、changefinderに掛けてみる。
ARIMAのパラメータは次数3で、普通に3次のARモデルで計算している。
ARモデルの次数を計算する際に利用する時系列の長さは30サンプルで、平滑化は7次の移動平均を用いている。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import changefinder
import numpy as np
data=np.concatenate([np.random.normal(0.7, 0.1, 100),
np.random.normal(1.5, 0.1, 100),
np.random.normal(0.6, 0.1, 100),
np.random.normal(1.3, 0.1, 100)])

cf = changefinder.ChangeFinder(30,7,order=(3,0,0))

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