热门标签 | HotTags
当前位置:  开发笔记 > 大数据 > 正文

算法的离线评估

背景在平时做项目的过程中,算法迭代是至关重要的,如果能准确找到算法的优化点和优化空间,那么可以使得最终的效果有很大的提升。在实际的项目中,一个算法模块的上线可能会涉及算法,

背景

  • 在平时做项目的过程中,算法迭代是至关重要的,如果能准确找到算法的优化点和优化空间,那么可以使得最终的效果有很大的提升。
  • 在实际的项目中,一个算法模块的上线可能会涉及算法,引擎,前段,测试等等一堆模块的修改,如果再加上链路的过长,跨部门跨团队的协同开发和联调不可避免,且非常耗时间,一旦上线发现效果不符合预期,会浪费大量的人力时间去排查和解决问题。
    • 这种情况需要我们算法端的同学保证算法的有效性,能够保证如果效果不符合预期,排查范围可以锁定在工程链路上,而不是算法逻辑上;
    • 尽量减少有个新算法新想法先扔到线上看看效果,视效果再继续迭代的想法,离线做好算法的评估,对最终算法效果又更强的把控,离线评估确保有正向价值的算法再退到线上;
    • 算法模块尽量抽象出现,使得算法迭代的过程减小其他模型涉及的改动,最好是其他模块零改动。

如果做好有效的离线评估呢?

离线评估重要的是选择一个靠谱的离线评估指标,选对并且用对了评估指标,可以让算法的迭代有明确的优化方向,离线的提升能够预期带来实际线上效果的提升。

GAUC

AUC指标相信对机器学习算法熟悉的人都比较了解,是非常常用的模型评价指标,在很多二分类的问题中是最重要的算法模型评估依据。以广告场景的ctr预估问题为例,ctr预估本质上是对一个流量是否会发生点击行为的一个预测,点击or不点击就是模型想给出的答案,也是一个二分类问题,一般地,算法会给一个流量打上一份score分,如果score分超过某个threshold,则判断为点击,否则不会点击,AUC指标本质上不会关心score分数的绝对值大小,只会关心score的相对大小和排序情况。AUC的计算需要记得如下公式:

AUC=Mi=1rankiM(M+1)2M×N
其中M表示正样本个数,N表示负样本个数, ranki 表示第i个正样本的排名,按score值从低到高排。

那么GAUC(Group AUC)就是考虑评估数据集中样本差异的因素,算出的综合AUC值,比整体的AUC值更能反映模型算法在某些问题上的效果。还是以广告场景的ctr预估为例,现如今的互联网广告都是强调千人千面的,不同的用户兴趣不同,看到的广告也千差万别,评估算法是,以用户为group,计算这个用户所样本的auc值,然后根据所有用户的pv量做加权平均,就得到了用户粒度的GAUC值。这样GAUC的值比起整体的AUC更能够反映模型在个性化流量上的能力。

GAUC应用的注意点:

  • Group粒度的选择
    • group粒度的选择,会直接导致GAUC指标的意义,如果选择不当,对算法迭代其实是没有实际意义的。比如考虑这样的场景:在一个电商网站上,一个用户访问到一个店铺,店铺需要对这个用户个性化地展示店内的部分商品,如果我们有一个随机展示策略,已经积累了足够置信的数据,包括用户访问店铺对每个展示的商品的pv,click日志。那么离线评估GAUC如果选择group来评估一个算法好坏呢?这个场景如果说值取用户作为group的划分依据是不合理的,因为用户可能会在多个店铺都有pv,click日志,算法的目的是用户进到某个店铺之后,如果个性化的展示店铺里用户感兴趣的宝贝,吸引点击促成后续的成交转化。以用户为粒度,流量中就包含了其他店铺的宝贝,店铺之间的点击率本身就存在差异,这个差异会反应在GAUC的结果中,但是这个是算法不应该关心的问题。所以应该选择的是用户、店铺这个粒度作为流量划分的group。
  • 不同算法策略在统一集合上评估才有意义
    • 这一点也非常重要,而且有时会忽略这个问题,比如我们线上实验了多个算法策略,得到了每个算法策略的效果对比,我们想离线计算一下GAUC指标是否和线上策略的效果是一致的,这时一个容易犯的错误就是对各个算法策略的流量分别计算GAUC值,然后比较。正确的做法是选择其中某个算法策略的流量,离线用另外几个算法对这个流量进行打分,在同样的流量下得到的GAUC值才是可比的。

扩展阅读

AUC计算方法
对比ROC曲线和PR曲线的博客
对比ROC曲线和PR曲线的论文
PR曲线分析算法优劣
AUC上升一定带来CTR上升?


推荐阅读
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  •   上一篇博客中我们说到线性回归和逻辑回归之间隐隐约约好像有什么关系,到底是什么关系呢?我们就来探讨一下吧。(这一篇数学推导占了大多数,可能看起来会略有枯燥,但这本身就是一个把之前算法 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 探索如何使用公共数据集为您的编程项目提供动力。无论您是编程新手还是有经验的开发者,本文将为您提供实用建议和资源,帮助您启动并运行一个创新的数据驱动型项目。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
author-avatar
娶位红太郎_442
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有