当前位置: 首页 > news >正文

零基础入门机器学习 -- 第十一章机器学习模型的评估与优化

如何判断你的模型到底行不行?


11.1 为什么需要评估模型?

场景设定:信用卡欺诈检测

想象你是ABC银行的风控经理,你每天的工作就是盯着上百万笔交易,防止客户的信用卡被盗刷。

你们银行新推出了一款机器学习模型,专门用来预测哪些交易是欺诈交易,哪些是正常交易。经过几周的训练,模型终于准备上线了!

这天,老板叫你去汇报:

“我们的新模型怎么样?它能帮我们减少多少欺诈?”

你打开电脑,看了看模型的预测结果,自信满满地说:

“老板,我们的模型准确率高达 98.6%!简直完美!”

老板听了一愣,赶紧叫助手去开香槟庆祝。

但是!你的数据科学家同事突然打断了你:

“等等,你只看准确率,真的代表模型好用吗?”

你皱起眉头,心想:

“准确率高不是好事吗?那还要怎么看模型的好坏?”

于是,你们决定深入分析模型的表现。


11.2 机器学习模型的评估指标

在模型评估时,我们不能只看准确率(Accuracy),因为它可能会掩盖问题。我们需要更多评估指标来全面衡量模型的好坏。

分类任务中,最常用的指标有:

  1. 准确率(Accuracy)
  2. 精确率(Precision)
  3. 召回率(Recall)
  4. F1 分数(F1 Score)
  5. 混淆矩阵(Confusion Matrix)

我们来看看这些指标在欺诈交易检测中的意义。


1. 准确率(Accuracy):表面上的好成绩

定义: 预测正确的交易占总交易的比例。

实际数据

你们银行的真实交易数据如下:

实际情况模型预测:正常交易模型预测:欺诈交易
实际正常交易(9900 笔)9800100
实际欺诈交易(100 笔)4060

计算公式:
在这里插入图片描述

Python 代码:

from sklearn.metrics import accuracy_score# 真实交易情况(0=正常交易,1=欺诈交易)
y_true = [0]*9900 + [1]*100  
# 模型的预测结果
y_pred = [0]*9800 + [1]*100 + [0]*40 + [1]*60  # 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print("准确率:", accuracy)

运行结果:

准确率: 0.986

问题:

  • 看起来98.6% 的准确率很高,但模型错过了40 笔欺诈交易
  • 如果这些交易是盗刷,每笔 5000 美元,那银行的损失就是 20 万美元!

结论:

准确率并不能告诉我们模型有没有找到所有欺诈交易,也不能告诉我们它有没有误判正常交易。

所以,我们需要更深入的指标。


2. 精确率(Precision):减少误报

定义: 在所有预测为“欺诈交易”的交易中,真正是欺诈交易的比例。

Python 代码:

from sklearn.metrics import precision_score# 计算精确率
precision = precision_score(y_true, y_pred)
print("精确率:", precision)

运行结果:

精确率: 0.375

解释:

  • 精确率 = 37.5%,说明模型预测的欺诈交易中,只有 37.5% 是真的欺诈!
  • 也就是说,100 笔交易被误报为欺诈,导致 100 名客户打电话投诉:
    “我的信用卡为什么被冻结?我只是买了一杯咖啡啊!”

精确率低的后果

  • 客服被大量投诉,银行形象受损
  • 用户体验变差,客户可能换银行
  • 银行可能错失一些高价值客户

精确率低,说明模型“太紧张”,误伤了很多正常交易。


3. 召回率(Recall):别漏掉坏人

定义: 在所有真正的欺诈交易中,模型成功找到的比例。

计算公式:
在这里插入图片描述

Python 代码:

from sklearn.metrics import recall_score# 计算召回率
recall = recall_score(y_true, y_pred)
print("召回率:", recall)

运行结果:

召回率: 0.6

解释:

  • 召回率 = 60%,说明模型成功识别了 60% 的欺诈交易,但漏掉了 40%!
  • 意味着 40 笔真正的欺诈交易被当成了正常交易,让黑客成功盗刷!

召回率低的后果

  • 银行损失惨重,黑客能轻松绕过检测
  • 如果召回率太低,系统就变得没有意义
  • 黑客甚至会利用模型的漏洞,不断攻击银行

召回率低,说明模型“太松了”,让太多欺诈交易漏网。


4. F1 分数(F1 Score):找到最佳平衡

定义: 平衡精确率召回率,寻找最佳方案。

Python 代码:

from sklearn.metrics import f1_score# 计算 F1 分数
f1 = f1_score(y_true, y_pred)
print("F1 分数:", f1)

运行结果:

F1 分数: 0.4615

解释:

  • F1 分数越高,说明模型的精确率和召回率都比较均衡。
  • F1 分数低,意味着模型可能“偏科”
    • 精确率高,召回率低:可能漏掉了很多欺诈交易。
    • 召回率高,精确率低:可能误判了太多正常交易。

F1 分数是综合评估模型优劣的关键指标。


5. 混淆矩阵(Confusion Matrix):全面分析

Python 代码:

from sklearn.metrics import confusion_matrix# 计算混淆矩阵
cm = confusion_matrix(y_true, y_pred)
print("混淆矩阵:\n", cm)

输出结果:

[[9800  100][  40   60]]

解读:

  • 9800:模型正确预测了 9800 笔正常交易(真负例 TN)。
  • 100:模型误判了 100 笔正常交易为欺诈(假正例 FP)。
  • 40:模型漏掉了 40 笔欺诈交易(假负例 FN)。
  • 60:模型正确预测了 60 笔欺诈交易(真正例 TP)。

混淆矩阵能清楚地展示模型的错误类型,是优化模型的重要工具。


11.3 结论

评估指标作用低值的后果
准确率预测正确率掩盖误报和漏报
精确率误报率低误伤正常用户
召回率识别欺诈能力黑客可绕过模型
F1 分数平衡误报和漏报低意味着模型表现不稳定

最终:

  • 不能只看准确率!
  • 银行需要既不能误报太多正常用户,也不能漏掉真正的欺诈。
  • F1 分数是最好的综合指标!

你现在知道如何评估模型了吗?😉

http://www.lryc.cn/news/538678.html

相关文章:

  • 菜鸟之路Day15一一IO流(一)
  • 动手学Agent——Day2
  • JSONObject,TreeUtil,EagelMap,BeanUtil使用
  • Unity嵌入到Winform
  • TCP/UDP协议与OSI七层模型的关系解析| HTTPS与HTTP安全性深度思考》
  • 《Zookeeper 分布式过程协同技术详解》读书笔记-2
  • 缺陷检测之图片标注工具--labme
  • 机器学习_13 决策树知识总结
  • 请解释一下Standford Alpaca格式、sharegpt数据格式-------deepseek问答记录
  • ubuntu 安装管理多版本python3 相关问题解决
  • 滑动窗口算法篇:连续子区间与子串问题
  • Python爬虫实战:股票分时数据抓取与存储 (1)
  • 【设计模式】【行为型模式】访问者模式(Visitor)
  • 基于实例详解pytest钩子pytest_generate_tests动态生成测试的全过程
  • Copilot基于企业PPT模板生成演示文稿
  • 2025百度快排技术分析:模拟点击与发包算法的背后原理
  • 七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持
  • 解锁原型模式:Java 中的高效对象创建之道
  • DeepSeek从入门到精通:揭秘 AI 提示语设计误区与 AI 幻觉(新手避坑指南)
  • Jenkins同一个项目不同分支指定不同JAVA环境
  • 从入门到精通:Postman 实用指南
  • win32汇编环境,对话框中使用月历控件示例二
  • gsoap实现webservice服务
  • 容联云联络中心AICC:深度整合DeepSeek,业务验证结果公开
  • 腿足机器人之七- 逆运动学
  • 快速点位排查问题的方法
  • 【前端】Vue组件库之Element: 一个现代化的 UI 组件库
  • 一文搞懂Android应用元素查看器(Appium+Appium-inspector)——定位微信布局元素
  • matlab质子磁力仪传感器线圈参数绘图
  • WPF快速创建DeepSeek本地自己的客户端-基础思路版本