ctr预估是工业界做推荐、广告等的基本问题,下面以熟悉的推荐场景为例,目标是提高abtest的线上指标,时长、互动和留存,反应到ctr模型的评估指标,可以是auc,logloss,ngcd等,auc反映了模型区分正负例的能力,auc提高不一定对应到线上指标提示,可能只是对item的预估分更准,对一个user来说排序能力并没有提高,这里很有考究,可以看看其他博客。
通常判断一个模型性能,除了auc、rigloss还要看 calibration,训练数据集的正负里比例和预估分均值是否一致,接近1才认为模型没有问题,比如全体样本的点击率是5%,模型的预估分均值也应该是0.05。calibration对广告做竞价是有明确用处的,在推荐场景只需要排序用处可能不大。
问题:为什么lr模型的输出均值和真实点击率一致呢?好的模型,拆开各种维度看,比如新用户,操作系统,预估均值都和各维度真实点击率一致。
困惑的原因是,每个样本的label是0 或 1,甚至相同样本有不同的label。
解释:这是由 log loss的性质保证的。loss = sum { y log p + (1-y) log (1 -p),p是预估分,yin {0, 1}是label,设想如果有N个样本,其中M个是正样本,如果我们的模型很糟糕,特征只有1个bias,对每个样本预估值是相同的,那么对loss 求极小值就可以得到 p = M/N, 等于真实点击率!
另外一个问题,为什么分类不用square loss要用log loss?
看到个两个解释,一个是logloss 如果错误分类的梯度更大,比如label=1,pred接近0,那么梯度绝对值 1/pred 极大,而square loss梯度为 |pred - 1|,可能过小难以收敛;另外一个解释是,
另外再补充一个问题,工业届系统会用online learning,保证模型实时更新,可以及时捕获用户反馈。为什么online learning每个样本只训练就可以收敛,背后理论是有严格保证的吗?
思考这个问题后,在深度学习一书的优化那章看到了 机器学习优化与数学的最优化的差异,才豁然开朗。机器学习优化有几个近似,全样本空间预估准确率 <> 测试集准确率 <> 测试集合loss函数最小 <> 训练集loss最小,最优化是直接优化最终目标,无约束凸函数最优解这些的收敛性和收敛速度都是有明确结论的。
在机器学习用的sgd是简化了计算每次更新的梯度,mini-batch 视作分布的随机采样,计算得到的梯度也是真实梯度的无偏估计。
online-learning场景适用于训练集数据量很大,一遍也能优化好。