異常検知手法のお勉強記事ができるまで その1
前回の続きです。今回から本編。
前回までのお話
課題:このアクセスデータから異常っぽいところをいい感じに見つけたいよ。
なお、黒線は記事投稿タイミング。
手法調べる
まずは基礎知識をつけるため、グーグル先生に相談してきます。最近では情報もいっぱいありますし、コード付きで○○検知やってみた系の記事なんかもいっぱいあるのでありがたいです。
ただ、どうしても情報の質はバラバラなので注意が必要ですがその辺の話は置いておいて、参考になった情報を列挙。
この辺りの記事は異常検知に対するアプローチ全般が綺麗にまとまっていて非常にありがたかったです。
今回の課題を念頭にスーパーざっくりまとめると
・色々アプローチあるけど、基本となるのは外れ値検出。いかにデータの集合を作るか。
・今回の課題は周期性や変動の顕著な時系列データなのでそのままいろんな手法にぶち込んでもダメそう
方針考える、1回目
調べた手法と今回の対象でデータから、どうアプローチするか考えます。1回目としているのは、どうせ一発で良い結果は出ないので試行錯誤する前提だからです。
また、わかりやすい手法で一回分析回してみて結果みて次決めるというのもよくやります。
考察する
上記Albertさんのページでまさに時系列データに対する異常検知のページがあるので、見ていきます。
・外れ値検出
まず、為替チャートの例で挙げられているk近傍法による外れ値検出ですが、これは近い点との距離をみるもので、今回の課題のような平日と休日で顕著な差があるようなデータに適用してしまうと、平日休日ごとに検知してしまいそうです。
少なくとも曜日変動を除いてからやらないとダメそうです。
・異常部位検出
次に異常部位検出は、なかなか今回の課題に合ってそうです。しかし例では心電図のデータが使われているように周期性のきちっとしたデータに向いているものです。
今回の課題は周期性がきちっとしているように見えて祝日や三が日などを考えると微妙に周期性が異なっています。祝日が毎回検出されてしまいそうです。
・変化点検出
最後に変化点検出の例としてARモデルなどの時系列予測手法を使って、予測と実測の差をみるものが紹介されています。このやり方ですと、休祝日を考慮した時系列モデル+残差というやり方で今回の課題にも適用できそうです。
方針決めた
まずは時系列予測+その残差を評価する方法にしてみます。
データ全体をみると増加していたり休祝日の影響が半端ないということから記事で挙げられているARモデルだけでは表現しきれないだろうということで、ARIMA+回帰でモデリングしてみることにします。
さらに参考:
英語苦手であんまり読めてませんがこんな感じ。
難しそうですが、R言語のライブラリに頼れば大丈夫!
・・・。
という感じで一発目の方針決めてるんですが、みんなこんな感じなのかなぁ。
教えて偉い人!
〜〜