「ダブり抜き」って言葉きいたことある人もおおいでしょう。そう「厳正かつ公平な抽選を行うために、重複してる登録を見つけ出す」ときによく使われる作業です(´・ω・`) もちろん、他にはDM発送なんかを多重に行わないようなダブりぬきなんかもありますね。今回は、そんなお話・・・
店頭とかだと「おひとり様1枚」とかで、できるだけ公平に購入希望者へ品物がわたるような販売をしたりしますよね。でも、抽選のための応募だと、なんとかして当選したいがために、同一人物が複数回登録をおこなうことはよくあります。たとえば、当選枠が100しかないところに、1万人がそれぞれ1回しか申し込まなかった場合の当選確率は1/100です。ところが、一人だけが1万回重複申込をおこなって、ノベ19999件が登録になったらどうでしょう。各登録に対しての当選確率はおなじであると仮定すると、当選確率は100/19999ってことになります。ところが、一人だけが1万回登録していると、その人の当選確率だけが(100/19999)*10000ってことで、他の人はあきらかに確立がおよそ半減しているにもかかわらず、この人の登録はほぼまちがいなく重複して当選してしまう(おそらく50個分ちかく当選する)ことになります。これはどうみても不公平ですよね。そう、ダブりぬきは公平性を最大限保つ努力なわけです。
ところが、まぁダブり抜きされると「業者」や「必死な人」はよく知っているわけで、そういう人たちはダブりぬきがどのように行われているかを想定して「ダブり抜き対策」をしてきます。そう、住所や名前などを変えたりいろんな手を使ってくるのです。かといって、架空の住所や名前では、たとえ当選したとしても受取ができなくなるというジレンマもあるでしょう。
昔は手作業であったため、アナログ的な人間の目で確認していたためにある意味「ダブリ抜きは作業」であり、とても時間のかかるものでした。しかし、今はコンピュータでの作業であることが(手作業でもExcelなどの表をいろんなソートで確認しながら目で作業する)おおいわけです。目でみての作業であれば、少々文字がちがったりしても問題ありませんが、コンピュータによる自動化へ作業を移管するとどうなるでしょう。
コンピュータでのダブりぬきでは、単純なところでは「文字列の比較」が一般的でしょう。ところがこれが落とし穴なのです。なぜなら、単純に文字列を比較すると、スペースが入ったり、全角半角が入り乱れたりすると別の文字としてコンピュータは計算するからです。もちろんダブりぬきを回避したい「業者」や「必死な人」ほど多様な文字列で登録しようとしてきます。まぁ、みてて面白いですね。あの手この手でなんとかすり抜けようとする技w こうしたところは、パソコンのセキュリティ対策に同様なところを感じます。なんとかして悪質なプログラムを他人に実行させようとするあたりが・・・
そして、どのような手段でごまかそうとしてくるかの実例を見ることで、コンピュータ計算でのダブりぬき手法というものがどんどん進化していくあたりも、セキュリティ対策(とくにウィルスなどの悪質なそふとうぇあに対する対策)と似たようないたちごっこを繰り返しているとおもいます。旧漢字と新漢字をまぜてみたり、電話番号をまちがえたものをまぜてみたりと、苦肉の策みたいなものも見当たりますね。
私の場合(´・ω・`)? もちろんそうした実際の例のおかげで、人工知能のようにいろんな各種パターンから総合的に判断するようなダブりぬきアルゴリズムになってきています。まぁ、最後は人の目で確認するわけですけどね。よく使われる手法でたやすく計算で判断できるようなものを抜いたあとのデータを確認するのですから、さくっと未対応の方法でダブりぬきすり抜けようとしてるデータもみつかったりするので、それを見つけるとまたうれしくなりますw oO(そしてまた私のプログラムが少し賢くなると・・・