Переглянути джерело

update ad recommend: ad NO_AD_MID_GROUP_LIST

liqian 2 роки тому
батько
коміт
4b6cb63d07
2 змінених файлів з 51 додано та 35 видалено
  1. 49 35
      ad_recommend.py
  2. 2 0
      config.py

+ 49 - 35
ad_recommend.py

@@ -14,46 +14,60 @@ def ad_recommend_predict(mid, video_id):
     """
     now_date = datetime.datetime.today()
     now_dt = datetime.datetime.strftime(now_date, '%Y%m%d')
+
     # 判断mid所属分组
     mid_group_key_name = f"{config_.KEY_NAME_PREFIX_MID_GROUP}{mid}"
     mid_group = redis_helper.get_data_from_redis(key_name=mid_group_key_name)
     if mid_group is None:
         mid_group = 'mean_group'
-    # 获取用户组分享率
-    group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{now_dt}"
-    if not redis_helper.key_exists(group_share_rate_key):
-        redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
-        group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{redis_dt}"
-    group_share_rate = redis_helper.get_score_with_value(key_name=group_share_rate_key, value=mid_group)
-    # 获取视频分享率
-    video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{now_dt}"
-    if not redis_helper.key_exists(video_share_rate_key):
-        redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
-        video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{redis_dt}"
-    video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=int(video_id))
-    if video_share_rate is None:
-        video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=-1)
-
-    # 计算 mid-video 分享率
-    mid_video_share_rate = float(group_share_rate) * float(video_share_rate)
 
-    # 获取对应的阈值
-    threshold_key_name = f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD}{mid_group}"
-    threshold = redis_helper.get_data_from_redis(key_name=threshold_key_name)
-    if threshold is None:
-        threshold = 0
-    else:
-        threshold = float(threshold)
-    # 阈值判断
-    if mid_video_share_rate > threshold:
-        ad_predict = 2
-    else:
+    # 判断用户是否在免广告用户组列表中
+    if mid_group in config_.NO_AD_MID_GROUP_LIST:
+        # 在免广告用户组列表中,则不出广告
         ad_predict = 1
-    result = {
-        'mid_group': mid_group,
-        'group_share_rate': group_share_rate,
-        'video_share_rate': video_share_rate,
-        'mid_video_share_rate': mid_video_share_rate,
-        'threshold': threshold,
-        'ad_predict': ad_predict}
+        result = {
+            'mid_group': mid_group,
+            'ad_predict': ad_predict
+        }
+    else:
+        # 获取用户组分享率
+        group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{now_dt}"
+        if not redis_helper.key_exists(group_share_rate_key):
+            redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
+            group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{redis_dt}"
+        group_share_rate = redis_helper.get_score_with_value(key_name=group_share_rate_key, value=mid_group)
+        # 获取视频分享率
+        video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{now_dt}"
+        if not redis_helper.key_exists(video_share_rate_key):
+            redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
+            video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{redis_dt}"
+        video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=int(video_id))
+        if video_share_rate is None:
+            video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=-1)
+
+        # 计算 mid-video 分享率
+        mid_video_share_rate = float(group_share_rate) * float(video_share_rate)
+
+        # 获取对应的阈值
+        threshold_key_name = f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD}{mid_group}"
+        threshold = redis_helper.get_data_from_redis(key_name=threshold_key_name)
+        if threshold is None:
+            threshold = 0
+        else:
+            threshold = float(threshold)
+        # 阈值判断
+        if mid_video_share_rate > threshold:
+            # 大于阈值,出广告
+            ad_predict = 2
+        else:
+            # 否则,不出广告
+            ad_predict = 1
+        result = {
+            'mid_group': mid_group,
+            'group_share_rate': group_share_rate,
+            'video_share_rate': video_share_rate,
+            'mid_video_share_rate': mid_video_share_rate,
+            'threshold': threshold,
+            'ad_predict': ad_predict}
+
     return result

+ 2 - 0
config.py

@@ -628,6 +628,8 @@ class BaseConfig(object):
     KEY_NAME_PREFIX_MID_GROUP = 'mid:group:'
     # 广告推荐阈值结果存放 redis key 前缀,完整格式:ad:threshold:{group}
     KEY_NAME_PREFIX_AD_THRESHOLD = 'ad:threshold:'
+    # 免广告用户组列表
+    NO_AD_MID_GROUP_LIST = ['return25_nmids']
 
 
 class DevelopmentConfig(BaseConfig):