Kennzahlen zur Modellbewertung entscheiden darüber, ob ein Modell nutzbar ist. Die Genauigkeit (Accuracy) ist dabei die am häufigsten falsch verwendete Zahl. Dieser Artikel erklärt, welche Kennzahl wann aussagekräftig ist und welche Fehler in der Praxis Geld kosten.

\n

Die Wahrheitsmatrix

\n

Alles baut auf vier Zahlen auf. Am Beispiel einer Betrugserkennung, von 10.000 Transaktionen sind 100 betrügerisch:

\n
                        Vorhersage: Betrug    Vorhersage: sauber\nTatsaechlich Betrug     richtig positiv (TP)  falsch negativ (FN)\n                        = 60                  = 40\nTatsaechlich sauber     falsch positiv (FP)   richtig negativ (TN)\n                        = 200                 = 9700\n\n# Die vier Zahlen haben sehr unterschiedliche Kosten:\n#   TP  Betrug erkannt               -> gut\n#   FN  Betrug uebersehen            -> Geld verloren, oft hoch\n#   FP  saubere Transaktion blockiert-> Kunde verargert, Bearbeitungskosten\n#   TN  korrekt durchgelassen        -> gut\n\n# Deshalb ist "Accuracy" hier die schlechteste Kennzahl:\n#   Ein Modell, das IMMER "sauber" sagt, hat 99 % Accuracy\n#   (9900 von 10000) - und erkennt keinen einzigen Betrug.
\n

Die Kennzahlen und was sie aussagen

\n
Genauigkeit (Precision) = TP / (TP + FP)\n  "Wenn das Modell Alarm schlaegt, wie oft hat es recht?"\n  Hier: 60 / (60 + 200) = 23 %     -> drei von vier Alarmen sind Fehlalarm!\n  Wichtig, wenn Fehlalarme teuer sind (Bearbeitung, Kundenkontakt).\n\nTrefferquote (Recall, Sensitivitaet) = TP / (TP + FN)\n  "Von den echten Faellen, wie viele wurden gefunden?"\n  Hier: 60 / (60 + 40) = 60 %      -> 40 % des Betrugs schluepft durch!\n  Wichtig, wenn ein uebersehener Fall teuer ist (Betrug, Krankheit).\n\nF1-Wert = 2 * (Precision * Recall) / (Precision + Recall)\n  Hier: 2 * 0.23 * 0.60 / (0.23 + 0.60) = 33 %\n  Das harmonische Mittel - zieht beide Werte nach unten,\n  wenn einer davon schlecht ist. Gute Zahl fuer einen Vergleich.\n\nGenauigkeit (Accuracy) = (TP + TN) / alle\n  Hier: (60 + 9700) / 10000 = 97,6 %\n  Beeindruckend - und wertlos, weil die Klassen ungleich verteilt sind.\n\nSpezifitaet (True Negative Rate) = TN / (TN + FP)\n  "Von den sauberen Faellen, wie viele wurden korrekt durchgelassen?"\n  Hier: 9700 / 9900 = 98 %\n  Wichtig, wenn Fehlalarme vermieden werden sollen.
\n

Die Präzision-Trefferquote-Abwägung

\n

Beide Werte lassen sich fast immer gegeneinander verschieben, indem man die Entscheidungsschwelle ändert:

\n
Schwelle senken (Modell schlaegt schneller Alarm):\n   -> Recall steigt   (mehr echte Faelle gefunden)\n   -> Precision sinkt (mehr Fehlalarme)\n   Anwendung: Krankheitsfrueherkennung, Betrug im grossen Stil\n\nSchwelle heben (Modell braucht mehr Sicherheit):\n   -> Precision steigt (weniger Fehlalarme)\n   -> Recall sinkt     (mehr Faelle uebersehen)\n   Anwendung: automatisches Sperren von Konten, Schutz vor Fehlalarmen\n\n# Die Schwelle ist eine GESCHAEFTSENTSCHEIDUNG, keine technische.\n# Wer 200 Fehlalarme je Tag bearbeiten kann, waehlt anders\n# als wer keinen einzigen Fehlalarm dulden darf.\n#\n# Die Frage lautet nie "ist das Modell gut?", sondern:\n#   "Welche Schwelle passt zu unseren Kosten?"\n# Deshalb gehoert die Kostenmatrix in die Bewertung:\n#   Kosten je FN = 500 EUR, Kosten je FP = 5 EUR\n#   -> 40 FN = 20.000 EUR, 200 FP = 1.000 EUR\n#   -> Eine Senkung der Schwelle, die 20 FN in 50 TP umwandelt,\n#      lohnt sich selbst bei 500 zusaetzlichen Fehlalarmen.
\n

Der Schwellwert ist wichtiger als der Modellvergleich

\n
# Ablauf, der sich bewaehrt:\n#   1. Modell liefert Wahrscheinlichkeiten, nicht Entscheidungen\n#   2. Alle Schwellen durchrechnen und die Kosten je Schwelle bestimmen\n#   3. Schwellen-Minimum waehlen\n#   4. Erst DANN Modelle vergleichen (jeweils mit optimaler Schwelle)\n\nfrom sklearn.metrics import precision_recall_curve\n\np, r, schwellen = precision_recall_curve(y_wahr, y_wahrscheinlichkeit)\n\nkosten_fp, kosten_fn = 5, 500\nbeste = None\nfor i, s in enumerate(schwellen):\n    fp = (1 - p[i]) * 10000   # Abschaetzung\n    fn = (1 - r[i]) * 100\n    kosten = fp * kosten_fp + fn * kosten_fn\n    if beste is None or kosten < beste[0]:\n        beste = (kosten, s, p[i], r[i])\n\nprint(f"Beste Schwelle {beste[1]:.3f}: "\n      f"Precision {beste[2]:.1%}, Recall {beste[3]:.1%}, Kosten {beste[0]:.0f} EUR")\n\n# Waehle NIE eine Schwelle von 0.5, nur weil sie sich rund anfuehlt!
\n

Teure Fehler bei der Bewertung

\n
    \n
  1. Datenleck (Data Leakage): Sind Trainings- und Testdaten vermischt, ist das Ergebnis geschönt. Bei Zeitreihen ist die wichtigste Regel: Nur mit vergangenen Daten trainieren und auf späteren prüfen. Ein zufälliges Aufteilen von Zeitreihen ist immer falsch.
  2. \n
  3. Keine Schichtung bei ungleichen Klassen. Ohne Schichtung (strata) kann die Testmenge zufällig fast keine Betrugsfälle enthalten.
  4. \n
  5. Nur eine Aufteilung. Eine einzelne Aufteilung kann Glück oder Pech sein. Kreuzprüfung (k-fold) mit mehreren Durchläufen und Angabe der Streuung ist Pflicht.
  6. \n
  7. Accuracy als Kennzahl bei ungleichen Klassen. Siehe oben.
  8. \n
  9. Der Testmenge zu oft verwenden. Wer 50 Varianten prüft und die beste auswählt, hat sich an die Testmenge angenähert. Die Zahlen dort sind dann zu gut. Für die Auswahl eine dritte Menge (Validierung) verwenden und die Testmenge nur einmal am Ende.
  10. \n
  11. Die Verteilung nicht beachten. Ein Modell auf Daten aus einem Netz mit 10 Servern funktioniert vielleicht nicht in einem Netz mit 10.000. Verteilungsverschiebung (drift) ist der häufigste Grund, warum ein Modell in Produktion versagt.
  12. \n
  13. Keine Betrachtung nach Gruppen. Ein Modell mit gutem Gesamtwert kann eine Teilgruppe systematisch falsch behandeln. Nach relevanten Gruppen aufschlüsseln ist Pflicht – besonders dort, wo Entscheidungen Menschen betreffen.
  14. \n
\n

Kalibrierung: die vergessene Eigenschaft

\n
# Ein Modell kann richtig sortieren und trotzdem falsch rechnen.\n# Beispiel: Bei 100 Vorhersagen mit Wert 0,9 sind nur 60 wirklich positiv.\n#   -> Das Modell ist schlecht kalibriert.\n# Sichtbar wird das an der Kalibrierungskurve:\n#   Vorhergesagte Wahrscheinlichkeit gegen tatsaechliche Haeufigkeit.\n\nfrom sklearn.calibration import calibration_curve\nfrom sklearn.isotonic import IsotonicRegression\n\nvorher, echt = calibration_curve(y_wahr, y_wahrscheinlichkeit, n_bins=10)\n#   Liegen die Punkte nahe der Diagonalen, ist die Kalibrierung gut.\n\n# Nachkalibrieren, wenn die Wahrscheinlichkeiten weiterverwendet werden\n# (z. B. fuer Kostenschwellen):\niso = IsotonicRegression(out_of_bounds="clip")\niso.fit(y_wahrscheinlichkeit_val, y_wahr_val)\nkalibriert = iso.predict(y_wahrscheinlichkeit_test)\n\n# Wichtig, sobald die Wahrscheinlichkeit eine Bedeutung hat:\n#   - Kostenschwellen\n#   - automatische Entscheidungen\n#   - Weiterverarbeitung durch andere Modelle
\n

Was im Betrieb gemessen werden muss

\n
    \n
  • Verteilungsverschiebung der Eingaben: Ändern sich die Eingabedaten (neue Server, neue Benutzer, geänderte Formulare), sinkt die Qualität.
  • \n
  • Verteilungsverschiebung des Ziels: Ändert sich die Häufigkeit (mehr Betrug, weniger Krankheitsfälle), verschiebt sich die optimale Schwelle.
  • \n
  • Tatsächliche Kennzahlen zuerst: Wer Betrug erkennt, braucht eine Rückmeldung, ob die prädi­zierten Fälle wirklich Betrug waren. Ohne Rückmeldung gibt es keine Messung im Betrieb – und ohne Messung keine Verbesserung.
  • \n
  • Eingriffsquote: Wie viele Entscheidungen trifft das Modell, wie viele gehen an einen Menschen? Eine Änderung dieser Verhältnisse ist oft das erste Anzeichen für ein Problem.
  • \n
\n

Prüfliste

\n
    \n
  1. Sind die Klassen ungleich verteilt – und ist Accuracy deshalb ungeeignet?
  2. \n
  3. Sind Precision und Recall beide berichtet, mit der gewählten Schwelle?
  4. \n
  5. Ist die Schwelle aus einer Kostenbetrachtung abgeleitet, nicht geraten?
  6. \n
  7. Ist die Zeittrennung bei der Aufteilung eingehalten?
  8. \n
  9. Sind die Ergebnisse je Gruppe aufgeschlüsselt?
  10. \n
  11. Ist die Kalibrierung geprüft, wenn Wahrscheinlichkeiten weiterverwendet werden?
  12. \n
  13. Gibt es im Betrieb eine Rückmeldung über die tatsächlichen Ereignisse?
  14. \n
  15. Wird die Verteilung der Eingaben und der Häufigkeit überwacht?
  16. \n
  17. Wurden Trainings- und Testdaten wirklich getrennt behandelt – auch bei Merkmalen, die das Ziel indirekt enthalten?
  18. \n
\n

Verwandte Grundlagen: Maschinelles Lernen, Maschinelles Lernen, Trainingsdaten, Halluzination.