机器学习——逻辑回归(LogisticRegression)实战案例:信用卡欺诈检测数据集

使用逻辑回归识别 信用卡欺诈行为:基于creditcard.csv的实战与评估分析


项目背景

在金融行业中,信用卡欺诈检测是一项关键任务。欺诈交易在整个交易中占比极低,导致数据极度不平衡。本案例通过经典数据集 creditcard.csv,构建逻辑回归模型,并使用多个评价指标(如准确率、召回率、F1 等)来全面评估模型性能。


数据介绍

信用卡欺诈检测数据集 creditcard.csv

  • 数据来源Kaggle Credit Card Fraud Detectionhttps://www.kaggle.com/datasets/mlg-ulb/creditcardfraud

  • 样本总数:284,807 条

  • 特征数:30(28个匿名特征 + 金额 Amount + 时间 Time

  • 目标变量Class(0=正常交易,1=欺诈交易)

    


完整代码解析

import pandas as pd  # 用于数据处理和分析
from sklearn.linear_model import LogisticRegression  # 导入逻辑回归模型
from sklearn.model_selection import train_test_split  # 用于拆分训练集和测试集
from sklearn.preprocessing import StandardScaler  # 用于数据标准化处理# 读取信用卡交易数据
data = pd.read_csv('creditcard.csv')# 初始化标准化器,将数据转换为均值为0、标准差为1的分布
scaler = StandardScaler()
# 对Amount列进行标准化处理,并覆盖原始数据
data['Amount'] = scaler.fit_transform(data[['Amount']])# 准备特征数据X(排除时间和目标变量)和目标变量y(欺诈标签)
X = data.drop(["Time","Class"], axis=1)
y = data.Class# 将数据拆分为训练集(70%)和测试集(30%),设置随机种子保证结果可复现
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=100)# 初始化逻辑回归模型并在训练集上训练
model = LogisticRegression()
model.fit(X_train, y_train)# 使用训练好的模型在测试集上进行预测
y_pred = model.predict(X_test)
# 计算并打印模型在测试集上的准确率
accuracy = model.score(X_test, y_test)
print(f'准确率:{accuracy}')# 导入评估指标库并生成详细的分类报告
from sklearn import metrics
print('分类报告:')
print(metrics.classification_report(y_test, y_pred))# 统计目标变量Class中各类别的样本数量(查看数据分布,尤其是欺诈与正常交易的比例)
labels_count = pd.value_counts(data['Class'])
print(labels_count)

模型评估指标详解(来自sklearn.metrics.classification_report

在欺诈检测中,“准确率”往往是不可靠的。因为如果模型预测全为 0(正常交易),准确率仍然可能达到 99.9%。

因此,我们重点关注如下指标:

指标名称说明
Precision(精确率)被预测为正类的条目中  真正是正类的比例。衡量“预测为欺诈中真正欺诈”的比例
Recall(召回率)实际为正类的条目中  被预测是正类的比例。(检出率)
F1-score精确率和召回率的调和平均,平衡二者
Support每个类在测试集中出现的样本数。如85301为测试集(284,807条的30%)中的“0”类

示例输出:


重点分析 1 类(欺诈交易)

  • Precision = 0.77:误报很多,意味着模型判定为欺诈的交易中,存在不少误判情况。

  • Recall = 0.65:召回率并不好,说明很多欺诈并没有被识别。

  • F1-score = 0.70:它综合考虑了精确率(Precision)召回率(Recall),用于衡量在不平衡数据集中模型对“少数类”的综合表现。

  • support: 85301表示测试集中0的条数,142表示测试集中1的条数

之所以预测结果并不好,是因为数据的极度不平衡:

28万条 的 正常交易

492条 的 欺诈交易


模型优化建议

方法原理

下采样(Undersampling)
减少多数类样本,使正负样本比例接近,降低模型对多数类的偏好。适用于数据量较大的场景,但可能丢失信息。
过采样(Oversampling)通过复制少数类或生成合成样本(如SMOTE)来平衡数据,提高模型对少数类的识别能力。适用于数据稀缺时。
调整阈值(threshold)将默认的分类阈值(通常为0.5)向下调整,使模型更容易预测为“欺诈”类,从而提高 Recall,适用于对漏检特别敏感的任务
调整类别权重(class_weight)在训练过程中对少数类样本给予更高权重,引导模型更关注少数类。可通过设置 class_weight='balanced' 实现,适用于多数 sklearn 分类器。

此文章同一专栏内包含有1.下采样、2.过采样、3.调整阈值、4.LogisticRegression()的参数

class_weight='balanced'即为LogisticRegression()的参数


总结

逻辑回归虽为线性模型,但在欺诈检测中依然具备一定实用性。通过合理的数据预处理、参数设置(如 class_weight='balanced')、指标解读,可以使模型在真实场景中更可靠。评价指标远比准确率更重要,特别是在处理不平衡分类问题时。

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

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

相关文章

Helm在Kubernetes中的应用部署指南与案例解析

在上一章节中,我们已经介绍了Helm的部署和基本使用方法。本章将通过实际案例,详细演示如何使用Helm在Kubernetes集群中部署应用。一、Helm 核心价值解析优势解决的问题类比传统方式应用模板化重复编写 YAML 文件手动编写 20 资源清单文件版本控制缺乏部署…

如何最简单、通俗地理解线性回归算法? 线性回归模型在非线性数据上拟合效果不佳,如何在保持模型简单性的同时改进拟合能力?

线性回归作为统计学与机器学习领域中最基础且最重要的算法之一,其应用广泛且深远。它不仅是回归分析的入门方法,更是后续复杂模型构建的重要理论基础。理解线性回归算法的本质,既有助于提升数据分析的能力,也能为掌握更复杂的机器…

蓝桥杯----超声波

(一)、超声波1、原理(图 一)发送信号阶段:单片机通过翻转发送的引脚P1^0,发送8个40MHZ的方波,此时开始计时。等待接收信号:通过单片机的接收引脚P1^1检测,未接收到信号时…

Java学习-运算符

1.在代码中,如果有小数参与计算,结果有可能不精确。2.整数参与计算,结果只能是整数。3.数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算。(1)隐式转换(自…

一句话指令实现“2D转3D”、“图片提取线稿”

你是否曾为一张2D图片无法完美展示3D效果而遗憾?是否曾因需要将手绘草图转为清晰线稿而耗时费力?这些曾让设计师、电商卖家、内容创作者头疼的难题,如今只需一句话指令,即可迎刃而解。一、案例一:2D图片→3D模型痛点场…

层次聚类:无需“猜”K值,如何让数据自己画出“家族图谱”?

层次聚类:无需“猜”K值,如何让数据自己画出“家族图谱”?👋 大家好,我是小瑞瑞!欢迎回到我的专栏! 在上一期,我们学会了强大的K-Means算法,但它也给我们留下了一个“灵魂…

数据结构:链表(Linked List)

目录 结构推导 回到最原始的问题 —— 我们如何存数据? 第二步:我们来看看数组的限制 第三步:那我们该怎么做呢? 第四步:我们推导链表的数据结构 结构讲解 什么是链表? 什么是节点? …

[RK3566-Android11] U盘频繁快速插拔识别问题

问题描述 做老化测试时,在使用U盘频繁快速插拔的情况下,SDCard目录会突然被Kill掉,然后又重新挂载上,这会导致系统及APP的数据因为读写异常,从而界面卡死正常U盘插拔不应该导致内部存储卸载解决方案: SDK根…

【Golang】Go语言Map数据类型

Go语言Map数据类型 文章目录Go语言Map数据类型一、Map1.1.1、map定义1.1.2、map的基本使用1.1.3、判断某个键是否存在1.1.4、map的遍历1.1.5、使用delete()函数删除键值对1.1.6、按照指定顺序遍历map1.1.7、元素为map类型的切片1.1.8、值为切片类型的map一、Map map是一种无序…

Orange的运维学习日记--23.Linux计划任务详解

Orange的运维学习日记–23.Linux计划任务详解 文章目录Orange的运维学习日记--23.Linux计划任务详解一次性计划任务atd 服务at 命令基本语法交互式示例脚本文件示例timespec 格式示例查看与管理任务查看当前队列查看任务详细内容删除任务用户权限控制用户周期性计划任务查看任务…

Ubuntu 24.04.2 LTS 安装mysql8.0.36保姆级教程(从安装到远程连接)

目录 前言 一、系统准备 二、安装 MySQL 8.0.36 1. 查看可用版本 2.如果没有对应版本则需要手动下载mysql-apt-config(有则跳过) 2.1下图是mysql-apt-config各版本对应的mysql版本 2.2下载mysql apt repository 2.3安装 MySQL APT Repository 包 …

【LLM】讲清楚MLA原理

需要你对MHA、MQA、GQA有足够了解,相信本文能帮助你对MLA有新的认识。 本文内容都来自https://www.youtube.com/watch?v0VLAoVGf_74,如果阅读本文出现问题,建议直接去看一遍。 按照Deepseek设定一些参数值:输入token长度n10&…

谷歌采用 Ligero 构建其 ZK 技术栈

1. 引言 前序博客有: Ligero 和 Ligetron 中的 MPC 和 ZKLigetron:Nim Network开发的针对AI的zkVMLigetron:基于MPC-In-The-Head范式的zkVM简介 在隐私保护身份验证领域迈出重要一步,谷歌最近宣布 将零知识证明(ZKP…

Flutter渲染引擎:Impeller和Skia

一、Impeller 渲染引擎的发布时间Impeller 是 Flutter 团队为解决 Skia 引擎在移动端(尤其是 iOS 平台)的性能问题而开发的全新渲染引擎,其发展历程如下:首次公开:2021 年 Google I/O 大会上首次提及,作为 …

网络编程-加密算法

目录 一.网络编程基础 1. 概述 2. IP地址 3. 域名 4. 网络模型 5. 常用协议 6. 小结 二.TCP编程 1. 什么是Socket? 2. 服务器端 3. 客户端 4. Socket流 5. 小结 三.UDP编程 1. 概述 2. 服务器端 3. 客户端 4. 小结 案例: 四.加密算法 …

【网络工程师软考版】网络安全

任何形式的网络服务都会导致安全方面的风险,问题是如何将风险降到最低程度,目前的网络安全措施有数据加密、数字签名、身份认证、防火墙、特征过滤等。所涉内容:1、网络安全基础2、加密技术与哈希算法3、数字签名4、数字证书5、VPN技术6、防火…

深入浅出设计模式——创建型模式之建造者模式 Builder

文章目录建造者模式简介建造者模式结构建造者模式代码实例定义产品类House定义建造者定义抽象建造者AbstractBuilder定义具体建造者定义指挥者客户端代码示例运行结果建造者模式总结代码仓库建一栋房子总共分几步?建造者模式告诉你答案!“把大象装冰箱&a…

OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型

更多内容:XiaoJ的知识星球 目录OpenVLA:开源视觉-语言-行动模型1. 介绍2. 相关工作1)视觉条件语言模型(Visually-Conditioned Language Models)2)通用型机器人策略(Generalist Robot Policies&a…

JavaWeb(苍穹外卖)--学习笔记15(分页查询PageHelper)

前言 终于开始学习做项目了,本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,这篇文章来看看分页查询&#…

金融专题|某跨境支付机构:以榫卯企业云平台 VPC 功能保障业务主体安全

作者:SmartX 金融团队 金融机构在信息化建设时面临诸多数据合规要求,例如:不同业务区域之间互相隔离、数据库仅能由关联的应用服务器访问、仅有特定的服务器允许被外网访问等。对此,某跨境支付机构以 SmartX 榫卯企业云平台构建私…