流量调控

本文介绍PAI-Rec系统中流量调控模块的使用流程。

背景介绍

1.什么是流量调控

流量调控业务就是通过算法/策略/系统的设计和优化,构建考虑平台意志和长期价值的流量分发系统。流量调控类似于国家的宏观经济调控,是一只“看得见的手”,是实现平台短期与长期收益平衡、促进平台生态健康发展的重要手段!

image

2.为什么要做流量调控

目的1:促进发布,增大内容池。 新内容获得的曝光越多,作者创作积极性越高。反映在发布渗透率、人均发布量。

目的2:挖掘优质内容。做探索,让每篇新内容都能获得足够曝光。 挖掘的能力反映在高热内容占比。

目的3:辅助商业化。以流量调控技术为手段,达到低成本撬动商家优质资源,实现平台、商家、用户三方共赢。广告变现

3.流量调控解决方案优势

  • 扶持效果好:“流量调控”是基于PAI-Rec推荐系统架构而开发的流量干预功能,在不扰乱推荐系统整体推荐逻辑的基础上对所选物品池进行精准流量干预。

  • 效果可量化:与传统的“加权”方式相比,“流量调控”功能以物品池的曝光次数、曝光次数占比等可量化的指标为调控的目标,更容易实现定量扶持;

  • 易于管理:“流量调控”以任务为功能单元实现业务诉求,针对不同种类的流量干预需求可以建立不同的“流量调控”任务,这种方式便于灵活管理,您可以随时新建或结束一个任务。

  • 操作简单:您只需要新建并配置任务目标等信息,系统将根据您的配置自动干预流量的分发,不需要您持续观察和监测;

创建流量调控任务

介绍如何创建流量调控任务,相关术语解释

1. 新建流量调控任务

1.1 设置基础信息

image

1.2 圈选干预人群

干预人群是流量调控任务的作用范围,如不选择则默认对整个场景的流量都做干涉。

截屏2024-10-23 上午11

行为统计条件配置用户实时行为的过滤条件,只对符合条件的流量进行统计。

截屏2024-10-17 下午4

圈人条件与行为统计条件都可以配置多个子项,系统保证各个子项的条件都必须满足。

如果需要配置更加复杂的条件,比如“或”关系的条件,可以输入自定义表达式。

自定义表达式支持多种运算符,包含数学运算符、逻辑运算符、比较运算符及集合运算符等。

  • 数学运算符包括加(+)、减(-)、乘(*)、除(/)和取模(%)

  • 逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)

  • 比较运算符有相等(==)、不等(!=)、小于(<)、小于等于(<=)、大于(>)和大于等于(>=)

  • 操作集合的运算符,如in用于检查元素是否在集合中

自定义表达式的语法在下文中保持不变。

1.3 设置调控目标

术语解释:

  • 执行逻辑

    • 保量:调控任务致力于让目标物品集获得大于等于设定目标值的流量

    • 逼近:调控任务致力于让目标物品集获得约等于设定目标值的流量,; 注意,当多个“逼近”类型的调控任务关联了相同的物品子集时可能会存在因目标冲突而无法达成目标的情况

  • 目标类型

    • 按比例调控:控制目标的流量在整个任务的流量中的比例;整个任务的流量定义为与任务关联的物品集的总流量,若没有配置任务的关联物品集则为当前调控场景的总流量

    • 按量/次数调控:控制目标物品集的能够获得的绝对流量多少

  • 目标颗粒度

    • 全局:设定的流量目标为物品集合需要达成的总流量

    • 单品:设定的流量目标为物品集合中每个物品需要达成的流量

  • 物品范围

    • 一般为在线所有生效的物品集合,您当前设置为比例型调控任务时,物品范围圈定的物品集合的流量将作为分母,核算调控比例。

  • 目标容错范围

    • 记为,如果当前任务的流量落在 区间,暂停该目标的调控任务直到流量值不满足该区间的约束范围为止。是设定的流量目标值,的值可正可负。

    • 针对按比例调控的“逼近”型任务,设定容错范围的好处是当发生超调时不用做反向调控,有助于减轻对大盘指标的干扰。

  • 新品调控

    • 新品调控属于冷启动场景,新品无法从已有召回链路中产出,需新建一路单独的召回。

每个调控任务可以关联多个调控目标。根据需求选择目标类型

1.3.1 按比例调控

截屏2024-10-17 下午4

1.3.2 按量或按次数调控

截屏2024-10-21 下午9

1.4 发布任务

flink任务的目的是实时统计被调控目标的数量。

  1. 设置flink connector

  2. 下载 JAR

    1. 进入自定义连接器注册入口。

      1. 登录实时计算控制台

      2. 单击目标工作空间操作列下的控制台

      3. 在左侧导航栏,单击数据连接

    2. 注册自定义连接器。

      1. 数据连接页面,单击创建自定义连接器

      2. 选择上传文件,单击选择文件,上传 Connector JAR包。

    3. 单击下一步
    4. 单击完成

  3. 将代码部署到flink 中

    1. 复制flink vvp 执行代码。

    2. 登录实时计算控制台

    3. 新建空白的流作业草稿

    4. 点击调试部署

    5. 重置datahub的行为数据的点位到当天的0

截屏2024-10-21 下午9

  1. 部署完flink后,点击发布,生成一个调控任务

截屏2024-12-10 下午12

2. 启动任务

启动预发流量调控任务,查看流量调控报表,预发任务达到目标后,再开启生产环境任务。

截屏2025-01-02 下午1

添加PAI-Rec引擎

在原来的引擎配置上,根据业务情况,添加下面的配置。

说明

任务启动后,flink任务需要跑一段时间,建议第二天再配置引擎

1.流量调控配置

该配置在预发环境和预发环境上都要配置

    "SortConfs": [
        {
            "Name": "TrafficControlSort",
            "SortType": "TrafficControlSort",
            "Debug": true,
            "PIDConf": {
                "SyncPIDStatus": false,
                "AllocateExperimentWise": false,
                "DefaultKp": 5,
                "DefaultKi": 1,
                "DefaultKd": 1
            }
        },
        {
            "Name": "TrafficDiversityRuleSort",
            "SortType": "DiversityRuleSort",
            "DiversitySize": 20,
            "DiversityRules": [
                {
                    "Dimensions": [
                        "__traffic_control_id__"
                    ],
                    "WindowSize": 10,
                    "FrequencySize": 5
                }
            ]
        }
    ],
    "SortNames": {
        "home_feed": [
            "TrafficControlSort",
            "TrafficDiversityRuleSort"
        ]
    },

2.其他配置

2.1 按比例调控

无额外配置

2.2 按量\次数调控

该配置在预发环境和预发环境上都要配置,配置完流量调控后,还需添加下面的配置。直接召回所有的被调控物品会给排序造成很大压力,所以需要自定义一个PipelineConfs,每次请求从召回表里取RetainNum:300个物品,进行排序,然后合并到主pipeline里,配置详情参考自定义 Pipeline 流程

"PipelineConfs": {
    "home_feed": [
        {
            "Name": "newitem",
            "FilterNames": [
                "UniqueFilter",
                "UserExposureFilter15Min",
                "UserExposureFilterReal",
                "adjust_count_filter"
            ],
            "RecallNames": [
                "new_item_1500_recall"
            ],
            "RankConf": {
                "RankAlgoList": [
                    "fs_dbmtl_v4"
                ],
                "RankScore": "${fs_dbmtl_v4_probs_is_click}+${fs_dbmtl_v4_probs_is_collect_like_comment}",
                "BatchCount": 400,
                    "Processor": "EasyRec"
                },
                FeatureLoadConfs": [
                    {
                        "FeatureDaoConf": {
                        "AdapterType": "hologres",
                        "HologresName": "holo_info",
                        "ItemFeatureKeyName": "item_id",
                        "FeatureKey": "item:id",
                        "HologresTableName": "xxx_home_feed_new_item_1500_v2_online",
                        "ItemSelectFields": "item_id,is_1500_new_item",
                        "FeatureStore": "item"
                    },
                    "Features": []
                }
            ]
        }
    ]
},
"RecallConfs": [
    {
        "Name": "new_item_1500_recall",
        "RecallType": "ColdStartRecall",
        "RecallCount": 1500,
        "ColdStartDaoConf": {
            "AdapterType": "hologres",
            "HologresName": "holo_info",
            "HologresTableName": "xxx_home_feed_new_item_1500_v2_online",
            "WhereClause": "is_complated='1'",
            "PrimaryKey": "\"item_id\""
        }
    }
],
"FilterConfs": [
    {
        "Name": "adjust_count_filter",
        "FilterType": "AdjustCountFilter",
        "ShuffleItem": true,
        "RetainNum": 300
    }
]