Zum Inhalt springen

~/teaching · machine learning · sitzung 6, mittwoch, 16. dezember 2026

Random Forests, Gradient Boosting und XGBoost, dann der ehrliche Vergleich zweier Modelle

Warum das Mitteln von Bäumen funktioniert, wie Boosting einen Gradientenabstieg ausführt und wann ein Vorsprung von 0,01 AUC nichts bedeutet.

Zusammenfassung

Dieser Foliensatz ist Sitzung 6 des Kurses Machine Learning an der Centrale Méditerranée (Schwerpunkt DDEFI, 2026-2027). Er setzt dort an, wo die Entscheidungsbäume aufgehört haben: Ein tiefer Baum ist auf seinen Trainingszeilen genau und überall sonst instabil. Der Vormittag behebt diese Instabilität auf zwei entgegengesetzte Weisen. Ein Random Forest lässt viele Bäume nebeneinander wachsen und mittelt sie; Boosting lässt sie nacheinander wachsen, jeden angepasst an das, was die vorherigen falsch gemacht haben.

Jeder Mechanismus wird an der Tafel hergeleitet und dann an kleinen Zahlen geprüft: die 63,2 % der Zeilen in einer Bootstrap-Ziehung, die Varianz eines Mittelwerts korrelierter Bäume, das Pseudo-Residuum des Log-Loss, der optimale Blattwert und der Split-Gewinn von XGBoost. Der letzte Teil stellt die Frage, der jedes Projekt irgendwann begegnet: Der Herausforderer schlägt das Referenzmodell (baseline) um 0,01 AUC: Ist das ein Ergebnis oder bloß Glück mit den Folds? Die verschachtelte Kreuzvalidierung und der korrigierte Resampling-t-Test von Nadeau und Bengio beantworten sie.

Nach der Lektüre können Sie erklären, warum das Dekorrelieren von Bäumen mehr bringt als das Hinzufügen weiterer, eine Variablenwichtigkeit lesen, ohne sich täuschen zu lassen, Gradient Boosting in wenigen Zeilen Python schreiben und zwei Modelle mit einer Regel vergleichen, die vor den Ergebnissen feststeht. Das durchgehende Beispiel ist der Kreditausfall-Datensatz von Yeh und Lien (2009), der im ganzen Kurs verwendet wird.

Die Folien

Random Forests, Boosting und der ehrliche Vergleich

Sitzung 6, Mittwoch, 16. Dezember 2026. Machine Learning, Centrale Méditerranée, Schwerpunkt DDEFI, 2026-2027. Die Folien gibt es auf Französisch und Englisch; der Link öffnet die englische Fassung.

Folien öffnen (Passwort vom Dozenten)

Der Foliensatz selbst ist für die Studierenden des Kurses verschlüsselt; diese Seite fasst ihn für alle zusammen.

Die Kursseite · Aufmerksamkeit und Transformer, Schritt für Schritt

Aufbau des Foliensatzes

  1. Bootstrap und Bagging. Die Trainingszeilen mit Zurücklegen neu ziehen, und warum ein Mittelwert instabiler Bäume eine geringere Varianz hat.
  2. Random Forests. Die Ziehung von Kandidatenvariablen an jedem Knoten, die die Korrelation zwischen den Bäumen senkt, der Out-of-Bag-Fehler und die Einstellungen, auf die es ankommt.
  3. Variablenwichtigkeit. Unreinheitsbasierte Wichtigkeit gegen Permutationswichtigkeit, und warum Erstere verzerrt ist.
  4. Gradient Boosting. AdaBoost als Vorgeschichte, dann Friedmans Boosting als Gradientenabstieg über die Vorhersagen, von Hand an drei Punkten durchgerechnet.
  5. XGBoost und seine Verwandten. Entwicklung zweiter Ordnung, regularisierte Blätter, Histogramme und fehlende Werte, mit LightGBM und CatBoost auf einer Folie.
  6. Übung: Boosting von Grund auf. Ein kurzer Regressor, der scikit-learn reproduziert, und ein XGBoost, dessen Zahl der Bäume durch frühes Stoppen festgelegt wird.
  7. Der ehrliche Vergleich. Verschachtelte Kreuzvalidierung, die Varianz einer Kreuzvalidierung, der korrigierte gepaarte Test und multiples Testen.
  8. Die Champion-Regel. Die Entscheidungsregel vor der Tabelle aufschreiben, die schlimmsten Fehler lesen und einen kleinen Gewinn gegen seine Kosten abwägen.

Bagging: warum ein Mittelwert von Bäumen weniger Varianz hat

Trainiert man viele Bäume auf leicht unterschiedlichen Kopien der Daten und mittelt sie, heben sich die Schwankungen der einzelnen Bäume teilweise auf, solange nicht alle dieselben Fehler machen.

Der erwartete quadratische Fehler eines Modells zerfällt in Rauschen, quadrierten Bias und Varianz. Ein tiefer, unbeschnittener Baum hat einen kleinen Bias, weil er den Daten eng folgt, und eine große Varianz: Entfernt man ein paar Zeilen, ändert sich der erste Split und mit ihm der ganze Baum. Breiman (1996) nannte solche Verfahren instabil und zeigte, dass gerade sie vom Mitteln profitieren. Ein Mittelwert behält den Bias seiner Mitglieder und wirkt nur auf die Varianz.

Um aus einem einzigen Datensatz viele Bäume zu gewinnen, nutzt Bagging (Bootstrap Aggregating) den Bootstrap von Efron (1979): nn Zeilen mit Zurücklegen aus den nn Trainingszeilen ziehen, einen tiefen Baum auf dieser Ziehung trainieren, das BB-mal wiederholen und die Vorhersagen mitteln. Eine gegebene Zeile wird von einer Ziehung mit Wahrscheinlichkeit 1−1/n1 - 1/n verfehlt, von allen nn Ziehungen also mit Wahrscheinlichkeit (1−1/n)n(1 - 1/n)^n, was gegen e−1e^{-1} strebt.

(1−1n)n⟶e−1≈0.368,1−e−1≈0.632\Big(1 - \frac{1}{n}\Big)^{n} \longrightarrow e^{-1} \approx 0.368, \qquad 1 - e^{-1} \approx 0.632
(1)

Auf den 18.000 Trainingszeilen des Kurses enthält jede Ziehung daher etwa 11.378 verschiedene Zeilen, und die übrigen 36,8 % sind für diesen Baum Out-of-Bag. Die Schlüsselformel des Abschnitts ist die Varianz eines Mittelwerts von BB Bäumen mit jeweils der Varianz σ2\sigma^2 und der paarweisen Korrelation ρ\rho (Hastie, Tibshirani und Friedman, 2009, Gleichung 15.1).

Var⁡(1B∑b=1Bf^b(x))=ρ σ2+1−ρB σ2\operatorname{Var}\Big(\frac{1}{B}\sum_{b=1}^{B} \hat f_b(x)\Big) = \rho\,\sigma^{2} + \frac{1 - \rho}{B}\,\sigma^{2}
(2)

Der Beweis ist ein Abzählargument: Die Varianz einer Summe ist die Summe aller Kovarianzen, es gibt BB Diagonalterme mit dem Wert σ2\sigma^2 und B(B−1)B(B-1) Kreuzterme mit dem Wert ρσ2\rho\sigma^2, und alles wird durch B2B^2 geteilt. Der zweite Term schwindet, je mehr Bäume hinzukommen; der erste, ρσ2\rho\sigma^2, ist eine Untergrenze, die auch eine noch so große Zahl von Bäumen nicht verschiebt.

Tabelle 1: Varianz des Mittelwerts von BB Bäumen mit σ2=1\sigma^2 = 1. Unabhängige Bäume verbessern sich immer weiter; korrelierte Bäume bleiben nahe ihrer Untergrenze ρ\rho stehen.
Bäume BBρ=0.3\rho = 0.3ρ=0.1\rho = 0.1ρ=0\rho = 0
100,3700,1900,100
1000,3070,1090,010
1.0000,30070,10090,001

Probe für zehn Bäume und ρ=0.3\rho = 0.3 mit der Abzählung: Zehn Diagonalterme und neunzig Kreuzterme ergeben (10+90×0.3)/100=0.37(10 + 90 \times 0.3)/100 = 0.37, dasselbe wie 0.3+0.7/100.3 + 0.7/10. Der Schritt von 100 auf 1.000 Bäume senkt die Varianz um 0,006, eine Senkung von ρ\rho von 0,3 auf 0,1 dagegen um 0,2. Die Lehre für die Praxis: zuerst dekorrelieren.

Zurück zum Inhalt.

Random Forests: die Bäume dekorrelieren

Ein Random Forest ist Bagging plus ein Kniff: Bei jedem Split darf ein Baum nur unter wenigen zufällig gezogenen Variablen wählen, sodass die Bäume einander nicht mehr gleichen.

In den Kreditdaten dominiert eine Variable, der Rückzahlungsstatus des letzten Monats. Einfaches Bagging setzt sie an die Wurzel fast jedes Baums, die Bäume ähneln einander, ρ\rho ist hoch, und die Varianz stößt an ihre Untergrenze. Breimans Random Forest von 2001 bietet jedem Knoten nur mm aus pp gezogene Variablen an. Mit der Voreinstellung von scikit-learn für Klassifikation, m=⌊23⌋=4m = \lfloor\sqrt{23}\rfloor = 4, steht die dominante Variable an einer gegebenen Wurzel nur in etwa 17 % der Fälle zur Verfügung. Jeder Baum wird etwas schlechter, der Wald wird besser. Mit m=pm = p ist man wieder beim Bagging.

Der Algorithmus

  1. Neu ziehen. Für jeden der BB Bäume eine Bootstrap-Stichprobe der Trainingszeilen ziehen.
  2. Ohne Beschneiden wachsen lassen. An jedem Knoten mm Kandidatenvariablen ziehen und nach der besten von ihnen splitten; den Baum tief wachsen lassen, damit sein Bias gering bleibt.
  3. Mitteln. Mit dem Mittelwert der Bäume vorhersagen; scikit-learn mittelt Wahrscheinlichkeiten, Breimans ursprüngliche Regel nimmt eine Mehrheitsentscheidung.

Breiman bewies außerdem, dass der Fehler des Waldes mit wachsendem BB konvergiert: Mehr Bäume kosten Zeit und Speicher, nie Vorhersagegüte. Die Zahl der Bäume ist daher keine Einstellung, die zu Überanpassung führt; man erhöht sie, bis sich der Out-of-Bag-Fehler (out-of-bag error) nicht mehr bewegt. Dieser Fehler ist eine kostenlose Validierung: Jede Zeile wird nur von den Bäumen vorhergesagt, deren Bootstrap-Ziehung sie verfehlt hat, grob 184 von 500 Bäumen.

ErrOOB=1n∑i=1nL(yi, 1∣Bi∣∑b∈Bif^b(xi))\mathrm{Err}_{\mathrm{OOB}} = \frac{1}{n}\sum_{i=1}^{n} L\Big(y_i,\ \frac{1}{|\mathcal{B}_i|}\sum_{b \in \mathcal{B}_i} \hat f_b(x_i)\Big)
(3)
  • max_features wirkt auf ρ\rho und ist meist die einflussreichste Einstellung (Probst, Wright und Boulesteix, 2019).
  • min_samples_leaf glättet die Wahrscheinlichkeiten: Bei Blättern mit einer einzigen Zeile antwortet jeder Baum 0 oder 1.
  • n_estimators wirkt nur auf den verschwindenden Term; man legt es anhand der Out-of-Bag-Kurve fest, statt es zu tunen.
  • Die Wahrscheinlichkeiten eines Waldes meiden tendenziell 0 und 1, prüfen Sie also die Zuverlässigkeitskurve, bevor Sie sie mit einer Entscheidungsschwelle verwenden.

Zurück zum Inhalt.

Variablenwichtigkeit: MDI ist verzerrt, Permutation ist ehrlich

Der in einen Wald eingebaute Wichtigkeitswert bevorzugt Variablen mit vielen möglichen Schwellenwerten; messen Sie die Wichtigkeit besser, indem Sie auf zurückgehaltenen Daten eine Spalte durchmischen und beobachten, wie stark der Score fällt.

Die mittlere Abnahme der Unreinheit (mean decrease in impurity, MDI), das Attribut feature_importances_ von scikit-learn, summiert die Gini-Gewinne aller Splits nach Variable jj, gewichtet mit dem Anteil p(t)p(t) der Zeilen, die den Knoten erreichen, und mittelt über die Bäume. Die Permutationswichtigkeit (permutation importance) stellt eine andere Frage: Wie viel Validierungs-AUC verliert man, wenn die Verbindung zwischen jj und der Zielvariable durch Durchmischen ihrer Spalte zerstört wird?

MDI(j)=1B∑b=1B ∑t∈b, v(t)=jp(t) Δi(t)\mathrm{MDI}(j) = \frac{1}{B}\sum_{b=1}^{B}\ \sum_{t \in b,\ v(t) = j} p(t)\,\Delta i(t)
(4)
PI(j)=s−1R∑r=1Rsr,j\mathrm{PI}(j) = s - \frac{1}{R}\sum_{r=1}^{R} s_{r,j}
(5)

In der Illustration des Foliensatzes fällt eine Validierungs-AUC von 0,780 bei drei Durchmischungen der Rückzahlungsvariable auf 0,742, 0,748 und 0,745, eine Wichtigkeit von 0.780−0.745=0.0350.780 - 0.745 = 0.035. Strobl, Boulesteix, Zeileis und Hothorn (2007) erklärten, warum MDI in die Irre führt. Eine stetige Variable bietet Tausende von Schwellenwerten, und einer davon trennt die Klassen immer zufällig ein wenig; eine binäre Variable hat nur einen Versuch. MDI wird auf den Trainingszeilen berechnet, wo der untere Teil eines tiefen Baums nach Rauschen splittet und das als Gewinn verbucht. Und sie beschreibt, was der Baum benutzt hat, nicht, was tatsächlich Vorhersagekraft hat. In einer Simulation im Foliensatz landet eine reine Rauschspalte nach MDI auf Platz drei und nach Permutation nahe null.

Bemerkung (Die Grenze der Permutation). Korrelierte Variablen teilen sich das Verdienst: Die sechs monatlichen Rechnungsbeträge können einander ersetzen, also kostet das Durchmischen eines von ihnen wenig, und jeder wirkt unwichtig, während die Gruppe zählt. Permutieren Sie die Gruppe gemeinsam, fügen Sie eine Rauschspalte als Kontrolle hinzu, wiederholen Sie etwa zehn Durchmischungen und behandeln Sie jede Wichtigkeit unter zwei Standardabweichungen als null. SHAP-Werte übernehmen in der nächsten Sitzung.

Zurück zum Inhalt.

Gradient Boosting: Gradientenabstieg über die Vorhersagen

Boosting baut Bäume nacheinander, und jeder neue Baum wird darauf trainiert, die Fehler zu korrigieren, die die Summe der vorherigen Bäume noch macht.

AdaBoost (Freund und Schapire, 1997) gewichtete falsch klassifizierte Punkte neu, damit sich der nächste schwache Lerner auf sie konzentriert. Friedman, Hastie und Tibshirani (2000) deuteten das Verfahren als additives Modell, das für einen exponentiellen Verlust angepasst wird, und öffneten damit die Tür zu jeder Verlustfunktion. Friedman (2001) formulierte Boosting dann als den Gradientenabstieg des Kurses neu, mit einem Wechsel der Unbekannten: Statt eines Parametervektors ist die Unbekannte der Vektor der nn Vorhersagen F(xi)F(x_i). Die Abstiegsrichtung für Kunde ii ist das Pseudo-Residuum (pseudo-residual).

rim=−[∂L(yi,F(xi))∂F(xi)]F=Fm−1r_{im} = -\left[\frac{\partial L\big(y_i, F(x_i)\big)}{\partial F(x_i)}\right]_{F = F_{m-1}}
(6)

Ein bloßer Abstiegsschritt würde nichts über einen Kunden außerhalb des Trainingsdatensatzes aussagen, also wird ein Regressionsbaum hmh_m an die rimr_{im} angepasst und mit einem kleinen Schritt ν\nu addiert. Für den quadratischen Verlust ist das Pseudo-Residuum der einfache Fehler y−Fy - F. Für den Log-Loss mit p=σ(F)p = \sigma(F) liefern die Kettenregel und σ′=p(1−p)\sigma' = p(1-p) die Überraschung des Modells.

∂L∂F=−y(1−p)+(1−y) p=p−y⟹r=y−p\frac{\partial L}{\partial F} = -y(1 - p) + (1 - y)\,p = p - y \quad\Longrightarrow\quad r = y - p
(7)
Fm=Fm−1+ν hm,FM(x)=F0+ν∑m=1Mhm(x)F_m = F_{m-1} + \nu\, h_m, \qquad F_M(x) = F_0 + \nu \sum_{m=1}^{M} h_m(x)
(8)

Durchgerechnetes Beispiel: drei Punkte, Stümpfe, ν = 0,5

Nehmen wir die Punkte (1,1)(1, 1), (2,5)(2, 5), (3,12)(3, 12) und den quadratischen Verlust. Startwert ist der Mittelwert, F0=6F_0 = 6, also sind die ersten Residuen −5,−1,6-5, -1, 6. Ein Entscheidungsstumpf (ein Baum mit einem einzigen Split) vergleicht den Schnitt bei 1,5 (Quadratsumme 24,5) mit dem Schnitt bei 2,5 (Summe 8) und behält 2,5, mit der Vorhersage −3-3 links und 6 rechts. Die Hälfte davon wird addiert. In Runde 2 sind die Residuen −3.5,0.5,3-3.5, 0.5, 3, und nun gewinnt der Schnitt bei 1,5 (3,125 gegen 8): Der zweite Baum splittet dort, wo der erste es nicht tat, weil er an dem arbeitet, was übrig bleibt.

Tabelle 2: Zwei Runden Gradient Boosting von Hand. Mittlerer quadratischer Fehler: 20,67 mit F0F_0, 7,17 mit F1F_1, 2,57 mit F2F_2.
xxyyF0F_0r1r_1h1h_1F1F_1r2r_2h2h_2F2F_2
116−5−34,5−3,5−3,52,75
256−1−34,50,51,755,375
312666931,759,875

Drei Einstellungen hängen zusammen. Eine kleine Lernrate (learning rate, shrinkage) generalisiert besser, auf Kosten von mehr Bäumen: In der Simulation des Foliensatzes erreicht ν=0.5\nu = 0.5 seinen besten Validierungsverlust nach 5 Bäumen und verschlechtert sich dann, während ν=0.05\nu = 0.05 bei 87 Bäumen in einem breiten Tal den Tiefpunkt erreicht. Die Bäume bleiben kurz, weil die Tiefe die Ordnung der Wechselwirkungen festlegt und Boosting den Bias verringert, indem es schwache Lerner addiert, statt die Varianz durch das Mitteln starker zu verringern: Hastie et al. empfehlen 4 bis 8 Blätter. Die Zahl der Bäume ergibt sich dann durch frühes Stoppen (early stopping) auf einem Validierungsdatensatz.

Zurück zum Inhalt.

XGBoost: ein Newton-Schritt pro Blatt

XGBoost ist dasselbe Boosting mit einer besseren lokalen Näherung der Verlustfunktion, einer Strafe auf die Blätter und technischen Kniffen, die es schnell und robust gegenüber fehlenden Werten machen.

Chen und Guestrin (2016) ersetzen den Verlust jedes Kunden durch seine Taylor-Entwicklung zweiter Ordnung um das aktuelle Modell, mit Gradient gig_i und Krümmung hih_i (für den Log-Loss pi−yip_i - y_i und pi(1−pi)p_i(1 - p_i)), und fügen eine Strafe γ\gamma pro Blatt sowie λ\lambda auf die quadrierten Blattwerte hinzu. Da ein Baum jedem Kunden in Blatt jj denselben Wert wjw_j gibt, zerfällt die Zielfunktion in eine Parabel pro Blatt, mit einem Minimum in geschlossener Form.

L(m)≈∑j=1T[Gj wj+12 (Hj+λ) wj2]+γT,Gj=∑i∈Ijgi, Hj=∑i∈Ijhi\mathcal{L}^{(m)} \approx \sum_{j=1}^{T}\Big[G_j\, w_j + \tfrac12\,(H_j + \lambda)\, w_j^{2}\Big] + \gamma T, \qquad G_j = \sum_{i \in I_j} g_i,\ H_j = \sum_{i \in I_j} h_i
(9)
wj⋆=−GjHj+λw_j^{\star} = -\frac{G_j}{H_j + \lambda}
(10)
Gewinn=12[GL2HL+λ+GR2HR+λ−(GL+GR)2HL+HR+λ]−γ\text{Gewinn} = \frac12\left[\frac{G_L^{2}}{H_L + \lambda} + \frac{G_R^{2}}{H_R + \lambda} - \frac{(G_L + G_R)^{2}}{H_L + H_R + \lambda}\right] - \gamma
(11)

Durchgerechnetes Beispiel: vier Kunden, λ = 1, γ = 0

  1. Gradienten. Zwei Ausfälle, vorhergesagt mit 0,6 und 0,3, zwei gute Kunden mit 0,4 und 0,2: g=(−0.4,−0.7,0.4,0.2)g = (-0.4, -0.7, 0.4, 0.2) und h=(0.24,0.21,0.24,0.16)h = (0.24, 0.21, 0.24, 0.16).
  2. Ein Blatt. G=−0.5G = -0.5, H=0.85H = 0.85, also w⋆=0.5/1.85=0.270w^{\star} = 0.5/1.85 = 0.270, und alle steigen ein wenig, weil die beiden verfehlten Ausfälle schwerer wiegen.
  3. Zwei Blätter. Ausfälle getrennt: wL⋆=1.1/1.45=0.759w_L^{\star} = 1.1/1.45 = 0.759, und für die guten Kunden wR⋆=−0.6/1.40=−0.429w_R^{\star} = -0.6/1.40 = -0.429, gegenüber −1.5-1.5 ohne λ\lambda, was zeigt, wie die Strafe kleine Blätter schrumpft.
  4. Gewinn. 12(0.834+0.257−0.135)=0.478\tfrac12(0.834 + 0.257 - 0.135) = 0.478, weit über den 0,000 und 0,095 der beiden Splits, die einen einzelnen Kunden isolieren. Mit γ=0.5\gamma = 0.5 käme kein Split durch: Das Beschneiden ist ins Wachstum eingebaut.

Für den quadratischen Verlust ist hi=1h_i = 1, und ohne λ\lambda ist das optimale Blatt der Mittelwert seiner Residuen, genau Friedmans Version. Zwei technische Ergänzungen zählen in der Praxis: Schwellenwerte, die auf Quantil-Histogrammen (standardmäßig 256 Bins) statt auf jedem einzelnen Wert gesucht werden, und eine gelernte Standardrichtung für fehlende Werte an jedem Split. LightGBM (2017) lässt Bäume blattweise wachsen, um schneller zu sein; CatBoost (2018) verwendet symmetrische Bäume und geordnete Zielstatistiken für kategoriale Variablen. Gut eingestellt, landen die drei meist nah beieinander.

Zurück zum Inhalt.

Verschachtelte Kreuzvalidierung: innen wählen, außen messen

Wer die besten Einstellungen auf einigen Folds auswählt und dann den Score auf denselben Folds angibt, meldet die glücklichste Einstellung, nicht die wahre Qualität des Modells.

Angenommen, zwanzig Einstellungen haben alle eine wahre AUC von 0,770, und jede kreuzvalidierte Schätzung ist verrauscht, mit einer Standardabweichung von 0,005. Die beste zu behalten, heißt, die glücklichste zu wählen: Das Maximum von zwanzig normalverteilten Ziehungen liegt im Mittel 1,87 Standardabweichungen über dem Mittelwert, also liegt der berichtete Score nahe 0,779 für ein Modell, das 0,770 wert ist. Varma und Simon (2006) sowie Cawley und Talbot (2010) zeigten, dass diese Selektionsverzerrung so groß sein kann wie der Abstand zwischen zwei Algorithmen.

Die Gegenmaßnahme trennt das Wählen vom Messen. Eine äußere Schleife teilt die Daten in fünf Folds; für jeden wählt eine vollständige innere Kreuzvalidierung auf den anderen vier die Hyperparameter, der Gewinner wird auf diesen vier neu trainiert und ein einziges Mal auf dem zurückgehaltenen Fold bewertet. Das ist die verschachtelte Kreuzvalidierung (nested cross-validation). Die fünf Scores messen das Verfahren „suchen, dann trainieren“, nicht ein festes Modell. Frühes Stoppen ist eine Einstellung wie die anderen und findet in der inneren Schleife statt.

from sklearn.model_selection import GridSearchCV, StratifiedKFold, cross_val_score

inner = StratifiedKFold(3, shuffle=True, random_state=1)   # zum Auswählen
outer = StratifiedKFold(5, shuffle=True, random_state=1)   # zum Messen
search = GridSearchCV(model, grid, cv=inner, scoring="roc_auc")
scores = cross_val_score(search, X, y, cv=outer, scoring="roc_auc")
# fünf ehrliche AUCs; für das ausgelieferte Modell search auf allen Zeilen neu anpassen

Eine zweite Falle steckt in der Streuung dieser Scores. Bei fünf Folds teilen sich zwei Trainingsdatensätze 75 % ihrer Zeilen, also sind die Scores der Folds korreliert. Für ihren Mittelwert gilt dieselbe Varianzformel wie für den Wald: σ2/K\sigma^2/K plus eine Kovarianz-Untergrenze γ\gamma. Bengio und Grandvalet (2004) bewiesen, dass es keinen erwartungstreuen Schätzer dieser Varianz aus einer einzigen Kreuzvalidierung gibt. Mit σ2=1\sigma^2 = 1 und γ=0.3\gamma = 0.3 beträgt die wahre Varianz des Mittelwerts 0,44, während das naive s2/Ks^2/K 0,2 angibt.

Var⁡(eˉ)=σ2K+K−1K γ\operatorname{Var}\big(\bar e\big) = \frac{\sigma^{2}}{K} + \frac{K - 1}{K}\,\gamma
(12)

Zurück zum Inhalt.

Der korrigierte Resampling-t-Test von Nadeau und Bengio

Weil sich die Folds überlappen, ist der übliche gepaarte t-Test viel zu selbstsicher; die Korrektur verbreitert den Fehlerbalken um einen Faktor, den die Größe der Folds vorab festlegt.

Beide Modelle werden auf denselben Folds bewertet, also arbeitet man mit den gepaarten Differenzen dkd_k (Herausforderer minus Referenzmodell), was alles entfernt, was für einen einzelnen Fold spezifisch ist. Dietterich (1998) zeigte, dass ein t-Test, der diese Differenzen als unabhängig behandelt, die Gleichheit viel zu oft verwirft. Als Abhilfe dient ein korrigierter Resampling-t-Test (corrected resampled t-test), den Nadeau und Bengio (2003) vorgeschlagen haben: Er ersetzt 1/J1/J durch 1/J+n2/n11/J + n_2/n_1, wobei n2/n1n_2/n_1 die Größe des gemessenen Folds im Verhältnis zur Größe des Trainingsdatensatzes ist, 1/41/4 bei fünf Folds, 1/91/9 bei zehn. Bouckaert und Frank (2004) bestätigten, dass er sich bei wiederholter Kreuzvalidierung gut verhält.

t=dˉ[(1J+n2n1) s2]1/2,t∼Student(J−1)t = \frac{\bar d}{\Big[\big(\tfrac{1}{J} + \tfrac{n_2}{n_1}\big)\, s^{2}\Big]^{1/2}}, \qquad t \sim \text{Student}(J - 1)
(13)

Durchgerechnetes Beispiel: Boosting gegen logistische Regression auf fünf Folds

  1. Differenzen. AUC-Abstände von 0,014, 0,002, 0,017, 0,006 und 0,011 (illustrative Werte aus dem Foliensatz): Mittelwert dˉ=0.010\bar d = 0.010, s2=3.65×10−5s^2 = 3.65 \times 10^{-5}, s=0.00604s = 0.00604.
  2. Naiver Test. Standardfehler s2/5=0.00270\sqrt{s^2/5} = 0.00270, t=3.70t = 3.70, p=0.021p = 0.021 bei 4 Freiheitsgraden: Das wirkt gesichert.
  3. Korrektur. Faktor 1/5+1/4=0.451/5 + 1/4 = 0.45 statt 0,2: Die Varianz wird mit 2,25 multipliziert und der Standardfehler mit 1,5, auf 0,00405.
  4. Korrigierter Test. t=2.47t = 2.47, p=0.069p = 0.069. Das 95-%-Intervall, 0.010±2.776×0.004050.010 \pm 2.776 \times 0.00405, reicht von etwa −0.001-0.001 bis 0.0210.021 und enthält die Null: Der Vorsprung ist nicht gesichert.

Die illustrative Vergleichstabelle des Foliensatzes zeigt dasselbe in größerem Maßstab: Mit drei Seeds mal fünf Folds erhält ein Boosting mit 0,010 Vorsprung ein korrigiertes pp von 0,07, wo der naive Test 0,0008 ausgegeben hätte. Drei Herausforderer mit demselben Referenzmodell zu vergleichen, bringt ein weiteres Risiko: Wenn keiner wirklich gewinnt, beträgt die Wahrscheinlichkeit, dass mindestens ein Test anschlägt, 1−0.9531 - 0.95^3, also 14,3 %. Die Bonferroni-Schranke, p<0.05/3p < 0.05/3, gilt ohne jede Unabhängigkeitsannahme.

Bemerkung (Die Regel vor der Tabelle aufschreiben). Mit vier Modellen, zwei Metriken und mehreren Schwellenwerten gibt es immer ein Kriterium, nach dem ein Favorit gewinnt (der „Garten der sich verzweigenden Pfade“ von Gelman und Loken). Der Kurs verlangt von jedem Team eine Präregistrierung (preregistration): Es hinterlegt seine Champion-Regel, einschließlich des Vorgehens bei Gleichstand, als Issue mit Zeitstempel, bevor es den Vergleich startet. Und ein gesicherter Gewinn muss seine Komplexität noch bezahlen: Ein Kredit-Score ist nach Anhang III der KI-Verordnung der EU (AI Act) ein Hochrisiko-System, eine Ablehnung muss erklärt werden, und eine kalibrierte logistische Regression ist billiger zu begründen, zu betreiben und zu warten.

Zurück zum Inhalt.

Das Wichtigste in Kürze

  1. Ein Mittelwert von BB Bäumen hat die Varianz ρσ2+(1−ρ)σ2/B\rho\sigma^2 + (1 - \rho)\sigma^2/B, weitere Bäume entfernen also nur den zweiten Term, eine geringere Korrelation senkt die Untergrenze.
  2. Ein Random Forest ist Bagging plus eine zufällige Auswahl von Kandidatenvariablen an jedem Knoten; mehr Bäume führen nie zu Überanpassung, und der Out-of-Bag-Fehler ist eine kostenlose Kontrolle.
  3. Die unreinheitsbasierte Wichtigkeit bevorzugt Variablen mit vielen Schwellenwerten und wird auf Trainingsdaten berechnet; verwenden Sie die Permutation auf dem Validierungsdatensatz, mit einer Rauschspalte als Kontrolle.
  4. Gradient Boosting passt jeden Baum an die Pseudo-Residuen −∂L/∂F-\partial L/\partial F an, die für den Log-Loss y−py - p betragen; verwenden Sie einen kleinen Schritt, kurze Bäume und frühes Stoppen.
  5. Der Blattwert −G/(H+λ)-G/(H + \lambda) von XGBoost ist ein regularisierter Newton-Schritt, und sein Split-Gewinn vergleicht den Score der Kinder mit dem des Elternknotens, minus γ\gamma.
  6. Wählen Sie die Hyperparameter in einer inneren Schleife und messen Sie in einer äußeren; vergleichen Sie dann die Modelle über gepaarte Differenzen mit der Korrektur von Nadeau und Bengio, nach einer vorab aufgeschriebenen Regel.

Glossar

Bootstrap
Eine Stichprobe von nn Zeilen, mit Zurücklegen aus den nn Trainingszeilen gezogen; sie enthält etwa 63,2 % der verschiedenen Zeilen.
Random Forest
Bagging tiefer Bäume, bei dem jeder Knoten nur nach mm zufällig aus pp gezogenen Variablen splitten darf.
Out-of-Bag-Fehler (out-of-bag error)
Der Fehler jeder Zeile, vorhergesagt nur von den Bäumen, die sie in ihrer Bootstrap-Stichprobe nicht gesehen haben.
mittlere Abnahme der Unreinheit (mean decrease in impurity, MDI)
Summe der gewichteten Unreinheitsgewinne der Splits nach einer Variable, gemittelt über die Bäume; verzerrt zugunsten von Variablen mit vielen Schwellenwerten.
Permutationswichtigkeit (permutation importance)
Verlust an Validierungsscore, wenn eine Spalte durchmischt wird, was ihre Verbindung zur Zielvariable zerstört und ihre Verteilung erhält.
Pseudo-Residuum (pseudo-residual)
Minus die Ableitung des Verlusts nach der aktuellen Vorhersage, Kunde für Kunde; die Zielvariable des nächsten Boosting-Baums.
Lernrate (learning rate, shrinkage)
Der Faktor ν\nu, mit dem jeder neue Baum multipliziert wird, bevor er addiert wird; kleine Werte generalisieren besser.
frühes Stoppen (early stopping)
Das Hinzufügen von Bäumen beenden, wenn sich der Validierungsverlust über eine festgelegte Zahl von Runden nicht verbessert hat.
XGBoost
Gradient Boosting mit einer Entwicklung zweiter Ordnung, bestraften Blättern, Split-Suche auf Histogrammen und nativer Behandlung fehlender Werte (Chen und Guestrin, 2016).
verschachtelte Kreuzvalidierung (nested cross-validation)
Eine innere Kreuzvalidierung, die die Einstellungen innerhalb jedes Folds einer äußeren, messenden Kreuzvalidierung wählt.
korrigierter Resampling-t-Test (corrected resampled t-test)
Gepaarter t-Test auf den Differenzen pro Fold, dessen Varianzfaktor 1/J1/J zu 1/J+n2/n11/J + n_2/n_1 wird (Nadeau und Bengio, 2003).
Präregistrierung (preregistration)
Die Entscheidungsregel und die Metrik aufschreiben, bevor man die Ergebnisse sieht, damit die Wahl nicht den Zahlen folgen kann.

Die anderen Notizen des Kurses

Eine öffentliche Zusammenfassung pro Foliensatz, in der Reihenfolge des Kurses.

  1. EinführungKI-Winter, Arbeitsmarkt und Methode
  2. WerkzeugeKaggle, GitHub, Python: die Werkzeuge
  3. Sitzung 1Projektrahmen und kleinste Quadrate
  4. Sitzung 2Maximum Likelihood und logistische Regression
  5. Sitzung 3Gradientenabstieg, Ridge und Lasso
  6. Sitzung 4Entscheidungsschwelle und reproduzierbares ML
  7. HausaufgabeML-Projekt abstecken: der Projektsteckbrief
  8. Sitzung 5Kernel, SVM und Entscheidungsbäume
  9. Sitzung 6Random Forests, Boosting, ehrlicher Vergleich
  10. Sitzung 7SHAP, Fairness, PCA und Clustering
  11. HausaufgabeEin einfaches Modell mit vollständiger Methode
  12. Sitzung 8Neuronale Netze, Drift, konforme Vorhersage
  13. HausaufgabeEin ausgeliefertes Machine-Learning-Projekt
  14. Sitzung 9Ein Machine-Learning-Projekt verteidigen
  15. ReferenzProjekt zum Kreditausfallscore
  16. ReferenzAktienrenditen: XGBoost und Sentiment
  17. ReferenzPython-Code für jedes ML-Modell
  18. ReferenzDeep Learning, das Wesentliche
  19. ReferenzML-Projekte mit offenen Daten nach Branche
  20. ReferenzHandbuch für Daten- und KI-Fachleute
  21. ReferenzData Engineering, SRE und Cloud
  22. ReferenzPanorama der Machine-Learning-Modelle

Alle Notizen als Leseliste

Aufmerksamkeit und Transformer, Schritt für Schritt

Über diese Notizen

Vom Dozenten auf Grundlage der Folien verfasst, als öffentliche Zusammenfassung: die Kernideen, die Formeln und ein durchgerechnetes Beispiel. Die Übungen, ihre Lösungen, die Tests und die Bewertung bleiben im Foliensatz, für die Studierenden des Kurses.

Stand: .