24 · Workflow für Prädiktionsmodelle und Data Leakage
split_validierung.svg
Abbildung · Quellcode
Erzeugt von split_validierung() in lib/diagrams.py, Zeile 339–377.
Python
Python-Code: in eine Datei mit Endung
.py schreiben und mit dem ▶-Knopf in VS Code ausführen – oder Zeile für Zeile in die Python-Konsole. Setzt die in Modul 02 eingerichtete Umgebung voraus.def split_validierung() -> str: b = [eyebrow(40, 40, "Aufteilen · validieren · kein Leak")] # Split-Balken bx, by, bw, bh = 40, 92, 680, 46 parts = [("Training", 0.6, T["acct"], T["acc2"]), ("Validierung", 0.2, T["okt"], T["ok"]), ("Test", 0.2, T["soft"], T["mut"])] x = bx for lab, frac, fill, fg in parts: w = bw * frac b.append(rect(x, by, w - 4, bh, r=8, fill=fill)) b.append(txt(x + w / 2 - 2, by + 21, lab, size=12, fill=fg, w=600, anchor="middle")) b.append(txt(x + w / 2 - 2, by + 37, f"{int(frac*100)} %", size=10.5, fill=fg, anchor="middle")) x += w b.append(txt(bx, by - 12, "Ein Datensatz, drei disjunkte Teile", size=11, fill=T["mut"])) # k-fold-Streifen fy = by + bh + 44 b.append(txt(bx, fy - 12, "5-fache Kreuzvalidierung", size=11.5, fill=T["ink"], w=600)) folds = 5 fw = (bw - (folds - 1) * 8) / folds for r in range(3): ry = fy + r * 24 for k in range(folds): fx = bx + k * (fw + 8) val = k == r b.append(rect(fx, ry, fw, 18, r=4, fill=T["acct"] if val else T["soft"])) if val: b.append(txt(fx + fw / 2, ry + 13, "Val", size=9.5, fill=T["acc2"], w=600, anchor="middle")) b.append(txt(bx + bw + 0, fy + 6, "", size=10)) # Leakage-Hinweis ly = fy + 3 * 24 + 30 b.append(rect(bx, ly, bw, 40, r=10, fill=T["warnt"])) b.append(rect(bx, ly, 3, 40, r=0, fill=T["warn"])) b.append(txt(bx + 18, ly + 17, "Leakage vermeiden", size=11.5, fill=T["warn"], w=700)) b.append(txt(bx + 18, ly + 32, "Skalierung, Imputation und Selektion nur auf dem Training fitten, nie vor dem Split.", size=11, fill=T["ink2"])) return canvas(760, ly + 60, "".join(b), "Datenaufteilung in Training, Validierung und Test; 5-fache Kreuzvalidierung rotiert den " "Validierungsblock; Vorverarbeitung wird nur auf dem Training gefittet, um Data Leakage zu vermeiden.")