US Used Vehicle Resales

Bad-Buy Prediction | Fehlkäufe vor dem Kauf erkennen
Data-Science-Projekt mit 448-Runs-Experimentierframework | StackFuel Capstone

Technischer Deep-Dive für Data Scientists. Feature-Katalog, Modellauswahl über 448 Runs, Threshold-Tuning und Error Analysis im Detail.

52.496 / 13.124
Train / Test (stratifiziert)
28 / 6
Features Champion / Modellfamilien getestet
F1 0,3726
bester Tracker-Lauf (Val-Split)
F1 0,42
Champion, Held-out-Test, Threshold 0,65
Agenda

Inhaltsübersicht

Die wichtigsten Technical Insights als Data-Science Deep-Dive

1Einstieg
2Datenstrategie
3Systematisches Experimentieren
4Key Findings
5Results & Error Analysis
6Empfehlungen & Opportunities
7Project Insights
Ausgangssituation

Die Herausforderung

Ein Fehlkauf beim Gebrauchtwagen-Ankauf kostet mehr als den Kaufpreis

Ein US-Gebrauchtwagenhändler kauft Fahrzeuge günstig auf Auktionen ein, um sie mit Marge weiterzuverkaufen. Das größte Risiko: ein 'Bad Buy' — ein Fahrzeug mit schweren Mängeln, das sich nicht weiterverkaufen lässt und stattdessen Lager-, Reparatur- und Abschreibungskosten verursacht.

Leitfrage: Lässt sich vor dem Kauf erkennen, ob ein Angebot ein Fehlkauf ist — ohne zu viele gute Autos abzulehnen? Das ist ein Precision/Recall-Abwägungsproblem auf einer seltenen Zielklasse, kein Accuracy-Problem.

Ausgangssituation

Zielmetrik und Trade-off

Warum Accuracy hier die falsche Metrik ist

12,35 %
Bad-Buy-Rate im Datensatz
Nur jedes achte Auto ist ein Fehlkauf — eine stark unausgewogene Zielklasse.
87,65 %
Accuracy eines Stumpfen Modells
Ein Modell, das stur immer 'guter Kauf' tippt, hätte schon 87,65 % Accuracy — und würde trotzdem keinen einzigen Fehlkauf erkennen.
F1
Leitmetrik (Bad-Buy-Klasse)
F1 der Bad-Buy-Klasse zwingt das Modell, die seltene Klasse tatsächlich zu treffen statt sie zu ignorieren.
Triage statt Automatik.
Das Modell markiert Auffälligkeiten zur menschlichen Prüfung – kein automatisches Ablehnen oder Durchwinken.
Datenstrategie

Dataset & Cleaning

65.620 Fahrzeuge, 33 Rohspalten — nichts gelöscht, alles aufgefüllt

Datensatz

65.620 Trainings-Fahrzeuge, 33 Rohspalten — stratifizierter Split 52.496 Train / 13.124 Test

Bereinigt

106.348 kategoriale Lücken mit 'Unknown' aufgefüllt, 621 unplausible Werte über Gruppen-Median-Imputation geheilt

Ergebnis

0 Zeilen gelöscht — 100 % Retention Rate, jedes Auto bleibt im Datensatz

Datenstrategie

Class Imbalance

12,35 % Bad Buys — Balance als Kern der Herausforderung

Klassenverteilung IsBadBuy

57.516 gute Käufe (87,65 %) vs. 8.104 Bad Buys (12,35 %).

Ein Modell, das immer 'guter Kauf' tippt, hätte 87,65 % Accuracy und würde trotzdem keinen einzigen Fehlkauf finden — deshalb ist F1 der Bad-Buy-Klasse die Leitmetrik, nicht Accuracy.

Datenstrategie

Bivariate Risk-Analyse

Text-Spalten ohne offensichtlichen Zahlenwert sind die stärksten Risikotreiber

Annahme
Trim, SubModel, VNZIP1 wirken wie reiner Text ohne mathematischen Wert
Befund
Bivariate Analyse zeigt: seltene Ausprägungen dieser Spalten haben eine stark überproportionale Fehlkaufquote — 'High-Risk-Nischen', die Expertenwissen bündeln (Standort, Bauart-Qualität, Serien-Ruf), das in nackten Zahlen wie VehBCost fehlt.
Annahme
Nur numerische Werte (Preis, Alter, Kilometerstand) sind aussagekräftig
Befund
Diese Hypothese rechtfertigt später die Aufnahme der starken Kategorien (Make, Model, Trim, SubModel, VNZIP1, Auction, WheelType) in den Feature-Katalog — und wird durch die systematische Testreihe bestätigt (Kapitel 3–4).
Datenstrategie

Preis-Korrelation → Feature Engineering

8 redundante MMR-Preisspalten werden zu 3 Verhältnis-Features verdichtet

Korrelation der Preis-Features

Die MMR-Preisfamilie (Einkauf/Aktuell × Auktion/Handel × Schnitt/Clean) ist stark untereinander korreliert — die 8 rohen Preis-Spalten sagen im Grunde alle dasselbe. Schlussfolgerung: 3 verdichtete Verhältnis-Features statt 8 Rohspalten — feat_price_ratio (Einkaufspreis vs. Marktpreis), feat_price_diff (Abweichung), feat_market_trend (Marktpreis-Entwicklung seit Einkauf).

Systematisches Experimentieren

Feature-Katalog & Model-Katalog

19 Feature-Sets × 6 Modellfamilien statt Ad-hoc-Training

1
Feature-Katalog bauen

19 Sets nach Risiko-Hypothese, von baseline_minimal (4 Feat.) bis all_in_with_noise (28 Feat.)

2
Model-Katalog bauen

3 Lernprinzipien × 2 Ausbaustufen: LogReg Ridge/Lasso, Random Forest flach/tief, HistGradientBoosting Standard/aggressiv

3
Kreuzen & Loggen

Jedes Feature-Set gegen jedes Modell — der ModelTracker protokolliert automatisch jede Kombination

Systematisches Experimentieren

Der ModelTracker

Selbstgebauter Experiment-Logger statt manuellem Vergleich

Kombinationen aus Model- und Feature-Kataloge

Pro Durchlauf werden F1, Recall, Precision und ROC-AUC in eine dauerhafte CSV geschrieben. Ein neuer Bestwert wird automatisch markiert. Das Modell selbst wird nur bei Bestwert oder F1 ≥ 0,30 exportiert ('Smart Export') — kein Datenmüll durch schwache Modelle.

Systematisches Experimentieren

Die Testreihe

448 protokollierte Durchläufe in rund einer Stunde aktiver Rechenzeit

448
geloggte Durchläufe (19 Feature-Sets × 6 Modellfamilien)
3 Sek.
Median-Abstand zwischen Durchläufen
~62 Min.
aktive Rechenzeit für alle 448 Durchläufe zusammen
Nach einer Stunde Wartezeit steht sofort eine auswertbare Tabelle mit allen 448 Kombinationen zur Verfügung.
Systematisches Experimentieren

Benchmark der Testreihe

Top-10 von 448 Durchläufen nach F1

Top-10-Durchläufe nach F1
Die 10 stärksten von 448 protokollierten Kombinationen aus Feature-Set und Modell.
Key Findings

Breiter Katalog schlägt Handpicking

Kategoriale Signale sind kein Rauschen, sondern der Haupthebel

Feature-SetFeaturesBester F1 (Tracker)
numeric — nur Zahlen (Preis, Alter, Kilometerstand)60,2918
all_in_with_noise — voller Katalog inkl. Kategorien280,3726

Noise mit wichtigem Informationsgehalt

Der Unterschied hält über mehrere Modellfamilien hinweg — kein Zufallstreffer. In die Breite zu gehen, statt vorab nach vermuteter Wichtigkeit auszuwählen, war der entscheidende Schritt — nicht ein bestimmter Algorithmus.

Key Findings

Der WheelType-Fund

Das stärkste Signal ist ein fast leeres Datenfeld

LogReg-Lasso Feature Importance

WheelType = Unknown dominiert die Koeffizienten des Champion-Modells — vor Preis und Alter.

Key Findings

Der WheelType-Fund

95,6 % unauffällig gefüllt, aber die fehlenden 4,4 % sind der Alarm

WheelType-WertAnteil der AutosFehlkaufquote
Alloy (Alufelgen)49,3 %11,1 %
Covers (Radkappen)45,3 %8,1 %
Special1,0 %12,6 %
Fehlt (leer)4,4 %70,3 %
Durchschnitt (alle Autos)12,3 %
Ein in 95,6 % der Fälle unauffälliges Feld wird in den restlichen 4,4 % zum stärksten Alarmsignal.
Key Findings

Threshold-Tuning für Business-Balance

Der Standard-Schwellenwert markiert zu viele Autos

F1 vs. Decision Threshold

F1-optimaler Schwellenwert bei 0,65 statt Standard 0,5 — abgestimmt auf den Triage-Zweck: Fehlkäufe fangen, ohne zu viele gute Autos abzulehnen.

Key Findings

Threshold-Tuning für Business-Balance

F1 0,37 → 0,42 durch den richtigen Schwellenwert

F1 0,37 → 0,42
Threshold 0,5 → 0,65
Precision 0,45
bei getuntem Threshold
Recall 0,40
bei getuntem Threshold
Ziel: Balance der Triage
Fehlkäufe blockieren, gute Autos behalten – statt generischem 0,5-Standard.
Results & Error Analysis

Modellvergleich

Alle drei Kandidaten auf demselben Held-out-Test (13.124 Fahrzeuge)

Modellvergleich auf dem Test-Set

Baseline F1 0,29 (Recall 0,61/Precision 0,19) · Random Forest F1 0,35 (0,64/0,24) · LogReg Lasso F1 0,37 (0,60/0,27) — Champion.

Results & Error Analysis

Confusion Matrix

Beim getunten Threshold 0,65

Confusion Matrix, Threshold 0,65

643 von 1.621 echten Fehlkäufen erkannt (TP), 978 verpasst (FN), 778 gute Autos fälschlich markiert (FP), 10.725 korrekt durchgewunken (TN).

Results & Error Analysis

Robustheits-Checks

Ist das Modell sauber, oder wurde geleakt?

F1 0,409
Champion auf echtem AIM-Holdout (7.292 Fahrzeuge)
~0,01
Lücke intern → echter Holdout
0,003
F1-Delta nach Entfernen von 2.082 memorisierbaren Kategorie-Levels
Es gibt kein Leakage.
Split vor Feature Engineering, keine target-abgeleiteten Features, 0 doppelte Zeilen über den Split hinweg — die Lücke zum echten Holdout ist der stärkste empirische Beleg, dass die internen Zahlen sauber sind.
Results & Error Analysis

Fehlerbild — FN/FP-Segmente

Blinder Fleck bei verpassten Fehlkäufen, akzeptabler Trade-off bei Fehlalarmen

Annahme
Verpasste Fehlkäufe (FN) — 978 Fahrzeuge
Befund
Nur 0,1 % WheelType=Unknown (vs. 62,8 % bei erkannten TP), im Schnitt $672 teurer und 0,9 Jahre neuer — Modell hat kein zweites Signal für diesen Fall.
Annahme
Fälschlich markierte gute Autos (FP) — 778 Fahrzeuge
Befund
Im Schnitt $1.740 günstiger und 2,3 Jahre älter als korrekt durchgewunkene (TN) — akzeptabler Trade-off für einen Triage-Filter, günstig einzeln nachzuprüfen.
Empfehlungen & Opportunities

Empfehlungen & Opportunities

Einsatz heute, offene Schritte für morgen

R1 · Einsatz
Triage-Filter (Threshold 0,65)
  • ~10 % markiert für Review, ~45 % Precision — kein Auto-Reject
R2 · Intake
WheelType=Unknown als Warnsignal
  • 70,3 % Fehlkaufquote bei fehlendem Eintrag vs. 12,3 % Durchschnitt
O1 · Modell erweitern
Zweites Signal für den blinden Fleck
  • Unabhängiges Risiko-Merkmal für neuere/teurere Fehlkäufe (z. B. Marktpreis-Abweichung)
O2 · Modell vereinfachen
cats_strong (7 Feat., F1 0,3587) als schlankere Alternative testen
  • 96 % der Leistung des vollen Katalogs mit einem Viertel der Features
Project Insights

Project Insights

Tech-Stack, Reproduzierbarkeit

Tech-Stack
  • Python · pandas · scikit-learn · Matplotlib/Seaborn · Jupyter · uv
Reproduzierbarkeit
  • 12 Notebooks, durchgehend nummeriert (00–07) und ausgeführt
  • Selbstgebauter ModelTracker wandert perspektivisch ins eigene wgnd-toolkit
Project Insights

Learnings

Vier Methodik-Lehren, kompakt

Breites Netz vor Vorauswahl
  • Breites Feature-Net vor dem Aussortieren casten (F1 0,29 → 0,37, siehe Findings).
Fehlen als Signal
  • Prüfen, ob 'fehlt' selbst ein Signal ist, bevor man auffüllt (WheelType-Fund).
Batch-Statistiken einfrieren
  • Batch-Statistiken für Einzelfall-Scoring einfrieren (Median-Imputation, Quantil-Bins).
Gleicher Test-Set-Vergleich
  • Alle Finalisten auf demselben Test-Set vergleichen — RF-0,39-Annahme widerlegt (tatsächlich 0,35).

US Used Vehicle Resales

Bad-Buy Prediction | Fehlkäufe vor dem Kauf erkennen
Data-Science-Projekt mit 448-Runs-Experimentierframework | StackFuel Capstone

Fast leer und doch stark

Ein fast leeres Datenfeld war das stärkste Signal. Systematisches Testen schlägt Handverlesen: ein breiter Feature-Katalog plus sauberes Threshold-Tuning bringen mehr als ein einzelnes 'besseres' Modell. Der Champion läuft als Triage-Filter, nicht als Automatik — er markiert, ein Mensch entscheidet.