Menu
CoddyTech

カード不正利用の監視

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 49/51。

信用組合のカードチームが手作業で確認できるのは、1日に数件の支払いだけです。先月、不正取引は端のほうに潜んでいました:

先月のカード決済300件。横軸は時間帯、縦軸は対数目盛で示した金額:正当な決済は日中の中央付近を灰色で埋め、赤い×印は報告された12件の不正取引を示している。夜間のごく少額のものや、時間帯を問わず非常に高額なものがある

しかし、顧客から数週間後に苦情が寄せられるまで、不正だと誰も気づきません。そのため、ラベルがまったくない状態で、2つの検出器が異常な支払いを見つける必要があります。

今週の苦情が届きました。どの検出器なら、もっと多くを検出できたでしょうか?

challenge icon

チャレンジ

難しい

今週の400件の支払いデータはpayments.csvにあります。プログラムは、チームが確認できる件数をbudgetとして読み込みます。

  1. 4つの特徴量をスケーリングします。
  2. アイソレーションフォレスト(random_state=0)と局所外れ値因子(近傍数20)を使って、budget件の支払いにフラグを付けます。
  3. ここで初めてfraudを開きます。それぞれのリストが検出した件数と、チームに確認させた正常な支払いの件数を出力します。
  4. より多く検出したリストをチームに送ります。the isolation forest's listまたはthe local outlier factor's list、それ以外の場合はeither list, they tieです。

先月のデータで、予算が10件の場合:

Budget: 10 of 300 payments
Isolation forest: caught 6 of 12 frauds, 4 honest payments checked
Local outlier factor: caught 10 of 12 frauds, 0 honest payments checked
Send the team: the local outlier factor's list

自分で試してみよう

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# カード決済1件につき1行。数週間後に顧客から不正利用として報告された決済では fraud は 1
payments = pd.read_csv("payments.csv")
features = ["amount_eur", "hour", "km_from_home", "minutes_since_last"]

# チームが手作業で確認できる決済件数
budget = int(input())

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ