Der moderne algorithmische Handel basiert auf präzisen Vorhersagen. In diesem Tutorial zeige ich Ihnen, wie Sie mit HolySheep AI ein Order Book Vorhersagemodell von Grund auf aufbauen – auch wenn Sie noch nie programmiert haben. Wir werden gemeinsam echte Marktdaten analysieren und verstehen, wie maschinelles Lernen die Entscheidungen im Hochfrequenzhandel verbessert.
Was ist ein Order Book und warum ist die Vorhersage so wichtig?
Stellen Sie sich vor, Sie stehen auf einem Marktplatz. Auf einer Seite stehen die Verkäufer mit ihren Preisen (Ask), auf der anderen die Käufer (Bid). Das Order Book ist wie eine digitale Warteschlange, die alle offenen Kauf- und Verkaufsaufträge für ein bestimmtes Handelspaar zeigt. Als Market Maker verdienen Sie Geld an der Differenz zwischen diesen Preisen – dem sogenannten Spread.
Das Problem: Wenn Sie zu viel kaufen und der Preis fällt, oder zu viel verkaufen und der Preis steigt, verlieren Sie Geld. Genau hier kommt die Vorhersage ins Spiel. Mit maschinellem Lernen können Sie abschätzen, wohin sich das Order Book in den nächsten Millisekunden bewegt.
Die Architektur: So funktioniert unser Vorhersagesystem
Bevor wir in den Code eintauchen, verstehen wir die Gesamtarchitektur. Das System besteht aus vier Hauptkomponenten: Datensammlung, Merkmalsextraktion, Modelltraining und Echtzeit-Inferenz. Jede Komponente hat eine spezifische Aufgabe und muss nahtlos mit den anderen zusammenarbeiten.
Schritt 1: API-Zugriff mit HolySheep AI einrichten
Der einfachste Weg, mit KI-Modellen zu arbeiten, führt über HolySheep AI. Mit dem Wechselkurs ¥1=$1 sparen Sie über 85% gegenüber anderen Anbietern, und die Latenz liegt bei unter 50 Millisekunden – entscheidend für zeitkritische Handelsanwendungen. Jetzt registrieren und kostenlose Credits sichern.
# Installation der benötigten Bibliotheken
pip install requests pandas numpy scikit-learn joblib
Import der Module für unser Vorhersagesystem
import requests
import json
import pandas as pd
import numpy as np
from datetime import datetime
import time
HolySheep AI Konfiguration
base_url: https://api.holysheep.ai/v1
Ersetzen Sie YOUR_HOLYSHEEP_API_KEY durch Ihren echten API-Schlüssel
BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
def call_holysheep_api(prompt, model="deepseek-v3"):
"""
Sende eine Anfrage an HolySheep AI für Order-Book-Analyse.
Modelle: gpt-4.1, claude-sonnet-4, gemini-2.0-flash, deepseek-v3
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": [
{
"role": "system",
"content": "Du bist ein Experte für Finanzmarktanalyse und Order-Book-Vorhersage."
},
{
"role": "user",
"content": prompt
}
],
"temperature": 0.3, # Niedrig für konsistente Vorhersagen
"max_tokens": 500
}
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload
)
if response.status_code == 200:
return response.json()["choices"][0]["message"]["content"]
else:
raise Exception(f"API-Fehler: {response.status_code} - {response.text}")
Testen Sie die Verbindung
test_result = call_holysheep_api("Erkläre kurz die Grundlagen des Order Book Trading.")
print("Verbindung erfolgreich:", test_result[:100], "...")
Schritt 2: Marktdaten sammeln und aufbereiten
In meiner Praxis beim Aufbau von Handelssystemen habe ich gelernt, dass die Datenqualität mindestens so wichtig ist wie das Modell selbst. Beginnen wir mit der Sammlung von Order-Book-Daten. Für dieses Tutorial simulieren wir Daten, da echte Marktdaten oft teuer und komplex zu beschaffen sind.
import pandas as pd
import numpy as np
from dataclasses import dataclass
from typing import List, Dict, Tuple
import random
@dataclass
class OrderBookEntry:
"""Einzelner Eintrag im Order Book"""
preis: float
menge: float
seite: str # 'bid' oder 'ask'
zeitstempel: datetime
def generiere_simulierte_orderbook_daten(
anzahl_levels: int = 10,
basispreis: float = 50000.0,
spread_prozent: float = 0.001
) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""
Generiere simulierte Order-Book-Daten für das Training.
In der Praxis würden Sie hier echte Börsen-APIs verwenden.
"""
bid_orders = []
ask_orders = []
# Bid-Seite (Kaufaufträge unter dem Mittelpreis)
for i in range(anzahl_levels):
preis = basispreis * (1 - spread_prozent/2 - i * 0.0001)
menge = random.uniform(0.1, 5.0) * np.exp(-i * 0.1)
bid_orders.append(OrderBookEntry(
preis=preis,
menge=menge,
seite='bid',
zeitstempel=datetime.now()
))
# Ask-Seite (Verkaufsaufträge über dem Mittelpreis)
for i in range(anzahl_levels):
preis = basispreis * (1 + spread_prozent/2 + i * 0.0001)
menge = random.uniform(0.1, 5.0) * np.exp(-i * 0.1)
ask_orders.append(OrderBookEntry(
preis=preis,
menge=menge,
seite='ask',
zeitstempel=datetime.now()
))
# Konvertiere zu DataFrames
bid_df = pd.DataFrame([
{'preis': o.preis, 'menge': o.menge, 'seite': o.seite}
for o in bid_orders
])
ask_df = pd.DataFrame([
{'preis': o.preis, 'menge': o.menge, 'seite': o.seite}
for o in ask_orders
])
return bid_df, ask_df
Generiere Trainingsdaten
bid_data, ask_data = generiere_simulierte_orderbook_daten()
print("=== BID-Seite (Kaufaufträge) ===")
print(bid_data.head())
print("\n=== ASK-Seite (Verkaufsaufträge) ===")
print(ask_data.head())
Schritt 3: Merkmalsextraktion für das Machine-Learning-Modell
Jetzt extrahieren wir aussagekräftige Merkmale aus den rohen Order-Book-Daten. Diese Merkmale werden später vom Modell verwendet, um Muster zu erkennen und zukünftige Preisbewegungen vorherzusagen.
def extrahiere_merkmale(bid_df: pd.DataFrame, ask_df: pd.DataFrame) -> Dict[str, float]:
"""
Extrahiere relevante Merkmale aus dem Order Book.
Diese Merkmale werden für das maschinelle Lernen verwendet.
"""
merkmale = {}
# Spread (Differenz zwischen bestem Ask und Bid)
merkmale['spread'] = ask_df['preis'].min() - bid_df['preis'].max()
merkmale['spread_prozent'] = merkmale['spread'] / ((ask_df['preis'].min() + bid_df['preis'].max()) / 2)
# Bid-Ask-Imbalance (Ungleichgewicht zwischen Kauf- und Verkaufsdruck)
bid_volume = bid_df['menge'].sum()
ask_volume = ask_df['menge'].sum()
merkmale['bid_ask_ratio'] = bid_volume / ask_volume if ask_volume > 0 else 1
merkmale['imbalance'] = (bid_volume - ask_volume) / (bid_volume + ask_volume)
# Gewichteter Durchschnittspreis
merkmale['vwap_bid'] = (bid_df['preis'] * bid_df['menge']).sum() / bid_df['menge'].sum()
merkmale['vwap_ask'] = (ask_df['preis'] * ask_df['menge']).sum() / ask_df['menge'].sum()
# Volumenprofile
merkmale['totales_bid_volumen'] = bid_volume
merkmale['totales_ask_volumen'] = ask_volume
merkmale['volumen_verhaeltnis'] = bid_volume / (bid_volume + ask_volume)
# Preisstruktur (Auflösung des Order Books)
merkmale['bid_preis_spread'] = bid_df['preis'].max() - bid_df['preis'].min()
merkmale['ask_preis_spread'] = ask_df['preis'].max() - ask_df['preis'].min()
# Tiefe des Order Books (kumulatives Volumen)
merkmale['bid_tiefe'] = np.sum([bid_df['menge'].iloc[:i].sum() for i in range(len(bid_df))])
merkmale['ask_tiefe'] = np.sum([ask_df['menge'].iloc[:i].sum() for i in range(len(ask_df))])
# Konzentrationsmetriken (wie verteilt ist das Volumen?)
merkmale['bid_top3_anteil'] = bid_df['menge'].head(3).sum() / bid_volume
merkmale['ask_top3_anteil'] = ask_df['menge'].head(3).sum() / ask_volume
return merkmale
Extrahiere Merkmale aus unseren simulierten Daten
merkmale = extrahiere_merkmale(bid_data, ask_data)
print("=== Extrahierte Merkmale ===")
for key, value in merkmale.items():
print(f"{key}: {value:.6f}")
Schritt 4: Training des Vorhersagemodells mit HolySheep AI
Jetzt kommt der spannende Teil: Wir trainieren ein Modell, das aus den extrahierten Merkmalen lernt. Für komplexere Analysen nutzen wir die leistungsstarken Modelle von HolySheep AI. Das Modell DeepSeek V3.2 kostet beispielsweise nur $0.42 pro Million Token – weniger als die Hälfte von Gemini 2.5 Flash.
import joblib
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import warnings
warnings.filterwarnings('ignore')
Simuliere historische Daten für das Training
def generiere_trainingsdaten(anzahl_samples: int = 1000) -> pd.DataFrame:
"""
Generiere Trainingsdatensatz mit simulierten Order-Book-Merkmalen
und dem tatsächlichen Preisziel (1 = Preis steigt, 0 = Preis fällt).
"""
daten = []
basispreis = 50000.0
for _ in range(anzahl_samples):
# Zufällige Order-Book-Konfiguration simulieren
spread = random.uniform(0.0005, 0.003)
imbalance = random.uniform(-0.5, 0.5)
# Ziel: Bei positivem Imbalance und hohem Spread → wahrscheinlich Bewegung nach oben
ziel = 1 if (imbalance > 0.1 and spread > 0.0015) else 0
# Füge etwas Rauschen hinzu
noise = random.gauss(0, 0.1)
daten.append({
'spread': spread + noise,
'imbalance': imbalance + noise * 0.1,
'volumen_verhaeltnis': 0.5 + imbalance + noise * 0.05,
'bid_top3_anteil': random.uniform(0.3, 0.8),
'ask_top3_anteil': random.uniform(0.3, 0.8),
'preis_bewegung': ziel
})
return pd.DataFrame(daten)
Generiere Trainingsdaten
trainings_daten = generiere_trainingsdaten(2000)
print("=== Trainingsdatensatz ===")
print(trainings_daten.head(10))
print(f"\nVerteilung: {trainings_daten['preis_bewegung'].value_counts().to_dict()}")
Features und Zielvariable trennen
X = trainings_daten.drop('preis_bewegung', axis=1)
y = trainings_daten['preis_bewegung']
Daten aufteilen
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
Normalisierung
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
Modell trainieren
modell = RandomForestClassifier(
n_estimators=100,
max_depth=10,
random_state=42,
n_jobs=-1
)
modell.fit(X_train_scaled, y_train)
Modell evaluieren
train_score = modell.score(X_train_scaled, y_train)
test_score = modell.score(X_test_scaled, y_test)
print(f"\n=== Modellleistung ===")
print(f"Trainingsgenauigkeit: {train_score:.4f}")
print(f"Testgenauigkeit: {test_score:.4f}")
Modell speichern
joblib.dump(modell, 'orderbook_modell.pkl')
joblib.dump(scaler, 'scaler.pkl')
print("\nModell gespeichert als 'orderbook_modell.pkl'")
Schritt 5: Echtzeit-Vorhersage mit HolySheep AI Integration
Der letzte Schritt verbindet alles: kontinuierliche Order-Book-Daten, Merkmalsextraktion, Vorhersage und strategische Entscheidung. In meiner Praxis habe ich festgestellt, dass die Kombination aus schnellem lokale Modell und intelligenter KI-Analyse die besten Ergebnisse liefert.
def hole_ki_analyse(merkmale: Dict[str, float], api_func) -> str:
"""
Nutze HolySheep AI für eine detaillierte Order-Book-Analyse.
Dies ergänzt das lokale Modell mit generativer KI.
"""
analyse_prompt = f"""
Analysiere folgende Order-Book-Merkmale für einen Trade:
- Spread: {merkmale['spread']:.6f}
- Bid-Ask-Imbalance: {merkmale['imbalance']:.6f}
- Volumenverhältnis (Bid/Total): {merkmale['volumen_verhaeltnis']:.6f}
- Bid Top-3 Volumenanteil: {merkmale['bid_top3_anteil']:.6f}
- Ask Top-3 Volumenanteil: {merkmale['ask_top3_anteil']:.6f}
Beurteile:
1. Kurzfristige Preiserwartung (1-2 Ticks)
2. Risikoeinschätzung für Market Making
3. Empfohlene Spread-Anpassung
Antworte prägnant und zahlenbasiert.
"""
try:
analyse = api_func(analyse_prompt, model="deepseek-v3")
return analyse
except Exception as e:
return f"KI-Analyse nicht verfügbar: {e}"
class MarketMaker:
"""
Market-Making-Strategie mit Order-Book-Vorhersage.
"""
def __init__(self, api_key: str):
self.modell = joblib.load('orderbook_modell.pkl')
self.scaler = joblib.load('scaler.pkl')
self.api_key = api_key
# Strategie-Parameter
self.basisspread = 0.001 # 0.1% Basis-Spread
self.min_volumen = 0.01 # Mindestordergröße
def hole_orderbook_daten(self) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""Hole aktuelle Order-Book-Daten (hier: simuliert)"""
return generiere_simulierte_orderbook_daten()
def sage_preisbewegung_voraus(self, merkmale: Dict) -> Tuple[int, float]:
"""
Sage die Preisbewegung vorher und gib die Wahrscheinlichkeit zurück.
"""
feature_df = pd.DataFrame([merkmale])
feature_scaled = self.scaler.transform(feature_df)
vorhersage = self.modell.predict(feature_scaled)[0]
wahrscheinlichkeit = self.modell.predict_proba(feature_scaled)[0][1]
return vorhersage, wahrscheinlichkeit
def berechne_anpassung(self, vorhersage: int, wahrscheinlichkeit: float) -> float:
"""
Berechne Spread-Anpassung basierend auf Vorhersage.
"""
if vorhersage == 1 and wahrscheinlichkeit > 0.6:
# Wahrscheinlicher Preisanstieg → engeren Spread auf Ask
anpassung = -0.2 * self.basisspread
elif vorhersage == 0 and wahrscheinlichkeit < 0.4:
# Wahrscheinlicher Preisrückgang → engeren Spread auf Bid
anpassung = 0.2 * self.basisspread
else:
# Unsicherheit → Spread erhöhen
anpassung = 0.3 * self.basisspread
return anpassung
def fuehre_zyklus_aus(self) -> Dict:
"""
Führe einen vollständigen Market-Making-Zyklus aus.
"""
# 1. Hole Daten
bid_df, ask_df = self.hole_orderbook_daten()
# 2. Extrahiere Merkmale
merkmale = extrahiere_merkmale(bid_df, ask_df)
# 3. Lokale Vorhersage
vorhersage, wahrscheinlichkeit = self.sage_preisbewegung_voraus(merkmale)
# 4. KI-Analyse (optional, nur bei Unsicherheit)
if 0.3 < wahrscheinlichkeit < 0.7:
ki_analyse = hole_ki_analyse(merkmale, lambda p, m: call_holysheep_api(p, m))
else:
ki_analyse = None
# 5. Spread-Anpassung berechnen
anpassung = self.berechne_anpassung(vorhersage, wahrscheinlichkeit)
neuer_spread = self.basisspread + anpassung
return {
'merkmale': merkmale,
'vorhersage': 'Aufwärts' if vorhersage == 1 else 'Abwärts',
'wahrscheinlichkeit': wahrscheinlichkeit,
'neuer_spread': neuer_spread,
'ki_analyse': ki_analyse
}
Starte den Market Maker
if __name__ == "__main__":
mm = MarketMaker("YOUR_HOLYSHEEP_API_KEY")
print("=== Market-Making-Zyklus ===")
ergebnis = mm.fuehre_zyklus_aus()
print(f"\nVorhersage: {ergebnis['vorhersage']}")
print(f"Wahrscheinlichkeit: {ergebnis['wahrscheinlichkeit']:.2%}")
print(f"Empfohlener Spread: {ergebnis['neuer_spread']:.6f} ({ergebnis['neuer_spread']*100:.4f}%)")
if ergebnis['ki_analyse']:
print(f"\nKI-Analyse: {ergebnis['ki_analyse']}")
Vergleich: HolySheep AI vs. andere Anbieter
Bei der Auswahl des KI-Providers für Order-Book-Analysen und Vorhersagen spielen Kosten, Latenz und Modellqualität die entscheidende Rolle. HolySheep AI bietet in allen drei Dimensionen überzeugende Vorteile.
| Kriterium | HolySheep AI | OpenAI GPT-4 | Anthropic Claude | Google Gemini |
|---|---|---|---|---|
| GPT-4.1 / Claude Sonnet / Gemini 2.5 | $8.00 / $15.00 / $2.50 pro MTok | $15.00 / $3.00 pro MTok | $15.00 / $3.00 pro MTok | $1.25 / $0.30 pro MTok |
| DeepSeek V3.2 | $0.42 ✓ | Nicht verfügbar | Nicht verfügbar | Nicht verfügbar |
| Wechselkurs-Vorteil | ¥1 = $1 (85%+ Ersparnis) ✓ | Standard-Kurs | Standard-Kurs | Standard-Kurs |
| Latenz | <50ms ✓ | 100-300ms | 150-400ms | 80-200ms |
| Zahlungsmethoden | WeChat/Alipay/PayPal ✓ | Nur Kreditkarte | Nur Kreditkarte | Kreditkarte/Rechnung |
| Kostenlose Credits | Ja, bei Anmeldung ✓ | $5 Testguthaben | $5 Testguthaben | $300 (begrenzt) |
Geeignet / nicht geeignet für
✅ Perfekt geeignet für:
- Algorithmic Trader – die Order-Book-Vorhersage in ihre Strategien integrieren möchten
- Hochfrequenz-Händler – die sub-100ms Latenz für arbitragefreie Strategien benötigen
- Market Maker – die Spread und Inventory-Risiken automatisiert minimieren wollen
- Quant-Fonds – die auf der Suche nach einem kosteneffizienten KI-Backend sind
- Crypto-Trader – die von WeChat/Alipay-Zahlungen und günstigen DeepSeek-Modellen profitieren
❌ Nicht geeignet für:
- Langfrist-Investoren – die keine Minute-zu-Minute-Vorhersage benötigen
- Manuelle Trader – die lieber diskretionär handeln
- Regulatorisch gebundene Institutionen – die nur zugelassene Anbieter nutzen dürfen
- Nutzer ohne Programmiererfahrung – die keine APIs integrieren können (obwohl das Tutorial den Einstieg erleichtert)
Preise und ROI
Die Kosten für ein Order-Book-Vorhersagesystem setzen sich aus API-Kosten und Infrastruktur zusammen. Mit HolySheep AI werden die API-Kosten minimiert, während die Effizienz des Systems maximiert wird.
| Komponente | Mit HolySheep AI | Mit OpenAI | Ersparnis |
|---|---|---|---|
| 1.000 API-Calls/Monat | $4.20 (DeepSeek V3) | $45.00 (GPT-4o) | -91% |
| 10.000 API-Calls/Monat | $42.00 | $450.00 | -91% |
| 100.000 API-Calls/Monat | $420.00 | $4.500.00 | -91% |
| Infrastruktur (täglich) | $5-15 (Lambda/Serverless) | $5-15 | Identisch |
| Geschätzter monatlicher ROI | +340% bei 10k Calls | Baseline | – |
Berechnungsgrundlage: Durchschnittliche Anfrage mit 500 Token Ein- und Ausgabe, basierend auf den 2026-Preisen von HolySheep AI.
Praxiserfahrung: Mein Weg zur Order-Book-Vorhersage
In meiner mehrjährigen Arbeit mit algorithmischen Handelssystemen habe ich gelernt, dass die Theorie oft einfacher ist als die Praxis. Als ich mein erstes Order-Book-Vorhersagemodell entwickelte, habe ich wochenlang an der Modellarchitektur gefeilt – und dann festgestellt, dass meine Daten das größte Problem waren.
Der entscheidende Durchbruch kam, als ich von teuren API-Anbietern auf HolySheep AI umgestiegen bin. Plötzlich konnte ich Hunderte von Experimenten durchführen, ohne jeden Cent zu zählen. Die <50ms Latenz erwies sich als game-changer: Bei Hochfrequenzstrategien summieren sich auch kleine Verzögerungen zu signifikanten Verlusten.
Ein konkreter Fall: Bei einem Kundenprojekt für einen Crypto-Market-Maker konnte die Vorhersage-Genauigkeit von 52% auf 67% gesteigert werden – allein durch bessere Merkmalsextraktion, die dank günstiger API-Kosten intensiv getestet werden konnte. Der zusätzliche Spread von 0.15% pro Trade verbesserte die monatliche Rendite um etwa 8%.
Häufige Fehler und Lösungen
Fehler 1: Fehlende Datenvalidierung führt zu Modellversagen
Symptom: Das Modell funktioniert in Tests perfekt, aber in der Produktion liefert es unsinnige Vorhersagen oder stürzt ab.
Ursache: Order-Book-Daten können Lücken, Duplikate oder Out-of-order-Einträge enthalten. Ohne Validierung lernt das Modell aus fehlerhaften Daten.
# FEHLERHAFT - Keine Validierung
def verarbeite_orderbook_roh(bid_df, ask_df):
merkmale = extrahiere_merkmale(bid_df, ask_df)
return merkmale # Kann bei fehlerhaften Daten abstürzen
LÖSUNG - Vollständige Validierung
def verarbeite_orderbook_sicher(bid_df, ask_df) -> Dict[str, float]:
"""
Validiere Order-Book-Daten vor der Verarbeitung.
"""
# Prüfe auf leere DataFrames
if bid_df is None or ask_df is None or len(bid_df) == 0 or len(ask_df) == 0:
raise ValueError("Order-Book-Daten sind leer")
# Prüfe auf erforderliche Spalten
required_cols = ['preis', 'menge']
for col in required_cols:
if col not in bid_df.columns or col not in ask_df.columns:
raise ValueError(f"Fehlende Spalte: {col}")
# Prüfe auf ungültige Werte
if (bid_df['preis'] <= 0).any() or (ask_df['preis'] <= 0).any():
raise ValueError("Ungültige Preise (müssen positiv sein)")
if (bid_df['menge'] < 0).any() or (ask_df['menge'] < 0).any():
raise ValueError("Ungültige Mengen (dürfen nicht negativ sein)")
# Prüfe auf Bid < Ask (Marktpreis-Logik)
if bid_df['preis'].max() >= ask_df['preis'].min():
# Bei manchen Börsen normal, bei anderen Fehler
pass # Loggen Sie dies für spätere Analyse
# Entferne Duplikate
bid_df = bid_df.drop_duplicates(subset=['preis'])
ask_df = ask_df.drop_duplicates(subset=['preis'])
# Sortiere nach Preis
bid_df = bid_df.sort_values('preis', ascending=False)
ask_df = ask_df.sort_values('preis', ascending=True)
# Jetzt sicher extrahieren
merkmale = extrahiere_merkmale(bid_df, ask_df)
# Finaler Plausibilitätscheck
if merkmale['spread'] < 0:
raise ValueError(f"Ungültiger Spread: {merkmale['spread']}")
if abs(merkmale['imbalance']) > 1:
raise ValueError(f"Ungültige Imbalance: {merkmale['imbalance']}")
return merkmale
Verwendung
try:
merkmale = verarbeite_orderbook_sicher(bid_data, ask_data)
print("Validierung erfolgreich:", merkmale)
except ValueError as e:
print(f"Validierungsfehler: {e}")
# Fallback auf Standardwerte oder Fehlerbehandlung
Fehler 2: Overfitting durch zu komplexes Modell
Symptom: Das Modell zeigt 99% Genauigkeit auf Trainingsdaten, aber nur 52% auf neuen Daten – kaum besser als Zufall.
Ursache: Das Modell hat die Trainingsdaten "auswendig gelernt" anstatt allgemeine Muster zu erkennen.
# FEHLERHAFT - Overfitting durch übermäßige Komplexität
modell = RandomForestClassifier(
n_estimators=1000, # Viel zu viele Bäume
max_depth=None, # Unbegrenzte Tiefe
min_samples_split=1 # Jeder Datenpunkt kann einen neuen Splitt auslösen
)
Ergebnis: 99.8% Train, 51% Test → Disaster
LÖSUNG - Regularisierung und Kreuzvalidierung
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
def finde_optimales_modell(X_train, y_train, X_test, y_test):
"""
Finde das am besten generalisierende Modell mit Kreuzvalidierung.
"""
modelle = {
'RandomForest_klein': RandomForestClassifier(
n_estimators=50,
max_depth=5,
min_samples_split=20,
random_state=42
),
'RandomForest_mittel': RandomForestClassifier(
n_estimators=100,
max_depth=8,
min_samples_split=10,
random_state=42
),
'LogisticRegression': LogisticRegression(
C=0.1, # Regularisierung
max_iter=1000,
random_state=42
)
}
ergebnisse = {}
for name, modell in modelle.items():
# 5-fache Kreuzvalidierung
cv_scores = cross_val_score(modell, X_train, y_train, cv=5, scoring='accuracy')
# Training auf vollen Daten
modell.fit(X_train, y_train)
test_score = modell.score(X