ポアソン分布を異常検知に活かす
前回はポアソン分布の確率関数の導出方法について紹介しました。さっそくポアソン分布を応用して異常値チェックをしてみましょう。
noteでは課金方法としてクレジットカードとキャリア課金を提供しています。キャリア課金は"au", "softbank", "docomo"があります。今回はauの課金になにか異常が置きていないか? を統計学的に検知してみることにします。
異常の原因としては、au側のインフラに問題が発生した、note側のアプリケーションエラー、表示だしわけミスなど色々考えられますが、とにもかくも何か問題が起こったのであれば迅速に検知して調査したいわけです。
ポアソン分布を適用する
auでの課金成功回数がすごく少なくなったら、なにか異常が起こったと判断するとします。
単位時間を1時間、λを単位時間あたりのauでの課金成功回数とします。SQLを叩いて過去三ヶ月のデータを対象に数を出してみたところ、平均で6.7件でした(注: この数字は仮の適当な数字なのであしからず)。
ポアソン分布にλ=6.7を代入して確率関数を図にするとこうなります
直感どおり、6回と、7回が一番多く起こるようですね。
さて、とある1時間でauでの課金成功回数が2回でした。かなり少ないように思えますが、これはどれくらい異常なことと言えるでしょうか。
P(X=0)のとき 0.00123
P(X=1)のとき 0.00825
P(X=2)のとき 0.02763
P(X=0) + P(X=1) + P(X=2)は3.5%位でしょうか。なので、3.5%位の確率で1時間の課金が2回以下という事象は起こり得ることが分かりました。この3.5%をどう評価するかはサービス内容や組織体制しだいですね。
実際の運用では
実際にはこんなにキレイに適用できないと思います。まず、課金の成功回数は時間帯によってぜんぜん違うので、時間帯によってλをわけたほうがよさそうです。また、キャリア課金の場合、月初に限度額が一気に開放されるので成功回数が一気に多くなるはずです。
時間帯や季節変動がかなりありそうで、λが一定のポアソン分布に従ってくれるのかがかなりあやしいのです。
なので、ちゃんと異常検知をやりたいのであればもっと別の理論を採用すべきですね。勉強します。。
異常検知と変化検知 (機械学習プロフェッショナルシリーズ)
https://www.amazon.co.jp/dp/B018K6C99U/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
こんぴゅです! 四谷から皆様に役立つテックな話題をお届けしております。もし100円でもサポいただければ励みになります。記事もグレードアップします。何卒よろしくお願いいたします