Menu
CoddyTech

银行卡欺诈监测

本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 49 课,共 51 课。

信用合作社的银行卡团队每天只能手动检查少量付款。上个月,欺诈交易藏在边缘位置:

上个月的 300 笔银行卡付款,横轴为一天中的时间,纵轴为金额(对数刻度):灰色的正常付款集中在白天的中间区域,红色叉号标出 12 笔已报告的欺诈交易,其中有些金额很小,发生在夜间;有些金额很大,可能发生在任何时段

但只有等几周后客户投诉,大家才会发现欺诈行为。因此,两个检测器必须在完全没有标签的情况下找出异常付款。

本周的投诉数据已收到。哪个检测器能发现更多?

challenge icon

挑战

困难

本周的 400 笔支付记录在 payments.csv 中;程序会读取团队能检查的数量,即 budget。

  1. 对四个特征进行缩放。
  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

# 每笔银行卡付款占一行;客户在几周后报告为欺诈的付款,其 fraud 值为 1
payments = pd.read_csv("payments.csv")
features = ["amount_eur", "hour", "km_from_home", "minutes_since_last"]

# 团队能人工核查多少笔付款
budget = int(input())

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

无监督学习中的所有课

自己练习: Python 在线编译器