Browse Source

add abtest: 502, 503

liqian 1 year ago
parent
commit
cebe884036
2 changed files with 88 additions and 3 deletions
  1. 19 2
      config.py
  2. 69 1
      region_rule_rank_h.py

+ 19 - 2
config.py

@@ -431,6 +431,21 @@ class BaseConfig(object):
                        'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                        'score_func': 'back_view1'},
 
+            # score = sharerate * backrate ^ 2 * LOG(lastonehour_return + 1) * K2
+            # sharerate = lastonehour_share / (lastonehour_play + 1000)
+            # backrate = lastonehour_return / (lastonehour_share + 10)
+            # ctr = lastonehour_play / (lastonehour_show + 1000), 对ctr限最大值:K2 = 0.6 if ctr > 0.6 else ctr
+            'rule27': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
+                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
+                       'score_func': 'back_rate_exponential_weighting1'},
+            # score = sharerate ^ 0.5 * backrate ^ 0.8 * LOG(lastonehour_return + 1) * K2 ^ 0.5
+            # sharerate = lastonehour_share / (lastonehour_play + 1000)
+            # backrate = lastonehour_return / (lastonehour_share + 10)
+            # ctr = lastonehour_play / (lastonehour_show + 1000), 对ctr限最大值:K2 = 0.6 if ctr > 0.6 else ctr
+            'rule28': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
+                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
+                       'score_func': 'back_rate_exponential_weighting2'},
+
         },
         'data_params': DATA_PARAMS,
         'params_list': [
@@ -466,8 +481,10 @@ class BaseConfig(object):
             {'data': 'data1', 'rule': 'rule22'},  # 463 vlog 分值计算公式 增加h-2分享当前小时回流/h-2分享、h-3分享当前小时回流/h-3分享 特征
             # {'data': 'data1', 'rule': 'rule23'},  # 465 vlog 回流数据使用 分享限制地域,回流不限制地域 统计数据
             # {'data': 'data1', 'rule': 'rule24'},  # 466 vlog 分值计算公式 增加[h-3,h-2]之间的回流留存特征 + 回流数据使用 分享限制地域,回流不限制地域 统计数据
-            {'data': 'data10', 'rule': 'rule25'},  # 500
-            {'data': 'data10', 'rule': 'rule26'},  # 501
+            # {'data': 'data10', 'rule': 'rule25'},  # 500
+            # {'data': 'data10', 'rule': 'rule26'},  # 501
+            {'data': 'data10', 'rule': 'rule27'},  # 502
+            {'data': 'data10', 'rule': 'rule28'},  # 503
         ],
         'params_list_new': [
             # {'data': 'data10', 'rule': 'rule19'},  # 316 票圈视频 + 召回在线去重

+ 69 - 1
region_rule_rank_h.py

@@ -379,6 +379,70 @@ def cal_score_with_back_view1(df, param):
     return df
 
 
+def cal_score_with_back_rate_exponential_weighting1(df, param):
+    """
+    计算score
+    :param df: 特征数据
+    :param param: 规则参数
+    :return:
+    """
+    # score计算公式: score = sharerate * backrate ^ 2 * LOG(lastonehour_return + 1) * K2
+    # sharerate = lastonehour_share / (lastonehour_play + 1000)
+    # backrate = lastonehour_return / (lastonehour_share + 10)
+    # ctr = lastonehour_play / (lastonehour_show + 1000), 对ctr限最大值:K2 = 0.6 if ctr > 0.6 else ctr
+
+    df = df.fillna(0)
+    df['share_rate'] = df['lastonehour_share'] / (df['lastonehour_play'] + 1000)
+    df['back_rate'] = df['lastonehour_return'] / (df['lastonehour_share'] + 10)
+    df['log_back'] = (df['lastonehour_return'] + 1).apply(math.log)
+    if param.get('view_type', None) == 'video-show':
+        df['ctr'] = df['lastonehour_play'] / (df['lastonehour_show'] + 1000)
+    elif param.get('view_type', None) == 'video-show-region':
+        df['ctr'] = df['lastonehour_play'] / (df['lastonehour_show_region'] + 1000)
+    else:
+        df['ctr'] = df['lastonehour_play'] / (df['lastonehour_preview'] + 1000)
+    df['K2'] = df['ctr'].apply(lambda x: 0.6 if x > 0.6 else x)
+
+    df['platform_return_rate'] = df['platform_return'] / df['lastonehour_return']
+
+    df['score'] = df['share_rate'] * df['back_rate'] ** 2 * df['log_back'] * df['K2']
+
+    df = df.sort_values(by=['score'], ascending=False)
+    return df
+
+
+def cal_score_with_back_rate_exponential_weighting2(df, param):
+    """
+    计算score
+    :param df: 特征数据
+    :param param: 规则参数
+    :return:
+    """
+    # score计算公式: score = sharerate ^ 0.5 * backrate ^ 0.8 * LOG(lastonehour_return + 1) * K2 ^ 0.5
+    # sharerate = lastonehour_share / (lastonehour_play + 1000)
+    # backrate = lastonehour_return / (lastonehour_share + 10)
+    # ctr = lastonehour_play / (lastonehour_show + 1000), 对ctr限最大值:K2 = 0.6 if ctr > 0.6 else ctr
+
+    df = df.fillna(0)
+    df['share_rate'] = df['lastonehour_share'] / (df['lastonehour_play'] + 1000)
+    df['back_rate'] = df['lastonehour_return'] / (df['lastonehour_share'] + 10)
+    df['log_back'] = (df['lastonehour_return'] + 1).apply(math.log)
+    if param.get('view_type', None) == 'video-show':
+        df['ctr'] = df['lastonehour_play'] / (df['lastonehour_show'] + 1000)
+    elif param.get('view_type', None) == 'video-show-region':
+        df['ctr'] = df['lastonehour_play'] / (df['lastonehour_show_region'] + 1000)
+    else:
+        df['ctr'] = df['lastonehour_play'] / (df['lastonehour_preview'] + 1000)
+    df['K2'] = df['ctr'].apply(lambda x: 0.6 if x > 0.6 else x)
+
+    df['platform_return_rate'] = df['platform_return'] / df['lastonehour_return']
+
+    df['score'] = df['share_rate'] ** 0.5 * df['back_rate'] ** 2 * df['log_back'] * df['K2'] ** 0.5
+
+    df = df.sort_values(by=['score'], ascending=False)
+    return df
+
+
 def cal_score(df, param):
     if param.get('return_data', None) == 'share_region_return':
         if param.get('score_func', None) == 'multiply_return_retention':
@@ -396,6 +460,10 @@ def cal_score(df, param):
             df = cal_score_with_back_view0(df=df, param=param)
         elif param.get('score_func', None) == 'back_view1':
             df = cal_score_with_back_view1(df=df, param=param)
+        elif param.get('score_func', None) == 'back_rate_exponential_weighting1':
+            df = cal_score_with_back_rate_exponential_weighting1(df=df, param=param)
+        elif param.get('score_func', None) == 'back_rate_exponential_weighting2':
+            df = cal_score_with_back_rate_exponential_weighting2(df=df, param=param)
         else:
             df = cal_score_initial(df=df, param=param)
     return df
@@ -1088,7 +1156,7 @@ def h_timer_check():
         project = config_.PROJECT_REGION_APP_TYPE
         table = config_.TABLE_REGION_APP_TYPE
         region_code_list = [code for region, code in region_code.items()]
-        now_date = datetime.datetime.today()
+        now_date = datetime.datetime.today() - datetime.timedelta(hours=1)
         log_.info(f"now_date: {datetime.datetime.strftime(now_date, '%Y%m%d%H')}, rule_rank_h_flag: {rule_rank_h_flag}")
         now_h = datetime.datetime.now().hour
         now_min = datetime.datetime.now().minute