2018年1月14日日曜日

データベース検索はヌル分布

たとえば、万引き犯を捕まえる役になったとしましょう。
万引き集団100人がお店にやってきて被害を受けました。ブラックリストを作りたいので防犯カメラに犯人のそれぞれの写った特徴から、お店の顧客リストと照合して犯人を特定すればいいじゃんと考えます。

そこで、ある基準で万引き集団100人と全顧客の特徴の類似度をすべて計算して、ある閾値以上の類似度だったら、あたりとして探索してみました。

そうすると、
x 該当する顧客が1名当てはまった犯人 x人
y 該当する顧客が1名以上当てはまった犯人 y人
z 該当する顧客が1人も当てはまらなかった犯人 z = 100-x-y人
の結果が得られます。

この結果を基に、お店の顧客をブラックリストに載せていいものでしょうか?

ここで考えるべき点は、間違っていたらおおごとだという点です。どうしても防犯カメラの特徴からだけでは、特定は難しいので

1.本当は犯人ではない顧客(シロ)を、誤ってクロとしてしまった可能性(偽陽性)

はあり得ます。そもそも y のように該当する顧客が二名以上当てはまったということは偽陽性がおきていたということです。

じゃあ、閾値を厳しくすると、

2.本当は犯人の顧客(クロ)を、誤って見逃す(シロ)する可能性(偽陰性)

がふえてしまいます。

そこで、とある識者に相談してみました。識者は、
お店の顧客リストに載っている100人を仮想的に犯人と見なし、このお客さんの防犯カメラ画像をつかって、同じ作業をしたところ、類似度トップ3に90%の割合で正解が入っているから、類似度を調べる方法としてはこれでいいのではないだろうか?
ということを教えてくれました。

この識者からの情報は一見意味ありげですが、すぐあまり役に立たないことがわかります。最大の問題点は、
3.お店の顧客リストに犯人がふくまれているのかそもそもわからない点にあります(カバー率)。従って、実際は、類似度トップ3に90%の割合で正解が入っていることはまったく保証されません。

4.こうなると、類似度の閾値の相対的な大小(トップ3)とかではなく、類似度の絶対値で判定するしかありません。

こういう不思議なことをいう識者はあまりいないとおもいますが、だまされないようにしなくてはならないですね、、、、自分で自分が何を言っているのかわかってない、、んですかね、、

そこで、別に相談してみました。するとこういうことをしてみよう。と言っています。

5.お店の顧客リストに"載っていない"ことがわかっている10000人の、防犯カメラ画像をつかって、同じ作業をしてみます。そうすると、10000個のデータの他人との偶然の類似度の分布を知ることができます(ヌル分布)。このヌル分布がわかっていれば、たとえばヌル分布の上位1パーセンタイル点(例えば10000個のデータの大きい方から100番目)の類似度値もわかります。これを閾値として、万引き集団100人と全顧客の特徴の類似度をすべて計算したとき、シロの人が偶然、閾値以上となる可能性は1%(誤ってヒットする確率γ = 0.01)なので、誤ってシロをクロとする偽陽性だと推定する期待値は1人と推定できます。(いろいろ簡略化してます)

6.お店の顧客リストに載っていることがわかっている10000人の、防犯カメラ画像をつかって、同じ作業をしてみます。そうすると、自分に一致するときの類似度がどのくらいになるのかの10000個のデータで分布を作ることができます。先ほどの閾値を使ったとき、この分布があるとクロを正しくクロと判定する確率(β)もわかりますよね。

で、最後までわからないのは、お店の顧客リストに犯人が何%含まれているのかのカバー率(α)です。

何を言っているのか、だれにもよくわかんないらしいのですが、どうやらここまでの話をまとめてみると、

・お店の顧客リストに犯人含まれるカバー率 α
・犯人がお店の顧客リストに含まれているときに正しくヒットする確率 β(1-偽陰性率)
・他のお客が誤ってヒットする確率 γ(おおよそ偽陽性率)

のうち、βとγは調べられるのだけど、αはわからないというのです。

そこで、先ほどの

x 該当する顧客が一名当てはまった犯人 x人
y 該当する顧客が二名以上当てはまった犯人 y人
z 該当する顧客が一人も当てはまらなかった犯人 z = 100-x-y人

という区分で該当する顧客が一人も当てはまらなかった犯人zの数の期待値は

z = 100 * ((1-α)*(1-γ) + α*(1-β)*(1-γ))

という式で書くことができます。
(1-α)*(1-γ) は顧客リストに載っていない犯人(1-α)が、他のお客が誤ってヒットしない(1-γ)確率
α*(1-β)*(1-γ)は顧客リストに載っている犯人が(α)、自分自身にヒットせずに(1-β)、他のお客が誤ってヒットしない(1-γ)確率
です。

実際にこのとき、γ とβがわかっているので、実際に万引き集団100人と全顧客の特徴の類似度をすべて計算してある閾値以上の類似度ヒットとしたときの、zからαが推定できますよね。

さらに一名以上のヒットがあった万引き犯 x+y 人の中の誤りの期待値は、100*γ人というところまで推定できます(偽陽性率 = 100*γ/(x+y))。

偽陽性が推定できると、こういう結論を出すことができます。

万引き犯100人について、全顧客データベースを照合したところ40人がヒットしました。このうち、シロをクロと誤った偽陽性の期待値は1人なので、かなりの確信を持ってこの顧客がクロであるといえます。

とか、

万引き犯100人について、全顧客データベースを照合したところ80人が、ヒットしました。このうち、シロをクロと誤った偽陽性の期待値は40人なので、あまり確信がありません。何らかの別の方法で犯人を絞りこむ必要があります。

といった、建設的な議論が可能になります。

要するにヌル分布(だけ)が大事なのです。ヌル分布がないデータベース検索の話にはご注意を。





0 件のコメント:

コメントを投稿