浏览代码

add ad abtest: 173-p, 173-q, 190-i, 190-j, 194-k, 194-l, 195-j, 195-k, 196-i, 196-j, 197-i, 197-j, 198-i, 198-j, 242-g, 242-h, 243-g, 243-h, 324-d, 324-e

liqian 1 年之前
父节点
当前提交
d095030892
共有 2 个文件被更改,包括 331 次插入4 次删除
  1. 231 4
      ad_user_video_predict.py
  2. 100 0
      config.py

+ 231 - 4
ad_user_video_predict.py

@@ -135,6 +135,222 @@ def predict_ad_group_video(dt, config_key, config_param, threshold_record):
     log_.info(f"config_key = {config_key} update end!")
 
 
+def predict_ad_group_video_mix_with_add(dt, config_key, config_param, threshold_record):
+    log_.info(f"config_key = {config_key} update start ...")
+    # ###### 获取以分享为目标的数据
+    # 获取用户组预测值(出广告后分享的概率)
+    share_user_data_key = config_param['share']['user'].get('data')
+    share_user_rule_key = config_param['share']['user'].get('rule')
+    share_group_key_name = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{share_user_data_key}:{share_user_rule_key}:{dt}"
+    share_group_data = redis_helper.get_all_data_from_zset(key_name=share_group_key_name, with_scores=True)
+    if share_group_data is None:
+        log_.info(f"share group data is None!")
+    share_group_df = pd.DataFrame(data=share_group_data, columns=['group', 'group_ad_share_rate'])
+    share_group_df = share_group_df[share_group_df['group'] != 'mean_group']
+    log_.info(f"share_group_df count = {len(share_group_df)}")
+
+    # 获取视频预测值(出广告后不分享的概率)
+    share_video_data_key = config_param['share']['video'].get('data')
+    share_video_key_name = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{share_video_data_key}:{dt}"
+    share_video_data = redis_helper.get_all_data_from_zset(key_name=share_video_key_name, with_scores=True)
+    if share_video_data is None:
+        log_.info(f"share video data is None!")
+    share_video_df = pd.DataFrame(data=share_video_data, columns=['videoid', 'video_ad_share_rate'])
+    share_video_df = share_video_df[share_video_df['videoid'] != -1]
+    log_.info(f"share_video_df count = {len(share_video_df)}")
+
+    if len(share_video_df) == 0 or len(share_video_df) == 0:
+        sys.exit(1)
+
+    # ###### 获取以不直接跳出为目标的数据
+    # 获取用户组预测值(出广告后不直接跳出的概率)
+    out_user_data_key = config_param['out']['user'].get('data')
+    out_user_rule_key = config_param['out']['user'].get('rule')
+    out_group_key_name = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{out_user_data_key}:{out_user_rule_key}:{dt}"
+    out_group_data = redis_helper.get_all_data_from_zset(key_name=out_group_key_name, with_scores=True)
+    if out_group_data is None:
+        log_.info(f"out group data is None!")
+    out_group_df = pd.DataFrame(data=out_group_data, columns=['group', 'group_ad_not_out_rate'])
+    out_group_df = out_group_df[out_group_df['group'] != 'mean_group']
+    log_.info(f"out_group_df count = {len(out_group_df)}")
+
+    # 获取视频预测值(出广告后不直接跳出的概率)
+    out_video_data_key = config_param['out']['video'].get('data')
+    out_video_key_name = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{out_video_data_key}:{dt}"
+    out_video_data = redis_helper.get_all_data_from_zset(key_name=out_video_key_name, with_scores=True)
+    if out_video_data is None:
+        log_.info(f"out video data is None!")
+    out_video_df = pd.DataFrame(data=out_video_data, columns=['videoid', 'video_ad_not_out_rate'])
+    out_video_df = out_video_df[out_video_df['videoid'] != -1]
+    log_.info(f"out_video_df count = {len(out_video_df)}")
+
+    if len(share_video_df) == 0 or len(share_video_df) == 0:
+        sys.exit(1)
+
+    # 加权融合
+    share_weight = config_param['mix_param']['share_weight']
+    out_weight = config_param['mix_param']['out_weight']
+    # 用户侧数据
+    group_df = pd.merge(share_group_df, out_group_df, on='group')
+    group_df['group_rate'] = \
+        share_weight * group_df['group_ad_share_rate'] + out_weight * group_df['group_ad_not_out_rate']
+    # 视频侧数据
+    video_df = pd.merge(share_video_df, out_video_df, on='videoid')
+    video_df['video_rate'] = \
+        share_weight * video_df['video_ad_share_rate'] + out_weight * video_df['video_ad_not_out_rate']
+
+    predict_df = video_df.copy()
+    all_group_data = []
+    for index, item in group_df.iterrows():
+        predict_df[item['group']] = predict_df['video_rate'] * item['group_rate']
+        all_group_data.extend(predict_df[item['group']].tolist())
+
+    # 计算对应的阈值
+    ad_threshold_mappings = threshold_record.get(config_key.split('-')[0])
+    for abtest_group, ad_threshold_mapping in ad_threshold_mappings.items():
+        threshold_data = {}
+        for _, item in group_df.iterrows():
+            # 获取分组对应的均值作为阈值
+            threshold_data[item['group']] = predict_df[item['group']].mean() * ad_threshold_mapping['group']
+        threshold_data['mean_group'] = np.mean(all_group_data) * ad_threshold_mapping['mean_group']
+        # 获取需要多出广告的用户组,及阈值比例
+        more_ad = config_param.get('more_ad', None)
+        if more_ad is not None:
+            for group_key, group_threshold_rate in more_ad.items():
+                threshold_data[group_key] = threshold_data[group_key] * group_threshold_rate
+        log_.info(f"config_key = {config_key}, abtest_group = {abtest_group}, threshold_data = {threshold_data}")
+
+        # 将阈值写入redis
+        abtest_config_list = config_key.split('-')
+        abtest_id, abtest_config_tag = abtest_config_list[0], abtest_config_list[1]
+        for key, val in threshold_data.items():
+            key_name = f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD}{abtest_id}:{abtest_config_tag}:{abtest_group}:{key}"
+            redis_helper.set_data_to_redis(key_name=key_name, value=val, expire_time=2 * 24 * 3600)
+
+        # 计算关怀模式实验阈值 并 写入Redis
+        care_model = config_param.get('care_model', None)
+        threshold_rate = config_param.get('threshold_rate', None)
+        if care_model is True:
+            care_model_threshold_data = {}
+            for key, val in threshold_data.items():
+                up_val = val * threshold_rate
+                care_model_threshold_data[key] = up_val
+                up_key_name = \
+                    f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD_CARE_MODEL}{abtest_id}:{abtest_config_tag}:{abtest_group}:{key}"
+                redis_helper.set_data_to_redis(key_name=up_key_name, value=up_val, expire_time=2 * 24 * 3600)
+            log_.info(f"config_key = {config_key}, abtest_group = {abtest_group}, "
+                      f"care_model_threshold_data = {care_model_threshold_data}")
+
+    # predict_df.to_csv(f'./data/ad_user_video_predict_{config_key}.csv')
+    log_.info(f"config_key = {config_key} update end!")
+
+
+def predict_ad_group_video_mix_with_multiply(dt, config_key, config_param, threshold_record):
+    log_.info(f"config_key = {config_key} update start ...")
+    # ###### 获取以分享为目标的数据
+    # 获取用户组预测值(出广告后分享的概率)
+    share_user_data_key = config_param['share']['user'].get('data')
+    share_user_rule_key = config_param['share']['user'].get('rule')
+    share_group_key_name = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{share_user_data_key}:{share_user_rule_key}:{dt}"
+    share_group_data = redis_helper.get_all_data_from_zset(key_name=share_group_key_name, with_scores=True)
+    if share_group_data is None:
+        log_.info(f"share group data is None!")
+    share_group_df = pd.DataFrame(data=share_group_data, columns=['group', 'group_ad_share_rate'])
+    share_group_df = share_group_df[share_group_df['group'] != 'mean_group']
+    log_.info(f"share_group_df count = {len(share_group_df)}")
+
+    # 获取视频预测值(出广告后不分享的概率)
+    share_video_data_key = config_param['share']['video'].get('data')
+    share_video_key_name = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{share_video_data_key}:{dt}"
+    share_video_data = redis_helper.get_all_data_from_zset(key_name=share_video_key_name, with_scores=True)
+    if share_video_data is None:
+        log_.info(f"share video data is None!")
+    share_video_df = pd.DataFrame(data=share_video_data, columns=['videoid', 'video_ad_share_rate'])
+    share_video_df = share_video_df[share_video_df['videoid'] != -1]
+    log_.info(f"share_video_df count = {len(share_video_df)}")
+
+    if len(share_video_df) == 0 or len(share_video_df) == 0:
+        sys.exit(1)
+
+    # ###### 获取以不直接跳出为目标的数据
+    # 获取用户组预测值(出广告后不直接跳出的概率)
+    out_user_data_key = config_param['out']['user'].get('data')
+    out_user_rule_key = config_param['out']['user'].get('rule')
+    out_group_key_name = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{out_user_data_key}:{out_user_rule_key}:{dt}"
+    out_group_data = redis_helper.get_all_data_from_zset(key_name=out_group_key_name, with_scores=True)
+    if out_group_data is None:
+        log_.info(f"out group data is None!")
+    out_group_df = pd.DataFrame(data=out_group_data, columns=['group', 'group_ad_not_out_rate'])
+    out_group_df = out_group_df[out_group_df['group'] != 'mean_group']
+    log_.info(f"out_group_df count = {len(out_group_df)}")
+
+    # 获取视频预测值(出广告后不直接跳出的概率)
+    out_video_data_key = config_param['out']['video'].get('data')
+    out_video_key_name = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{out_video_data_key}:{dt}"
+    out_video_data = redis_helper.get_all_data_from_zset(key_name=out_video_key_name, with_scores=True)
+    if out_video_data is None:
+        log_.info(f"out video data is None!")
+    out_video_df = pd.DataFrame(data=out_video_data, columns=['videoid', 'video_ad_not_out_rate'])
+    out_video_df = out_video_df[out_video_df['videoid'] != -1]
+    log_.info(f"out_video_df count = {len(out_video_df)}")
+
+    if len(share_video_df) == 0 or len(share_video_df) == 0:
+        sys.exit(1)
+
+    # 乘积融合
+    # 用户侧数据
+    group_df = pd.merge(share_group_df, out_group_df, on='group')
+    group_df['group_rate'] = group_df['group_ad_share_rate'] * group_df['group_ad_not_out_rate']
+    # 视频侧数据
+    video_df = pd.merge(share_video_df, out_video_df, on='videoid')
+    video_df['video_rate'] = video_df['video_ad_share_rate'] * video_df['video_ad_not_out_rate']
+
+    predict_df = video_df.copy()
+    all_group_data = []
+    for index, item in group_df.iterrows():
+        predict_df[item['group']] = predict_df['video_rate'] * item['group_rate']
+        all_group_data.extend(predict_df[item['group']].tolist())
+
+    # 计算对应的阈值
+    ad_threshold_mappings = threshold_record.get(config_key.split('-')[0])
+    for abtest_group, ad_threshold_mapping in ad_threshold_mappings.items():
+        threshold_data = {}
+        for _, item in group_df.iterrows():
+            # 获取分组对应的均值作为阈值
+            threshold_data[item['group']] = predict_df[item['group']].mean() * ad_threshold_mapping['group']
+        threshold_data['mean_group'] = np.mean(all_group_data) * ad_threshold_mapping['mean_group']
+        # 获取需要多出广告的用户组,及阈值比例
+        more_ad = config_param.get('more_ad', None)
+        if more_ad is not None:
+            for group_key, group_threshold_rate in more_ad.items():
+                threshold_data[group_key] = threshold_data[group_key] * group_threshold_rate
+        log_.info(f"config_key = {config_key}, abtest_group = {abtest_group}, threshold_data = {threshold_data}")
+
+        # 将阈值写入redis
+        abtest_config_list = config_key.split('-')
+        abtest_id, abtest_config_tag = abtest_config_list[0], abtest_config_list[1]
+        for key, val in threshold_data.items():
+            key_name = f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD}{abtest_id}:{abtest_config_tag}:{abtest_group}:{key}"
+            redis_helper.set_data_to_redis(key_name=key_name, value=val, expire_time=2 * 24 * 3600)
+
+        # 计算关怀模式实验阈值 并 写入Redis
+        care_model = config_param.get('care_model', None)
+        threshold_rate = config_param.get('threshold_rate', None)
+        if care_model is True:
+            care_model_threshold_data = {}
+            for key, val in threshold_data.items():
+                up_val = val * threshold_rate
+                care_model_threshold_data[key] = up_val
+                up_key_name = \
+                    f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD_CARE_MODEL}{abtest_id}:{abtest_config_tag}:{abtest_group}:{key}"
+                redis_helper.set_data_to_redis(key_name=up_key_name, value=up_val, expire_time=2 * 24 * 3600)
+            log_.info(f"config_key = {config_key}, abtest_group = {abtest_group}, "
+                      f"care_model_threshold_data = {care_model_threshold_data}")
+
+    # predict_df.to_csv(f'./data/ad_user_video_predict_{config_key}.csv')
+    log_.info(f"config_key = {config_key} update end!")
+
+
 def predict():
     try:
         now_date = datetime.datetime.today()
@@ -147,10 +363,21 @@ def predict():
         log_.info(f"threshold_record = {threshold_record}")
         params = config_.AD_ABTEST_CONFIG
         for config_key, config_param in params.items():
-            predict_ad_group_video(dt=dt,
-                                   config_key=config_key,
-                                   config_param=config_param,
-                                   threshold_record=threshold_record)
+            if config_param.get('threshold_mix_func') == 'add':
+                predict_ad_group_video_mix_with_add(dt=dt,
+                                                    config_key=config_key,
+                                                    config_param=config_param,
+                                                    threshold_record=threshold_record)
+            elif config_param.get('threshold_mix_func') == 'multiply':
+                predict_ad_group_video_mix_with_multiply(dt=dt,
+                                                         config_key=config_key,
+                                                         config_param=config_param,
+                                                         threshold_record=threshold_record)
+            else:
+                predict_ad_group_video(dt=dt,
+                                       config_key=config_key,
+                                       config_param=config_param,
+                                       threshold_record=threshold_record)
         # 阈值参数记录
         # redis_helper.set_data_to_redis(key_name=config_.KEY_NAME_PREFIX_AD_THRESHOLD_RECORD,
         #                                value=str(config_.AD_ABTEST_THRESHOLD_CONFIG),

+ 100 - 0
config.py

@@ -1094,6 +1094,16 @@ class BaseConfig(object):
                   'user': {'data': 'user0out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # [else, return0share1mids]非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 使用以是否直接跳出为目标的数据
+        '173-p': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '173-q': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 票圈视频+
         # '190-a': {'video': {'data': 'data1'},
@@ -1118,6 +1128,16 @@ class BaseConfig(object):
                   'user': {'data': 'user21out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '190-i': {'share': {'video': {'data': 'videos21'}, 'user': {'data': 'user21', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos21out'}, 'user': {'data': 'user21out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '190-j': {'share': {'video': {'data': 'videos21'}, 'user': {'data': 'user21', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos21out'}, 'user': {'data': 'user21out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 票圈视频
         # '194-a': {'video': {'data': 'data1'},
@@ -1148,6 +1168,16 @@ class BaseConfig(object):
                   'user': {'data': 'user4out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '194-k': {'share': {'video': {'data': 'videos4'}, 'user': {'data': 'user4', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos4out'}, 'user': {'data': 'user4out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '194-l': {'share': {'video': {'data': 'videos4'}, 'user': {'data': 'user4', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos4out'}, 'user': {'data': 'user4out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 内容精选
         # '195-a': {'video': {'data': 'data1'},
@@ -1176,6 +1206,16 @@ class BaseConfig(object):
                   'user': {'data': 'user5out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '195-j': {'share': {'video': {'data': 'videos5'}, 'user': {'data': 'user5', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos5out'}, 'user': {'data': 'user5out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '195-k': {'share': {'video': {'data': 'videos5'}, 'user': {'data': 'user5', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos5out'}, 'user': {'data': 'user5out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 票圈短视频
         # '196-a': {'video': {'data': 'data1'},
@@ -1200,6 +1240,16 @@ class BaseConfig(object):
                   'user': {'data': 'user6out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '196-i': {'share': {'video': {'data': 'videos6'}, 'user': {'data': 'user6', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos6out'}, 'user': {'data': 'user6out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '196-j': {'share': {'video': {'data': 'videos6'}, 'user': {'data': 'user6', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos6out'}, 'user': {'data': 'user6out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 老好看视频
         # '197-a': {'video': {'data': 'data1'},
@@ -1224,6 +1274,16 @@ class BaseConfig(object):
                   'user': {'data': 'user18out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '197-i': {'share': {'video': {'data': 'videos18'}, 'user': {'data': 'user18', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos18out'}, 'user': {'data': 'user18out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '197-j': {'share': {'video': {'data': 'videos18'}, 'user': {'data': 'user18', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos18out'}, 'user': {'data': 'user18out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 票圈最惊奇
         # '198-a': {'video': {'data': 'data1'},
@@ -1248,6 +1308,16 @@ class BaseConfig(object):
                   'user': {'data': 'user19out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '198-i': {'share': {'video': {'data': 'videos19'}, 'user': {'data': 'user19', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos19out'}, 'user': {'data': 'user19out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '198-j': {'share': {'video': {'data': 'videos19'}, 'user': {'data': 'user19', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos19out'}, 'user': {'data': 'user19out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 票圈足迹(票圈|视频精选)
         # '242-a': {'video': {'data': 'data1'},
@@ -1268,6 +1338,16 @@ class BaseConfig(object):
                   'user': {'data': 'user22out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '242-g': {'share': {'video': {'data': 'videos22'}, 'user': {'data': 'user22', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos22out'}, 'user': {'data': 'user22out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '242-h': {'share': {'video': {'data': 'videos22'}, 'user': {'data': 'user22', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos22out'}, 'user': {'data': 'user22out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 票圈福年
         # '243-a': {'video': {'data': 'data1'},
@@ -1288,6 +1368,16 @@ class BaseConfig(object):
                   'user': {'data': 'user3out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '243-g': {'share': {'video': {'data': 'videos3'}, 'user': {'data': 'user3', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos3out'}, 'user': {'data': 'user3out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '243-h': {'share': {'video': {'data': 'videos3'}, 'user': {'data': 'user3', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos3out'}, 'user': {'data': 'user3out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
         # 信仰之路
         '324-a': {'video': {'data': 'videos0'},
@@ -1302,6 +1392,16 @@ class BaseConfig(object):
                   'user': {'data': 'user0out', 'rule': 'rule2'},
                   'care_model': True, 'threshold_rate': 0.7,
                   },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
+        '324-d': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.3, 'out_weight': 0.7}
+                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
+        '324-e': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
+                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
+                  'care_model': True, 'threshold_rate': 0.7,
+                  'threshold_mix_func': 'multiply',
+                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
 
     }