|
@@ -51,6 +51,13 @@ features = [
|
|
|
'lastthreehour_share',
|
|
|
'lastthreehour_return_now',
|
|
|
'lastthreehour_return',
|
|
|
+
|
|
|
+ 'lastonehour_return_new',
|
|
|
+ 'lasttwohour_return_now_new',
|
|
|
+ 'lasttwohour_return_new',
|
|
|
+ 'lastthreehour_return_now_new',
|
|
|
+ 'lastthreehour_return_new',
|
|
|
+ 'platform_return_new',
|
|
|
]
|
|
|
|
|
|
|
|
@@ -279,15 +286,83 @@ def cal_score_update_backrate(df, param):
|
|
|
return df
|
|
|
|
|
|
|
|
|
+def cal_score_with_new_return(df, param):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df = df.fillna(0)
|
|
|
+ df['share_rate'] = df['lastonehour_share'] / (df['lastonehour_play'] + 1000)
|
|
|
+ df['back_rate'] = df['lastonehour_return_new'] / (df['lastonehour_share'] + 10)
|
|
|
+ df['log_back'] = (df['lastonehour_return_new'] + 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_new'] / df['lastonehour_return_new']
|
|
|
+
|
|
|
+ df['score'] = df['share_rate'] * df['back_rate'] * df['log_back'] * df['K2']
|
|
|
+
|
|
|
+ df = df.sort_values(by=['score'], ascending=False)
|
|
|
+ return df
|
|
|
+
|
|
|
+
|
|
|
+def cal_score_multiply_return_retention_with_new_return(df, param):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df = df.fillna(0)
|
|
|
+ df['share_rate'] = df['lastonehour_share'] / (df['lastonehour_play'] + 1000)
|
|
|
+ df['back_rate'] = df['lastonehour_return_new'] / (df['lastonehour_share'] + 10)
|
|
|
+ df['log_back'] = (df['lastonehour_return_new'] + 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['return_retention_initial'] = (df['lasttwohour_return_now_new'] + df['lastthreehour_return_now_new']) / \
|
|
|
+ (df['lasttwohour_return_new'] + df['lastthreehour_return_new'] + 1)
|
|
|
+ df['return_retention'] = df['return_retention_initial'].apply(lambda x: 0.5 if x == 0 else x)
|
|
|
+
|
|
|
+ df['platform_return_rate'] = df['platform_return_new'] / df['lastonehour_return_new']
|
|
|
+
|
|
|
+ df['score'] = df['K2'] * df['share_rate'] * df['back_rate'] * df['log_back'] * df['return_retention']
|
|
|
+
|
|
|
+ df = df.sort_values(by=['score'], ascending=False)
|
|
|
+ return df
|
|
|
+
|
|
|
+
|
|
|
def cal_score(df, param):
|
|
|
- if param.get('score_func', None) == 'add_backrate*log(return+1)':
|
|
|
- df = cal_score_add_return(df=df, param=param)
|
|
|
- elif param.get('score_func', None) == 'multiply_return_retention':
|
|
|
- df = cal_score_multiply_return_retention(df=df, param=param)
|
|
|
- elif param.get('score_func', None) == 'update_backrate':
|
|
|
- df = cal_score_update_backrate(df=df, param=param)
|
|
|
+ if param.get('return_data', None) == 'share_region_return':
|
|
|
+ if param.get('score_func', None) == 'multiply_return_retention':
|
|
|
+ df = cal_score_multiply_return_retention_with_new_return(df=df, param=param)
|
|
|
+ else:
|
|
|
+ df = cal_score_with_new_return(df=df, param=param)
|
|
|
else:
|
|
|
- df = cal_score_initial(df=df, param=param)
|
|
|
+ if param.get('score_func', None) == 'add_backrate*log(return+1)':
|
|
|
+ df = cal_score_add_return(df=df, param=param)
|
|
|
+ elif param.get('score_func', None) == 'multiply_return_retention':
|
|
|
+ df = cal_score_multiply_return_retention(df=df, param=param)
|
|
|
+ elif param.get('score_func', None) == 'update_backrate':
|
|
|
+ df = cal_score_update_backrate(df=df, param=param)
|
|
|
+ else:
|
|
|
+ df = cal_score_initial(df=df, param=param)
|
|
|
return df
|
|
|
|
|
|
|