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…….