ML Atlas

Machine Learning von Grund auf · Lektion 2.4 · 11 von 33 fertigen Lektionen · 12 Min.

Kalibrierung: Heißt 0,8 auch 80 %?

Kurz gesagt

Ein Modell kann gut sortieren und falsche Prozente nennen. Naive Bayes erklärt 98 % Sicherheit und trifft zu 88 %. Temperatur hilft, Entscheidungen bleiben.

Aufwärmen Zwei Fragen aus früheren Lektionen. Eine Minute, und sie blockiert die Lektion nicht.
Aus Lektion 2.3: Schwelle, ROC und PR: alle Schwellen auf einmal Bösartige sind 5 % statt 37 %. ROC AUC bewegt sich kaum. Warum fällt AP?

Antwort anzeigen

Richtige Antwort: Weil dieselben Fehlalarme jetzt einen viel größeren Teil aller Alarme ausmachen

Die FPR teilt Fehlalarme durch die Zahl der gutartigen, die sich nicht ändert. Die Präzision teilt sie durch alle Alarme. Bei der Schwelle 0,3 und 19 bösartigen kommen 144 Fehlalarme auf 17 richtige.

Aus Lektion 2.2: Einen Klassifikator bewerten: mehr als Genauigkeit Warum kann die Genauigkeit bei den Tumordaten in die Irre führen?

Antwort anzeigen

Richtige Antwort: Gutartige sind in der Mehrheit, daher kann ein Modell gut abschneiden und jeden Krebs übersehen

Bei unausgewogenen Klassen bringt schon die Mehrheitsantwort allein eine ansehnliche Genauigkeit und einen Recall von null.

In Lektion 2.3 haben die ROC- und PR-Kurven geprüft, wie gut ein Modell Biopsien sortiert. Ob die Zahlen des Modells stimmen, haben sie nie gefragt. Das Modell sagt „0,8“. Heißt das, dass 80 % solcher Biopsien bösartig sind? Das ist die Frage der Kalibrierung. Heute prüfst du sie an zwei Modellen und siehst, dass manchmal eine einzige Zahl sie repariert, ohne eine einzige Entscheidung zu ändern.

Erst vorhersagen, dann prüfen Naive Bayes bewertet 171 Validierungsbiopsien, die es nie gesehen hat. Im Mittel erklärt es 98 % Sicherheit, dass es richtig liegt. Bei welchem Anteil der Biopsien liegt es wirklich richtig (Schwelle 0,5)?
Wie sicher bist du?

Interaktives Labor

Dieses interaktive Labor läuft im Browser mit aktiviertem JavaScript. Der Text drumherum beschreibt, was es zeigt.

Antwort anzeigen

Richtige Antwort: Bei etwa 88 %, also 10 Punkte seltener, als es verspricht

Es erklärt im Mittel 98,3 % und liegt zu 88,3 % richtig: ein Unterschied von 10,0 Punkten. 149 der 171 Biopsien bekommen eine Sicherheit über 99 %, und 5 davon sind Fehler. Die Temperatur T = 4,12 senkt den Brier-Score von 0,100 auf 0,071 und ändert keine einzige Entscheidung.

Probier es aus

  • Beginne mit Naive Bayes ohne Kalibrierung. Wo liegen die Kreise im Vergleich zur Diagonale? Wie viele Biopsien bekommen eine Sicherheit über 99 %, und wie viele davon sind Fehler?
  • Schalte die Temperatur ein. Was passiert mit den Kreisen, mit dem Brier-Score und mit ROC AUC? Wie viele Entscheidungen haben sich geändert?
  • Wechsle zur logistischen Regression und vergleiche sie ohne Kalibrierung und mit Temperatur. Brauchte dieses Modell eine Korrektur?

Wenn du es im Lab geprüft hast, geben wir dem, was du siehst, einen Namen.

Die Idee in einfachen Worten

Ein Modell ist kalibriert, wenn man seine Zahlen wörtlich nehmen kann: Unter den Biopsien, denen es 0,8 gibt, sind etwa 80 % bösartig, unter denen mit 0,1 etwa 10 %. Das prüft ein Zuverlässigkeitsdiagramm. Die Biopsien werden nach der erklärten Wahrscheinlichkeit in Bänder geteilt, und in jedem Band zählt man, welcher Anteil wirklich bösartig ist. Ein kalibriertes Modell liegt auf der Diagonale. Kreise rechts unter der Diagonale bedeuten übertriebene Sicherheit.

Kalibrierung ist etwas anderes als Sortieren. ROC AUC aus Lektion 2.3 fragt nur, ob eine bösartige Biopsie einen höheren Score bekommt als eine gutartige. Naive Bayes sortiert gut (ROC AUC 0,966, fast wie die logistische Regression mit 0,969), aber seine Prozente sind aufgebläht. Unter den 55 Biopsien, denen es mindestens 0,9 gibt, erklärt es im Mittel 99,6 %, und bösartig sind 89,1 %.

Der Brier-Score misst beides zugleich: die mittlere quadrierte Differenz zwischen erklärter Wahrscheinlichkeit und dem, was passiert ist (1 für bösartig, 0 für gutartig). Weniger ist besser. ECE sagt, wie weit die Kreise im Mittel von der Diagonale entfernt liegen.

Jak to policzono
  • Biopsien: Breast Cancer Wisconsin (Diagnostic), UCI, Lizenz CC BY 4.0. 569 Biopsien, je 10 „mean“-Messwerte.
  • Geschichtete Aufteilung: 171 Validierungsbiopsien (30 %); vom Rest 266 zum Lernen und 132 zum Anpassen der Kalibrierung. Weder das Modell noch die Kalibrierung sehen die Validierungsbiopsien.
  • Modelle: Naive Bayes mit Normalverteilung (GaussianNB) sowie Standardisierung plus logistische Regression (C = 1).
  • Temperatur: eine Zahl T, auf den 132 Kalibrierungsbiopsien so angepasst, dass der Log-Loss am kleinsten ist. Diagramm und ECE: 10 Bänder zu je 0,1.

Warum es funktioniert

Naive Bayes nimmt an, dass die Messwerte eines Tumors voneinander unabhängig sind. In diesen Daten sind sie es nicht: Radius, Umfang und Fläche eines Tumors sagen fast dasselbe. Also zählt das Modell denselben Beleg mehrmals und addiert ihn immer wieder zum Score, bis seine Sicherheit 99 % und mehr erreicht. Die Reihenfolge der Biopsien bleibt sinnvoll, weil ein größerer Tumor weiterhin einen höheren Score bekommt, aber die Prozente wachsen zu schnell.

Die Temperatur teilt den Score des Modells vor der Sigmoidfunktion durch eine Zahl T. Für Naive Bayes ist T = 4,12, also schrumpft jeder Score um mehr als das Vierfache. Das Teilen durch eine positive Zahl ändert weder das Vorzeichen eines Scores noch die Reihenfolge der Biopsien. Keine Entscheidung bei der Schwelle 0,5 ändert sich, und ROC AUC bleibt 0,966. Nur die Prozente ändern sich: Die mittlere Sicherheit sinkt von 98,3 % auf 91,1 %, der Brier-Score von 0,100 auf 0,071 und ECE von 0,101 auf 0,055. Jetzt bekommen 34 Biopsien eine Sicherheit über 99 %, und keine davon ist ein Fehler.

Die logistische Regression ist fast von Anfang an kalibriert: Sie erklärt 92,5 % und liegt zu 91,2 % richtig. Ihre Temperatur ergibt T = 0,93, nahe bei 1, und der Brier-Score bleibt 0,063. Das ist kein Zufall: Die logistische Regression lernt, indem sie den Log-Loss senkt, und der ist genau die Strafe für falsch angegebene Prozente.

Das ist kein Zufall einer einzigen Aufteilung. Im Code unten läuft dasselbe Experiment auf 50 anderen Aufteilungen: Naive Bayes erklärt im Mittel 98,5 % und liegt zu 91,2 % richtig, und die Temperatur senkt seinen Brier-Score jedes Mal. Bei der logistischen Regression ändert die Temperatur fast nichts.

Häufiger Fehler

Richtig oder falsch: „Ein Score von 0,8 heißt 80 % Wahrscheinlichkeit.“ Falsch, solange du es nicht geprüft hast. Ein Modell gibt eine Zahl von 0 bis 1 aus, aber nichts garantiert, dass sie eine Wahrscheinlichkeit im üblichen Sinn ist. Im Lab gibt Naive Bayes 149 der 171 Biopsien eine Sicherheit über 99 %, und 5 davon sind Fehler. Wären diese Prozente wahr, gäbe es darunter weniger als zwei Fehler. Lies den Score eines Modells erst dann als Wahrscheinlichkeit, wenn du das Zuverlässigkeitsdiagramm auf Daten geprüft hast, die das Modell nicht gesehen hat.

Eine Warnung in die andere Richtung: Kalibrierung verbessert das Sortieren nicht. Die Temperatur ändert weder ROC AUC noch die Genauigkeit, und einem gut kalibrierten Modell bringt sie nichts: Der Brier-Score der logistischen Regression bleibt 0,063. Kalibrierung brauchst du, wenn die Zahlen des Modells weitergehen: in eine Schwelle nach den Kosten der Fehler (Lektion 2.6), in eine Summe von Risiken, in ein Gespräch mit einer Patientin.

Quiz

Drei Fragen zur Selbstkontrolle. Wähle eine Antwort oder klappe die Lösung unter der Frage auf. Mit der Tastatur: Pfeiltasten wählen, Enter oder Leertaste bestätigt.

1. Was bedeutet es, dass ein Modell kalibriert ist?
Antwort anzeigen

Richtige Antwort: Dass unter den Fällen mit Score 0,8 etwa 80 % zur positiven Klasse gehören

Kalibrierung betrifft Prozente, nicht das Sortieren. Ein Zuverlässigkeitsdiagramm prüft das Band für Band: Ein kalibriertes Modell liegt auf der Diagonale.

2. Naive Bayes hat ROC AUC 0,966, erklärt aber 98,3 % bei einer Genauigkeit von 88,3 %. Was folgt daraus?
Antwort anzeigen

Richtige Antwort: Es sortiert die Biopsien gut, aber seine Prozente sind aufgebläht

ROC AUC misst die Reihenfolge, Kalibrierung die Prozente. Das sind zwei verschiedene Dinge: Die Temperatur repariert die Prozente von Naive Bayes, und ROC AUC bleibt 0,966.

3. Die logistische Regression erklärt 92,5 % und liegt zu 91,2 % richtig. Die Temperatur ergibt T = 0,93. Was tun?
Antwort anzeigen

Richtige Antwort: Lassen: Es ist fast kalibriert, und der Brier-Score wird nicht besser

T nahe 1 heißt, die Korrektur ist so gut wie keine. Der Brier-Score bleibt 0,063. Kalibrierung hilft übertrieben sicheren Modellen wie Naive Bayes.

Das Wichtigste

  • Kalibrierung fragt, ob die Prozente des Modells stimmen; Sortieren (ROC AUC) ist eine andere Frage.
  • Kalibrierung prüfst du mit einem Zuverlässigkeitsdiagramm und dem Brier-Score auf Daten, die das Modell nicht gesehen hat.
  • Naive Bayes ist übertrieben sicher, weil es denselben Beleg aus verwandten Messwerten mehrmals zählt.
  • Die Temperatur repariert die Prozente mit einer Zahl und ändert weder eine Entscheidung noch ROC AUC.

Tiefer: Formel, Code, Praxis

Die Mathematik

Zuverlässigkeitsdiagramm: In einem Band B erklärter Wahrscheinlichkeiten vergleichst du die mittlere Angabe conf(B) mit dem Anteil der Positiven acc(B). Ein kalibriertes Modell erfüllt P(y = 1 | p) = p.

Brier = (1/n) · Σ (pᵢ − yᵢ)², und ECE = Σ_B (|B| / n) · |acc(B) − conf(B)|.

Temperatur: Das Modell gibt einen Score z (Logit), und die Wahrscheinlichkeit ist p = σ(z / T) mit σ(z) = 1 / (1 + e^(−z)). T passt du auf einem eigenen Teil der Daten an, indem du den Log-Loss senkst. Bei T > 1 werden die Prozente flacher. Das Vorzeichen von z / T ist das von z, also ändert sich die Entscheidung p ≥ 0,5 (also z ≥ 0) nicht.

Platt: p = σ(a · z + b), zwei Zahlen statt einer. Die Verschiebung b kann Entscheidungen ändern: Im Lab ändert sie bei Naive Bayes 2.

Im Code (Python)

Dasselbe Experiment in scikit-learn auf 50 zufälligen Aufteilungen (266 Biopsien zum Lernen, 132 zum Kalibrieren, 171 zum Bewerten): mittlere Sicherheit, Genauigkeit und Brier-Score vor und nach der Temperatur.

import numpy as np
from scipy.optimize import minimize_scalar
from scipy.special import expit
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import brier_score_loss

X, y = load_breast_cancer(return_X_y=True)
X, y = X[:, :10], 1 - y  # die 10 „mean“-Messwerte, wie im Lab; 1 = bösartig
def score(m, rows):  # Score des Modells vor der Sigmoidfunktion: log P(bösartig) - log P(gutartig)
    lp = m.predict_log_proba(X[rows])
    return lp[:, 1] - lp[:, 0]
def run(model, seed):  # 266 zum Lernen, 132 zum Kalibrieren, 171 zum Bewerten (Validierung)
    rest, va = train_test_split(np.arange(len(y)), test_size=0.3, stratify=y, random_state=seed)
    tr, ca = train_test_split(rest, test_size=1 / 3, stratify=y[rest], random_state=seed)
    m = model.fit(X[tr], y[tr])
    zc, zv = score(m, ca), score(m, va)
    loss = lambda T: np.mean(np.logaddexp(0, -zc / T) * y[ca] + np.logaddexp(0, zc / T) * (1 - y[ca]))
    T = minimize_scalar(loss, bounds=(0.05, 20), method="bounded").x  # Temperatur: eine Zahl, angepasst auf dem Kalibrierungsteil
    p0, p1 = expit(zv), expit(zv / T)
    conf, acc = np.maximum(p0, 1 - p0).mean(), ((p0 >= 0.5) == y[va]).mean()
    same = ((p0 >= 0.5) == (p1 >= 0.5)).all()  # Teilen durch T ändert nie eine Entscheidung
    return conf, acc, brier_score_loss(y[va], p0), brier_score_loss(y[va], p1), T, same
for name, model in (("naive Bayes", GaussianNB()), ("logistic regression", make_pipeline(StandardScaler(), LogisticRegression()))):
    r = np.array([run(model, s) for s in range(50)])
    print(f"{name}, 50 splits: declares {r[:, 0].mean():.1%}, accuracy {r[:, 1].mean():.1%}; Brier {r[:, 2].mean():.3f} -> {r[:, 3].mean():.3f} with T = {r[:, 4].mean():.2f}; lower in {(r[:, 3] < r[:, 2]).sum()} of 50, decisions kept in {int(r[:, 5].sum())} of 50")

Ausgabe

naive Bayes, 50 splits: declares 98.5%, accuracy 91.2%; Brier 0.077 -> 0.061 with T = 3.86; lower in 50 of 50, decisions kept in 50 of 50
logistic regression, 50 splits: declares 93.4%, accuracy 93.5%; Brier 0.047 -> 0.047 with T = 0.94; lower in 17 of 50, decisions kept in 50 of 50

Die Aufteilungen sind andere als im Lab, also auch die Zahlen: Naive Bayes erklärt im Mittel 98,5 % und liegt zu 91,2 % richtig. Das Bild ist dasselbe. Die Temperatur senkt seinen Brier-Score in 50 von 50 Aufteilungen und ändert keine Entscheidung, bei der logistischen Regression bewirkt sie fast nichts: Brier 0,047 vorher und nachher.

Für die Praxis
  • In scikit-learn prüfen calibration_curve, CalibrationDisplay und brier_score_loss die Kalibrierung, immer auf Daten, die das Modell nicht gesehen hat.
  • CalibratedClassifierCV repariert sie (method="sigmoid" ist Platt, "isotonic" die isotone Regression); die Temperatur lässt sich leicht selbst ergänzen. Die isotone Regression braucht mehr Daten, weil sie eine ganze Treppenfunktion anpasst.
  • Passe die Kalibrierung auf einem eigenen Teil der Daten oder innerhalb der Kreuzvalidierung an, nie auf den Daten, aus denen das Modell gelernt hat: Dort sieht das Modell besser aus, als es ist.
  • Kalibrierte Prozente zählen, wenn die Zahl weitergeht: in eine Schwelle nach den Kosten der Fehler (Lektion 2.6), in eine Summe von Risiken, in ein Gespräch mit einer Patientin. Wenn nur die Reihenfolge zählt, reicht ROC AUC.

Mehr im Atlas

Einträge der Enzyklopädie zu den Ideen dieser Lektion: