US Used Vehicle Resales

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

65.620
Auktions-Fahrzeuge
12,35 %
Bad-Buy-Rate
448
geloggte Modell-Läufe
F1 0,37 → 0,42
Champion, Threshold getunt
Agenda

Inhaltsübersicht

Der komplette Projektverlauf — von der Exploration bis zur Empfehlung

1Einstieg
2Data & Exploration
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.
Data & Exploration

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

Data & Exploration

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.

Data & Exploration

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).
Data & Exploration

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

Blinder Fleck — verpasste Fehlkäufe

Warum ein Drittel der Bad Buys unentdeckt bleibt

Annahme
Erkannte Fehlkäufe (TP)
Befund
62,8 % tragen das WheelType-fehlt-Signal — das Modell erkennt sie leicht.
Annahme
Verpasste Fehlkäufe (FN)
Befund
Nur 0,1 % tragen das WheelType-fehlt-Signal — sie sehen 'sauber' aus, sind im Schnitt $672 teurer und 0,9 Jahre neuer als die erkannten.
Das Modell verlässt sich stark auf ein einziges Signal und hat kein zweites für neuere, teurere Autos, die trotzdem ein Fehlkauf sind.
Results & Error Analysis

Fälschlich markierte gute Autos

Der akzeptable Preis eines Triage-Filters

Die zu Unrecht markierten guten Autos (FP) sind im Schnitt $1.740 günstiger und 2,3 Jahre älter als die korrekt durchgewunkenen (TN).

Ein akzeptabler Kompromiss, weil diese Fahrzeuge günstig einzeln nachzuprüfen sind.
Empfehlungen & Opportunities

Empfehlungen

Direkt umsetzbar für dieses Projekt

R1 · Einsatz
Als Triage-Filter, nicht als Automatik
  • Modell bei Threshold 0,65 laufen lassen, um ~10 % eines Autostapels für menschliche Prüfung zu markieren, bei ~45 % Trefferquote
  • Nicht als automatische Ablehnung nutzen — dafür ist die Genauigkeit nicht hoch genug
R2 · Intake
Fehlender WheelType-Eintrag als Warnsignal
  • Direkt beim Ankauf prüfen — kostet nichts extra, das Feld wird eh schon erfasst
  • Fehlkaufquote bei fehlendem Eintrag: 70,3 % vs. 12,3 % Durchschnitt
Empfehlungen & Opportunities

Opportunities

Konkrete, noch offene nächste Schritte

O1 · Modell erweitern
Zweites Signal für den blinden Fleck
  • Ein zweites, unabhängiges Risiko-Merkmal ergänzen (z. B. Abweichung vom Marktpreis)
  • Gezielt für neuere, teurere Fehlkäufe, die aktuell verpasst werden
O2 · Modell vereinfachen
Schlankeres 7-Feature-Modell testen
  • cats_strong (7 Feat.) erreicht F1 0,3587 — 96 % der Leistung des vollen 28-Feature-Katalogs
  • Lohnt einen echten Vergleich: viel einfacheres, leichter wartbares Modell für kaum F1-Verlust
Project Insights

Learnings

Methodik-Lehren fürs nächste Projekt — nicht spezifisch für diesen Datensatz

Breites Netz vor Vorauswahl
  • Vor dem Aussortieren ein breites Feature-Net casten — nicht vorher raten, was wichtig sein könnte.
Fehlen als Signal
  • Prüfen, ob 'der Wert fehlt' selbst schon ein Signal ist, bevor man ihn stillschweigend auffüllt.
Batch-Statistiken einfrieren
  • Median und Quantil-Grenzen einmal einfrieren, damit auch ein einzelnes neues Auto bewertet werden kann.
Gleicher Test-Set-Vergleich
  • Alle Modell-Finalisten immer auf demselben Test-Set vergleichen — eine frühere Annahme 'Random Forest ist bestes Modell (F1 ~0,39)' hielt dem nicht stand (tatsächlich F1 0,35, Platz 2).

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.