第三章 数据不平衡常见场景:医疗诊断、欺诈检测、异常检测

数据不平衡不是理论题,是真刀真枪的工程障碍。我入行那几年,最怕听到的就是“正样本只有0.1%,你看着办”。为什么?因为现实中大部分数据天生就是偏的。今天咱们聊聊三个最典型的场景——医疗诊断、欺诈检测、异常检测。这几个地方,不平衡比动不动就是1:1000甚至更高。你想想看,模型学了99.9%的负样本,见到正样本反而懵了。

3.1 医疗诊断:少得可怜的真阳性

我个人在医疗影像项目上吃过亏。那是一个肺结节检测任务,CT扫描里正常切片占99.2%,结节只占0.8%。我一开始直接甩了个ResNet上去,准确率99.1%,心里美滋滋。一查召回率——0.2%。说白了,模型学会了把所有样本都判为正常,因为这样损失最小。但医生要的是:宁可错判,不能漏掉一个结节。

医疗诊断场景的难点不只是样本少,还有标注成本高。一个肿瘤边界需要三位主任医师勾画,一例就是几百块。数据不平衡在这里的代价是生命。

关键指标: 准确率不可信,必须看召回率(敏感性)和特异度。F1-score也常常不够,要引入加权F1或马修斯相关系数。

3.2 欺诈检测:动态对抗中的“针”与“海”

说到欺诈检测,我立刻想起某金融客户的风控流水线。真实交易中欺诈率通常低于0.1%,有些场景甚至低于0.01%。为什么这么低?因为欺诈者也在进化。你抓到一个模式,他们马上换另一种。这导致了两点:第一,欺诈样本极度稀疏;第二,分布随时间漂移,低频类可能今天还有效明天就变了。

我在那项目里试过代价敏感学习,给欺诈样本权重提到了100:1。效果有提升,但模型变得过于敏感,把正常交易误判为欺诈的比例也上去了。后来我们改为两阶段:先用无监督异常检测筛选可疑样本,再在候选集上跑分类模型。这才稳住。

小经验: 欺诈检测里,不要只盯着召回率。误判正常交易的成本也很高——用户投诉、资金冻结、体验下降。建议同时监控误报率(FPR)和精确率。

3.3 异常检测:数据里藏着的“幽灵”

异常检测和欺诈检测有交集,但范围更广。工业设备故障检测、网络入侵检测、系统日志分析,都属于这类。异常的定义很宽:可能是设备振动频率异常,可能是某个API调用次数突然飙升。而且,异常往往不是单一模式——厂商的“正常”和“异常”边界常常模糊。

我记得在一次工业IoT项目中,设备正常运行时采集了5000万条时序数据,异常事件只有217条。217/5000万,比例约0.00043%。传统分类模型根本学不动。我们最后用孤立森林做初筛,再用时间序列特征做二次判断。嗯,这里要注意:孤立森林的树深不能太浅,否则会把部分正常点也标成异常。

场景 典型不平衡比 正样本稀缺原因 业务成本不对称 常见策略
医疗诊断 1:100 ~ 1:1000 发病概率低,标注成本高 漏检→生命危险 重采样、代价敏感、GAN生成
欺诈检测 1:1000 ~ 1:10000 欺诈者刻意隐藏、分布漂移 漏检→直接经济损失,误判→用户流失 滑动窗口采样、集成学习、异常检测+分类
异常检测 1:10000 ~ 1:100000 事件发生概率极低,正常模式多样 漏检→设备损毁,误报→运维成本 单类学习、孤立森林、自编码器重构误差

3.4 这些场景的共性“坑”

你可能会想,不同场景策略不同,但底层坑是相通的。我梳理了三条,都是真金白银买来的教训。

  • 坑一:采样策略一刀切——医疗诊断里随机欠采样会丢失大量正常结构信息;但欺诈检测里随机过采样又可能引入噪声。我个人习惯先分析数据分布再做选择。
  • 坑二:评估指标选错——光看准确率是自杀式评估。在欺诈检测项目上,我曾经用ROC-AUC来调参,结果召回率提高了但误报率也飙升。后来改用PR-AUC才正常。为什么?因为PR曲线对比例更敏感。
  • 坑三:忽略业务成本矩阵——我曾经天真地以为所有误判的成本都一样。直到客户告诉我:一个漏查的欺诈案损失5万元,一个误判的正常交易赔偿金是200元。成本差了250倍。后来我直接把业务成本嵌入损失函数,效果立竿见影。
重要警告: 不要单纯依赖SMOTE过采样。医疗影像中SMOTE生成的肿块图像形态完全不真实,骗了模型也骗不了病理医生。建议结合领域知识做数据增强。

3.5 一张图看懂三大场景

下面这张结构图概括了我们讲到的三个核心场景。我把它画成了从业务输入到策略选型的完整链路。

数据不平衡三大场景知识框架 数据不平衡常见场景与核心策略 医疗诊断 肺结节、肿瘤检测 欺诈检测 金融交易、账号盗用 异常检测 设备故障、入侵检测 核心挑战 极度不平衡 | 标注成本高 | 分布漂移 | 代价不对称 数据层面 重采样 | 合成样本 (SMOTE, GAN) 边界样本增强 | 代价敏感 算法层面 集成学习 (XGBoost, LightGBM) 单类分类器 | 损失函数加权 核心原则 没有万能银弹,场景决定策略。从业务成本出发,闭环迭代

3.6 写在最后(这一节的小结)

医疗诊断、欺诈检测、异常检测——这三个场景,我几乎在每段工作经历里都碰到过至少一个。它们的共性是不平衡比高、代价非对称、标注困难。但处理时又不能一个套路用到黑。我个人习惯是:先画业务成本矩阵,再定评估指标,最后选策略。顺序不要反。你想想看,如果连漏一个病例赔多少钱都不知道,你怎么调权重?

我曾经在一个异常检测项目里,因为误报率高了0.3%,被运维团队追着骂了三天。从那以后我养成了一个习惯——每个不平衡分类任务都做一次“代价评估表”,和业务方对齐再开干。嗯,这个习惯一直保留到今天。

避坑提醒: 打开任何不平衡数据集后,第一件事别急着建模。先看正样本的分布——是不是存在多个子类?每个子类的可识别性如何?如果正样本内部也很复杂,别用全局重采样,考虑对每个子类独立处理。