You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中寻找识别fraud_label的最优阈值规则?

寻找最优欺诈识别规则的Python实现方案

核心思路

通过遍历特征阈值组合,计算每个组合对应的精确率、召回率及综合指标(如F1-score),最终筛选出符合需求的最优(X,Y)阈值对。这种方法直接针对你需要的规则形式,比黑盒模型更直观可控。

具体实现步骤

1. 数据准备与预处理

假设你的数据集是pandas.DataFrame格式,先确保标签fraud_label为0(非欺诈)和1(欺诈)的二分类形式,分离出目标特征和标签:

import pandas as pd
from sklearn.metrics import precision_score, recall_score, f1_score

# 加载数据集(替换为你的数据路径)
df = pd.read_csv("your_dataset.csv")

# 分离特征和标签
X = df[["number_of_site_visits", "external_fraud_score"]]
y = df["fraud_label"]

2. 生成候选阈值范围

为避免遍历所有可能值(效率太低),可以基于特征的分位数生成候选阈值,比如取5%到95%的分位数,步长为1%:

# 生成number_of_site_visits的候选阈值X(取分位数,从小到大)
x_candidates = X["number_of_site_visits"].quantile(q=[i/100 for i in range(5, 96)]).unique()
x_candidates.sort()

# 生成external_fraud_score的候选阈值Y(取分位数,从大到小)
y_candidates = X["external_fraud_score"].quantile(q=[i/100 for i in range(5, 96)]).unique()
y_candidates.sort(reverse=True)

3. 遍历阈值组合并计算指标

遍历所有候选(X,Y)对,计算每个组合对应的精确率、召回率和F1-score,存储结果:

# 存储所有阈值组合的指标
results = []

for x_thresh in x_candidates:
    for y_thresh in y_candidates:
        # 生成预测标签:满足条件则为1,否则为0
        y_pred = ((X["number_of_site_visits"] < x_thresh) & (X["external_fraud_score"] > y_thresh)).astype(int)
        
        # 计算指标(注意处理全0预测的情况,避免除以0错误)
        precision = precision_score(y, y_pred, zero_division=0)
        recall = recall_score(y, y_pred, zero_division=0)
        f1 = f1_score(y, y_pred, zero_division=0)
        
        results.append({
            "x_thresh": x_thresh,
            "y_thresh": y_thresh,
            "precision": precision,
            "recall": recall,
            "f1": f1
        })

# 转换为DataFrame方便查看
results_df = pd.DataFrame(results)

4. 筛选最优阈值组合

根据你的需求选择最优组合:

  • 如果追求综合性能:选择F1-score最高的组合
  • 如果优先精确率:在召回率满足最低要求的前提下,选精确率最高的组合
  • 如果优先召回率:在精确率满足最低要求的前提下,选召回率最高的组合

示例代码(以最大F1-score为例):

# 找到F1最高的组合
best_rule = results_df.loc[results_df["f1"].idxmax()]

print(f"最优规则:当number_of_site_visits < {best_rule['x_thresh']} 且 external_fraud_score > {best_rule['y_thresh']}")
print(f"对应的精确率:{best_rule['precision']:.2f},召回率:{best_rule['recall']:.2f},F1-score:{best_rule['f1']:.2f}")

优化建议

  • 减少计算量:如果特征值是整数,可以直接取unique值排序后遍历,不用分位数;或者扩大分位数步长(比如5%步长)先快速定位大致范围,再在小范围内细化。
  • 处理类别不平衡:如果欺诈样本占比极低,可以给召回率更高的权重,比如自定义综合指标(如0.7*recall + 0.3*precision)来筛选。
  • 验证稳定性:可以用交叉验证,将数据集分成训练集和验证集,只在训练集上找阈值,再在验证集上验证效果,避免过拟合。

内容的提问来源于stack exchange,提问作者On D Hunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:41:11