ルールは簡単に作れる — 詰まるのは閾値だ
一言でいうと
不正検知で難しいのは、ルールを思いつくことではなく、スコアをどこで区切るかを決めることです。しきい値は適合率と再現率を引き換えにするノブであり、実際にそのノブを回すのはモデルではなく、調査人員の1日の処理量です。
なぜ必要なのか
検知ルールの会議は、たいてい似たように進みます。「契約して1か月以内に事故が起きたら怪しい」「受付が2か月以上遅れたら怪しい」といった言葉が飛び交い、みんなうなずきます。ルールをコードに移すのも難しくありません。そして実行してみると、請求400件のうち190件が引っかかります。調査チームは、今四半期に10件しか見られません。
ここからが本当の仕事です。ルール1つ1つがどれだけ役に立つかを数字で測り、スコアをどこで区切るかを決め、その選択が誰にどんなコストを残すかを語れなければなりません。この過程を飛ばしたルールセットは、「怪しいものを捕まえる」という言葉だけを残し、実際には調査担当者の時間を誤検知に使わせます。
1つ先にはっきりさせておきます。このラボが扱うのは、検知器を作る側です。どんな手口がどのようにすり抜けるかは説明せず、合成データに仕込んでおいた正解表でしきい値を選ぶことに集中します。保険不正の調査と報告の権限と手続きは法で定められていて(保険業法)、データチームが作るのは判断ではなく、調査対象の一覧とその根拠です。
どう動くのか
まずルールごとに成績を出します。ルール1つが何件を引っかけ、そのうち何件が確定した事故だったかを数えれば、そのルール単独の適合率が出ます。実務では、この数字はたいてい期待外れです。単独で半分を超えるルールはまれです。そのためルール1つで判定せず、重みを付けて足し合わせます。重みには、そのルール単独の適合率と、業務担当者の判断を合わせて反映します。
次が混同行列です。しきい値を決めると、請求は4つのマスに分かれます。引っかかって実際に事故だった(TP)、引っかかったが違った(FP)、引っかからなかったのに事故だった(FN)、引っかからず違った(TN)。ここから出る指標は3つです。
정밀도(precision) = TP / (TP + FP) 걸린 것 중 맞은 비율 -> 조사역의 헛수고
재현율(recall) = TP / (TP + FN) 사고 중 잡은 비율 -> 새어 나간 손해
F1 = 2PR / (P + R) 둘의 조화평균
定義はscikit-learnのモデル評価ドキュメントがよくまとめています。ライブラリはこのラボのイメージにありませんが、計算は割り算が数回なので、statisticsモジュールと基本的な算術で十分で、金額のように正確である必要がある値はdecimalで扱います。グループ別の集計や累積計算が必要なら、SQLiteのウィンドウ関数を身につけておくとよいです。
しきい値を1点から上げながら表を作ると、2つの指標が逆向きに動くのが一目でわかります。ここでベースレートが決定的です。400件のうち24件が事故なら、ベースレートは6パーセントです。しきい値を1点まで下げると、再現率はほぼ1に近づきますが、適合率は10パーセント付近まで崩れます。引っかかった10件のうち9件が無駄骨だという意味です。ベースレートが低い問題では、適合率は非常に速く悪化し、これはルールが悪いからではなく、算数です。
最後が上限です。F1が最も高い地点が、運用する地点ではないことのほうがはるかに多いです。調査チームが今四半期に10件だけ見られるなら、選択肢は、引っかかる件数が10件以下のしきい値だけです。その中で最もよい地点を選び、上限がなければどこが最善だったかを一緒に書いておきます。その差が、人員を追加で要請するときの根拠になります。
現場での姿
1つ目は、グループの偏りです。あるチャネルや地域がとりわけ多く引っかかるなら、2つの可能性があります。そのグループの事故の割合が実際に高いか、ルールが不正と無関係な運用上の特性を拾ったかです。電話受付の窓口は、書類が遅れて届くので受付遅延が多く、支店の顧客は、少額の請求を何回かに分けて出す慣行があります。どちらもルールには同じように引っかかります。適用率だけを見れば差別になり、適用率とそのグループのベースレートを並べてはじめて判断が立ちます。
2つ目は、誤検知のコストが見えないことです。誤検知1件は、表では数字の1ですが、顧客にとっては追加書類の依頼と支払い遅延です。適合率を「正確さ」としてだけ読むと、このコストが消えます。
3つ目は、再現性です。しきい値は、データが変われば一緒に動きます。ルールセットにバージョン番号とデータのフィンガープリントを付けておかなければ、2か月後に「あのときの判定がどのルールで出たのか」に答えられません。
実務で本当に大切なこと
- ルールごとの成績を先に出します。単独の適合率が低いルールは、重みを下げるか、組み合わせてだけ使います。
- しきい値は、表を作って選びます。1つの地点だけを計算すると、何をあきらめたのかわかりません。
- 運用の上限を制約として入れます。最善のF1ではなく、見られる分だけが基準です。
- 適用率は、そのグループのベースレートと並べて見ます。片方だけ見ても答えはありません。
- 判定一覧には、どのルールが引っかかったかも一緒に出します。スコアだけの一覧は、レビューできません。
- ルールセットに、バージョン番号とデータのフィンガープリントを残します。それが後の説明可能性です。
次のラボですること
合成請求400件を自分で作り、ルール5つの成績をルールごとに出します。スコアを合算して判定一覧を作り、最初に提案されたしきい値で混同行列と3つの指標を手で計算します。しきい値を1点から最後まで上げながら表を作り、チャネル別の適用率とベースレートを並べて偏りを確認したうえで、調査人員の上限の中で運用するしきい値を選びます。最後に、バージョン番号とデータのフィンガープリントが付いたルールセットと、人が読む報告書を出します。