9 Module · Notebook-Übungen · lokaler Lernstand

Was lernst du in 10 Minuten pro Abschnitt?

Du verstehst, wie Decision Trees Fragen auswählen, Gruppen möglichst sauber trennen, mit Gini messen und mit Pruning vor Überanpassung geschützt werden.

AlltagPaketlogistik, Wetter und Servicefälle statt trockener Symbolik.
DidaktikErst Bild im Kopf, dann Ja/Nein-Regel, dann Purity, dann Python.
SelbststudiumJeder Schritt ist allein lösbar und bleibt nach dem Schließen des Browsers gespeichert.
Davor Distanzmetriken und Scaling
Optional davor Feature Engineering
Danach Ensemble Methods
Jede erstmals richtig gelöste Quizfrage bringt 10 Punkte. Jede ausprobierte Demo bringt 5 Punkte.
Modul 1

Baum als Fragebogen

Du lernst Root, Branch, Leaf und Stump als einfache Ja/Nein-Kette kennen.

Offen

Alltagsszene

Stell dir einen Paketdienst vor. Die Disposition fragt nicht alles gleichzeitig, sondern eine Sache nach der anderen: Ist Wochenende? Regnet es? Ist die Route stark ausgelastet? Genau so funktioniert ein Decision Tree. Er führt dich mit Ja/Nein-Fragen durch einen kleinen Fragebogen.

ML-Sprache

Die erste Frage sitzt an der . Jede Antwort führt über einen Ast zu einer neuen Frage. Am Ende landest du in einem , also bei der Vorhersage.

Häufiger Stolperstein

Verwechsle nicht Merkmale (Features) mit der Zielvariable (Target). Die Merkmale sind die Fragen, die der Baum stellt, zum Beispiel Wochenende, Regen oder Route ausgelastet. Das Target ist das, was wir vorhersagen wollen, also etwa pünktlich oder verspätet. Schau immer zuerst: Was will ich vorhersagen? Das ist dein Target. Alles andere sind Merkmale.

Frage statt Formel

Ein Decision Tree denkt in Regeln wie wenn Wochenende = ja, dann verspätet. Ein Baum mit nur einer einzigen Frage heißt .

Interaktive Demo

Baum-Pfad

Was nimmst du mit? Ein Baum ist kein Zauber. Er ist erst einmal nur eine sauber geordnete Kette von Fragen.

Modul 2

Grenzen im Raum

Du siehst, wie ein Baum in einer Punktwolke achsenparallele Grenzen zieht.

Offen

Alltagsszene

Bei einem Straßenfest möchtest du vorhersagen, ob Besucher eher Eis oder Kaffee kaufen. Zwei Merkmale reichen für den Anfang: Temperatur und Wind. Ein Baum legt nun einfache Grenzen fest, zum Beispiel: über 24 °C eher Eis, darunter eher Kaffee.

ML-Sprache

Im zweidimensionalen Raum entstehen keine diagonalen Grenzen wie bei manch anderem Modell, sondern rechteckige Bereiche. Der Baum trennt immer entlang einer Achse: Temperatur < Schwelle oder Wind < Schwelle.

Regel im Bild

Eine erste Trennung kann so aussehen: wenn Temperatur < 24, dann links, sonst rechts. Danach darf jede Seite ihre eigene nächste Frage bekommen.

Gute Nachricht: Kein Scaling nötig!

Anders als bei KNN oder Logistischer Regression braucht ein Decision Tree keine Skalierung der Daten. Warum? Der Baum vergleicht immer nur einen Wert mit einem Schwellenwert, zum Beispiel Temperatur < 24. Er berechnet keine Abstände zwischen Punkten. Deshalb ist es egal, ob Temperatur in Celsius und Wind in km/h gemessen wird.

Auch Gradient Descent wird hier nicht benutzt. Der Baum sucht den besten Split durch Ausprobieren, nicht durch schrittweises Optimieren einer Verlustfunktion.

Interaktive Grenze

Punktwolke

Blau steht hier für Kaffee, Bordeaux für Eis. Die Linie zeigt nur den ersten Split.

Vergleich: 3 Modelle, 3 Grenzen

Dieselben Daten, drei verschiedene Modelle. Beobachte nur die Form der Entscheidungsgrenze.

Logistische Regression

Eine gerade Linie oder Fläche

Decision Tree

Achsenparallele Rechtecke

KNN

Unregelmäßige Nachbarschaft

🏋️ Übung: Ersten Baum trainieren

Das Beispiel kommt direkt aus dem Visualisierungs-Notebook. Ergänze die Modellzeile und trainiere den Baum mit den vorhandenen Daten.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

from sklearn.tree import DecisionTreeClassifier

X = [[1, 1], [1, 2], [2, 1], [3, 3], [3, 4], [4, 3]]
y = [0, 0, 0, 1, 1, 1]

tree = # ??? DEINE LÖSUNG ???
tree.fit(X, y)

print(tree.tree_.node_count)
💡 Tipp anzeigen

Nutze denselben Klassennamen wie im Import und setze für Reproduzierbarkeit einen Zufallswert.

Lösung anzeigen
from sklearn.tree import DecisionTreeClassifier

X = [[1, 1], [1, 2], [2, 1], [3, 3], [3, 4], [4, 3]]
y = [0, 0, 0, 1, 1, 1]

tree = DecisionTreeClassifier(random_state=42)
tree.fit(X, y)

print(tree.tree_.node_count)

Erwartete Ausgabe: 3

Was nimmst du mit? Ein Baum zieht erst einfache Zäune. Im nächsten Zwischenschritt klärst du, warum diese Rechtecke etwas anderes sind als eine Linie bei LogReg oder Nachbarn bei KNN.

Zwischenschritt

Abgrenzung: Vollständiger Baum ≠ KNN ≠ Logistische Regression

Du kannst nach diesem Schritt in zwei Sätzen erklären, warum ein Tree hier anders ist als KNN oder LogReg.

Offen

Kurzer Begriff: vollständiger Baum

Stumpf = 1 Frage, 2 Blätter. Vollständiger Baum = mehrere Fragen hintereinander über mehrere Ebenen. Ein Fall läuft als Pfad von der Wurzel bis zum Blatt.

Merksatz: Baum = ein Fragebogen, den du Schritt für Schritt ablaufen kannst.

3 Modelle, 3 Denkweisen

  • Decision Tree: baut Regeln wie wenn Temperatur < 24. Im Bild entstehen Rechtecke, und der Pfad ist erklärbar.
  • Logistische Regression: baut meist eine Linie oder Fläche als Grenze und gibt Wahrscheinlichkeiten aus. Erst der Threshold kippt zu 0 oder 1.
  • KNN: fragt Wer sind die nächsten Nachbarn? Die Entscheidung kommt aus Distanz und Mehrheit, nicht aus festen Regeln.

Mini-Check: Welches Modell passt und warum?

Wähle die passendste Denkweise. Frage dich dabei immer: Brauche ich Rechtecke und einen erklärbaren Pfad, eher eine Linie mit Wahrscheinlichkeiten oder nur Nachbarn aus der Umgebung?

Wenn du LogReg oder KNN auffrischen willst: siehe logistic_regression.html bzw. distanzmetriken_und_scaling_interaktion.html.

Was nimmst du mit? Drei Modelle können dasselbe Problem lösen, aber sie erklären es völlig verschieden: Tree = Rechtecke und Pfad, LogReg = Linie plus Threshold, KNN = Nachbarn plus Distanz. Genau mit diesem Blick gehst du jetzt in den Best Split.

Modul 3

Best Split & Purity

Du lernst zuerst ohne Formel, warum ein guter Split möglichst homogene Gruppen erzeugt.

Offen

Alltagsszene

Stell dir zwei Kisten mit Retouren vor: in der einen fast nur beschädigte Ware, in der anderen fast nur unbeschädigte. Das ist praktisch. Viel schwieriger wäre es, wenn in beiden Kisten jeweils die Hälfte beschädigt und unbeschädigt läge. Genau diese Klarheit sucht ein Baum.

ML-Sprache

Wie findet der Baum den ? Er probiert systematisch alle Möglichkeiten aus: jedes Merkmal, zum Beispiel Temperatur, Wind oder Feiertag, und jeden möglichen Schwellenwert, etwa Temperatur < 18, < 19, < 20 und so weiter. Für jede Variante berechnet er, wie sauber die Gruppen werden. Die Variante mit der besten Trennung gewinnt. Das nennt man : Der Baum sucht in jedem Schritt nur den besten nächsten Split. Er plant nicht den ganzen Baum im Voraus. Deshalb ist das Ergebnis oft gut, aber nicht garantiert perfekt.

Purity in einem Satz

Wenn links fast nur Klasse A und rechts fast nur Klasse B liegt, ist der Split gut. Anders gesagt: Ein guter Split macht aus groben Rechtecken Schritt für Schritt sauberere Rechtecke. Wenn beide Seiten bunt gemischt bleiben, bringt die Frage wenig.

Wähle den besten Split

Was nimmst du mit? Der Baum sucht keine schöne Theorie, sondern die nächste Frage, die mehr Ordnung schafft. Im nächsten Modul gibst du dieser Ordnung mit Gini eine Zahl.

Modul 4

Gini verstehen

Du verbindest die Purity-Idee jetzt mit einer Zahl und lernst, wie man damit Splits vergleicht.

Offen

Alltagsszene

Wenn du in einer Schublade fast nur rote Stifte findest, greifst du sicher. Wenn dort rote und blaue Stifte halb halb liegen, wirst du häufiger danebengreifen. Genau diese Unsicherheit misst Gini. Für Splits kommt noch etwas dazu: Eine große gemischte Schublade ist problematischer als eine winzige gemischte Restgruppe.

ML-Sprache

misst, wie gemischt ein Knoten ist. Bei zwei Klassen gilt grob: rein = 0, maximal gemischt = 0,5. Bei mehr als zwei Klassen ist die Obergrenze anders, aber die Lesart bleibt gleich: klein ist rein, groß ist gemischt.

Formel

Gini = 1 - (p0² + p1²)

Wenn eine Klasse fast alles ausmacht, werden die Quadrate groß und Gini klein. Wenn beide Klassen ähnlich stark sind, bleibt Gini hoch. Merksatz: klein = ruhig und klar, groß = gemischt und unsicher.

Gini-Intuition auf einen Blick

Schau zuerst auf fünf feste Mischungen. So siehst du ohne Regler sofort: ganz rein ergibt 0, halb-halb ist am stärksten gemischt, und 3 zu 7 ist genauso unrein wie 7 zu 3.

Splits vergleichen: Gewichteter Gini

Ein Split erzeugt zwei Kinderknoten, links und rechts. Um zu entscheiden, welcher Split besser ist, berechnen wir den gewichteten Mittelwert der Gini-Werte beider Seiten. Die Gewichte sind die Anzahl der Fälle pro Seite. So zählt eine große Teilgruppe stärker als eine kleine Randgruppe.

Gini_gewichtet = (n_links / n_gesamt) × Gini_links + (n_rechts / n_gesamt) × Gini_rechts

Beispiel: 145 Fälle gehen nach links (Gini 0,39), 105 nach rechts (Gini 0,10). Gewichteter Gini = (145/250) × 0,39 + (105/250) × 0,10 = 0,268. Der Split mit dem niedrigsten gewichteten Gini gewinnt.

Merksatz: Für Gini zählt die Mischung, nicht welche Farbe vorne liegt. Deshalb haben 3 zu 7 und 7 zu 3 denselben Wert.

Interaktiver Gini-Regler

Ziehe danach am Regler und beobachte, wie sich dieselbe Idee zwischen rein und gemischt fließend verändert.

Mischung im Blatt

🏋️ Übung: Baum begrenzen

Auch diese Aufgabe basiert auf dem Visualisierungs-Notebook. Ergänze den Hyperparameter für einen flacheren Baum und prüfe danach die Tiefe.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

from sklearn.tree import DecisionTreeClassifier

X = [[1, 1], [1, 2], [2, 1], [3, 3], [3, 4], [4, 3]]
y = [0, 0, 0, 1, 1, 1]

tree = DecisionTreeClassifier(# ??? DEINE LÖSUNG ???, random_state=42)
tree.fit(X, y)

print(tree.tree_.max_depth)
💡 Tipp anzeigen

Der Hyperparameter begrenzt die Tiefe direkt.

Lösung anzeigen
from sklearn.tree import DecisionTreeClassifier

X = [[1, 1], [1, 2], [2, 1], [3, 3], [3, 4], [4, 3]]
y = [0, 0, 0, 1, 1, 1]

tree = DecisionTreeClassifier(max_depth=2, random_state=42)
tree.fit(X, y)

print(tree.tree_.max_depth)

Erwartete Ausgabe: 1 oder 2, je nach Datenlage höchstens aber 2.

Was nimmst du mit? Gini ist keine fremde Magie. Er ist nur eine Zahl für Unordnung: erst im einzelnen Knoten, dann gewichtet für den ganzen Split.

Modul 5

Rekursion

Du verstehst, wie der Baum dieselbe Split-Logik auf Teilmengen wiederholt und wie dabei die Tiefe gezählt wird.

Offen

Alltagsszene

Ein guter Sachbearbeiter hört nach der ersten Antwort nicht auf. Er fragt in jeder Teilgruppe neu: Was ist jetzt die nützlichste nächste Frage? Genau dieses Wiederholen derselben Logik nennt man Rekursion. Der Baum arbeitet also nicht einmal groß und fertig, sondern in kleinen, wiederholten Schritten.

ML-Sprache

Nach jedem Split betrachtet der Baum die linke und rechte Teilmenge getrennt. Für beide Seiten sucht er wieder den besten Split, bis ein Stoppkriterium erreicht ist, zum Beispiel maximale Tiefe oder zu wenige Beobachtungen. Rekursion heißt hier also schlicht: dieselbe Regel erneut auf kleinere Teilmengen anwenden. Jeder neue Knoten fragt also wieder: Welche Frage hilft jetzt an genau dieser Stelle?

Tiefe zählen: Die Wurzel liegt auf Tiefe 0, wie das Erdgeschoss. Der erste Split erzeugt Tiefe 1, der nächste Tiefe 2 und so weiter. Wenn du max_depth=3 setzt, darf der Baum höchstens 3 Ebenen unter der Wurzel haben.

Pseudocode

wenn Knoten rein oder zu klein: stop
sonst: best_split finden und links/rechts weiterbauen

Baum wachsen lassen

Was nimmst du mit? Rekursion ist hier nichts Mystisches. Es heißt nur: ab Wurzel-Tiefe 0 dieselbe Frage-Logik wiederholen, bis genug Ordnung entstanden ist.

Modul 6

Vorhersage im Blatt

Du verfolgst einzelne Fälle durch den Baum und lernst: Im Blatt steht keine neue Magie, sondern eine zusammengefasste Antwort.

Offen

Alltagsszene

Ein neues Paket kommt herein. Jetzt stellt der Baum nicht mehr abstrakte Fragen an alte Daten, sondern schickt genau diesen einen Fall durch seine Äste. Unten im Blatt steht dann die Entscheidung: pünktlich oder verspätet.

ML-Sprache

Bei Klassifikation gibt das Blatt meist die Mehrheitsklasse zurück. Bei Regression gibt das Blatt den durchschnittlichen Zielwert der Trainingsfälle in diesem Blatt zurück. Das Blatt 'rechnet' also nicht mehr weiter, sondern liest nur noch die im Blatt gespeicherte Entscheidung ab. Du kannst dir ein Blatt wie einen kleinen Merkzettel vorstellen: In diesem Bereich waren die meisten Fälle so und so.

Und bei Zahlen? Regression Trees

Bisher haben wir Klassen vorhergesagt, zum Beispiel pünktlich oder verspätet. Decision Trees können aber auch Zahlenwerte vorhersagen, etwa den Preis einer Wohnung oder die verkauften Stückzahlen. Die Baumstruktur bleibt gleich, nur die Art der Antwort unten im Blatt ändert sich.

  • Klassifikation: Gini misst die Mischung. Das Blatt gibt die häufigste Klasse aus.
  • Regression: MSE, also mittlerer quadratischer Fehler, misst die Streuung. Das Blatt gibt den Mittelwert der Fälle aus.

Der Aufbau bleibt gleich: Fragen, Splits, Blätter. Nur die Messung und die Vorhersage ändern sich.

Neuen Fall schicken

Pfad und Ergebnis

🏋️ Übung: Tree Regression

Diese Übung stammt aus dem Visualisierungs-Notebook mit dem Regressor. Ergänze die Vorhersagezeile für einen Produktionswert von 3750.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

import numpy as np
from sklearn.tree import DecisionTreeRegressor

X = np.array([[1000], [2000], [3000], [4000], [5000]])
y = np.array([12, 18, 27, 27, 35])

tree = DecisionTreeRegressor(random_state=42)
tree.fit(X, y)

pred = # ??? DEINE LÖSUNG ???
print(pred[0])
💡 Tipp anzeigen

Die Eingabe muss ein zweidimensionales Array sein.

Lösung anzeigen
import numpy as np
from sklearn.tree import DecisionTreeRegressor

X = np.array([[1000], [2000], [3000], [4000], [5000]])
y = np.array([12, 18, 27, 27, 35])

tree = DecisionTreeRegressor(random_state=42)
tree.fit(X, y)

pred = tree.predict(np.array([[3750]]))
print(pred[0])

Erwartete Ausgabe: 27.0

Was nimmst du mit? Eine Vorhersage ist bei Bäumen immer: Fall hineinschicken, Pfad verfolgen, Blatt lesen. Nur der Inhalt des Blatts wechselt: Klasse bei Klassifikation, Mittelwert bei Regression.

Modul 7

Overfitting & Pruning

Du erkennst, warum ein sehr tiefer Baum Trainingsdaten auswendig lernen kann, und lernst die wichtigsten Bremsen dagegen kennen.

Offen

Alltagsszene

Wenn du für jeden Ausnahmefall eine Extraregel aufschreibst, wirkt dein Regelwerk auf bekannte Fälle perfekt. In der echten Welt wird es aber oft brüchig. Genau das passiert, wenn ein Baum zu viele winzige Blätter bildet.

ML-Sprache

Bäume neigen zu . Gegenmittel sind zum Beispiel max_depth, min_samples_leaf oder max_leaf_nodes. Diese Regeln bremsen das Wachstum des Baums. Pruning bedeutet im Kern genau das: den Baum bewusst kleiner halten, damit er auf neuen Daten robuster bleibt.

Die 5 Stellschrauben

Parameter Was er tut Alltagsbild
max_depth Maximale Tiefe des Baums Wie viele Stockwerke dein Haus haben darf
min_samples_leaf Mindestanzahl Fälle pro Blatt Mindestens 10 Personen pro Tischgruppe
min_samples_split Mindestanzahl Fälle, um überhaupt zu teilen Erst ab 20 Personen lohnt sich eine zweite Schlange
max_leaf_nodes Maximale Anzahl Blätter Höchstens 8 Briefkästen im Sortierzentrum
max_features Wie viele Merkmale pro Split geprüft werden Der Baum darf nur 3 von 10 Fragen auf dem Zettel lesen

Tipp: Nutze Hyperparameter-Suche, zum Beispiel GridSearchCV, um die besten Werte zu finden. Probiere das nicht nur von Hand. In der Praxis arbeiten diese Stellschrauben meist zusammen, nicht einzeln.

Tiefe gegen Generalisierung

🏋️ Übung: Train/Test vergleichen

Die Aufgabe basiert auf dem Klassifikations-Notebook. Ergänze die beiden Modellzeilen und vergleiche danach Trainings- und Testgüte.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

from sklearn.tree import DecisionTreeClassifier

X_train = [[1], [2], [3], [4], [5], [6]]
y_train = [0, 0, 0, 1, 1, 1]
X_test = [[1.5], [2.5], [4.5], [5.5]]
y_test = [0, 0, 1, 1]

deep_tree = # ??? DEINE LÖSUNG ???
shallow_tree = # ??? DEINE LÖSUNG ???

deep_tree.fit(X_train, y_train)
shallow_tree.fit(X_train, y_train)

print(round(deep_tree.score(X_test, y_test), 2), round(shallow_tree.score(X_test, y_test), 2))
💡 Tipp anzeigen

Ein Modell hat keine Begrenzung, das andere nutzt eine kleine Tiefe.

Lösung anzeigen
from sklearn.tree import DecisionTreeClassifier

X_train = [[1], [2], [3], [4], [5], [6]]
y_train = [0, 0, 0, 1, 1, 1]
X_test = [[1.5], [2.5], [4.5], [5.5]]
y_test = [0, 0, 1, 1]

deep_tree = DecisionTreeClassifier(random_state=42)
shallow_tree = DecisionTreeClassifier(max_depth=2, random_state=42)

deep_tree.fit(X_train, y_train)
shallow_tree.fit(X_train, y_train)

print(round(deep_tree.score(X_test, y_test), 2), round(shallow_tree.score(X_test, y_test), 2))

Erwartete Ausgabe: zwei Zahlen wie 1.0 1.0 oder ähnlich. Entscheidend ist der Vergleich der Modelle.

Was nimmst du mit? Ein guter Baum ist nicht der buschigste, sondern derjenige, der auf neuen Daten stabil bleibt. Genau dafür sind die Stellschrauben da.

Modul 8

Praxisworkflow

Du bringst Training, Visualisierung, Vorhersage und Kontrolle in die richtige Reihenfolge.

Offen

Alltagsszene

Im Job reicht es nicht, nur einen Baum hübsch zu zeichnen. Du brauchst einen Ablauf: Daten trennen, Modell trainieren, Baum lesen, Wahrscheinlichkeiten prüfen, Testdaten anschauen und erst dann entscheiden.

ML-Sprache

Im Notebook tauchen dafür oft dieselben Schritte auf: train_test_split, DecisionTreeClassifier, fit, plot_tree, predict_proba und eine Metrik auf Testdaten.

Merksatz

Erst sauber trennen, dann trainieren, dann verstehen, dann bewerten. Sonst verwechselst du Trainingserfolg mit echter Generalisierung.

Workflow ordnen

Klicke die Schritte in der richtigen Reihenfolge an.

Was nimmst du mit? Decision Trees sind besonders stark, wenn du den Weg von der Frage bis zum Blatt erklären kannst, statt nur einen Score zu nennen.