Update app/simulation/core/processor.py
Browse files
app/simulation/core/processor.py
CHANGED
|
@@ -26,8 +26,8 @@ class ApplicationProcessor:
|
|
| 26 |
def __init__(self, lr_model, second_model, second_model_name,
|
| 27 |
specialists_count=5, # основные специалисты (модели)
|
| 28 |
business_specialists_count=2, # эксперты (бизнес-правила)
|
| 29 |
-
base_processing_time=5,
|
| 30 |
-
business_processing_time=10, #
|
| 31 |
lr_weight=1.0, second_weight=1.5):
|
| 32 |
self.lr_model = lr_model
|
| 33 |
self.second_model = second_model
|
|
@@ -66,7 +66,7 @@ class ApplicationProcessor:
|
|
| 66 |
def process_batch(self, applications_batch, preprocessor, scaler,
|
| 67 |
threshold, lr_margins, second_margins, current_time):
|
| 68 |
"""
|
| 69 |
-
Обрабатывает батч заявок за текущую минуту
|
| 70 |
"""
|
| 71 |
minute_results = {
|
| 72 |
'new_apps': len(applications_batch),
|
|
@@ -95,13 +95,12 @@ class ApplicationProcessor:
|
|
| 95 |
self.stats['business_specialist_busy'].append(minute_results['business_specialists_busy'])
|
| 96 |
return minute_results
|
| 97 |
|
| 98 |
-
# 2. Превращаем батч в DataFrame для удобства
|
| 99 |
df = pd.DataFrame(applications_batch)
|
| 100 |
|
| 101 |
-
#
|
| 102 |
manual_mask, auto_reject_mask, messages, auto_decisions = check_business_rules(df)
|
| 103 |
|
| 104 |
-
# Сохраняем статистику по бизнес-правилам
|
| 105 |
business_manual_count = manual_mask.sum()
|
| 106 |
business_auto_count = auto_reject_mask.sum()
|
| 107 |
|
|
@@ -186,12 +185,6 @@ class ApplicationProcessor:
|
|
| 186 |
second_confident_count = stats['second_confident']
|
| 187 |
second_uncertain_count = stats['second_uncertain']
|
| 188 |
|
| 189 |
-
# print(f"Статистика батча: бизнес-ручной={business_manual_count}, "
|
| 190 |
-
# f"бизнес-отказ={business_auto_count}, "
|
| 191 |
-
# f"LR уверен={lr_confident_count}, "
|
| 192 |
-
# f"вторая уверен={second_confident_count}, "
|
| 193 |
-
# f"вторая не уверен={second_uncertain_count}")
|
| 194 |
-
|
| 195 |
# Распределяем результаты по исходным индексам
|
| 196 |
for local_idx, orig_idx in enumerate(model_indices):
|
| 197 |
decision = batch_decisions[local_idx]
|
|
@@ -314,26 +307,3 @@ class ApplicationProcessor:
|
|
| 314 |
'auto': self.stats['business_rules_auto']
|
| 315 |
}
|
| 316 |
}
|
| 317 |
-
|
| 318 |
-
# def reset(self):
|
| 319 |
-
# self.specialists = [0] * self.specialists_count
|
| 320 |
-
# self.business_specialists = [0] * self.business_specialists_count
|
| 321 |
-
# self.manual_queue = []
|
| 322 |
-
# self.business_queue = []
|
| 323 |
-
# self.stats = {
|
| 324 |
-
# 'total_processed': 0,
|
| 325 |
-
# 'auto_approved': 0,
|
| 326 |
-
# 'auto_declined': 0,
|
| 327 |
-
# 'manual_sent': 0,
|
| 328 |
-
# 'manual_processed': 0,
|
| 329 |
-
# 'business_manual_sent': 0,
|
| 330 |
-
# 'business_manual_processed': 0,
|
| 331 |
-
# 'queue_history': [],
|
| 332 |
-
# 'business_queue_history': [],
|
| 333 |
-
# 'wait_times': [],
|
| 334 |
-
# 'business_wait_times': [],
|
| 335 |
-
# 'specialist_busy': [],
|
| 336 |
-
# 'business_specialist_busy': [],
|
| 337 |
-
# 'business_rules_manual': 0,
|
| 338 |
-
# 'business_rules_auto': 0
|
| 339 |
-
# }
|
|
|
|
| 26 |
def __init__(self, lr_model, second_model, second_model_name,
|
| 27 |
specialists_count=5, # основные специалисты (модели)
|
| 28 |
business_specialists_count=2, # эксперты (бизнес-правила)
|
| 29 |
+
base_processing_time=5, # время рассмотрения анкет от моделей
|
| 30 |
+
business_processing_time=10, # время рассмотрения анкет от бизнес-правил
|
| 31 |
lr_weight=1.0, second_weight=1.5):
|
| 32 |
self.lr_model = lr_model
|
| 33 |
self.second_model = second_model
|
|
|
|
| 66 |
def process_batch(self, applications_batch, preprocessor, scaler,
|
| 67 |
threshold, lr_margins, second_margins, current_time):
|
| 68 |
"""
|
| 69 |
+
Обрабатывает батч заявок за текущую минуту
|
| 70 |
"""
|
| 71 |
minute_results = {
|
| 72 |
'new_apps': len(applications_batch),
|
|
|
|
| 95 |
self.stats['business_specialist_busy'].append(minute_results['business_specialists_busy'])
|
| 96 |
return minute_results
|
| 97 |
|
|
|
|
| 98 |
df = pd.DataFrame(applications_batch)
|
| 99 |
|
| 100 |
+
# 2. Применяем бизнес-правила ко всем заявкам
|
| 101 |
manual_mask, auto_reject_mask, messages, auto_decisions = check_business_rules(df)
|
| 102 |
|
| 103 |
+
# 3. Сохраняем статистику по бизнес-правилам
|
| 104 |
business_manual_count = manual_mask.sum()
|
| 105 |
business_auto_count = auto_reject_mask.sum()
|
| 106 |
|
|
|
|
| 185 |
second_confident_count = stats['second_confident']
|
| 186 |
second_uncertain_count = stats['second_uncertain']
|
| 187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
# Распределяем результаты по исходным индексам
|
| 189 |
for local_idx, orig_idx in enumerate(model_indices):
|
| 190 |
decision = batch_decisions[local_idx]
|
|
|
|
| 307 |
'auto': self.stats['business_rules_auto']
|
| 308 |
}
|
| 309 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|