TT Lab
はじめる
学ぶ 学習パス コース

保険ドメイン深化

五つのルールで点数表を作り、閾値を選ぶ

TT Labで続きを見る

目標

請求データにルールのスコアボードを作り、混同行列から適合率と再現率とF1を自分で計算します。しきい値を動かしながら表を作り、グループの偏りを確認したうえで、調査人員の上限の中で運用するしきい値を選び、バージョン番号とデータのフィンガープリントが付いたルールセットとして出します。

なぜ重要なのか

検知ルールを思いつくことは、難しくありません。難しいのは、スコアをどこで区切るかを決めることと、その選択が誰にどんなコストを残すかを語ることです。ベースレートが低い問題では、しきい値を少し下げただけでも、適合率が急速に崩れます。そしてF1が最も高い地点が、運用する地点であることはまれです。調査チームが見られる件数が、本当の制約です。 このラボは、検知器を作る側だけを扱います。実際の不正の手口やその回避方法は扱いません。データはすべて合成で、機関名も仮想であり、正解表(label_fraud)は、しきい値を選ぶために仕込んだものです。 採点ツールは、作成されたDBから期待値を計算し直して突き合わせます。小数は第4位まで書き、整数の欄は正確に合っている必要があります。

ステップ

  1. /root/fraud/make_claims.pyを作成して実行し、/root/fraud/claims.dbに契約200件と請求400件(確定不正24件)を入れてください。
  2. /root/fraud/rules.pyにルール5つと重みをまとめ、ルールごとの成績を/root/fraud/rules.csvに書いてください。
  3. スコアを合算して1点以上の請求を、どのルールが引っかかったかとともに/root/fraud/scores.csvに書いてください。
  4. 最初に提案されたしきい値4点で、混同行列と3つの指標を/root/fraud/confusion.jsonに書いてください。
  5. しきい値1点から11点までの指標を/root/fraud/sweep.csvに書いてください。
  6. しきい値4点を基準に、チャネル別の適用率とベースレートを/root/fraud/fairness.csvに、最も多く引っかかったグループと適合率が最も低いグループを/root/fraud/fairness.jsonに書いてください。
  7. 調査人員の上限10件の中でしきい値を選び、根拠とともに/root/fraud/threshold_choice.jsonに書いてください。
  8. ルールセットを/root/fraud/rulebook.jsonに、人が読むまとめを/root/fraud/fraud_report.mdに出してください。

参考

合成請求データを作る

/root/fraud/make_claims.pyを作成して実行し、/root/fraud/claims.dbにpolicy 200行とclaim 400行(label_fraudが1のもの24件)を入れてください。

シード値20260917でrandom.Randomを使い、契約はP0001から、請求はC0001から採番します。受付日は、事故日に遅延日数を足して作ってください。採点ツールは金額の合計まで見ます。

ルール5つの成績を出す

/root/fraud/rules.pyにルールと重みをまとめ、ルールごとにhits、fraud_hits、precisionを/root/fraud/rules.csvに書いてください。

ヘッダーはrule_id,weight,hits,fraud_hits,precisionで、R1からR5の順に書きます。precisionはfraud_hitsをhitsで割った値です。単独の適合率が低いからといって、ルールが間違っているわけではありません。単独では根拠にならない、という意味です。

スコアを合算して判定一覧を作る

1点以上の請求を、スコアの降順、同じスコアならclaim_idの昇順で/root/fraud/scores.csvに書いてください。

rulesの欄には、引っかかったルールをR1からの順に'+'でつないで書きます。スコアだけの一覧は、調査担当者がレビューできません。何のために引っかかったのかが一緒にある必要があります。

混同行列と3つの指標を計算する

しきい値4点でTP、FP、FN、TNと適合率、再現率、F1を/root/fraud/confusion.jsonに書いてください。total、positives、base_rate、flaggedも一緒に入れます。

TNは、全体から、引っかかった件数と見逃した件数を引いた値です。適合率は引っかかったもののうち当たった割合、再現率は事故のうち捕まえた割合です。ベースレートがいくらかを先に見てから、適合率を読んでください。

しきい値を動かしながら表にする

しきい値1点から11点まで、それぞれのflagged、tp、fp、fn、tn、precision、recall、f1を/root/fraud/sweep.csvに書いてください。

しきい値が低いほど再現率は上がり、適合率は下がります。ベースレートが6パーセントのデータで1点まで下げると、適合率がどこまで行くのか、自分で見てください。1つの地点だけを計算すると、何をあきらめたのかわかりません。

グループ別の適用率とベースレートを並べて見る

しきい値4点を基準に、チャネル別のclaims、fraud、base_rate、flagged、flag_rate、tp、precisionを/root/fraud/fairness.csvに、最も多く引っかかったグループと適合率が最も低いグループを/root/fraud/fairness.jsonに書いてください。

適用率だけを見ても、どのグループが不当な扱いを受けているのかわかりません。そのグループの確定不正の割合と並べてはじめて、「実際に多いのか」と「ルールが運用上の特性を拾ったのか」が分かれます。チャネルは、group名の昇順で書きます。

調査人員の上限の中でしきい値を選ぶ

調査チームが今四半期に見られる件数10件を制約として、しきい値を選び、根拠とともに/root/fraud/threshold_choice.jsonに書いてください。上限がなかった場合の最善も一緒に残します。

上限を超えないしきい値の中で、f1が最も高いものを選びます。上限がなければどこが最善だったかを一緒に書いておけば、人員を追加で要請するときに、その差を根拠にできます。

ルールセットをバージョン番号とフィンガープリントとともに出力する

/root/fraud/rulebook.jsonにversion、threshold、capacity、rules、dataset(フィンガープリントを含む)、metricsを入れ、/root/fraud/fraud_report.mdに4つの節でまとめてください。

報告書の節の見出しは、「## ルールセットと根拠」「## しきい値をどう選んだか」「## グループ別の点検」「## 限界と次の課題」です。フィンガープリントの計算方式は、ラボの案内の参考に書かれています。限界の節には、ベースレートが低いときに適合率がどうなるかを、数字で書いてください。