カード不正利用の監視
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 49/51。
信用組合のカードチームが手作業で確認できるのは、1日に数件の支払いだけです。先月、不正取引は端のほうに潜んでいました:
しかし、顧客から数週間後に苦情が寄せられるまで、不正だと誰も気づきません。そのため、ラベルがまったくない状態で、2つの検出器が異常な支払いを見つける必要があります。
今週の苦情が届きました。どの検出器なら、もっと多くを検出できたでしょうか?
チャレンジ
難しい今週の400件の支払いデータはpayments.csvにあります。プログラムは、チームが確認できる件数をbudgetとして読み込みます。
- 4つの特徴量をスケーリングします。
- アイソレーションフォレスト(
random_state=0)と局所外れ値因子(近傍数20)を使って、budget件の支払いにフラグを付けます。 - ここで初めて
fraudを開きます。それぞれのリストが検出した件数と、チームに確認させた正常な支払いの件数を出力します。 - より多く検出したリストをチームに送ります。
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())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ