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

正负样本比例不平衡

之前的一个ctr预测任务,数据集正负样本比例达到惊人的1:64,导致acc很高但是auc低,因为模型倾向于将样本判负,负样本多,都预测为负值自然acc高。
belike:

[W1]Epoch1:loss=0.7100acc=0.4700auc=0.5534gauc=0.5104[W1]Epoch2:loss=0.6931acc=0.5149auc=0.6044gauc=0.5183[W1]Epoch3:loss=0.6818acc=0.6062auc=0.6424gauc=0.5336[W1]Epoch4:loss=0.6734acc=0.6955auc=0.6647gauc=0.5457[W1]Epoch5:loss=0.6659acc=0.7706auc=0.6781gauc=0.5525[W1]Epoch6:loss=0.6540acc=0.8560auc=0.6905gauc=0.5627[W1]Epoch7:loss=0.6375acc=0.9189auc=0.6984gauc=0.5677[W1]Epoch8:loss=0.6195acc=0.9509auc=0.7025gauc=0.5727

优化思路:
一、调整正负样本比例
也就是对负样本进行采样:按时间or用户随机采样;采样困难负样本;其他根据实际任务的采样策略等。
但是做这种任务时,总是“不舍得”为数不多的数据,总想着将所有数据都用上。
二、调整正负样本对梯度的贡献比例
分析:CTR任务的损失函数一般是BCE,换种不等价但是直观的理解方式就是ACC准确率。如果一个batch内有63个负样本1个正样本,只需要将样本全部预测为负,ACC就会很高。所以,样本不均衡造成的问题是梯度被负样本淹没,梯度将向着“将样本预测为负”的方向优化。
解决思路:既然是正样本对梯度的贡献太小,那么提高正样本的贡献权重。
1. balance ce loss,即加权BCE
标准 BCE(二元交叉熵)的公式:
LBCE(y,p)=−[y⋅log⁡(p)+(1−y)⋅log⁡(1−p)]\mathcal{L}_{\text{BCE}}(y, p) = - \big[ y \cdot \log(p) + (1 - y) \cdot \log(1 - p) \big]LBCE(y,p)=[ylog(p)+(1y)log(1p)]
对于一个批次(batch)的 ( N ) 个样本,平均损失为:
LBCE=−1N∑i=1N[yi⋅log⁡(pi)+(1−yi)⋅log⁡(1−pi)]\mathcal{L}_{\text{BCE}} = -\frac{1}{N} \sum_{i=1}^{N} \big[ y_i \cdot \log(p_i) + (1 - y_i) \cdot \log(1 - p_i) \big]LBCE=N1i=1N[yilog(pi)+(1yi)log(1pi)]
对于正负样本比例1:64的1 batch数据,将正样本的loss乘权重64,模型优化时每看到一个正样本,它的梯度贡献等价于看到 64个负样本——刚好抵消数据中的比例失衡。
即:LBCE(y,p)=−[α⋅log⁡(p)+(1−y)⋅log⁡(1−p)]\mathcal{L}_{\text{BCE}}(y, p) = - \big[\alpha \cdot \log(p) + (1 - y) \cdot \log(1 - p) \big]LBCE(y,p)=[αlog(p)+(1y)log(1p)],其中α=正样本/负样本\alpha = 正样本/负样本α=正样本/负样本
注意:此公式是一种简单情况下的简化,更通用的是log§乘α,log(1 - p) 乘1-α,
(1−α)/α = 正样本/负样本 ,m为正样本数,n为负样本数。

2. Focal loss,即动态调整困难样本的权重
通过修改标准的交叉熵损失函数,降低对能够很好分类样本的权重(down-weights the loss assigned to well-classified examples),解决类别不均衡问题.

# p_t: 正确类别的预测概率 p_t = p * y_true + (1 - p) * (1 - y_true) # [B, 1] # alpha_t: 类别权重 alpha_t = alpha * y_true + (1 - alpha) * (1 - y_true) # [B, 1] # Focal Loss ce = F.binary_cross_entropy_with_logits(logits, y_true, reduction='none') fl = alpha_t * (1 - p_t) ** gamma * ce
http://www.jsqmd.com/news/1092407/

相关文章:

  • SVGnest 矢量嵌套算法深度解析:开源CNC材料优化终极指南
  • FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示?
  • 还在愁毕业论文写不完?9款AI论文网站一键生成逻辑连贯初稿!
  • 从LC谐振到ADC采样:OPA4377运放电路在电磁信号处理中的核心作用
  • 革命性Beat Saber一站式管理方案:BSManager深度解析与实战指南
  • USB-I2C/GPIO适配器EVM硬件解析与实战调试指南
  • ChatGPT Plus用户流失率骤升23%的背后:不是价格问题,而是这1个被忽略的免费替代路径(企业级实测可用)
  • Python构建XSS检测系统:从原理到实践的动态验证与载荷变异
  • Moneta Markets亿汇:“通胀压力扰动科技资产”
  • VMPDump:如何快速掌握逆向工程中的动态脱壳与导入修复技术
  • 如何完整恢复老旧iOS设备:5步快速降级与越狱教程
  • 近期零基础学量化,先让 AI 帮你整理表达
  • 肿瘤标志物联合检测的科研进阶工具——多因子检测试剂盒
  • 如何快速解决Windows驱动签名验证问题:DSEFix完整使用指南
  • 打破进口垄断!云克隆推出肠道七因子高通量检测全新方案
  • TI TAS2559智能功放评估板硬件解析与上手指南
  • Java毕设项目:基于 Spring Boot 的电影评价与购票联动系统 影院票务数据统计与订单管理系统设计 (源码+文档,讲解、调试运行,定制等)
  • HarmonyOS技术精讲-应用间跳转:精确控制跳转目标(显式跳转)
  • 【Vid-Agent】长视频理解VideoTemp-o3框架
  • 训练 = 一个反复打分与改作业的循环
  • 从像素到光点:基于SSD1306 OLED的动态光源控制与传感应用
  • HarmonyOS技术精讲-应用间跳转:典型场景二——地图导航与位置服务
  • 当 leader 被隔离: etcd 网络分区深度分析
  • 从一个 “笨办法“ 说起
  • # Rocky Linux 9.5 搭建 Kafka + ELK 完整日志平台技术文档
  • 番外篇 F05:电机控制与PID调节实战《电机控制中的PID调节:位置式/增量式算法解析与使用场景全攻略》
  • 拼多多运营整体框架(2026 最新精细化玩法)
  • 【无标题】实训平台基础软件基于自研Docker容器编排管理引擎,运用云原生和容 器技术构建训练环境
  • 【实战解析】从噪声到特征:ECG信号预处理与智能筛选全流程拆解
  • 5大架构设计原则:深入剖析React Icons开源项目架构