瀏覽代碼

add ad abtest

liqian 2 年之前
父節點
當前提交
b01a61c560
共有 2 個文件被更改,包括 74 次插入1 次删除
  1. 39 1
      ad_recommend.py
  2. 35 0
      config.py

+ 39 - 1
ad_recommend.py

@@ -5,16 +5,54 @@ config_ = set_config()
 redis_helper = RedisHelper()
 
 
-def ad_recommend_predict(app_type, mid, video_id):
+def get_params(ab_exp_info, ab_test_code):
+    """
+    根据实验分组给定对应的参数
+    :param ab_exp_info: AB实验组参数
+    :param ab_test_code: 用户对应的ab组
+    :return:
+    """
+    abtest_id, abtest_config_tag = None, None
+    ad_abtest_id_list = [key.split('-')[0] for key in config_.AD_ABTEST_CONFIG]
+    # 获取广告实验配置
+    config_value_dict = {}
+    if ab_exp_info:
+        ab_exp_list = ab_exp_info.get('ab_test003', None)
+        if ab_exp_list:
+            for ab_item in ab_exp_list:
+                ab_exp_code = ab_item.get('abExpCode', None)
+                if not ab_exp_code:
+                    continue
+                if ab_exp_code in ad_abtest_id_list:
+                    config_value = ab_item.get('configValue', None)
+                    if config_value:
+                        config_value_dict[str(ab_exp_code)] = eval(str(config_value))
+
+    if len(config_value_dict) > 0:
+        for ab_exp_code, config_value in config_value_dict.items():
+            for tag, value in config_value:
+                if ab_test_code in value:
+                    abtest_id = ab_exp_code
+                    abtest_config_tag = tag
+                    break
+
+    return abtest_id, abtest_config_tag
+
+
+def ad_recommend_predict(app_type, mid, video_id, ab_exp_info, ab_test_code):
     """
     广告推荐预测
     :param app_type: app_type
     :param mid: mid
     :param video_id: video_id
+    :param ab_exp_info: AB实验组参数
+    :param ab_test_code: 用户对应的ab组
     :return: ad_predict, type-int, 1-不发放广告,2-发放广告
     """
     now_date = datetime.datetime.today()
     now_dt = datetime.datetime.strftime(now_date, '%Y%m%d')
+    # 获取实验参数
+    abtest_id, abtest_config_tag = get_params(ab_exp_info=ab_exp_info, ab_test_code=ab_test_code)
 
     # 判断mid所属分组
     mid_group_key_name = f"{config_.KEY_NAME_PREFIX_MID_GROUP}{mid}"

+ 35 - 0
config.py

@@ -631,6 +631,41 @@ class BaseConfig(object):
         APP_TYPE['APP'],  # 票圈视频APP
     ]
 
+    # 广告模型abtest配置
+    AD_ABTEST_CONFIG = {
+        # 票圈vlog
+        '173-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        # 票圈视频+
+        '190-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 5 / 6, 'mean_group': 5 / 6}},
+        # 票圈视频
+        '194-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        '194-b': {'data': {'video': 'data2', 'user': 'data2'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        # 内容精选
+        '195-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        '195-b': {'data': {'video': 'data3', 'user': 'data3'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        # 票圈短视频
+        '196-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        '196-b': {'data': {'video': 'data4', 'user': 'data4'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        # 老好看视频
+        '197-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        '197-b': {'data': {'video': 'data5', 'user': 'data5'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        # 票圈最惊奇
+        '198-a': {'data': {'video': 'data1', 'user': 'data1'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+        '198-b': {'data': {'video': 'data6', 'user': 'data6'},
+                  'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}},
+    }
+
     # 用户组有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:users:group:predict:share:rate:{date}
     KEY_NAME_PREFIX_AD_GROUP = 'ad:users:group:predict:share:rate:'
     # 视频有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:video:predict:share:rate:{date}