zoukankan      html  css  js  c++  java
  • 第 7 章 系统效果评测与监控

    全文目录

    原文

    If you can't measure it, you can't improve it. -- 现代管理学大师彼得·德鲁克

    评测与监控的概念和意义

    推荐系统, 算法驱动型应用系统, 不能通过功能测试来判断, 需要根据各种维度效果来判断;

    1. 为了不断全面提升推荐系统的效果;
    2. 推荐系统中使用的算法特点: 普遍基于大数据; 普遍是概率算法; 能够用概率的, 不确定的思维来看待推荐系统 => "推荐系统价值观";
    3. 用来评估业务需求的合理性;
    4. 最重要的一点: 评测体系本质上代表的是开发者看待推荐系统的方法;

    系统监控通过对系统中多维度细节的监控, 通过对大系统中小系统的监控, 做到对整个系统的监控;

    做好正向的监控链条, 做到链条上的关键环节出了问题都可以主动发现;

    推荐系统的评测指标系统

    评测: 用量化的指标衡量系统;

    评测体系: 用多维度的量化指标来衡量系统;

    无法量化的评测指标 => "推荐系统的调性"

    常用指标

    推荐系统的业务目标: 能够最大化的引导平台上的用户消费平台上的内容;

    在评测体系中一定存在一个最直接, 终极的指标用来衡量推荐系统最终价值;

    局限性:

    • 该指标反映的是结果, 无法指导过程;
    • 该指标反映的是当下, 不是未来;

    点击率

    点击率反映的是推荐产品漏斗第一个环节的匹配效率, 是对个性化匹配程度最直接的衡量;

    计算公式分母一定是真正曝光的物品数量, 不能用推荐服务返回的物品数量;

    覆盖率

    1. 对用户的覆盖

      用户覆盖率: 有多少用户能够计算出有效的推荐结果; (cov_{user} = N_{rec}/N_{total})

      该指标体现的是推荐系统可以服务, 影响多少用户, 对推荐系统影响力的最直接体现;

      几个维度的变化:

      • 用户和流量, UV和PV;
      • 如何定义有效推荐, (N_{rec}), 1) 推荐结果不能来自托底策略, 2) 推荐结果必须至少有 k 个;
      • 如何定义全部用户, (N_{total}), 根据业务圈定认为有必要服务到或应该服务到的用户;

      用户覆盖率是单一值衡量指标, 可以使用离散变量的分布来体现覆盖情况细节;(单值指标扩展为概率分布)

    2. 对物品的覆盖

      物品覆盖率: 系统中有多少物品出现在推荐结果中; 提醒开发者关注未被推荐的物品, 解决长尾物品的流量问题;

      动销率: 门店中所有商品种类中有销量的商品种类总数, 除以门店中所有商品种类总数, 得到的比例值;

      (cov_{item} = M_{rec}/M_{total})

      不活跃物品: 没有得到足够的曝光; 一个物品出现在多少次推荐中或覆盖多少个用户才算得到有效覆盖;

    多样性

    与以点击率为代表的准确性指标相背离, 但是关系到系统的长期健康发展, 是平衡短期利益和长期利益的一个重要方面;

    • 多样性主题, 常用的是类别, 又分一级类, 二级类, 三级类等;

    • 多样性计算方法,

      1. 基于信息熵, 将每个用户的推荐列表收集起来, 计算出属于不同类别的物品所占的比例, 记为 (p_i), 所有类别构成了一个离散随机变量, 信息熵的计算方法为: (sum_i p(i)logp(i)), 信息熵越大说明多样性越高;

      2. 计数, 数在推荐列表中所有物品的两两组合中, 有多少组合中两个物品的类别不同;

        [Diversity = frac{2sum_{i,j}I(cate(i) == cate(j))}{|L| * (|L|-1)} ]

        L 代表推荐列表, I 表示指示函数, 其参数为真时取1, 否则取0; 计算结果多样性取值在 [0,1];

    实际应用场景中, 对多样性设置一个下限, 周期性对多样性指标进行评测计算, 保证不低于这个水平即可;

    新颖性

    新颖代表着多样, 反之不然;

    多样性是推荐系统长期发展的底线, 新颖是长期发展的突破口;

    选择标签作为新颖性的主体:

    [Novelty = frac{N}{|L|} ]

    L 代表推荐列表, N 为列表中用户此前没有见过的标签对应的物品数量;

    排序评测指标

    对结果排序好坏评测的指标;

    • NDCG(Normalized Discounted Comulative Gain)

      [DCG = sum_{j=1}^J frac{rel_j}{log_2(j+1)} \ NDCG = frac{DCG}{IDCG} ]

      (rel_j): 第 j 位上物品的相关性;

      (log_2(j+1)): discount 函数, 用来衡量位置的重要性;

      IDCG: 理想(ideal)的DCG, 将列表按照相关性的大小从高到低排列, 然后计算理想列表的DCG;

      计算出每个列表的 NDCG 后, 可以综合汇总每个列表的结果得出整个系统的 NDCG; 汇总方法包括计算所有结果的平均值, 或者按用户划分(按照喜好品类, 新老用户, 活跃程度等不同维度), 分片评测;

    • MAP(Mean Average Precision)

      mean: 在所有用户或请求上做平均(AP);

      AP: 在每一个被点击的位置上, 计算 precision, 即计算该位置之前(包括该位置)所有被点击的物品数量除以该位置之前所有的物品数量;

      eg: 100111, AP=(1/1+2/4+3/5+4/6)/4≈0.69;

      AP的直观解释: 若AP=x, 表示平均每 1/x 个位置上会出现一个相关物品;

      实际应用场景, 截取列表前几位来计算 MAP, 即 MAP@k

    指标的应用方法

    • 将单值指标扩展为概率分布, 用直方图等工具进行深入分析;
    • 将人群或流量分片, 对不同的分片进行指标 计算;
    • 将指标分别应用到用户级别和流量级别, 分别衡量用户和流量两个层面的表现;

    离线效果评测方法

    最直接方法:

    • 用新算法为用户计算推荐结果列表 A;
    • 从日志中获取用户真实点击的物品列表 B;
    • 计算列表 A 和列表 B 的重合部分, 即为集合 C, 将 C 看作新算法命中的结果;
    • 用 |C|/|A| 作为本次推荐的准确率;

    这是一套有偏差的评测方法, 因为列表 A 并没有真实展示给用户, 里面有好东西用户并没有看到, 对新算法是吃亏的;

    部分标签问题(partial-label problem)

    核心是将列表 B 换成随机生成的无偏结果数据作为基准;

    Yahoo! 无偏的离线评测算法:

    算法实体包括:

    • 待实验算法 A;
    • 长度为 L 的事件序列 S, 序列中每个元素都是三元组 ((x, a, r_a))
      • x: 事件发生时的上下文信息;
      • a: 事件中被展示的物品;
      • (r_a): 该次事件的收益, 即用户是否点击或者以其他形式消费该物品;
    • 初始浏览历史序列 (h_0), 初始值为空;
    • 当前总收益 (hat G_A), 初始值为 0;
    • 当前总实验样本数 T, 初始值为 0;

    S 中的物品时通过对该部分用户随机展示物品得到的, 这是无偏的关键

    算法流程:

    • 逐个处理 S 中的每个事件 ((x, a, r_a)):
      • if (A(h_{t-1}, x) = a). 新算法的推荐结果与线上的随机展示结果一致
        • [x] 将当前结果加入浏览历史中: (h_t ← CONCATENATE(h_{t-1}, (x, a, r_a)))
        • [x] 更新当前总收益: (hat G_A ← hat G_A + r_a)
        • [x] 更新当前实验总样本数: (T ← T + 1)
      • 否则, (A(h_{t-1}, x) ≠ a)
        • [x] 保持浏览历史不变: (h_t ← h_{t-1})
    • 最终输出平均收益: (hat G_A/T)

    replay 方法, 通过使用小部分线上流量进行随机展示, 收集到公平无偏的评测集合来做无偏的评测;

    离线评测优点:

    • 不影响线上体验
    • 迭代速度快

    缺点:

    • 离线结果不能百分百代表线上结果;
    • 可评测的指标受限, 如停留时长, 用户留存等是无法离线评测的;

    在线效果评测方法

    AB 实验(ABTest)

    1. 基础理论

      在流量分配层面, 遵循同分布原则, 1) 本身随机生成的用户 ID, 2) 根据 ID 对流量进行等概率分配的函数(取模函数);

      在对比结果解释方面, 考虑支撑数据指标的数据量, 利用概率统计中的假设检验思想;

    2. 逻辑工程架构

      • 实验策略的效果指标收集
      • 实验策略的灰度发布

      image-20210310083721331

      复杂度体现在 策略分流 部分和 数据分析 部分;

    3. 最小可用的 AB 实验系统

      策略分流复杂度:

      • 多种策略同时上线实验;(eg: 多个排序算法)
      • 多个层面的策略同时上线实验;(eg: 算法层+UI层)

      最小可用版本 = 支持两种策略同时上线 + 只处理一个层级;

      MVP 版本

      分流主体, eg: 用户为主体(每个用户的所有请求), 或请求为主体(每个用户的每个请求);

      1. 分配到固定策略中; 2) 覆盖所有用户的 ID 集合;

      留意使用注册用户 ID 时, 会流失未注册用户全部无法参与实验;

      用户 ID 来源于不同系统, 通过 MD5 操作统一随机性, 后面基于 MD5 操作之后的结果进行策略分流;

      隐含假设: 所有待实验策略均对所有用户无差别进行分流; 如果是有差别分流, 需要在标识请求处进行用户区分;

      请求日志由推荐服务记录, 记录策略版本信息;

      曝光日志和点击日志由展示端记录;

      三份日志由一个共同的请求 ID 串联起来;

      切记注意: 静默失败(silent failure)

    4. 多层重叠的在线实验系统

      谷歌在线实验系统为例, 引入三个概念:

      • 域(domain), 对流量划分的最大单位, 决定每组流量去向时先确定其属于哪个域;
      • 层(layer), 全流程系统配置的一部分, eg: UI 层, 召回层, 排序层等, 每一层上的实验目的都是测试该层的配置项的不同取值对应的效果;
      • 实验(experiment), 实验组和对照组的实验, 每个实验对应上面层中的一组配置的一个取值;

      发布层(launch layer), 位于流程最前端, 每个发布层拥有全部流量, 发布层中的配置通常是指完成了 AB 实验并被认为优于对照组的配置;

      一个请求在某组配置上的优先级:

      • 非发布层实验中的配置
      • 发布层中的配置
      • 系统默认配置

      层和域可相互嵌套;

      公平的多层实验:

      • 整体上, 流量在每一层实验上的分配均匀, 且相互独立;
      • 个体上, 流量在每一层分配到每个实验是均匀的;

      image-20210311090001109

      最终, 实验列表 (R_e) 每个元素对应着每一层要做的实验;

      这套逻辑封装成共享库, 保证所有参与 AB 实验的业务逻辑一致;

    AB 实验缺点:

    • 某组实验事后证明效果更差, 试验期间影响线上用户体验和整体效果;
    • 某组实验事后证明效果更好, 没有分配到实验组的流量吃亏;
    • 置信度较高的结果需要较长时间或较大流量, 在流量不足的情况对快速迭代有影响;
    • 流量不大情况下, 优先级靠后的实验容易遗忘;
    • 用户ID分流, 用户群中出现少量流量明显高于正常用户, 会对结果造成影响;
    • 可同时进行实验数量受限, 尤其流量不大的中小型平台;

    交叉实验(interleaving)

    辅助 AB 实验:

    • 对排序结果敏感, 在更小的数据量上识别出不同算法之间差异;
    • 对后面进行的 AB 实验有指导性和代表性;

    AB 实验, 每个用户会固定划分到一个组, 只接受某一种固定策略;

    交叉实验, 每个用户都同时呈现多种策略结果;

    选秀式方法(team draft), 随机选择策略, 每个策略里选取剩下最好的, 依次交替策略, 直到列表满足条件或策略池空;

    交叉实验可以作为 AB 实验的前置筛选方法, 加快实验和迭代速度;

    交叉实验缺点:

    • 工程实现复杂, 交叉实验对结果进行混排, 导致后续的推荐逻辑实现也要改造;
    • 无法兼容复杂的业务逻辑需求;
    • 能力仅限于对排序算法进行对比衡量, 其他深层次指标无法衡量;

    系统监控

    • 环节过多, 监控量过大
    • 非重点环节波动不会影响整体效果
    整体 分策略 分群体 分位置
    结果数 整体返回结果数 重点策略返回结果数 重点群体返回结果数 NA
    点击率 整体点击率 重点策略点击数 重点群体点击率 头部位置点击率
    覆盖率 整体覆盖率 重点策略覆盖率 重点群体覆盖率 头部位置覆盖率
    排序位置 NA 重点策略平均排序位置 NA NA

    监控内容包括数据量细分;

    对机器学习系统重要环节的监控: 样本, 特征和参数;



    欢迎您扫一扫上面的微信公众号, 订阅我的博客!

    文章作者:Memento
    博客地址:http://www.cnblogs.com/Memento/
    版权声明:Memento所有文章遵循创作共用版权协议,要求署名、非商业、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

  • 相关阅读:
    yii框架源码分析之Yii::createWebApplication()>run() 执行过程分析
    PHP的范围解析操作符(::)的涵义
    数据结构&算法(PHP描述) 三元组 Triplet
    解决远程连接mysql很慢的问题(mysql_connect 打开连接慢)
    第4章 数据处理数组的处理郑阿奇
    PHP相似函数整理2 array_flip() 、array_reverse()
    OS + Linux Disk disk lvm / disk partition / disk mount / disk io
    my read_Country
    OS + Linux File nfs / samba / rsync / inotify / smb / webdav
    Unix + OS IBM Aix Disk disk lvm / disk partition / disk mount / disk mon / File
  • 原文地址:https://www.cnblogs.com/memento/p/14529536.html
Copyright © 2011-2022 走看看