算法工程师日常的主要工作就是各种调优模型,从特征、模型结构、超参数、建模方向等。评估、分析模型的方法论,往往决定着模型优化的效率和技术选择方向。我尝试总结在模型分析的过程中常用的方法和遇到过的问题以及改进思路,希望在不断更新和反思中形成一套自己的思考体系。
1. 模型分析的目标
评价一个模型的好坏,一方面是评估自己当前工作的效果,另一方面也为自己下一步工作提供思路和方向,而后者往往比前者更有价值。
首先,假设模型是好的,那么就需要说明自己好,并探索为什么好。在这个过程中如果数据不能证明这个假设,那么就可以继续探索是什么导致不好,如果要变好需要如何操作。
从数据的来源来说,效果一般可以分为离线效果和在线效果。离线效果,即在模型并没有生效,或者说在模型并没有实际影响到数据的时候,比较模型的结果和真实的结果。在线效果,与之相对的,就是在模型真正对数据产生影响的时候,比较在这种影响之下模型的结果和真实数据。
1.1 离线效果
离线效果相对于在线,由于数据是没有受到模型作用影响的,因此效果较为稳定,更容易复现,更容易评估,也有相对较为完善的研究和指标。
1.1.1 统计效果
这里说的统计效果,是指模型在训练集和测试集上预测值与真实值的差异。
均值(、方差)
均值衡量预估的准确度,方差衡量预估的稳定性。
- 整体预估ctr均值和真实均值是否接近?
从整体粒度上评估模型效果,如果这个部分的偏差就已经较大了,那么说明模型训练问题比较大,常见的问题有欠拟合、过拟合,步长、学习率不合适,batch_size过大或者过小等等,需要结合实际数据情况来定。 - 整体预估ctr均值和历史平滑ctr是否接近?
与历史平滑ctr比较,是为了消除ctr的随机波动性。广告系统中往往容易出现天级别的整体数据抖动,在这种情况下,逐天对比预估值与真实值很难得出确切的结论,拉长测试集时间窗口,又会与线上真实情况出现较大的diff,因此历史平滑ctr是一个相对较好的对照数据。 - 分区间比较预估ctr和真实ctr是否接近
类似P-P图的思想,对预估值进行分桶之后,计算分桶内的预估值均值作为x轴,真实值均值作为y轴。若散点集中在对角线上,那么说明模型拟合效果较好,否则可以针对性的分析模型在哪个区间没有学习到足够的信息量(大概率是较低和较高的分桶),再有针对性的从特征和模型角度设计改进。 - 计划粒度上,按照曝光加权的绝对值偏差是否减小?
对 ∀ i \forall i ∀i为一个广告计划,全局预估偏差:
g a p = ∑ p v i ∣ p c t r i − t c t r i t c t r i ∣ ∑ p v i gap={\sum pv_i|{pctr_i-tctr_i\over tctr_i}|\over \sum pv_i} gap=∑pvi∑pvi∣tctripctr