理系学生日記

おまえはいつまで学生気分なのか

「Pythonではじめる異常検知入門」を読んだ

ひょんなことから異常検知という分野に関わることになり、実務で使えそうな知識を得ようと、いくつかの入門書をAmazonで購入しました。異常検知は機械学習の一分野に位置づけられ、多くの数式や背景知識を必要とするため、初心者にとってはその全体像や実践の取っかかりを掴むのが難しいと感じていました。そんな中、偶然手に取ったのが本書です。

この書籍の後書きは、次のような文章から始まります。

本書を読んでいただいて、取り扱った内容に偏りがあると感じられた方もいらっしゃるかと思います。それはその通りで、内容を考察する際に議論を行い、「今まさに異常検知プロジェクトに携わっているが、何から手をつけていいか分からないという読者」、もしくは「異常検知について興味はあるけど、統計やデータ分析の知識が不足しているのではという読者」を主な対象としたことに原因があるかと思います。

この一節が象徴するように、本書の内容はかなり絞り込まれており、たとえば時系列分析はARIMAモデルまでにとどまり、厳密な数学的定式化も抑えめです。しかし、まさにその取捨選択が、私にとって理想的な「とっかかり」でした。今の自分の知識レベルに対して、ちょうど良い難易度・密度で構成されており、異常検知という分野への第一歩として非常に有益でした。

たとえば、statsmodelsにあるようなツールを使えば、多くの分析は技術的に実行できます。ただ、ツールの使い方を覚えるだけではなく、「なぜこの分析を行うのか」「どのような前提の下で使われるのか」といった“肌触り”の理解が得られたことこそ、本書を読んで最も価値を感じた点です。

回帰モデルとは何か

一般に、回帰モデルとは説明変数(入力データ)から目的変数(予測対象)を推定するための統計モデルです。異常検知の文脈では、回帰モデルを学習させたうえで、予測値と実測値との差(残差)に注目し、その差が大きいデータを「異常」と見なすアプローチが取られます。

ただし、データにピッタリ合致するだけのモデルでは、新しいデータに対応できず、過学習のリスクがあります。そのため、モデルには「シンプルさ」も求められます。説明変数が増えるほどモデルの解釈は難しくなり、過学習の可能性も高まります。そこで、主成分分析(PCA)を用いた次元削減や、AICなどによるモデルの適合度評価が重要になります。

異常の検知

回帰モデルの構築は異常検知の出発点に過ぎません。実際には、異常度を定義し、それに基づいて新規データを判定する仕組みが必要です。

データに対して異常度を計算し、異常判定を行う閾値を決定し、新規データに対して異常判定を行う必要があります。例えば統計的手法の一つであるネガティブ・ログ尤度では、データ全体が確率分布$p(\bf{x};\theta)$に従うとき、この異常度を

$$a(x) = -\log p(x;\theta)$$

と定義します。この上で、異常度の閾値を決めて、その閾値を超える異常を検知するわけですが、その異常度が適切かというところも含めて性能評価が必要です。そのため、ROC曲線やF値などを用いて性能評価を行い、最適な閾値を調整する必要があります。

時系列解析

私が実際に関わることになるのは、この「時系列データ」に対する異常検知です。本書で扱われているのは、AR(自己回帰)、MA(移動平均)、そしてその組み合わせであるARMA、さらに非定常性を差分で除去したARIMAモデルです。

これらのモデルでは、自己相関や偏自己相関を視覚化する「コレログラム」によって、モデルの次数などを推定します。たとえば statsmodels を使えば、コレログラムを簡単に描画することができます。ツールの操作自体は難しくありませんが、それをどのような分析文脈で使うか、結果をどう読み解くかはユーザーの理解力に委ねられています。方法論の理解がより一層重要に感じられる部分です。

また、これらのモデルはいずれも「定常性」を前提としているため、データが定常かどうかを確認する必要があります。これにはADF(Augmented Dickey-Fuller)検定が一般的に使われます。こうした確認作業の煩雑さを考えると、statsmodels のようなライブラリが果たす役割の大きさを改めて実感します。

全体を通して

異常検知には、統計モデルと機械学習モデルという大きく2つのアプローチがあります。本書は前者、すなわち統計モデルに重点を置いた内容で構成されています。統計モデルはその仕組みが比較的説明しやすく、初心者にとっても学びやすいという利点があります。その意味で、私のような初学者には非常に相性が良かったと感じました。

Pythonのコード例が豊富に掲載されているわけではなく、機械学習の網羅的な解説もありません。ただし、「なぜそれをやるのか」「どこから手をつけるか」を考えるうえでの道筋は丁寧に示されており、異常検知の学習を始めるうえでとても良い第一歩になる一冊でした。