From a555a8d9a9bea5bd29306f4885a65644560c0558 Mon Sep 17 00:00:00 2001 From: Floke Date: Mon, 4 Aug 2025 14:28:30 +0000 Subject: [PATCH] data_processor.py aktualisiert --- data_processor.py | 55 ----------------------------------------------- 1 file changed, 55 deletions(-) diff --git a/data_processor.py b/data_processor.py index 216496bc..5960a6d7 100644 --- a/data_processor.py +++ b/data_processor.py @@ -5022,61 +5022,6 @@ class DataProcessor: f"Parent Account Suggestion Batch abgeschlossen. {processed_count} Zeilen verarbeitet, {skipped_count} Zeilen übersprungen.") def _predict_technician_bucket(self, row_data): - """ - Führt eine Vorhersage des Servicetechniker-Buckets für eine einzelne Zeile durch. - """ - company_name = self._get_cell_value_safe(row_data, 'CRM Name').strip() - self.logger.debug( - f"Versuche ML-Schaetzung fuer Zeile ({company_name[:50]}...)") - - # Die Überprüfung findet jetzt in der setup() Methode statt. - if not self.is_setup_complete or self.model is None: - self.logger.error("ML-Modell nicht initialisiert. Setup nicht ausgeführt oder fehlgeschlagen. Überspringe Vorhersage.") - return "FEHLER Schaetzung (Setup fehlt)" - try: - # === Feature Erstellung (muss exakt zum Training passen!) === - - # 1. Konsolidierte numerische Werte holen - final_umsatz_val_str = self._get_cell_value_safe( - row_data, "Finaler Umsatz (Wiki>CRM)") - final_ma_val_str = self._get_cell_value_safe( - row_data, "Finaler Mitarbeiter (Wiki>CRM)") - - umsatz_for_pred = get_numeric_filter_value( - final_umsatz_val_str, is_umsatz=True) - ma_for_pred = get_numeric_filter_value( - final_ma_val_str, is_umsatz=False) - - umsatz_for_pred = np.nan if umsatz_for_pred == 0 else umsatz_for_pred - ma_for_pred = np.nan if ma_for_pred == 0 else ma_for_pred - - # 2. 'is_part_of_group' Feature erstellen - parent_d_val = self._get_cell_value_safe( - row_data, "Parent Account Name").strip().lower() - parent_o_val = self._get_cell_value_safe( - row_data, "System Vorschlag Parent Account").strip().lower() - parent_p_val = self._get_cell_value_safe( - row_data, "Parent Vorschlag Status").strip().lower() - cond1_pred = bool(parent_d_val and parent_d_val != 'k.a.') - cond2_pred = bool(parent_o_val and parent_o_val != - 'k.a.' and parent_p_val == 'x') - is_group_val = 1 if cond1_pred or cond2_pred else 0 - - # 3. Zusätzliche Features (Ratio, Log) erstellen - # Log-Transformationen - log_umsatz_val = np.log1p(umsatz_for_pred) if pd.notna( - umsatz_for_pred) else np.nan - log_ma_val = np.log1p(ma_for_pred) if pd.notna( - ma_for_pred) else np.nan - - # Umsatz pro MA - umsatz_pro_ma_val = np.nan - if pd.notna(umsatz_for_pred) and pd.notna( - ma_for_pred) and ma_for_pred > 0: - umsatz_pro_ma_val = umsatz_for_pred / ma_for_pred - return - - def _predict_technician_bucket(self, row_data): """ Führt eine Vorhersage des Servicetechniker-Buckets für eine einzelne Zeile durch. Die Feature-Erstellung ist exakt auf den Trainingsprozess abgestimmt.