浏览代码

add abtest130

liqian 2 年之前
父节点
当前提交
4248f2ef7c
共有 4 个文件被更改,包括 54 次插入18 次删除
  1. 8 1
      config.py
  2. 8 3
      recommend.py
  3. 21 0
      video_rank.py
  4. 17 14
      video_recall.py

+ 8 - 1
config.py

@@ -126,6 +126,7 @@ class BaseConfig(object):
             'abtest_120': 60021,
             'abtest_121': 60022,
             'abtest_122': 60023,
+            'abtest_130': 60024,
         },  # 地域分组小时级规则实验
 
         'rank_by_24h': {
@@ -207,7 +208,10 @@ class BaseConfig(object):
             'data_key': 'data4', 'rule_key': 'rule7',
             'ab_code': AB_CODE['region_rank_by_h'].get('abtest_122')
         },  # 票圈短视频 分数据实验 data-[vlog: 0.5, 票圈短视频: 0.5], rule-rule7
-
+        '130': {
+            'data_key': 'data1', 'rule_key': 'rule4',
+            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_130')
+        },  # 095实验基础上去除大列表,进行兜底策略优化
     }
 
     # 小程序小时级列表key不同实验标识
@@ -265,6 +269,7 @@ class BaseConfig(object):
         'top': 'op_manual',  # 置顶
         'bottom': 'bottom_strategy',  # 一层兜底
         'bottom_last': 'bottom_strategy_last',  # 二层兜底
+        'bottom2': 'bottom_strategy2',  # 兜底策略2
         'position_insert': 'position_insert',  # 按位置插入
         'relevant_video_op': 'relevant_video_op',  # 相关推荐强插
         'rov_recall_h': 'recall_pool_h',  # 小时级更新列表
@@ -479,6 +484,8 @@ class BaseConfig(object):
 
     # 兜底视频redis存储key
     BOTTOM_KEY_NAME = 'bottom:videos'
+    # 兜底视频redis存储key-方案2:采用流量池视频作为兜底视频
+    BOTTOM2_KEY_NAME = 'bottom2:videos'
 
     # 生效中的置顶视频列表 redis key
     TOP_VIDEO_LIST_KEY_NAME = 'top:item:score:area:applet'

+ 8 - 3
recommend.py

@@ -10,7 +10,7 @@ import config
 from log import Log
 from config import set_config
 from video_recall import PoolRecall
-from video_rank import video_rank, bottom_strategy, video_rank_by_w_h_rate, video_rank_with_old_video
+from video_rank import video_rank, bottom_strategy, video_rank_by_w_h_rate, video_rank_with_old_video, bottom_strategy2
 from db_helper import RedisHelper
 import gevent
 from utils import FilterVideos
@@ -298,8 +298,13 @@ def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, al
         # 兜底策略
         # log_.info('====== bottom strategy')
         start_bottom = time.time()
-        rank_result = bottom_strategy(request_id=request_id, size=size, app_type=app_type, ab_code=ab_code, params=params)
-        # end_bottom = time.time()
+        if ab_code == config_.AB_CODE['region_rank_by_h'].get('abtest_130'):
+            rank_result = bottom_strategy2(size=size, app_type=app_type, mid=mid, ab_code=ab_code, params=params)
+        else:
+            rank_result = bottom_strategy(
+                request_id=request_id, size=size, app_type=app_type, ab_code=ab_code, params=params
+            )
+
         log_.info({
             'logTimestamp': int(time.time() * 1000),
             'request_id': request_id,

+ 21 - 0
video_rank.py

@@ -227,6 +227,27 @@ def bottom_strategy_last(size, app_type, ab_code, params):
     return bottom_data
 
 
+def bottom_strategy2(size, app_type, mid, ab_code, params):
+    """
+    兜底策略: 从兜底视频中随机获取视频,进行过滤后的视频
+    :param size: 需要获取的视频数
+    :param app_type: 产品标识 type-int
+    :param mid: mid
+    :param ab_code: abCode
+    :param params:
+    :return:
+    """
+    redis_helper = RedisHelper(params=params)
+    bottom_data = redis_helper.get_data_from_set(key_name=config_.BOTTOM2_KEY_NAME)
+    random_data = numpy.random.choice(bottom_data, size * 5, False)
+    # 视频过滤
+    filter_videos = FilterVideos(request_id=params.request_id, app_type=app_type, video_ids=random_data, mid=mid)
+    filtered_data = filter_videos.filter_videos()
+    bottom_data = [{'videoId': int(video_id), 'pushFrom': config_.PUSH_FROM['bottom2'], 'abCode': ab_code}
+                   for video_id in filtered_data[:size]]
+    return bottom_data
+
+
 def video_rank_by_w_h_rate(videos):
     """
     视频宽高比实验(每组的前两个视频调整为横屏视频),根据视频宽高比信息对视频进行重排

+ 17 - 14
video_recall.py

@@ -1271,20 +1271,23 @@ class PoolRecall(object):
                         break
                     else:
                         continue
-        # 判断获取到的小时级数据数量
-        if len(recall_result) < size:
-            # 补充数据
-            rov_recall_result = self.rov_pool_recall(size=size, expire_time=expire_time)
-            # 去重合并
-            for video in rov_recall_result:
-                vid = video.get('videoId')
-                if vid not in now_video_ids:
-                    recall_result.append(video)
-                    now_video_ids.append(vid)
-                    if len(recall_result) >= size:
-                        break
-                    else:
-                        continue
+
+        # 130实验组不获取大列表的数据
+        if self.ab_code != config_.AB_CODE['region_rank_by_h'].get('abtest_130'):
+            # 判断获取到的小时级数据数量
+            if len(recall_result) < size:
+                # 补充数据
+                rov_recall_result = self.rov_pool_recall(size=size, expire_time=expire_time)
+                # 去重合并
+                for video in rov_recall_result:
+                    vid = video.get('videoId')
+                    if vid not in now_video_ids:
+                        recall_result.append(video)
+                        now_video_ids.append(vid)
+                        if len(recall_result) >= size:
+                            break
+                        else:
+                            continue
 
         log_.info({
             'logTimestamp': int(time.time() * 1000),