| 
					
				 | 
			
			
				@@ -641,65 +641,133 @@ class BaseConfig(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         'data5': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         'data6': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # 广告模型用户分组类别 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    AD_MID_GROUP = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'class1': [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return1mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return2_3mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return4_8mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return9_24mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return25_nmids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return0share1mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return0share2_nmids'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'class2': [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return1mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return2_3mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return4_8mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return9_24mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return25_29nmids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return30_nmids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return0share1mids', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'return0share2_nmids' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # 免广告用户组列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    NO_AD_MID_GROUP_LIST = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'class1': ['return25_nmids'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'class2': ['return30_nmids'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 广告模型用户数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    AD_USER_DATA_PARAMS = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data1': APP_TYPE['VLOG'],  # vlog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data1:1': APP_TYPE['VLOG'],  # vlog 调整未分组用户的阈值(去除不出广告的用户组) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data2': APP_TYPE['LOVE_LIVE'],  # 票圈视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data3': APP_TYPE['LONG_VIDEO'],  # 内容精选 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data4': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data5': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'data6': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    AD_USER_PARAMS = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'data_params': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data1': APP_TYPE['VLOG'],  # vlog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data2': APP_TYPE['LOVE_LIVE'],  # 票圈视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data3': APP_TYPE['LONG_VIDEO'],  # 内容精选 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data4': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data5': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data6': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'rule_params': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rule1': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'group_list': AD_MID_GROUP['class1'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rule2': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'group_list': AD_MID_GROUP['class1'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rule3': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'group_list': AD_MID_GROUP['class2'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class2'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'params_list': [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {'data': 'data1', 'rule': 'rule2'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {'data': 'data4', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {'data': 'data1', 'rule': 'rule3'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 广告模型abtest配置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     AD_ABTEST_CONFIG = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 票圈vlog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '173-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '173-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'threshold': {'group': 7 / 12, 'mean_group': 7 / 12}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '173-b': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule2'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 7 / 12, 'mean_group': 7 / 12}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '173-b': {'data': {'video': 'data1', 'user': 'data1:1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '173-c': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule3'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 7 / 12, 'mean_group': 7 / 12}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 票圈视频+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '190-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '190-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '190-b': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '190-b': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 13 / 24, 'mean_group': 13 / 24}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 票圈视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '194-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '194-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 1 / 2, 'mean_group': 1 / 2}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '194-b': {'data': {'video': 'data1', 'user': 'data1:1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '194-b': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule2'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 1 / 2, 'mean_group': 1 / 2}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 内容精选 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '195-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '195-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 11 / 24, 'mean_group': 11 / 24}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '195-b': {'data': {'video': 'data1', 'user': 'data1:1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '195-b': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule2'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 11 / 24, 'mean_group': 11 / 24}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 票圈短视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '196-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '196-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 1 / 2, 'mean_group': 1 / 2}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '196-b': {'data': {'video': 'data4', 'user': 'data4'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '196-b': {'video': {'data': 'data4'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data4', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 1 / 2, 'mean_group': 1 / 2}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 老好看视频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '197-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '197-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '197-b': {'data': {'video': 'data1', 'user': 'data1:1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '197-b': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule2'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 25 / 48, 'mean_group': 25 / 48}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 票圈最惊奇 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '198-a': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '198-a': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 49 / 96, 'mean_group': 49 / 96}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '198-b': {'data': {'video': 'data1', 'user': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '198-b': {'video': {'data': 'data1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  'user': {'data': 'data1', 'rule': 'rule1'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   'threshold': {'group': 5 / 18, 'mean_group': 5 / 18}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # 用户组有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:users:group:predict:share:rate:{user_data_key}:{date} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # 用户组有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:users:group:predict:share:rate:{user_data_key}:{user_rule_key}:{date} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     KEY_NAME_PREFIX_AD_GROUP = 'ad:users:group:predict:share:rate:' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 视频有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:video:predict:share:rate:{video_data_key}:{date} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     KEY_NAME_PREFIX_AD_VIDEO = 'ad:video:predict:share:rate:' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # 用户分组结果存放 redis key 前缀,完整格式:mid:group:{mid} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # 用户分组结果存放 redis key 前缀,完整格式:mid:group:{class_key}:{mid} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     KEY_NAME_PREFIX_MID_GROUP = 'mid:group:' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 广告推荐阈值结果存放 redis key 前缀,完整格式:ad:threshold:{abtestId}:{abtestConfigTag}:{group} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     KEY_NAME_PREFIX_AD_THRESHOLD = 'ad:threshold:' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # 免广告用户组列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    NO_AD_MID_GROUP_LIST = ['return25_nmids'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class DevelopmentConfig(BaseConfig): 
			 |