Strategie zur Entfernung von Ausreißern in verzerrten LieferkettendatenPython

Python-Programme
Anonymous
 Strategie zur Entfernung von Ausreißern in verzerrten Lieferkettendaten

Post by Anonymous »

Ich arbeite an einem Forschungsprojekt zum Supply Chain Forecast Matching und weiß nicht, welche Strategie am besten für den Umgang mit Ausreißern geeignet ist. Ich würde mich über Ratschläge aus Feature-Engineering-Perspektive freuen.
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.
3. Der Konflikt (das 50 %-Problem): Ich muss „Mülldaten“ (z. B. Tippfehler, die Verzögerungen von 5.000 Tagen verursachen) bereinigen, ohne gültige Geschäftsschwankungen zu beseitigen.
  • 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.
4. Die Ansätze, die ich in Betracht ziehe:
  • 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.
[*]Ansatz B: Gruppierte Ausreißerentfernung (von einem Senior vorgeschlagen) Ich gruppiere die Daten nach Käufer + Verkäufer + Produkt und entferne Ausreißer pro Gruppe.
  • 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!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post