一句话定义
代价敏感学习(Cost-sensitive Learning)是一类承认“不同错误代价不同”的建模方法:它把每类错误对应的代价写进目标函数或决策规则,让模型优化的不是错误个数,而是错误的期望总代价。
为什么准确率会骗人
准确率隐含了一个假设:混淆矩阵里每个格子的错误等价,各扣一分。现实中这几乎从不成立。以内容审核为例,误删一条正常帖子,用户抱怨两句;漏放一条违规内容,可能演变成大面积投诉甚至合规事故。在“准确率”眼里,这两件事一样重,在业务眼里,两者差着量级。
换个更日常的例子:把正常邮件判成垃圾邮件,你可能错过一份合同;把广告邮件放进收件箱,你只是多看两眼。这两种“错”被同一个指标平均掉了,于是模型学到的其实是“少犯错”,而不是“少犯贵的错”。
三种把代价写进去的做法
1. 改损失函数:给类别或样本加权(class weight),代价高的那一类错一次罚得更重,训练时模型自然更怕它。
2. 改数据分布:对代价高的类过采样、代价低的类欠采样,用数据比例去近似代价比例,简单粗暴但有效。
3. 改决策阈值:最便宜的一招。模型输出的概率不用重训,只是不再拿 0.5 当分界线,而是按两类代价的比例来定——误判代价越悬殊,阈值越偏离 0.5。这叫阈值移动(threshold moving),本质是贝叶斯决策的工程化落地。
和相邻概念的区别
不平衡学习(imbalanced learning)最容易被混为一谈。不平衡说的是数据分布,代价敏感说的是目标函数,两者经常同时出现但并不是一回事:数据不平衡而两类错误代价相同(比如识别手写数字),未必需要代价敏感;数据均衡而错误代价悬殊(比如安检),照样需要。重采样之所以常和代价敏感一起出现,只是因为它是最省事的近似手段。
| 普通分类 | 代价敏感学习 | |
|---|---|---|
| 优化目标 | 错误个数 / 错误率 | 期望总代价 |
| 隐含假设 | 各类错误等价 | 各类错误代价不同 |
| 决策阈值 | 默认 0.5 | 按代价比移动 |
| 报告指标 | 准确率、AUC | 期望代价、分档混淆矩阵 |
顺带一提,AUC 这类排序指标与阈值无关,也不含代价信息,高 AUC 并不等于低代价。
对实际工作的意义
从业者:建模前先问一句“两类错误分别值多少钱”,把代价矩阵(cost matrix)当成需求的一部分固定下来;交付时给分档的混淆矩阵或代价曲线,别只报一个准确率;把阈值做成业务方能调的旋钮,而不是写死在代码里。
普通职场人:看到“准确率 99%”先别鼓掌,追问一句“错的那 1% 是哪一类错”。
