1. Das Ziel: Ich erstelle ein Klassifizierungsmodell (XGBoost), um anhand des historischen Verhaltens vorherzusagen, ob eine „Neue Prognose“ mit einer „Bestehenden Bestellung“ übereinstimmt. Das Ziel ist binär (is_match 1 oder 0).
2. Die Daten:
- Volumen: ~21.000 historische Aktualisierungspaare.
- Hauptmerkmale: Ich berechne Deltas zwischen den alten und neuen Bestellungen:
delta_days: Differenz im Lieferdatum (z. B. +5 Tage). Verzögerung) Die meisten Updates sind klein (0–5 Tage), aber legitime Geschäftsereignisse können zu massiven Verschiebungen führen (z. B. Verzögerungen von 60 Tagen), bei denen es sich nicht um Datenfehler handelt.
- Das Problem: Als ich die standardmäßige IQR-Methode (1,5 * IQR) global anwendete, wurden ~50 % meiner Daten entfernt Datensatz (Rückgang von 21.000 auf 10.000 Zeilen).
- Warum: Da der Interquartilbereich sehr eng ist (die meisten Aktualisierungen sind 0), wurden die IQR-Grenzen extrem eng (z. B. -14 bis +10 Tage). Dadurch wurde im Wesentlichen jede „größere Verzögerung“ (z. B. 20 Tage) als Ausreißer behandelt, obwohl Verzögerungen von 20 Tagen in meinem Bereich gültige Szenarien sind.
- Ansatz A: Globale Winsorisierung (meine aktuelle Präferenz) Ich wende eine 1 % - 99 %-Perzentilobergrenze auf den gesamten Datensatz an, anstatt Zeilen zu entfernen.
Vorteile: Es löst das Datenverlustproblem (0 % Verlust) und bewahrt den Unterschied zwischen „Spät“ (60 Tage) und „Verrückt“ (5000 Tage, die auf 60 begrenzt wird). - Nachteile: Es wird ein einziger Schwellenwert für alle Käufer verwendet, wodurch „strikte“ Käufer und „chaotische“ Käufer während der Reinigungsphase gleich behandelt werden.
- Vorteile: Es wird berücksichtigt, dass „Normal“ für jeden Käufer unterschiedlich ist.
- Nachteile: Viele meiner Gruppen sind spärlich (kleine N < 10). Ich befürchte, dass statistische Methoden für so kleine Gruppen eine Varianz nahe Null berechnen und gültige Daten aggressiv löschen, wodurch das Problem des „50 %-Verlusts“ auf lokaler Ebene reproduziert wird.
5. Meine Frage: Ist es angesichts der Tatsache, dass ich später Z-Scores als Features für das Modell berechnen werde (das die relative „Seltsamkeit“ eines Werts pro Käufer erfasst), sicherer, sich an die globale Winsorisierung zu halten, um das Datenvolumen zu schonen, oder ist Grouped Cleaning selbst bei spärlichen Gruppen Standard?
Gibt es einen hybriden Ansatz (z. B. Global Cleaning + Local Feature Engineering), der in diesem Szenario bevorzugt wird?
Vielen Dank für Ihre Hilfe!
Mobile version