Stell Dir vor, Du arbeitest an einem Machine-Learning-Modell, das Bilder klassifiziert. Du hast Pipelines, Modelle, Metriken – aber Du stellst Dir eine entscheidende Frage:
„Woher weiß ich eigentlich, ob das Modell korrekt funktioniert, wenn ich gar nicht weiß, was das richtige Ergebnis sein soll?“
Willkommen im Orakelproblem. Und willkommen bei einer der elegantesten Lösungen dafür: Metamorphic Testing.
Was ist Metamorphic Testing?
Zu Beginn wurden die Modelle des maschinellen Lernens als nicht testbar bezeichnet, da es kein Testorakel gibt. Man könnte jedoch einen Pseudo-Orakel-Ansatz verwenden, wie z. B. einige der folgenden, um die Modelle des maschinellen Lernens zu testen:
Beim Metamorphic Testing geht es nicht darum, das richtige Ergebnis zu überprüfen – sondern zu prüfen, ob das System konsistent reagiert, wenn Du kontrollierte Änderungen am Input vornimmst.
Ein Beispiel:
Du gibst einem Klassifizierer ein Bild von einem Hund – das Modell sagt: „Hund“. Jetzt drehst Du das Bild leicht oder erhöhst die Helligkeit. Erwartung: Das Modell sagt immer noch „Hund“.
Wenn es plötzlich „Kuh“ ruft, weißt Du: Das System ist anfällig für minimale Änderungen – und damit potenziell instabil im Produktiveinsatz.
Warum gerade bei Machine Learning?
Im klassischen Testing weißt Du oft: Input A → Output B. Du kannst asserten, validieren, vergleichen.
Bei Machine Learning ist das anders:
-
Die Modelle sind probabilistisch
-
Die Trainingsdaten enthalten Bias oder Noise
-
Die Antwort auf einen neuen Input ist nicht immer eindeutig
Aber was Du testen kannst, sind die Beziehungen zwischen Eingabe- und Ausgabevarianten.
Metamorphe Beziehungen – der Schlüssel
Hier ein paar typische Beispiele:
Use Case | Veränderung am Input | Erwartetes Verhalten |
---|---|---|
Bildklassifikation | Helligkeit +10 %, kleine Rotation | Gleiche Prediction |
Sentiment Analysis | Groß-/Kleinschreibung ändern | Gleiches Sentiment |
Recommender | Liste umsortieren | Gleiche Top-5 Items |
Named Entity Rec. | Satz passiv statt aktiv formuliert | Gleiche Entitäten |
Diese Regeln kannst Du selbst definieren – sie sind oft domänenspezifisch, aber unfassbar mächtig.
So setzt Du Metamorphic Testing in Python um
Hier ein schnelles Beispiel mit sklearn
und einem Digits-Datensatz:
from sklearn.datasets import load_digits from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from skimage import exposure import numpy as np # Datensatz und Modell X, y = load_digits(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) clf = LogisticRegression(max_iter=10000).fit(X_train, y_train) # Sample auswählen sample = X_test[0].reshape(1, -1) original_prediction = clf.predict(sample)[0] # Helligkeit verändern (Gamma-Korrektur) sample_img = X_test[0].reshape(8, 8) bright_img = exposure.adjust_gamma(sample_img, gamma=0.8) bright_sample = bright_img.reshape(1, -1) new_prediction = clf.predict(bright_sample)[0] print(f"Original: {original_prediction}, Nach Helligkeit: {new_prediction}")
Wie immer bleibe ich an dem Thema dran…….
Neueste Kommentare