研究メモ

Bayesianスパムフィルタにおいて、スパム判定の閾値を自動的に設定する方法について。

教師データとしては、スパムあるいはハムとラベル付けされたメッセージの集合(M)を用いる。ここで教師データのうち、スパムメッセージの集合を S、ハムの集合を H とする。Bayesian スパムフィルタは、各メッセージについてスパム性の指標となる [0, 1] な数値を割り当てる。p : M → [0, 1]

実用的なスパムフィルタには、false positive*1が限りなく0に近く(< 0.1%)、false negative*2がかなり0に近いこと(< 5%)が求められる。

スパム性の指標について、どのような閾値を与えれば、この要求に答えられるかを提案する。本当は統計的な考察をすべきだが、やんごとない理由から、極めていいかげんな議論になる点をお許しいただきたい。

max({p(h) h in H }) + Δ1 < min({ p(s) s in S }) のとき max({ p(h) h in H }) + Δ1閾値とする。

このように設定した閾値を用いた場合、教師データをに対して false negative と false positive をともに 0 に設定することができる。

  • それ以外の場合、すなわちハムとスパムに対する指標が近接したり、部分的に重なっている場合は、次の式の値を閾値とする:max(max({ p(h) | h in H }) + Δ2, p(s5%))

ここで、s5%は、s (in S)のうち 5% 番目(つまり、0.05×|S|番目)に小さな指標を得たスパムメッセージである。この心は、5% の false positive は我慢するというものである。ただ、このままでは下手をすると false negative を与える可能性があるので、それだけは避けるというものである。

さきほどの打合せでここまでを決めて、現在、佐藤くんがコーディング中。夕方からの新四年生歓迎コンパの間に、この結果が出るはず。

*1:誤って正規のメッセージをスパムと判定する率

*2:スパムを誤って正規のメッセージと判断する率