POPFileの導入記録

結城浩

2003年11月19日〜2003年11月26日

目次

2003年11月19日 (水) - POPFileでspam識別

spamを識別するために、POPFileというソフトを導入してみました。

POPFileは、 クライアント上でPOP3のプロキシとして動作するソフトウェアで、 メールクライアントと、POP3サーバの間に入り、 個々のメールがspamかどうかを識別してくれます。 識別した結果、spamだと判断した場合には、 メールのSubjectに [spam] という文字列を挿入してくれます (設定で変更可能)。 以下のページに、日本語でていねいなインストール手順が書かれています。 これに従ってやってみると、すぐにインストールできました。 細かい設定変更も、 ブラウザ経由で手軽に行うことができます。

日本語のメール分類に関しては、 以下のページでパッチ情報が流れていますので、 それも参考にどうぞ(Bayes.pmを入れ替える模様)。

しばらく使って学習させてみると、なかなかよさげ。 重要なメールがspamの中にうずもれてしまうこともこれで少なくなる、かな?

2003年11月20日 (木) - 一夜明けたPOPFile

POPFileでspamを識別している。 spamを学習するのに時間がかかるかなと思っていたが、 実際にはspamを24通、spam以外のメールを6通学習させた後は、 ほぼ100%の確率でspamを識別している。

spamと識別されたメールに対しては [spam] という文字列をSubjectに入れている。 そしてメールソフト(Becky!を使っている)のほうでは、 その文字列をSubjectに含んだメールの色を目立たない色にしている。 これでOK。

ちなみに、夜中に届いた159通のメールのうちspamは132通、それ以外は27通。 83.01%がspamであった。 この調子で行くなら、POPFileは非常に使えるツールであるといえるだろう。

2003年11月21日 (金) - POPFile報告

POPFileの日本語化をやっていらっしゃる jishihaさんに、感謝の意味を込めて次のようなメールを送った。

jishihaさん、結城浩と申します。

spamフィルタを探していて、
昨日からPOPFileを使い始めました。
いまのところ、非常に気に入っております。
とてもよいソフトウェアの日本語化を行っていただきありがとうございます。
これからもよいお仕事をなさってください!

すると、jishihaさんから、 とてもていねいなメールをいただいた。 結城の デザパタ本も持っていらっしゃるとのこと。 また、結城の活動に対しても励ましのエールを送っていただきました。 ありがとうございます。

jishihaさんは、シリコンバレーで働くエンジニアで、 オープンソースソフトウェアに関わった自分の体験を 「ハッカーへの道」というメールマガジンで書こうとなさっています。 創刊号がサンプルとして載っていますが、何だかよい感じですね。 最初、自分が作ったプログラムを公開してあまりうまくいかなかった。 で、どうしたかというと…(あとは上のリンク先のページで読んでください)。

あ、そうだ。POPFileは順調ですね。 自動的に分類した657通のうち、 spamだと誤って判断したのは4通のみ(分類精度99.24%)。 でもこれらもすぐに学習させることができた。 何しろ何百通というspamが自動的に識別できているので、 ものすごく気分的に楽になった。

2003年11月26日 (水) - POPFileのマグネット機能

POPFileは分類メール2417通のうち21通が分類エラー(99.12%)。 はじめての人からのメールは分類エラーになりやすいみたい。 メーリングリストで流れている「URL+ちょっとしたコメント」というメールもspamと誤解されることがあるようだ。 spamと分類されては絶対に困るという場合は、POPFileの「マグネット」という機能を使うと良い。 「この人からのメールは絶対にspamではない」という設定をしておけば、 重要なメールがspamと分類されなくなる。

2003年11月27日 (木) - 浄水器を取り付けた気分

levelさんからていねいなメールをいただいた。 趣旨は levelさんの「えむもじら」に書かれているものと同じで、 結城のPOPFile報告で、分類の詳細をもう少し教えてほしいとのこと。 spamをnot spam(ham)に分類されるのと、 not spam(ham)をspamに分類されるのではインパクトが違うから、 ということで、まことにごもっともです。

以下の結果は8日間の試行によります。 POPFileでは積極的な学習はせず、 ユーザからの介入があったときのみ学習させるというポリシーになっているようです。 (介入というのは、分類エラーを再分類したときや、見逃したものを分類したときです) つまり、通常はフィルタの条件は変化しません。 "if it ain't broke, don't fix it"「壊れてねえなら直すなよ」というポリシーのようです。 下記の「見逃し」というのはspam, workどちらの「バケツ」にも 落ちず、unclassifiedと認識されたものです。

全体としてみると、
    分類されたメール数: 2874 (2265 + 609)
    分類エラーの数:       23 (22 + 1)
    精度:                 99.19%

細かく見てみると、
    バケツ  分類数          誤検出      見逃し
    spam    2265            22          32
    work     609             1          31

ということで、 not spam(ham)をspamとして誤検出した数(22)のほうが、 spamをhamとして認識した数(1)よりも多いようです。 ただし、もともとspamのほうが4倍多いですから補正は必要でしょうけれど。 上記での精度は99.19%となっていますが、 このサンプル数で小数点以下第二位までの数値が意味があるかどうかはよくわかりません。 どなたか統計に詳しい方、教えてください…。

それから、結城はマグネットも12個ほど設定しています。 万一にも編集者からのメールがspamにならないようにするために (^_^;

なお、POPFileの場合は一般に複数のバケツを使いますので、 FAQにも書かれているように、 false negative/false positiveという表現は、そう単純には使えないように思います(個々のバケツに関して使うべき、という意味)。

それから、当然のことながら、 上記の情報は結城のところにやってくるメールの種類に大きく依存しますので、 この数字を他のユーザの数値と直接比較することはできません。 現在まで、結城のところではPOPFileは非常に有効に機能しています。 Okdtさんのblogに書かれているように「浄水器を取り付けた」ような気分です。