推荐系统之ABTest实验中心

news2024/12/24 1:03:39

5.3 ABTest实验中心

学习目标

  • 目标
  • 应用

个性化推荐系统、搜索引擎、广告系统,这些系统都需要在线上不断上线,不断优化,优化之后怎么确定是好是坏。这时就需要ABTest来确定,最近想的办法、优化的算法、优化的逻辑数据是正向的,是有意义的,是提升数据效果的。

5.3.1 ABTest

有几个重要的功能

  • 一个是ABTest实时分流服务,根据用户设备信息、用户信息进行ab分流。

  • 实时效果分析统计,将分流后程序点击、浏览等通过hive、hadoop程序统计后,在统计平台上进行展示。

 

5.3.2 流量切分

A/B测试的流量切分是在Rank Server端完成的。我们根据用户ID将流量切分为多个桶(Bucket),每个桶对应一种排序策略,桶内流量将使用相应的策略进行排序。使用ID进行流量切分,是为了保证用户体验的一致性。

 

 

  • 实验参数
from collections import namedtuple

# abtest参数信息
# ABTest参数
param = namedtuple('RecommendAlgorithm', ['COMBINE',
                                          'RECALL',
                                          'SORT',
                                          'CHANNEL',
                                          'BYPASS']
                   )

RAParam = param(
    COMBINE={
        'Algo-1': (1, [100, 101, 102, 103, 104], []),  # 首页推荐,所有召回结果读取+LR排序
        'Algo-2': (2, [100, 101, 102, 103, 104], [])  # 首页推荐,所有召回结果读取 排序
    },
    RECALL={
        100: ('cb_recall', 'als'),  # 离线模型ALS召回,recall:user:1115629498121 column=als:18
        101: ('cb_recall', 'content'),  # 离线word2vec的画像内容召回 'recall:user:5', 'content:1'
        102: ('cb_recall', 'online'),  # 在线word2vec的画像召回 'recall:user:1', 'online:1'
        103: 'new_article',  # 新文章召回 redis当中    ch:18:new
        104: 'popular_article',  # 基于用户协同召回结果 ch:18:hot
        105: ('article_similar', 'similar')  # 文章相似推荐结果 '1' 'similar:2'
    },
    SORT={
        200: 'LR',
    },
    CHANNEL=25,
    BYPASS=[
            {
                "Bucket": ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd'],
                "Strategy": "Algo-1"
            },
            {
                "BeginBucket": ['e', 'f'],
                "Strategy": "Algo-2"
            }
        ]
)

5.3.3 实验中心流量切分

  • 哈希分桶,md5
  • 推荐刷新逻辑(通过时间戳区分主要逻辑)
  • ABTest分流逻辑实现代码如下
    • import hashlib
    • from setting.default import DefaultConfig, RAParam
def feed_recommend(user_id, channel_id, article_num, time_stamp):
    """
    1、根据web提供的参数,进行分流
    2、找到对应的算法组合之后,去推荐中心调用不同的召回和排序服务
    3、进行埋点参数封装
    :param user_id:用户id
    :param article_num:推荐文章个数
    :return: track:埋点参数结果: 参考上面埋点参数组合
    """

    #  产品前期推荐由于较少的点击行为,所以去做 用户冷启动 + 文章冷启动
    # 用户冷启动:'推荐'频道:热门频道的召回+用户实时行为画像召回(在线的不保存画像)  'C2'组合
    #            # 其它频道:热门召回 + 新文章召回   'C1'组合
    # 定义返回参数的类
    class TempParam(object):
        user_id = -10
        channel_id = -10
        article_num = -10
        time_stamp = -10
        algo = ""

    temp = TempParam()
    temp.user_id = user_id
    temp.channel_id = channel_id
    temp.article_num = article_num
    # 请求的时间戳大小
    temp.time_stamp = time_stamp

    # 先读取缓存数据redis+待推荐hbase结果
    # 如果有返回并加上埋点参数
    # 并且写入hbase 当前推荐时间戳用户(登录和匿名)的历史推荐文章列表

    # 传入用户id为空的直接召回结果
    if temp.user_id == "":
        temp.algo = ""
        return add_track([], temp)
    # 进行分桶实现分流,制定不同的实验策略
    bucket = hashlib.md5(user_id.encode()).hexdigest()[:1]
    if bucket in RAParam.BYPASS[0]['Bucket']:
        temp.algo = RAParam.BYPASS[0]['Strategy']
    else:
        temp.algo = RAParam.BYPASS[1]['Strategy']

    # 推荐服务中心推荐结果(这里做测试)
    track = add_track([], temp)

    return track

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux | 人生苦短,我用Vim【最受欢迎的编辑器】

一探顶级编辑器——Vim一、初次见面,你好vim1、vim的基本概念2、IDE与编辑器的区别3、vim中的五种常见模式介绍二、初出茅庐,vim基本操作1、安装vim,进入vim2、vim中的模式切换📺三、初露锋芒,vim指令集1、&#x1f52…

数据库系统概论——关系代数详解

文章目录1、关系代数概述1.1 传统的集合运算1.2 专门的关系运算1.2.1 选择运算1.2.2 投影(Projection)1.2.3 连接(Join)1.2.4 两类常用连接运算1.2.5 除(Division)1、关系代数概述 关系代数是一种抽象的查…

虹科分享 | 虹科智能自动化2022文章精选

虹科智能自动化事业部一直围绕着工业自动化、能源管理与楼宇自动化三大方向,为客户提供最满意的技术服务和最适合的解决方案,并结合客户需求、行业发展动向和产品资讯,虹科智能自动化团队为大家带来了丰富的技术文章和应用案例。温故而知新&a…

【SpringCloud复习巩固】Nacos

Nacos 链接:https://pan.baidu.com/s/1Ct6upj-kpLuVwyNpk_3KMw 提取码:yyac 目录 一.Nacos 1.1认识Nacos 1.2安装Nacos 1.2.1下载安装包 1.2.2解压到任意非中文目录 1.2.3介绍 1.2.4启动 1.2.5访问 1.3服务注册到Nacos 1.3.1在cloud-demo父工程…

APP漏洞挖掘(二)同开发商的多款APP存在通用漏洞

0x01 前言 测某一APP时,根据信息收集测试,发现APP的后台系统存在SQL注入、XSS、弱口令、信息泄漏等漏洞,此APP本身存在逻辑漏洞与SQL注入漏洞,再通过观察酷传搜索的结果发现此APP开发商开发了三十几个APP,猜测可能存在…

Vue笔记01 模板语法,数据代理,事件处理,计算监听属性,绑定样式,列表渲染

基本使用 引入vue 创建vue实例并关联容器 一个Vue实例只应对应一个容器 一个Vue实例可以有多个组件 模板语法 使用Vue实例中数据 root容器中代码被称为vue模板 语法分为插值语法和指令(v-xxx) 插值语法 绑定标签体内容 {{}}中的可以是js表达式(特殊的js代码&…

手把手带你调参Yolo v5(一)

来源:投稿 作者:王同学 编辑:学姐 YOLO系列模型在目标检测领域有着十分重要的地位,随着版本不停的迭代,模型的性能在不断地提升,源码提供的功能也越来越多,那么如何使用源码就显得十分的重要&am…

Kylin基本介绍、特点、架构

目录1. Kylin的基本介绍2. Kylin的特点3. Kylin的架构1. Kylin的基本介绍 Kylin是一种MOLAP(Multidimensional OLAP),基于多维数据集,需要预计算。另一种OLAP是ROLAP(Relational OLAP),基于关系型数据库,不需要预计算&#xff0c…

单链表的使用方法.数据结构(三)[上]

前言 提示:文本为数据解构(三)单链表: 本文具体讲解单链表的具体使用方法 提示:以下是本篇文 系列文章目录 第一章 数据解构(一) 第二章 顺序表的具体使用方法.数据解构(二) 文章目录 前言 系列文章目录 文章目录 一、单链表视图 二、…

JavaWeb—Tomcat服务器

1 tomcat概述及基本使用 概述 tomcat是apache软件基金会的jakatai项目组的一个核心项目,由apache、sun和其他一些公司及个 人共同开发而成。由于有了sun公司的参与和支持,最新的servlet、jsp规范总是能在tomcat中得到 体现。因为tomcat技术先进、性能稳定…

git搭建远程仓库

前言:我们现在搭建远程仓库,常见的,是去github、gitlab、gitee等这类第三方平台网站上进行部署。咱就顺道说说这三个的区别。 github 是面向全世界的,由国外开发的,基本上放在上面都是开源的,私人仓库好像…

助力工业物联网,工业大数据之脚本开发【五】

01:脚本开发思路目标:实现自动化脚本开发的设计思路分析路径step1:脚本目标step2:实现流程step3:脚本选型step4:单个测试实施创建一个文件,存放要采集的表的名称#创建测试目录 mkdir -p /opt/da…

【苹果推iMessage】软件安装UIAPplicationSharedApplicationiMessage

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

CANoe-Macro Recorder(宏模块)

1、引子 初接触宏模块时,我还记得当时我主要的测试内容是RVC/OPS(倒车影像/雷达)和Climate(空调)。当时的测试手法是通过CANoe上的面板,模拟RVC/OPS/Climate ECU发送CAN总线消息给IVI(中控,娱乐音响系统),实现RVC/OPS/Climate功能在IVI上的显示与控制 例如模拟激活…

webpack DefinePlugin解析

DefinePlugin是webpack的一个官方内置插件,它允许在 编译时 将你代码中的变量替换为其他值或表达式。这在需要根据开发模式与生产模式进行不同的操作时,非常有用。例如,如果想在开发构建中进行日志记录,而不在生产构建中进行&…

1603_MIT 6.828 “El Torito” Bootable CD-ROM Format Specification阅读

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 最近正好趁着假期看了下MIT的OS课程,这是里面推荐阅读的一份资料。简单看了一下,整理一下自己的阅读笔记。 只要是涉及到有历史的计算机技术…

一文带你深刻的进入python,并且了解python的优缺点

嗯,你好,感谢您能打开我的文章,在这里我有一个好消息来告诉大家呢,那就是:还有350多天就要过年啦,哈哈哈哈,开不开心,兴不兴奋 名字:阿玥的小东东 学习:pytho…

零代码应用搭建规范建议

文/顿唯 况育军 贺书钿 编辑/杜逸敏 在明道云零代码开发平台里,一个完整的业务应用包含了工作表、视图、角色、自定义页面、工作流五大核心模块(统计和外部门户为可选模块功能),基于这些能力模块组件,我们能呈现给用…

飞桨时序建模库PaddleTS及产业应用实践

时间序列: 一种普遍存在的数据形态 众所周知,时间序列是一种普遍存在的数据形态,与我们的日常生活及生产活动密切相关。如:股票指数、原油价格等金融市场数据;温度、湿度等天气数据;振动、转速等工业设备运…

【技术短文】汽车软件质量改善

一、根因分析 根据汽车软件脆弱性主要因素分析,共有10余种因素会导致软件质量问题: 1.项目时间点压力,占比 71%2.缺乏安全编程理解/培训,占比 60%3.偶然编程错误,占比 55%4.缺乏质量…