过采样处理

一、数据读取与初步观察

首先,使用pandas库读取信用卡交易数据集:

data = pd.read_csv(r"./creditcard.csv")
print(data.head())

通过head()方法查看数据集的前几行,初步了解数据的结构和内容。该数据集包含交易时间、交易金额、多个匿名特征以及交易是否为欺诈(Class,0 表示正常交易,1 表示欺诈交易)等信息。

二、数据标准化

由于数据集中的Amount列数值范围差异较大,为了提高模型的训练效果和收敛速度,需要对其进行标准化处理:

scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
print(data.head())

StandardScaler会将数据标准化为均值为 0,标准差为 1 的分布,使得不同特征之间具有可比性。

三、数据清洗与特征选择

数据集中的Time列对于欺诈检测的实际意义不大,因此将其删除:

data = data.drop(['Time'], axis=1)

同时,为了确保图表能够正确显示中文,设置matplotlib的字体:

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

四、样本不均衡问题分析

查看数据集中正负样本(正常交易与欺诈交易)的数量分布:

lables_count = pd.value_counts(data['Class'])
print(lables_count)# 绘制正负样本数量柱状图
plt.title("正负例样本数")
plt.xlabel("类别")
plt.ylabel("频数")
lables_count.plot(kind='bar')
plt.show()

结果显示,数据集中正常交易的数量远远多于欺诈交易,存在严重的样本不均衡问题。这种不均衡可能导致模型在训练过程中更倾向于学习正常交易的特征,从而对欺诈交易的识别能力不足。

五、数据划分与过采样处理

将数据集划分为训练集和测试集:

X = data.drop(['Class'], axis=1)
y = data['Class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

为了解决样本不均衡问题,使用SMOTE( Synthetic Minority Over-sampling Technique)算法对训练集进行过采样:

oversampler = SMOTE(random_state=0)
os_x_train, os_y_train = oversampler.fit_resample(X_train, y_train)

SMOTE算法通过合成少数类样本,增加了训练集中欺诈交易样本的数量,使得正负样本比例更加均衡,有助于提升模型对少数类样本的识别能力。

六、逻辑回归模型调优

6.1 超参数搜索

逻辑回归模型中的超参数C(正则化强度的倒数)对模型性能有着重要影响。为了找到最优的C值,采用交叉验证的方式进行搜索:

scores = []
c_param_range = [0.01, 0.1, 1, 10, 100]
for i in c_param_range:start_time = time.time()lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=2000)score = cross_val_score(lr, os_x_train, os_y_train, cv=8, scoring='recall')score_mean = sum(score) / len(score)scores.append(score_mean)end_time = time.timeprint("{} time speed :{:.2f}".format(end_time - start_time))
print("recall:}".format(score_mean))best_c = c_param_range[np.argmax(scores)]
print("最优惩罚因子为:{}".format(best_c))

在上述代码中,遍历不同的C值,使用 8 折交叉验证评估模型在训练集上的召回率(recall),选择召回率最高的C值作为最优超参数。召回率在欺诈检测中尤为重要,它衡量了模型正确识别出欺诈交易的能力。

6.2 模型训练与评估

使用最优的超参数训练逻辑回归模型,并在训练集和测试集上进行评估:

lr = LogisticRegression(C=best_c, penalty='l2', solver='lbfgs', max_iter=1000)
lr.fit(os_x_train, os_y_train)train_predicted = lr.predict(os_x_train)
print(metrics.classification_report(os_y_train, train_predicted))test_predicted = lr.predict(os_x_test_w)
print(metrics.classification_report(os_y_test_w, test_predicted))test_predicted_big = lr.predict(x_test_w)
print(metrics.classification_report(y_test_w, test_predicted_big))

通过classification_report输出模型在训练集和测试集上的精确率、召回率、F1 值等评估指标,全面了解模型的性能表现。

七、阈值调整

逻辑回归模型默认以 0.5 作为分类阈值,但在样本不均衡的情况下,调整阈值可能会进一步提升模型性能。尝试不同的阈值,并计算对应的召回率:

lr = LogisticRegression(C=best_c, penalty='l2')
lr.fit(os_x_train, os_y_train)thresholds = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
recalls = []
for i in thresholds:y_predict_proba = lr.predict_proba(os_x_train)y_predict_proba = pd.DataFrame(y_predict_proba)y_predict_proba = y_predict_proba.drop([0], axis=1)y_predict_proba[y_predict_proba[[1]] > i] = 1y_predict_proba[y_predict_proba[[1]] <= i] = 0recall = metrics.recall_score(os_y_train, y_predict_proba[1])recalls.append(recall)print("{} Recall metric in the testing dataset: {:.3f}".format(i, recall))

通过调整阈值,可以在精确率和召回率之间进行权衡,根据实际业务需求选择最合适的阈值,以达到更好的欺诈检测效果。

八、总结

本文通过对信用卡交易数据集的处理,详细展示了从数据预处理、样本不均衡处理、模型调优到阈值调整的完整流程。在实际应用中,还可以尝试其他机器学习算法(如随机森林、支持向量机等),或者结合集成学习方法进一步提升模型的性能。同时,随着数据的不断更新和业务场景的变化,持续优化模型也是保障信用卡欺诈检测准确性的关键。希望本文的实践经验能够为从事金融风控领域的读者提供有益的参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

潮乎盲盒商城系统全开源多级分销推广海报奖品兑换试玩概率OSS云存储多端源码

一、源码描述 这是一套潮乎盲盒商城源码&#xff0c;仿小叮当盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端数据库分离&#xff0c;支持四端同步数据&#xff08;H5小程序等&#xff09;&#xff0c;测试环境: php7.4&#xff0c;mysql5.6&#xff0c;…

c++环境和vscode常用的一些有用插件

环境 WSL需要安装cmake 编译器g14 应该是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧 error lens 方便每次显示错误和警告的提示懒得每次点击去看错误 Edit Sugge…

Spring 转发 form-data 文件上传请求时中文文件名乱码

Spring 转发 form-data 文件上传请求时中文文件名乱码 复现问题找原因解决问题参考 复现问题 后端有两个接口&#xff1a; /upload 是文件上传的接口。 /forward 是转发文件上传请求的接口。 RequestMapping RestController public class FileUploadController {/*** 直接调…

MySQL 8.4.4 安全升级指南:从漏洞修复到版本升级全流程解析

目录 二、升级前关键注意事项 1. 数据安全与备份 2. 版本兼容性与路径规划 三、分步升级操作流程 1. 环境预检与准备 2. 安装包部署 3. 强制升级组件 4. 验证与启动 一、背景与必要性 近期安全扫描发现生产环境的 MySQL 数据库存在多个高危漏洞(CVE 详情参见Oracle 官…

vulkanscenegraph显示倾斜模型(6.4)-多线程下的记录与提交

前言 上章深入分析了帧循环中呈现阶段的具体实现。本章将分析多线程下的记录与提交&#xff0c;进一步剖析vsg帧循环过程中的同步机制&#xff0c;并揭露信号量(VkSemaphore)和围栏(VkFence)以及vsg::FrameBlock与vsg::Barrier在其中的作用。 目录 1 信号量(VkSemaphore)、栅栏…

Python爬虫实战:获取扇贝单词数据并分析,为用户高效学习单词做参考

一、引言 随着互联网的迅猛发展,在线学习资源日益丰富多样。扇贝单词作为一款备受欢迎的在线英语学习平台,积累了海量的单词学习数据。借助 Python 强大的爬虫技术获取这些数据,并运用数据分析和机器学习方法进行深度挖掘,能够为用户量身定制更个性化、更高效的单词学习方…

【Vagrant+VirtualBox创建自动化虚拟环境】Ansible-Playbook

Vagrant 后续Ansible实战&#xff1a;【Ansible自动化运维实战&#xff1a;从Playbook到负载均衡指南】-CSDN博客 Vagrant是一个基于Ruby的工具&#xff0c;用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统&#xff0c;使用 Chef创建自动化虚拟环境 Do…

Codigger Desktop:重新定义数字工作与生活方式

Codigger Desktop是一款革命性的智能桌面操作系统&#xff0c;专为现代数字生活和工作场景打造。它不仅成为开发者的强大生产力工具&#xff0c;更是普通用户日常数字生活的得力助手&#xff0c;完美实现了专业性与易用性的平衡。 Multimedia Desktop全能数字生活平台 重新定…

Servlet+tomcat

serverlet 定义&#xff1a;是一个接口&#xff0c;定义了java类被浏览器&#xff08;tomcat识别&#xff09;的规则 所以我们需要自定义一个类&#xff0c;实现severlet接口复写方法 通过配置类实现路径和servlet的对应关系 执行原理 当用户在浏览器输入路径&#xff0c;会…

什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐

一、DDoS 攻击&#xff1a;互联网时代的 “数字核武器” 1. DDoS 攻击的本质与原理 ** 分布式拒绝服务攻击&#xff08;DDoS&#xff09;** 通过操控海量僵尸设备&#xff0c;向目标服务器发送洪水般请求&#xff0c;耗尽带宽、连接或计算资源&#xff0c;导致合法用户无法访…

Circular Plot系列(一): 环形热图绘制

针对近期多个粉丝咨询环形图的绘制&#xff0c;我意识到&#xff0c;我们似乎没有真正介绍过circle图&#xff0c;但这一类图确是非常常用的图&#xff0c;所以这里详细学习一下circle的绘制&#xff0c;使用的是circlize包&#xff0c;功能很完善&#xff1a;安装包, #https:/…

【数据挖掘】时间序列预测-时间序列预测策略

时间序列预测策略 &#xff08;1&#xff09;单步预测与多步预测&#xff08;2&#xff09;直接多步预测&#xff08;3&#xff09;递归多步预测&#xff08;4&#xff09;直接递归的混合预测&#xff08;5&#xff09;多输入多输出预测 &#xff08;1&#xff09;单步预测与多…

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…

【数据结构】--- 单链表的增删查改

前言&#xff1a; 经过了几个月的漫长岁月&#xff0c;回头时年迈的小编发现&#xff0c;数据结构的内容还没有写博客&#xff0c;于是小编赶紧停下手头的活动&#xff0c;补上博客以洗清身上的罪孽 目录 前言 概念&#xff1a; 单链表的结构 我们设定一个哨兵位头节点给链…

【JAVA】数据类型与变量:深入理解栈内存分配(4)

核心知识点详细解释 Java 的基本数据类型和引用数据类型 基本数据类型 Java 有 8 种基本数据类型&#xff0c;它们可以分为 4 类&#xff1a; 整数类型&#xff1a;byte&#xff08;1 字节&#xff09;、short&#xff08;2 字节&#xff09;、int&#xff08;4 字节&#…

ReentrantLock实现公平锁和非公平锁

在 Java 里&#xff0c;公平锁和非公平锁是多线程编程中用于同步的两种锁机制&#xff0c;它们的主要差异在于获取锁的顺序规则。下面是对二者的详细介绍&#xff1a; 公平锁 公平锁遵循 “先来先服务” 原则&#xff0c;也就是线程获取锁的顺序和请求锁的顺序一致。先请求锁…

一篇撸清 Http,SSE 与 WebSocket

HTTP,SSE 和WebSocket都是网络传输的协议,本篇快速介绍三者的概念和比较。 SSE(Server-Sent Events) 是什么? SSE(Server-Sent Events),服务器发送事件, 是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端(如浏览器)推送实时数据。它设计用于单向通信(服务器到…

5个重要的财务指标讲解

1&#xff09;净资产收益率 2&#xff09;销售净利率 3&#xff09; 销售毛利率 4&#xff09;销售成本率 5&#xff09; 期间费用率 好的&#xff0c;我将通过一个假设的案例&#xff08;某公司2023年数据&#xff09;逐步解释这些财务指标&#xff0c;并用具体数字演示计算…

PISI:眼图1:眼图相关基本概念

0 英文缩写 TIE&#xff08;Time Interval Error&#xff09;时间间隔误差&#xff0c;UI&#xff08;Unit Interval&#xff09;单位间隔PDF&#xff08;Probability Density Function&#xff09;概率密度函数BER&#xff08;Bit Error Rate&#xff09;误码率TJ&#xff08…

前端八股 CSS 2 选择器

选择器功能&#xff1a;选中特定 DOM节点进行渲染 原始方法 getElementById() getElementByName() 现在方法选择器 分类&#xff1a; id选择器 类选择器 标签选择器 逻辑与选择器 其他类型选择器&#xff1a; 伪类选择器&#xff1a; :link&#xff1a;未被访问的链接…