算法工程师日常的主要工作就是各种调优模型,从特征、模型结构、超参数、建模方向等。评估、分析模型的方法论,往往决定着模型优化的效率和技术选择方向。我尝试总结在模型分析的过程中常用的方法和遇到过的问题以及改进思路,希望在不断更新和反思中形成一套自己的思考体系。

ctr模型效果分析

  • 1. 模型分析的目标
    • 1.1 离线效果
      • 1.1.1 统计效果
        • 均值(、方差)
        • AUC
      • 1.1.2 特征效果
    • 1.2 在线效果
      • 1.1.1 统计效果
      • 1.1.2 特征效果

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为一个广告计划,全局预估偏差:
    gap=∑pvi∣pctri−tctritctri∣∑pvigap={\sum pv_i|{pctr_i-tctr_i\over tctr_i}|\over \sum pv_i}gap=∑pvi​∑pvi​∣tctri​pctri​−tctri​​∣​
  • 头部/长尾/中部广告预估的更准?
    头部计划往往是影响收入的重点;中部广告是影响广告系统生态的关键;长尾计划影响冷启动效果和新广告主入场的门槛。
  • 预估方差与真实值方差是否接近?
    这个指标其实在最初的时候是没有被考虑作为模型评估标准的,因为真实ctr的波动收到当时竞价环境和广告本身的影响较大,而且模型对于真实情况的拟合并不是以稳定为目的的,而且越快速的捕捉真实值的趋势越好(这个地方不是一定的,之后会详细讨论)。但是在实际情况中,如果较短的时间内计划的投放情况,尤其是曝光量的变化如果过大,广告主的体验会非常差,也容易受到一些敏感策略的影响。因此,后续对模型的评估中也一定程度上参考了模型预估值和真实值的方差。

AUC

AUC是一个比较成熟的指标了,是日常工作生活中必备良品。这里仅将关键概念和思想做一下回顾。

  • 混淆矩阵

    混淆矩阵又称为误差矩阵,用于比较分类结果和实际测得值,用n行n列的矩阵形式来表示。混淆矩阵每一列代表一个预测类别,列总数表示预测为该类别的样本个数;每一行代表一个真实类别,行总数表示真实类别为该类别的样本个数。在二分类模型中,行总数表示正样本量和负样本数,列总数表示预测为正样本的总数和预测为负样本的总数。
  • 真假:是一种判断。正负:预测值。
    真正例TP(True Positive)
    假负例FN(False Negative)
    假正例FP(False Positive)
    真负例TN(True Negative)
  • 准确率:最简单的一个概念。就是预估结果是对的比例,即真(正负)数/总数。
    Accuracy=TP+TNTP+TN+FP+FNAccuracy={TP+TN \over TP+TN+FP+FN}Accuracy=TP+TN+FP+FNTP+TN​
  • 精准率:仅针对(在大部分实际情况中有价值的)正样本分析效果。预测为正样本的,真的是正样本的比例,即真正数/预测正数。
    Precision=TPTP+FPPrecision={TP\over TP+FP}Precision=TP+FPTP​
  • 召回率:也称为查全率,同样是仅针对正样本分析效果,可以理解为在所有正样本中,被模型准确找出来的比例,即真正数/总正样本数。
    Recall=TPTP+FNRecall={TP\over TP+FN}Recall=TP+FNTP​
  • F1-measure:准确率和召回率的调和平均数
    F1=12(1precision+1recall)F1 = {1\over 2}( {1\over precision} + {1\over recall})F1=21​(precision1​+recall1​)
  • ROC曲线:
    横坐标为FPR:FP/N,即label=0,pred=1,N=count(label=0),预测为真的结果中,预测错误错误的数量占负样本的比例
    纵坐标为TPR:TP/P,即label=1,pred=1,P=count(label=1),预测为真的结果中,预测正确正确的数量占正样本的比例
    *理解:N为label=0的总数,P为label=1的总数,N=TN+FP,P=TP+FN;
  • 计算ROC坐标的四个重要点:
    (0,0):FPR=0,TPR=0,即FP=TP=0,是将所有样本都判断为假
    (0,1):FPR=0,TPR=1,即FP=0,label=1:TP=P,是将所有样本都分对了,“完美分类器”
    (1,0):FPR=1,TPR=0,即TP=0,label=0:FP=N,是将所有样本都分错了,“最糟糕的分类器”
    (1,1):FPR=1,TPR=1,即label=0:FP=N,label=1:TP=P,将左右样本都判断为真

    完美 全真
    全假 垃圾
  • AUC的物理意义:Wilcoxon秩和(Wilcoxon-Mann-Witney Test),测试任意给一个正样本和负样本,正样本的score有多大几率大于负样本的score。
    • 具体步骤:
    1. 直接方法:计算所有MN, M=count(label=1), N=count(label=0) 个正负样本组中,有多少正样本的score大于负样本的score,当sore相同时按0.5计算,最后除以MN,复杂度为O(n^2),n为样本数。
    2. 另一种替代方法:对score由小到大排序,令Max(score)对应的rank=n,然后将所有的正样本的rank相加,再减去(M-1)种两个正样本组合的情况,得到的就是所有样本中正样本的score大于负样本的score的总数,最后除以M*N
      一个简单的例子:
# coding: utf-8
import syslis = {}
x = 0 #初始化负例总数
y = 0 #初始化正例总数
total = 0 #初始化总样本数
auc = 0.
prev_x,prev_y = 0, 0
pctr = 0.
loss = 0.for line in sys.stdin:try:# 数据格式为:pctr positive_label  negtive_labelline = line.strip().split('\t')if len(line) != 3:continuep = round(float(line[0]),5) # 对预估值保留5位有效数字,相当于做了分桶离散pos = int(line[1])neg = int(line[2])if p not in lis:lis[p] = [pos, neg]else:lis[p][0] += poslis[p][1] += negexcept Exception:continue# 对预估值由大到小排序
lis_order=sorted(lis.items(),key=lambda x:x[0],reverse=True)for i in lis_order:x += lis_order[i][1]y += lis_order[i][2]total += x+yif x != prev_x:auc += (x - prev_x) * (prev_y + y) / 2.#auc += (x - prev_x) * yprev_x = xprev_y = yprint('total {}'.format(total))
print('neg:{};pos:{}'.format(x,y))
if x==0 or y==0:print('Auc:0.')
else:print('Auc:{:.6f}'.format(auc*1.0/y/x))

1.1.2 特征效果

2、特征方面(特征更有效):
1、新增特征权重高?
2、某些权重高的特征,拥有这些特征的广告ctr更高?
3、交叉特征权重高?
4、交叉特征有实际指导意义?

1.2 在线效果

很多时候,离线评估有效果(auc提升明显)的模型,上线实验不一定有效。造成这种现象的原因可能有:

  • 训练数据有偏。训练数据是线上竞价成功的数据,因此模型学习到的其实是一个条件概率P(click=1∣win)P(click=1|win)P(click=1∣win),线上serving的时候,模型面对的是请求数据,需要预估其实是联合概率P(click=1,win)P(click=1,win)P(click=1,win)。显然,竞价胜出对点击行为是有影响的,因此中间缺失了P(win)P(win)P(win)。
  • 离线auc评估的是请求与请求之间“序”关系,在线效果评估的其实是计划与计划之间“距”关系。虽然DSP可以通过优化离线模型的绝对值偏差来模拟线上“距”的度量,但仍不能完全解决线上和线下主体调换带来的不一致。
  • 长尾计划的影响。由于存在“幸存者偏差”,离线数据中的长尾计划在离线的效果指标中影响有限,但在线上可能由于预估偏差而导致曝光量产生较大波动(偏高,曝光增加;偏低,曝光减少),进而影响在线的整体效果指标。

1.1.1 统计效果

3、流量变动比较大的原因:
1、预估ctr变动较大(平均,adid维度)
2、bid?
3、跟其他插件比较?

1.1.2 特征效果

分析ctr模型效果的一些思路总结相关推荐

  1. 阿里云PAI-DeepRec CTR 模型性能优化天池大赛——获奖队伍技术分享

    阿里云联合英特尔举办的"创新大师杯"全球AI极客挑战赛--PAI-DeepRec CTR模型性能优化挑战赛已结束 ,此次大赛旨在DeepRec中沉淀CTR模型新的优化思路和优化方向 ...

  2. SPSS Modeler回归模型结果的详细解读分析(判断模型效果、是否需要调整)

    包括所有可以出现的表.意义和模型好坏的判断标准. 回归模型的参数设置 1,在回归模型前设置类型,角色分配:1个目标,多个输入,无关的数据角色选择"无": 2,在[字段]中选择使用预 ...

  3. 阿里妈妈搜索广告CTR模型的“瘦身”之路

    前言 随着号称"地表最强"的千亿参数规模GPT-3模型在 NLP 领域横扫各大数据榜单,大力出奇迹的暴力美学似乎成为了大数据场景建模的不二法门.搜索.推荐和广告场景的 CTR 模型 ...

  4. 推荐系统之美团在CTR模型优化的实践

    猜你喜欢 0.某视频APP推荐策略和推荐算法详解 1.如何搭建一套个性化推荐系统? 2.内容推荐策略产品经理的方法与实践 3.京东推荐算法精排技术实践 4.微博推荐算法实践与机器学习平台演进 5.腾讯 ...

  5. 机器学习模型应用以及模型优化的一些思路

    机器学习模型应用以及模型优化的一些思路 1 概述 本文会介绍如何应用机器学习模型来构建一个智能化应用的通用的过程以及过程中每个环节一些实践性的思路. 2 搭建基于机器学习模型的智能化应用的通用流程 下 ...

  6. 谷歌、阿里们的杀手锏:三大领域,十大深度学习CTR模型演化图谱

    作者 | 王喆 来源 | 转载自知乎专栏王喆的机器学习笔记 今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望能帮大家梳理推荐系统.计算广告领域在深度学习方面的前 ...

  7. 谷歌、阿里们的杀手锏:3大领域,10大深度学习CTR模型演化图谱(附论文)

    来源:知乎 作者:王喆 本文约4000字,建议阅读8分钟. 本文为你介绍近3年来的所有主流深度学习CTR模型. 今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望 ...

  8. 深度学习CTR模型最全演化图谱 [王喆观点]

    毕业于清华大学计算机系的王喆学长回顾了近3年来的所有主流深度学习CTR (click through rate) 模型,并梳理推荐系统.计算广告领域在深度学习方面的前沿进展.内容来源:https:// ...

  9. 2篇CIKM详解阿里妈妈搜索广告CTR模型如何低碳瘦身

    作为<阿里妈妈搜索广告CTR模型的"瘦身"之路>的姊妹篇,本文将结合团队发表的 CIKM 2021 两篇论文,详解我们在模型瘦身之路上的延续性思考与实践.姊妹篇已经总结 ...

最新文章

  1. kafka集群broker频繁挂掉问题解决方案
  2. 爱因斯坦牛顿达尔文投胎中国后
  3. Redis-18Redis主从同步
  4. 【深度学习】神经网络的Python代码实现
  5. 用代码,打造创意新世界!【Innovation 2021】网易应用创新开发者大赛正式开赛!
  6. python字符串补空格输出_python格式化打印字符串
  7. Redis数据库(一)——Redis简介、部署及常用命令
  8. mysql 输出参数 sql语句_MySQL: 详细的sql语句
  9. 双十一京东PLUS会员 VS 阿里88VIP,谁的羊毛多?
  10. ftp 425 Can't open data connection. 的解决方案
  11. C++基础 匿名对象
  12. html获取页面高度,js获取各种高度
  13. Magento查询产品时查询库存状态
  14. 2020最新广告法_2020最新广告法全文解读
  15. 6.5 Introduce Explaining Variable 引入解释性变量
  16. 自恢复保险丝选型参数说明
  17. 【VBA研究】用Ping命令测试IP地址是否通达
  18. openGL 纹理使用
  19. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part4):结合问题分类的问题解析与检索语句生成
  20. 【华人学者风采】梁应敞 电子科技大学

热门文章

  1. IQOO换鸿蒙系统,1998 iQOO 845版明天发?| 华为自研系统鸿蒙在全球注册商标
  2. Java调用Python语言及第三方Python库
  3. PJzhang:百度网盘是如何泄露公司机密的?
  4. HTML5~问卷调查页面的设计与实现
  5. Py打包应用程序(zipapp打包.pyz文件、pyinstaller打包exe文件)
  6. AES、DES、RSA、base64、MD5、SHA加密
  7. 解决hbase RegionServer频繁宕机的一些办法
  8. 安卓手机通讯录恢复教程
  9. 游戏辅助制作核心--植物大战僵尸逆向之召唤僵尸call(九)
  10. 乔布斯震撼临终遗言首度公开!