ad_recommend.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import datetime
  2. from utils import RedisHelper
  3. from config import set_config
  4. config_ = set_config()
  5. redis_helper = RedisHelper()
  6. def ad_recommend_predict(mid, video_id):
  7. """
  8. 广告推荐预测
  9. :param mid: mid
  10. :param video_id: video_id
  11. :return: ad_predict, type-int, 1-发放广告,0-不发放广告
  12. """
  13. now_date = datetime.datetime.today()
  14. now_dt = datetime.datetime.strftime(now_date, '%Y%m%d')
  15. # 判断mid所属分组
  16. mid_group_key_name = f"{config_.KEY_NAME_PREFIX_MID_GROUP}{mid}"
  17. mid_group = redis_helper.get_data_from_redis(key_name=mid_group_key_name)
  18. if mid_group is None:
  19. mid_group = 'mean_group'
  20. # 获取用户组分享率
  21. group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{now_dt}"
  22. if not redis_helper.key_exists(group_share_rate_key):
  23. redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
  24. group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{redis_dt}"
  25. group_share_rate = redis_helper.get_score_with_value(key_name=group_share_rate_key, value=mid_group)
  26. # 获取视频分享率
  27. video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{now_dt}"
  28. if not redis_helper.key_exists(video_share_rate_key):
  29. redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
  30. video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{redis_dt}"
  31. video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=int(video_id))
  32. # 计算 mid-video 分享率
  33. mid_video_share_rate = float(group_share_rate) * float(video_share_rate)
  34. # 阈值判断
  35. threshold = 0.05
  36. if mid_video_share_rate > threshold:
  37. ad_predict = 1
  38. else:
  39. ad_predict = 0
  40. return ad_predict