XGBoost实战:5种处理信用卡欺诈检测中样本不平衡的调参技巧

[机器学习]基于信用卡欺诈的预测分析 随着信用卡在当今交易中的普遍使用,相关的欺诈行为不可避免地发生,并造成相当大的金钱损失。为了解决这个问题,本文使用了一个包含合法信用卡交易以及欺诈交易的数据集来寻求一个有效的预测方案。本文通过对交易数据的处理和分析,发现数据是不平衡的,因此采用分层抽样和过采样的方法对不平衡数据集进行更为可靠的分析。同时,由于抽样的随机性,采用交叉验证的方法进行最终的模型评估与选择。在此基础上,利用五种决策树相关算法分别建立了模型并进行调参。 阅读详情

XGBoost实战:5种处理信用卡欺诈检测中样本不平衡的调参技巧

金融风控领域的从业者都知道,信用卡欺诈检测是个典型的"大海捞针"问题——正常交易占99%以上,而欺诈交易可能不到1%。这种极端不平衡的数据分布,让很多机器学习模型的表现大打折扣。上周我刚帮一家银行优化他们的欺诈检测系统,发现原始模型的召回率只有30%,这意味着70%的欺诈交易都没被抓住。经过一轮XGBoost参数调优后,我们将召回率提升到了85%,而误报率仅增加了2个百分点。

1. 权重调整:让模型看见那些被忽略的欺诈交易

在信用卡数据中,正常交易和欺诈交易的比例往往达到1000:1甚至更高。这种情况下,XGBoost会倾向于把所有样本都预测为正常交易,因为这样就能获得99.9%的"准确率"——这显然是个陷阱。

scale_pos_weight参数是XGBoost为解决这类问题提供的"急救包"。它的原理很简单:给少数类(欺诈交易)更高的权重,让模型在训练时更关注这些稀有样本。计算这个参数的最佳实践是:

# 计算正负样本比例
neg_pos_ratio = len(y_train[y_train==0]) / len(y_train[y_train==1])
xgb_params = {
    'scale_pos_weight': neg_pos_ratio,
    'objective': 'binary:logistic',
    'eval_metric': 'aucpr'  # 对于不平衡数据,PR曲线比ROC更敏感
}

但要注意,盲目放大这个权重会导致模型过于敏感。我的经验是:

  • 初始值设为负正样本比
  • 在0.5倍到2倍这个区间进行网格搜索
  • 配合early_stopping防止过拟合

提示:在金融场景中,误报成本也很高。过高的scale_pos_weight会导致大量正常交易被拦截,影响用户体验。

2. 损失函数改造:教会模型理解业务代价

标准交叉熵损失函数假设误分类的代价是对称的,但在欺诈检测中,漏掉一个欺诈交易(False Negative)的代价可能是误拦截正常交易(False Positive)的100倍。

XGBoost允许我们自定义损失函数。下面是一个加权对数损失实现,给FN设置了10倍于FP的惩罚:

def weighted_logloss(preds, dtrain):
    labels = dtrain.get_label()
    preds = 1.0 / (1.0 + np.exp(-preds))  # 转换成概率
    
    # 设置权重矩阵
    weights = np.where(labels==1, 10, 1)  # FN代价是FP的10倍
    
    grad = preds - labels
    hess = preds * (1.0 - preds)
    
    return grad * weights, hess * weights  # 加权后的梯度和二阶导

model = xgb.train(
    params={'eval_metric': 'aucpr'},
    dtrain=train_matrix,
    num_boost_round=1000,
    obj=weighted_logloss,
    early_stopping_rounds=50
)

实际应用中,损失函数的权重应该与业务代价相匹配。建议:

  1. 与风控团队确认FN和FP的实际成本比
  2. 从小权重开始测试,逐步增加
  3. 监控验证集的召回率和精确率变化

3. 采样策略:在数据层面重塑平衡

当样本不平衡极其严重时(如1:10000),仅靠调整参数可能不够。这时可以考虑采样策略:

3.1 SMOTE过采样实战

SMOTE通过插值生成合成样本,比简单的复制更有效。但要注意:

  • 只对训练集过采样,测试集保持原始分布
  • 配合交叉验证避免数据泄露
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import make_pipeline

# 创建包含SMOTE的pipeline
smote_pipeline = make_pipeline(
    SMOTE(sampling_strategy=0.1, random_state=42),  # 将少数类提升到10%
    xgb.XGBClassifier(**xgb_params)
)

# 使用TimeSeriesSplit避免打乱时间顺序
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, val_idx in tscv.split(X):
    X_train, X_val = X.iloc[train_idx], X.iloc[val_idx]
    y_train, y_val = y.iloc[train_idx], y.iloc[val_idx]
    
    smote_pipeline.fit(X_train, y_train)
    preds = smote_pipeline.predict_proba(X_val)[:,1]

3.2 欠采样技巧

对于海量数据,可以随机欠采样多数类。进阶做法是:

  • Tomek Links:移除边界附近的多数类样本
  • Cluster Centroids:对多数类聚类后保留中心点
from imblearn.under_sampling import ClusterCentroids

cc = ClusterCentroids(
    sampling_strategy={0: 100000},  # 保留10万多数类样本
    random_state=42,
    n_jobs=-1
)
X_res, y_res = cc.fit_resample(X, y)

4. 阈值优化:寻找业务最佳平衡点

XGBoost默认使用0.5作为分类阈值,但在欺诈检测中,这个值通常太高。我们可以:

  1. 在验证集上生成预测概率
  2. 遍历不同阈值,计算业务指标
  3. 选择最优阈值
from sklearn.metrics import precision_recall_curve

y_proba = model.predict_proba(X_val)[:,1]
precision, recall, thresholds = precision_recall_curve(y_val, y_proba)

# 寻找使2*recall + precision最大的阈值
f_score = (2 * recall + precision)
opt_idx = np.argmax(f_score)
optimal_threshold = thresholds[opt_idx]

# 应用最优阈值
y_pred = (y_proba >= optimal_threshold).astype(int)

对于信用卡欺诈,通常关注:

  • 召回率:尽可能抓住更多欺诈
  • 精确率:控制人工审核量
  • 误报率:不影响正常用户

5. 评估指标选择:超越准确率的评判标准

在不平衡数据上,准确率是毫无意义的指标。我们应该关注:

指标公式适用场景
AUC-PR精确率-召回率曲线下面积极度不平衡时比AUC-ROC更敏感
F1-Score2*(精确率*召回率)/(精确率+召回率)平衡精确率和召回率
MCC(TPTN - FPFN)/sqrt((TP+FP)(TP+FN)(TN+FP)(TN+FN))考虑所有混淆矩阵元素

在XGBoost中设置多指标监控:

eval_metrics = {
    'eval_metric': ['aucpr', 'error', 'logloss'],
    'early_stopping_rounds': 50
}

model = xgb.train(
    params=eval_metrics,
    dtrain=train_matrix,
    num_boost_round=1000,
    evals=[(train_matrix, 'train'), (valid_matrix, 'valid')],
    verbose_eval=50
)

实际项目中,我会先与业务方确认:

  1. 最不能接受的错误类型(通常是漏检欺诈)
  2. 可承受的最大误报率
  3. 人工审核团队的处理能力

然后根据这些约束来选择合适的评估指标。

信用卡欺诈检测实战:不平衡学习与业务可解释性 信用卡欺诈检测是典型的高失衡二分类问题,其核心在于解决样本极度倾斜(欺诈率常低于0.1%)下的模型泛化与业务可信问题。技术上需融合不平衡学习策略(如SMOTE、代价敏感训练)、鲁棒特征工程(周期编码、分位数缩放、防泄漏滚动统计)及可解释建模(XGBoost特征重要性、SHAP归因)。其技术价值不仅在于提升召回率,更在于构建满足金融合规审计要求的风险评分闭环——支持人工复核、阈值灵活调控、线上服务低延迟。典型应用场景涵盖银行实时反欺诈系统、支付平台风控中台及保险智能核保引擎。本文聚焦Python端到端实现,覆 阅读详情

相关推荐

XGBoost调参进阶:用特征权重(feature_weights)和样本权重(scale_pos_weight)搞定不平衡数据

本文深入探讨了XGBoost在处理不平衡数据时的进阶调参技巧,重点介绍了`feature_weights`和`scale_pos_weight`参数的应用。通过特征与样本双重加权策略,有效提升模型在金融风控、医疗诊断等场景中的F1-Score和召回率表现,同时保持合理的误判率。文章包含实战代码示例和参数优化指南,帮助数据科学家破解不平衡分类难题。

weixin_42631411的博客 150

信用卡欺诈检测实战:极不平衡数据下的模型选型与工程落地

信用卡欺诈检测是典型的极端类别不平衡机器学习任务,其核心挑战不在于数据量少,而在于正样本(欺诈)信号微弱、模式异质且业务代价极高。从统计原理看,Accuracy等全局指标在0.17%欺诈率下完全失效,真正关键的是漏损率(FN/真实欺诈)与可控误报率的联合优化。技术价值体现在:通过结构化欠采样、加权损失函数、PR曲线阈值寻优及SHAP可解释性分析,将统计判别力转化为业务可感知的风险拦截能力。典型应用场景包括支付风控、实时交易反欺诈及金融反洗钱系统,尤其适用于正样本仅数百、特征经PCA压缩且Amount/Tim

weixin_30709061的博客 669

信用卡欺诈检测实战:从数据清洗到模型优化的完整解决方案

在机器学习领域,分类问题是预测建模的核心任务之一,其原理是通过学习历史数据中的特征与标签之间的关系,构建能够对新样本进行自动分类的模型。这类技术的核心价值在于能够从复杂数据中自动发现规律,实现高效、准确的自动化决策。在实际应用中,分类算法广泛应用于金融风控、医疗诊断、图像识别等多个场景,其中金融领域的欺诈检测是一个典型代表。欺诈检测通常面临类别极度不平衡的挑战,即正常交易样本远多于欺诈样本,这要求模型具备在噪声中识别微弱异常信号的能力。针对这一问题,数据科学家需要采用专门的评估指标如精确率、召回率和F1-S

weixin_34280237的博客 500

Kaggle信用卡欺诈检测实战:5种采样方法对比与XGBoost调参全流程

本文以Kaggle信用卡欺诈检测项目实战为例,深入探讨了处理极端不平衡数据的核心方法。通过详细对比随机欠采样、过采样、SMOTE、ADASYN和SMOTEENN五种采样策略的实际效果,并结合XGBoost的scale_pos_weight参数调优,提供了一套从数据预处理、模型训练到性能评估的完整实战流程,旨在构建高召回率的欺诈检测模型。

vulkan6gpu的博客 1059

FPGA实战:SRIO接口数据流控制与回环测试详解

本文详细解析了FPGA中SRIO接口的数据流控制机制与回环测试实战。通过剖析SRIO IP核的AXI4-Stream接口握手时序(tvalid/tready/tlast),重点阐述了HELLO数据包格式与状态机设计,并提供了完整的Verilog代码示例。文章以回环测试为核心验证手段,指导开发者排查常见问题,为FPGA高速互连通信设计提供实用指南。

weixin_29173777的博客 425

python 携程登陆_Python 学习练习之用户登录接口

目的:用python实现简单用户注册,登陆,加黑功能,放个流程图吧。以下内容仅为练习 执行流程:[root@zabbix login]# python user_login.pyusername:tompassword:123456Are you want to register ? [y/n]yRegister successful,Please relogin ![root@zabbix lo...

weixin_28679635的博客 517

信用卡欺诈检测实战教程:从数据预处理到模型优化全解析

本文将带您从零构建基于机器学习的信用卡欺诈检测系统,完整代码+可视化分析,让您掌握处理不平衡数据、模型调参和评估的核心技能。本文将带您从零构建基于机器学习的信用卡欺诈检测系统,完整代码+可视化分析,让您掌握处理不平衡数据、模型调参和评估的核心技能。使用Kaggle公开的信用卡交易数据集,包含284,807笔交易记录,其中欺诈交易仅占0.172%(典型的不平衡数据)。F1 Score 2(精确率召回率)/(精确率+召回率) 平衡精确率和召回率的调和平均。精确率 TP/(TP+FP) 预测为欺诈交易的可信度。

weixin_55010563的博客 787

GX Works2系统启动失败排查指南:从环境配置到修复方案

在工业自动化与PLC编程调试中,软件启动异常是常见的工程痛点。当开发工具因系统环境配置不当而频繁报错时,往往不是简单的重启能解决的。运行库缺失、区域设置错误、临时目录失效或系统服务被禁用,都可能导致编程软件无法完成初始化流程。掌握从基础环境检查到系统组件修复的系统性排查思路,是提升工控开发效率的关键能力。本文从软件初始化原理出发,结合Windows系统维护实践,梳理一套适用于工业软件启动故障的通用诊断方法,并自然聚焦到三菱GX Works2常见启动失败问题的实际处理,帮助工程师快速定位并解决环境性故障,保障

weixin_42567046的博客 458

【机器学习实战】信用卡欺诈检测:从数据不平衡处理到模型优化全流程解析

本文详细解析了信用卡欺诈检测的全流程,从数据不平衡处理到模型优化。通过Kaggle数据集实战,介绍了SMOTE过采样、代价敏感学习和异常检测算法等关键技术,并探讨了逻辑回归调参、集成学习及模型融合策略。文章还强调了PR曲线在极度不平衡数据中的重要性,并提供了工程化部署的实用技巧。

weixin_30357231的博客 488

fastadmin云快充充电桩系统部署文档uniapp

多商户 嘎嘎快充V1.0部署文档 一、服务器环境: 服务器配置4核心8GB内存5M带宽以上配置 VX next1402 只支持linux环境 nginx1.22 php7.2 开启redis、fileinfo扩展,关闭禁用workerman gatewayworkerman需要的函数,如pcntl相关的函数 mysql5.7 supervisor redis 注意: 1.站点必须配置https、websocket配置wss 2.注意开放直连服务端口:2024,并添加到安全组 二、必

itholiday2014的博客 1629

RK3506开发板实战:5分钟搞定开源鸿蒙OpenHarmony5.1+星闪功能配置

本文提供了一份基于RK3506开发板快速配置开源鸿蒙OpenHarmony 5.1并启用星闪功能的实战指南。文章详细介绍了从开发环境搭建、系统镜像编译烧录,到星闪驱动加载验证、应用开发及性能调优的全流程,帮助开发者高效上手,将新一代短距无线通信技术应用于物联网项目。

time3的博客 656

告别XGBoost?用TabNet处理表格数据实战:从信用卡欺诈检测到模型调优

本文深入探讨了TabNet在表格数据处理中的优势,特别是在信用卡欺诈检测等不平衡数据场景下的表现。通过解析TabNet的架构、动态特征选择机制和可解释性设计,提供了从数据预处理到超参数调优的完整实战指南,帮助开发者超越传统XGBoost模型,实现更高效的分类任务。

weixin_30493401的博客 381

声纹识别实战:用Python从零搭建一个简易声纹验证系统(附完整代码)

本文是一份详细的声纹识别实战指南,教你使用Python从零搭建一个简易的声纹验证系统。文章涵盖了从音频采集、预处理、MFCC特征提取,到基于高斯混合模型(GMM)的建模与验证全流程,并提供了完整的代码实现,帮助开发者快速掌握这项生物特征识别核心技术。

ik6789012的博客 231

一键网站下载:4 步拿到完整的离线整站存档

上个月我用浏览器的"另存为"存过一页文档站,第二天离线打开,图片全是红叉,样式也没了。后来我碰到一个项目叫 Website-downloader,一个基于 Node.js 的网站下载工具:粘贴网址,它就把整站的 HTML、CSS 和图片抓下来,改好相对链接,打包成一个 ZIP,全程只要几分钟。 ## 一句话定位:Website-downloader 是整站的外卖窗口 硬要打个比方,它像外卖窗口

gitblog_00982的博客 903

手把手教你玩转服务器芯片架构​专栏--​​3.5 实战案例:用SystemC搭建一个多核服务器芯片的NoC模型(含流量分配与延迟仿真)​

通过SystemC搭建多核NoC模型,可深入验证流量分配策略与延迟特性。实际工程中需结合FPGA原型验证(如Xilinx Alveo)进行时序收敛分析,并通过参数化设计适配不同服务器芯片需求。

MHD0815的博客 3043

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤 一般情况下,我们使用西门子的S7通信时都是将网络中的PLC的IP设置在同一网段,那么如果涉及到旧项目改造时,不方便修改IP地址,只能进行2个网段通信时,可以参考以下步骤: 准备条件: 2个路由器 CPU 1212C 主动连接 CPU 314C-2PN/DP 被动连接 网络搭建如下图所示: S7-1212C一侧 建立S7主动连接 ,IP地址:192.168.5.40,编写get/put 通信程序 S7-300 IP地址:192.168.0

Robot_PLC_HMI_Automation 2万+

XGBoost 2.0.3 实战:信用卡欺诈检测,AUC 提升至 0.985(附完整代码)

本文详细介绍了使用XGBoost 2.0.3进行信用卡欺诈检测的实战案例,通过数据预处理、特征工程和模型调优,将AUC提升至0.985。文章包含完整代码和参数调优指南,特别适合金融风控领域的数据科学家和机器学习从业者参考。

weixin_33968104的博客 464

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

One Class SVM实战:用Python检测信用卡欺诈的5个关键步骤

本文详细介绍了使用One Class SVM单分类算法检测信用卡欺诈的5个关键步骤,包括数据预处理、核函数选择、参数优化、模型融合和生产环境部署。通过Python实战案例,展示了如何构建高效的欺诈检测系统,提升金融风控能力。

weixin_28716769的博客 325

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 用这3招搞定开关电源噪声:示波器实测对比滤波电容/电感/布局优化效果
下一篇: 从PagedAttention到RadixTree:图解vLLM和SGLang的显存管理黑科技
java5
博客等级 码龄22年 85粉丝 2103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值