bugfix
This commit is contained in:
@@ -9124,23 +9124,29 @@ class DataProcessor:
|
||||
self.logger.info(f"Verteilung der neuen Techniker-Buckets:\n{df_filtered['Techniker_Bucket'].value_counts(normalize=True, dropna=False).sort_index().round(3)}")
|
||||
|
||||
# --- Kategoriale Features vorbereiten (Branche) ---
|
||||
branche_col_internal = "branche_ki" # << KORRIGIERT: Den neuen internen Namen verwenden
|
||||
self.logger.info(f"Verarbeite kategoriales Feature '{branche_col_internal}' (aus Spalte AL) fuer One-Hot Encoding...")
|
||||
branche_col_internal = "branche_ki" # Name der Spalte mit den Detail-Branchen
|
||||
self.logger.info(f"Verarbeite kategoriales Feature '{branche_col_internal}' (aus Spalte AL) und mappe es zu 'Branchen_Gruppe'...")
|
||||
|
||||
# Sicherstellen, dass die Spalte existiert
|
||||
if branche_col_internal not in df_filtered.columns:
|
||||
self.logger.critical(f"FEHLER: Spalte '{branche_col_internal}' nicht im DataFrame fuer One-Hot Encoding gefunden.")
|
||||
self.logger.critical(f"FEHLER: Spalte '{branche_col_internal}' nicht im DataFrame gefunden.")
|
||||
return None
|
||||
|
||||
# Greife auf 'branche_ki' zu und weise das Ergebnis auch wieder 'branche_ki' zu
|
||||
df_filtered.loc[:, branche_col_internal] = df_filtered[branche_col_internal].astype(str).fillna('Unbekannt').str.strip()
|
||||
# Bereinige die Branchennamen in der Spalte für das Mapping
|
||||
# Wichtig: .str.strip().str.title() oder .str.lower() anwenden, je nachdem wie das Mapping-Dict aufgebaut ist
|
||||
cleaned_branches = df_filtered[branche_col_internal].astype(str).str.strip()
|
||||
|
||||
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
# +++ NEU: Mapping von Detail-Branche zu Branch-Group +++++++++++++++++++
|
||||
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
# Wende das Mapping an. Wenn eine Branche nicht im Mapping ist, wird sie als 'Sonstige' oder 'Unbekannt' behandelt.
|
||||
# Verwende das global geladene BRANCH_MAPPING Dictionary
|
||||
df_filtered.loc[:, 'Branchen_Gruppe'] = df_filtered[branche_col_internal].map(BRANCH_MAPPING).fillna('Sonstige')
|
||||
# Erstelle das Mapping-Dictionary ebenfalls bereinigt (idealerweise schon in load_branch_mapping)
|
||||
# Für jetzt gehen wir davon aus, BRANCH_MAPPING hat bereinigte Keys
|
||||
|
||||
# Wende das Mapping an.
|
||||
# .map() ist case-sensitive. Um das zu umgehen, können wir die Keys des Mappings und die Werte in der Spalte normalisieren,
|
||||
# z.B. alles in Kleinbuchstaben.
|
||||
|
||||
# Sicherere Methode:
|
||||
# Erstelle eine normalisierte Version des Mapping-Dictionaries
|
||||
mapping_lower = {k.lower(): v for k, v in BRANCH_MAPPING.items()}
|
||||
# Wende dieses normalisierte Mapping auf die normalisierte Branchenspalte an
|
||||
df_filtered.loc[:, 'Branchen_Gruppe'] = cleaned_branches.str.lower().map(mapping_lower).fillna('Sonstige')
|
||||
|
||||
self.logger.info("Mapping zu 'Branchen_Gruppe' durchgeführt.")
|
||||
self.logger.debug(f"Verteilung der Branchen-Gruppen:\n{df_filtered['Branchen_Gruppe'].value_counts(normalize=True).sort_index().round(3)}")
|
||||
@@ -9148,12 +9154,13 @@ class DataProcessor:
|
||||
# +++ ENDE NEUER BLOCK ++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
# Verwende den korrekten internen Namen für das One-Hot Encoding
|
||||
df_encoded = pd.get_dummies(df_filtered, columns=[branche_col_internal], prefix='Branche', dummy_na=False)
|
||||
self.logger.info(f"One-Hot Encoding fuer '{branche_col_internal}' durchgefuehrt...")
|
||||
|
||||
# One-Hot Encoding auf der neuen 'Branchen_Gruppe'-Spalte durchführen
|
||||
df_encoded = pd.get_dummies(df_filtered, columns=['Branchen_Gruppe'], prefix='Gruppe', dummy_na=False) # << KORRIGIERT
|
||||
self.logger.info(f"One-Hot Encoding fuer 'Branchen_Gruppe' durchgefuehrt...")
|
||||
|
||||
# --- Finale Auswahl der Features fuer das Modell ---
|
||||
feature_columns_ml = [col for col in df_encoded.columns if col.startswith('Branche_')]
|
||||
# Passe die Feature-Auswahl an, um die neuen Gruppen-Features zu verwenden
|
||||
feature_columns_ml = [col for col in df_encoded.columns if col.startswith('Gruppe_')] # << KORRIGIERT
|
||||
feature_columns_ml.extend([
|
||||
'Log_Finaler_Umsatz_ML',
|
||||
'Log_Finaler_Mitarbeiter_ML',
|
||||
|
||||
Reference in New Issue
Block a user