Kalibrieren, Validieren und die Überanpassungs-Falle

Warum Kalibrierung allein nicht reicht
Ein Kalibrationsmodell ist schnell gebaut. Man hat einige Dutzend Spektren mit zugehörigen Referenzwerten aus dem Labor, füttert sie in eine PLS‑Regression oder ein anderes chemometrisches Verfahren und bekommt einen scheinbar perfekten Zusammenhang zwischen Spektrum und Zielgröße. Das Bestimmtheitsmaß \(R^2\) liegt bei 0,99, der Kalibrationsfehler ist winzig - alles deutet auf ein hervorragendes Modell hin.
Die entscheidende Frage lautet aber nicht, wie gut das Modell die Daten reproduziert, mit denen es trainiert wurde. Die Frage lautet: Wie gut sagt es die Zielgröße für Proben voraus, die es noch nie gesehen hat? Genau diese Frage beantwortet die Validierung. Und sie deckt systematisch auf, wenn das Modell mehr gelernt hat als die eigentliche chemische Information - nämlich Rauschen, Messartefakte und Zufallsschwankungen im Trainingsdatensatz. Ein Spektrometer liefert zwar präzise Daten, aber erst das korrekt validierte Modell macht daraus belastbare Messwerte.
In der Spektroskopie ist das Thema besonders tückisch: Spektren enthalten hunderte oder tausende stark korrelierte Variablen (die einzelnen Wellenlängen), und jedes Kalibrationsverfahren hat zahlreiche einstellbare Parameter. Die Gefahr, ein Modell zu bauen, das auf dem Papier perfekt aussieht und in der Realität versagt, ist deshalb erheblich.
Trainings- und Testset: Die Grundregel
Der einfachste und wichtigste Schutz gegen Selbsttäuschung ist die Aufteilung der verfügbaren Daten in zwei disjunkte Mengen: ein Trainingsset, mit dem das Modell kalibriert wird, und ein Testset, das ausschließlich für die abschließende Bewertung reserviert bleibt. Übliche Aufteilungen sind 70 % der Daten für das Training und 30 % für den Test, oder 80:20 bei kleineren Datensätzen.
Die Grundregel ist einfach: Das Testset darf zu keinem Zeitpunkt in die Kalibration einfließen. Kein Parameter‑Tuning, keine Variablenauswahl, keine Vorverarbeitungsoptimierung darf die Testdaten auch nur ansehen. Wird diese Regel unbeabsichtigt gebrochen, dann kann das Testset seine Aufgabe nicht mehr erfüllen, weil es dann keine dem Algorithmus bis dato unkekannten Informationen enthält.
In Python mit sklearn ist die Aufteilung mit wenigen Zeilen erledigt:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
spectra, # Spektren-Matrix (n_proben x n_wellenlaengen)
reference_values, # Referenzwerte (z.B. Fettgehalt)
test_size=0.3, # 30 % Testdaten
random_state=42 # Reproduzierbarkeit
)
Für spektroskopische Daten ist eine rein zufällige Aufteilung jedoch nicht immer ausreichend. Wurden alle Spektren einer Charge am selben Tag gemessen oder stammen bestimmte Konzentrationsbereiche aus derselben Probenserie, kann ein zufälliger Split sogenannte Datenlecks erzeugen: Informationen aus dem Trainingsset „sickern" strukturell ins Testset, weil die Proben nicht wirklich unabhängig voneinander sind. Das kann im Wesentlichen zwei Ursachen haben: Eine Verzerrung durch die Umgebungsvariablen wie Raumtemperatur oder -feuchtigkeit, und durch systematische Fehler bei der Probenerstellung.
Umgebungsvariablen: Spektren, die am selben Tag aufgenommen wurden, teilen sich unbeabsichtigt bestimmte Gemeinsamkeiten: die Temperatur im Raum, den Warmlaufzustand der Lampe, die Justage des Messaufbaus an diesem Tag, minimale Schwankungen in der Luftfeuchtigkeit usw. Diese Faktoren prägen das Spektrum systematisch, enthalten jedoch keine chemische Information. Verteilt ein zufälliger Split die Spektren desselben Messtags auf Trainings‑ und Testset, dann erkennt das Modell im Test den Messhintergrund, weil es ihn im Training gesehen hat, und errät dann den Wochentag anstelle des Signals.
Systematische Fehler: Wird eine Konzentrationsreihe (1 %, 2 %, 5 %, 10 %) aus derselben Stammlösung pipettiert, dann enthalten alle diese Proben denselben systematischen Fehler der Ausgangskonzentration. Bei einer rein zufälligen Aufteilung gibt es also wieder das Risiko, dass die Zugehörigkeit zu einer bestimmten Konzentrationsreihe eingelernt wird, anstelle des eigentlich gewünschten Signals.

In solchen Fällen sollte man stratifiziert aufteilen (etwa mit StratifiedShuffleSplit nach Konzentrationsklassen) oder bewusst ganze Chargen für das Testset zurückhalten. Das Ziel ist stets, dass das Testset die spätere Realität möglichst realistisch abbildet.
Kreuzvalidierung: Mehr Informationen aus begrenzten Daten
Für die Aufteilung in Trainings‑ und Testset zahlt man leider den Preis, dass ein erheblicher Teil der Proben im Testset brachliegt. Vor allem bei kleinen Datensätzen bleibt da wenig Material für das Training. Zusätzlich hängt das Ergebnis vom Zufall der Aufteilung ab - ein anderer random_state kann zu merklich anderen Bewertungen führen.
Die Kreuzvalidierung (Cross‑Validation, CV) löst beide Probleme. Statt einer einzigen Aufteilung wird der Datensatz in \(k\) gleich große Teile („Folds") zerlegt. Das Modell wird \(k\)‑mal trainiert, wobei jedes Mal ein anderer Fold als Testset dient und die übrigen \(k-1\) Folds das Training übernehmen. Am Ende hat man \(k\) unabhängige Bewertungen, die zu einem Mittelwert (etwa RMSECV - Root Mean Square Error of Cross‑Validation) zusammengefasst werden.
from sklearn.model_selection import cross_val_score, KFold
from sklearn.cross_decomposition import PLSRegression
pls = PLSRegression(n_components=5)
kfold = KFold(n_splits=5, shuffle=True, random_state=42)
# cross_val_score verwendet standardmäßig das Bestimmtheitsmaß R^2
scores = cross_val_score(pls, spectra, reference_values, cv=kfold, scoring='neg_root_mean_squared_error')
rmsecv = -scores.mean()
Ein Sonderfall der Kreuzvalidierung ist Leave‑One‑Out (LOOCV). Hier ist \(k\) gleich der Anzahl der Proben: Jede einzelne Probe wird einmal als Testset verwendet, alle übrigen dienen als Training. Der Vorteil ist, dass nahezu alle Daten für jedes Training genutzt werden. Der Nachteil: LOOCV ist rechenintensiv (bei \(n\) Proben wird das Modell \(n\)‑mal trainiert) und kann bei stark korrelierten Spektren zu optimistischen Schätzungen führen, weil das Weglassen einer einzelnen Probe das Spektrum kaum verändert. In den meisten Fällen ist eine 5‑fache oder 10‑fache Kreuzvalidierung der bessere Kompromiss zwischen Stabilität und Rechenzeit.
Im Unterschied zur einfachen Train‑Test‑Aufteilung liefert die Kreuzvalidierung nicht nur eine einzelne Fehlerzahl, sondern gibt Auskunft über die Streuung der Modellqualität. Eine RMSECV von \(0{,}12 \pm 0{,}05\) ist eine andere Aussage als eine von \(0{,}12 \pm 0{,}01\) - im ersten Fall reagiert das Modell empfindlich auf die konkrete Datenauswahl, im zweiten Fall ist es robust.
RMSEC und RMSEP: Die zwei Zahlen, die alles verraten
Zwei Fehlermaße stehen im Zentrum jeder Modellbewertung, und ihr Verhältnis zueinander ist aussagekräftiger als jedes einzelne für sich:
-
RMSEC (Root Mean Square Error of Calibration) beschreibt den Fehler, den das Modell auf genau den Daten macht, mit denen es trainiert wurde. Er wird mit jedem zusätzlichen PLS‑Faktor kleiner, einfach weil das Modell mehr Freiheitsgrade bekommt, um sich den Trainingsdaten anzupassen. In die RMSEC geht nicht ein, ob das Gelernte physikalisch sinnvoll ist oder nur Rauschen.
-
RMSEP (Root Mean Square Error of Prediction) wird auf dem unabhängigen Testset berechnet, das zu keinem Zeitpunkt Teil des Trainings war. Ein niedriger RMSEP sagt aus: Das Modell generalisiert.
Anhand der Differenz zwischen RMSEC und RMSEP können wir die Güte des Modells bewerten:
| PLS‑Faktoren | RMSEC (Training) | RMSECV (Kreuzvalidierung) | RMSEP (Testset) | Interpretation |
|---|---|---|---|---|
| 2 | 0,45 | 0,48 | 0,47 | Unteranpassung, zu wenige Faktoren |
| 4 | 0,28 | 0,30 | 0,30 | Ausgewogen, gute Generalisierung |
| 6 | 0,18 | 0,31 | 0,34 | Beginnende Überanpassung |
| 9 | 0,08 | 0,40 | 0,52 | Massive Überanpassung |
Solange RMSECV und RMSEP in der gleichen Größenordnung bleiben, lernt das Modell echte chemische Zusammenhänge. Wenn der RMSECV jedoch deutlich über den RMSEC steigt und der RMSEP noch weiter abweicht, dann hat die Überanpassung eingesetzt. Das Modell beschreibt in diesem Fall nicht mehr die Chemie, sondern seinen eigenen Trainingsdatensatz.
from sklearn.metrics import mean_squared_error
import numpy as np
# Kalibration auf Trainingsdaten
pls.fit(X_train, y_train)
y_cal = pls.predict(X_train)
rmsec = np.sqrt(mean_squared_error(y_train, y_cal))
# Vorhersage auf Testdaten
y_pred = pls.predict(X_test)
rmsep = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"RMSEC: {rmsec:.3f}, RMSEP: {rmsep:.3f}")
Die Überanpassungs-Falle
Überanpassung (Overfitting) ist der häufigste und zugleich am schwierigsten erkennbare Fehler beim Aufbau chemometrischer Modelle, denn das Modell liefert auf den ersten Blick exzellente Ergebnisse. Ein \(R^2\) von 0,999 auf dem Trainingsset klingt nach einem Erfolg. Es kann aber auch bedeuten, dass das Modell jede noch so kleine Schwankung im Trainingsdatensatz nachgebildet hat: Detektorrauschen, leichte Temperaturdrifts während der Messung, Inhomogenitäten einzelner Proben. All das ist keine chemische Information, sondern Zufall, und auf neuen Proben wird der Zufall anders aussehen. Die Vorhersage bricht ein.

Eine hilfreiche Analogie ist der Unterschied zwischen Verstehen und Auswendiglernen. Ein Modell, das die Zusammenhänge zwischen spektralen Merkmalen und der Zielgröße verstanden hat, kann sie auf neue Spektren übertragen. Ein Modell, das die Musterlösungen seiner Trainingsdaten auswendig gelernt hat, scheitert an der ersten Transferaufgabe.
Bei PLS‑Regressionen zeigt sich Überanpassung typischerweise daran, dass die RMSECV‑Kurve nach einem Minimum wieder ansteigt, während die RMSEC‑Kurve weiter monoton fällt. Die optimale Faktorenzahl liegt am Minimum der RMSECV, nicht dort, wo die RMSEC am niedrigsten ist. Ein häufig gemachter Fehler: Man wählt die Faktorenzahl so, dass der Kalibrationsfehler möglichst gering ist, und übersieht dabei, dass man die Vorhersagefähigkeit längst geopfert hat.
Train‑Test‑Split oder Kreuzvalidierung? Eine Entscheidungshilfe
Beide Verfahren sind Werkzeuge zur Validierung, aber sie lösen unterschiedliche Probleme und eignen sich für unterschiedliche Situationen.
Die einmalige Train‑Test‑Aufteilung ist die Methode der Wahl, wenn ausreichend Daten vorhanden sind (in der spektroskopischen Praxis ab etwa 100-150 unabhängigen Proben). Sie ist einfach zu implementieren, schnell ausgewertet, und das zurückgehaltene Testset liefert eine ehrliche, unverfälschte Bewertung. Zudem ist sie die einzige validierte Aussage, wie das Modell im späteren Routinebetrieb performen wird - denn dort trifft es ja ebenfalls auf Daten, die es nie gesehen hat.
Die Kreuzvalidierung ist immer dann das richtige Werkzeug, wenn die Probenzahl begrenzt ist. Sie hilft außerdem bei der Modelloptimierung: Während der Entwicklung und beim Tuning der Hyperparameter (etwa der Anzahl der PLS‑Faktoren oder der Wahl der Vorverarbeitung) wird die Kreuzvalidierung genutzt, um verschiedene Modellvarianten zu vergleichen, ohne das Testset anzurühren. Erst wenn die endgültige Modellkonfiguration feststeht, kommt das Testset einmalig zum Einsatz.

Die ideale Strategie für die spektroskopische Praxis kombiniert beide Ansätze:
- Daten aufteilen: 70-80 % Trainingsdaten, 20-30 % Testdaten.
- Die Testdaten werden weggesperrt und bis zum Schluss nicht angefasst.
- Auf den Trainingsdaten wird das Modell entwickelt: Vorverarbeitung optimieren, Faktorenzahl wählen, gegebenenfalls Variablenbereiche selektieren. Alles ausschließlich mit Kreuzvalidierung auf dem Trainingsset bewertet.
- Erst wenn das endgültige Modell feststeht, wird es einmalig auf dem Testset evaluiert. Das Ergebnis ist die RMSEP - und diese Zahl kommuniziert man, nicht die RMSEC oder RMSECV.
Der vollständige Workflow im Überblick
-
Datenerhebung: Spektren und Referenzwerte erfassen. Auf Vielfalt im Datensatz achten (verschiedene Chargen, Messtage, Konzentrationsbereiche), sonst lernt das Modell später nur einen Ausschnitt der Realität.
-
Vorverarbeitung: Glättung, Ableitungen, Streukorrektur (SNV, MSC) - je nach Anwendung. Die Vorverarbeitung wird am gesamten Datensatz durchgeführt, bevor dieser aufgeteilt wird. Entscheidend ist, dass sie auf den Trainingsdaten parametrisiert und anschließend identisch auf die Testdaten angewandt wird.
-
Aufteilung: Daten in Trainings‑ und Testset trennen (70:30 oder 80:20). Falls Chargeneffekte oder wiederholte Messungen vorliegen bzw. vorliegen könnten, ganze Chargen oder Messtage als Blöcke zuweisen.
-
Kalibration mit Kreuzvalidierung: Modell auf dem Trainingsset mit \(k\)‑facher Kreuzvalidierung aufbauen. Faktorenzahl am Minimum der RMSECV‑Kurve wählen, nicht am Minimum der RMSEC.
-
Validierung am Testset: Das fertige Modell auf das Testset anwenden. RMSEP berechnen und mit der RMSECV vergleichen. Liegen RMSEP und RMSECV in derselben Größenordnung, ist das Modell vertrauenswürdig. Ein RMSEP, der deutlich über der RMSECV liegt, deutet auf eine Überanpassung oder ein nicht repräsentatives Testset hin.
-
Routinebetrieb: Das validierte Modell wird in die tägliche Messroutine übernommen. Wichtig: In regelmäßigen Abständen mit neuen Referenzproben gegenprüfen, ob das Modell driftet - etwa weil sich die Probenmatrix schleichend ändert oder das Spektrometer altert.
Werden diese Schritte beachtet, dann entstehen Modelle, die nicht nur auf dem Papier gut aussehen, sondern sich auch im Prozess bewähren werden.
| Feature | Spektralwerk 15 Core NIR |
|---|---|
| Wellenlängenbereich | 900-1700 nm |
| Detektor-Zeile | InGaAs, 256 Pixel |
| Signal-Rausch-Verhältnis (SNR) | bis zu 10000:1 |
| Samplerate / Spektren pro Sekunde | > 500 Hz (im Streaming-Modus) |
| Trigger in und Trigger out | ja |
| Spektrale Auflösung (FWHM) | 3,9 nm (Hg-Linie bei 1014 nm) 5 nm (Hg-Linie bei 1529,6 nm) |
| Schnittstellen | Ethernet, FC (SMA auf Nachfrage) |
| Betriebstemperatur | -5°C bis +30°C |
| Schutzart | IP40 (mehr auf Nachfrage) |
| Details | Mehr erfahren |
Auf der Suche nach einer NIR-Spektrometrie-Lösung?
Vielen Dank für Ihre Nachricht!
Wir werden uns zeitnah bei Ihnen melden.
Leider konnten wir Ihre Nachricht nicht speichern.
Es gab leider einen technischen Fehler. Bitte versuchen Sie es später noch einmal - oder senden Sie eine E-Mail an sales@silicann.com.
Vielen Dank für Ihr Verständnis.
Vielleicht auch interessant
KI-unterstützte Entwicklung für Spektralwerk-Spektrometer
Die Spektralwerk-API-Dokumentation ist nun als MCP-Server verfügbar. Das erleichtert die KI-gestützte Entwicklung insbesondere in sicherheitsorientierten Unternehmen.