|
@@ -0,0 +1,52 @@
|
|
|
+import datetime
|
|
|
+from utils import RedisHelper
|
|
|
+from config import set_config
|
|
|
+config_ = set_config()
|
|
|
+redis_helper = RedisHelper()
|
|
|
+
|
|
|
+
|
|
|
+def ad_recommend_predict(mid, video_id):
|
|
|
+ """
|
|
|
+ 广告推荐预测
|
|
|
+ :param mid: mid
|
|
|
+ :param video_id: video_id
|
|
|
+ :return: ad_predict, type-int, 1-发放广告,0-不发放广告
|
|
|
+ """
|
|
|
+ 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 = 1
|
|
|
+ else:
|
|
|
+ ad_predict = 0
|
|
|
+ return ad_predict
|