Pythonの異常検知パッケージPyODのフォーマットに従って、カーネル密度推定に基づく異常検知を実装した

はじめに

異常検知(外れ値検知)のための便利なPythonパッケージとしてPyODが存在する。

pyod.readthedocs.io

github.com

クラシックな手法から比較的最先端の手法まで実装されており、インタフェースも使いやすいのでオススメできる。

2021年8月9日現在、PyODにカーネル密度推定(Kernel Density Estimation; KDE)ベースの異常検知が実装されていなかったので、それを実装したということである。

PyODのインストール

pipでインストール可能である。

pip3 install pyod

異常検知について

以下の記事を読むのが良いだろう。 qiita.com

カーネル密度推定について

ばんくし氏の記事が参考になるだろう。 vaaaaaanquish.hatenablog.com

作成したクラス:KDE

すでに実装済のPyODの各種アルゴリズムを参考に、KDEのクラスを作った。 KDEの実装そのものはscikit-learnのKernelDensityクラスによった。 PyODのBaseDetectorを継承している。

【コードを表示する】 gist.github.com

異常検知デモンストレーションその1

PyODから提供されている各種アルゴリズムのexample用スクリプトを参考に、簡単なデモンストレーションのnotebookを作成した。 今回作成したKDEクラスをkde.pyとして保存した場合のnotebookである。

gist.github.com

異常検知デモンストレーションその2

引き続いて3つのガウス分布からランダムにデータをサンプリングし、異常値を混ぜて正しく検出できるかを試したnotebookである。

gist.github.com

おわりに

みんなPyOD使おうぜ!