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