← Zurück zu den Artikeln
August 3, 2026
5 min read

Ensemble-Methoden: Kombination schwacher Lernender für robustes Alpha

Ensemble-Methoden: Kombination schwacher Lernender für robustes Alpha
#machine-learning
#ensemble
#bagging
#stacking
#alpha

In den meisten Schriften über Trading-Ensembles wird argumentiert, dass mehr Modelle besser seien. Das ist die falsche Achse. Der Fehler eines Ensembles zerfällt in drei Terme, und im Handel ist immer nur einer von ihnen die verbindliche Einschränkung.

In diesem Artikel geht es um diesen einen Begriff und um zwei daraus resultierende Konsequenzen, die im Rest dieses Blogs nicht behandelt werden: Stacking als explizite Signalkombinationsschicht und die Frage, ob die Kombination vieler Signale tatsächlich zu Umsatzeinbußen führt, bevor die Trades den Markt erreichen.

Der Begriff, der tatsächlich bindet: Bias-Varianz-Kovarianz

Für ein Regressionsensemble von NN Modelle, der erwartete quadratische Fehler der durchschnittlichen Vorhersage fˉ\bar{f} zerfällt als:

E[(fˉy)2]=bias2+1Nvariance+(11N)covarianceE\left[\left(\bar{f} - y\right)^2\right] = \overline{\text{bias}^2} + \frac{1}{N}\overline{\text{variance}} + \left(1 - \frac{1}{N}\right)\overline{\text{covariance}}

Drei Begriffe, drei Hebel:

  • Bagging greift den Varianzterm an, indem über Bootstrap-Stichproben gemittelt wird.
  • Boosting greift den Bias-Term an, indem Residuen iterativ korrigiert werden.
  • Stacking greift den Kovarianzterm an, indem es Kombinationsgewichte lernt, anstatt gleiche Gewichte anzunehmen.
  • Zunehmend NN schrumpft nur den Varianzbeitrag. Es hat überhaupt nichts mit der Kovarianz zu tun – der (11/N)(1 - 1/N) Der Koeffizient liegt bereits bei 0,99 N=100N = 100.

Dieser letzte Punkt ist das ganze Argument. Beim Handel werden Modelle mit denselben Instrumenten und im gleichen Verlauf gegen Ziele trainiert, die selbst nahezu identische Transformationen derselben Preisreihe sind. Ihre Fehler sind nicht annähernd unabhängig. Der Kovarianzterm ist also groß und der Varianzterm bereits erschöpft, was bedeutet, dass Sie durch die Modellanzahl fast nichts und durch strukturelle Unterschiede alles kaufen.

Die konkrete, falsifizierbare Form der Behauptung: Das Hinzufügen des 101. Gradienten-verstärkten Baums sollte die Ensemblemetrik weniger verschieben als das Hinzufügen eines strukturell anderen Modells – ein LSTM, ein lineares Modell auf einer disjunkten Merkmalsdomäne, alles mit einer anderen induktiven Verzerrung. Der Randbaum ist nahezu kollinear mit den Bäumen, die bereits im Buch vorkommen; das strukturell andere Modell ist es nicht.

Korrelation, nicht Modellanzahl, legt die effektive Breite eines Ensembles fest – die Ableitung, die kryptogemessenen Korrelationsfaktoren nach Anlageklasse und die Simulation anhand realer Paardaten finden Sie in Signalkorrelation: Wie viele Paare zu überwachen sind.

Reduzieren Sie die Ensemblevielfalt nicht auf eine einzige Zahl. Die Deflated Sharpe Ratio berechnet fünf effektive-NN Schätzer (durchschnittliche Korrelation, Beteiligungsverhältnis, PCA-95 %, Kaiser, Cheverud-Nyholt) auf einem echten 640-Zellen-Raster zeigen, dass sie sich erstrecken NeffN_{\text{eff}} von 1,6 auf 370 und argumentiert, dass das Band – nicht irgendeine einzelne Punktschätzung – das Ergebnis ist. Melde die Band.

Stapeln als Signalkombinationsschicht

Absacken und Boosten werden an anderer Stelle gut abgedeckt. Spread Modeling with Machine Learning liefert das Gradient-Boosting-Setup, die Verlustauswahl für verzerrte Ziele, die SHAP-Wichtigkeitsergebnisse, die Feature-Taxonomie und eine bereinigte Walk-Forward-Aufteilung mit der Vorwärtsfensterüberlappung, die die Lücke motiviert. Beginnen Sie dort; In diesem Abschnitt wird davon ausgegangen.

Was nicht abgedeckt wird, ist die darüber liegende Ebene: ein Meta-Lerner, der Basismodellvorhersagen als Eingabefunktionen verwendet und lernt, diese zu kombinieren.

  • Stufe 0 (Basislerner): verschiedene Modelle, die Vorhersagen aus Rohmerkmalen erstellen.
  • Stufe 1 (Meta-Lerner): ein Modell, das lernt, welcher Basis Lernende wann vertrauen können.

Der Mechanismus, der dies sicher macht, sind Out-of-Fold-Metafunktionen. Der Meta-Lernende darf niemals eine Basismodell-Vorhersage sehen, die auf Daten basiert, auf denen das Basismodell trainiert wurde – diese Vorhersagen sind in einer Weise optimistisch verzerrt, die den Live-Handel nicht überdauert, und der Meta-Lernende wird sie entsprechend gewichten.

import numpy as np
import pandas as pd
from sklearn.base import clone
from sklearn.model_selection import TimeSeriesSplit


class TradingStackingEnsemble:
    """
    Two-level stacking ensemble for return prediction.

    Level 0: base learners, each on its own feature domain
    Level 1: meta-learner trained on out-of-fold base predictions
    """

    def __init__(self, base_models: list, meta_model, n_splits: int = 5):
        self.base_models = base_models  # list of (name, model, feature_cols)
        self.meta_model = meta_model
        self.n_splits = n_splits
        self.fitted_base_models_ = {}

    def _generate_meta_features(
        self,
        X: pd.DataFrame,
        y: pd.Series
    ) -> pd.DataFrame:
        """Out-of-fold predictions from each base model."""
        tscv = TimeSeriesSplit(n_splits=self.n_splits)
        meta_features = pd.DataFrame(index=X.index)

        for name, model, feature_cols in self.base_models:
            oof_preds = pd.Series(np.nan, index=X.index)

            for train_idx, val_idx in tscv.split(X):
                X_train = X.iloc[train_idx][feature_cols]
                y_train = y.iloc[train_idx]
                X_val = X.iloc[val_idx][feature_cols]

                fold_model = clone(model)
                fold_model.fit(X_train, y_train)

                if hasattr(fold_model, 'predict_proba'):
                    oof_preds.iloc[val_idx] = fold_model.predict_proba(X_val)[:, 1]
                else:
                    oof_preds.iloc[val_idx] = fold_model.predict(X_val)

            meta_features[name] = oof_preds

        return meta_features.dropna()

    def fit(self, X: pd.DataFrame, y: pd.Series):
        meta_features = self._generate_meta_features(X, y)
        y_meta = y.loc[meta_features.index]

        self.meta_model.fit(meta_features, y_meta)

        for name, model, feature_cols in self.base_models:
            model.fit(X[feature_cols], y)
            self.fitted_base_models_[name] = model

        return self

    def predict(self, X: pd.DataFrame) -> np.ndarray:
        meta_features = pd.DataFrame()

        for name, model, feature_cols in self.base_models:
            fitted = self.fitted_base_models_[name]
            if hasattr(fitted, 'predict_proba'):
                meta_features[name] = fitted.predict_proba(X[feature_cols])[:, 1]
            else:
                meta_features[name] = fitted.predict(X[feature_cols])

        return self.meta_model.predict(meta_features)

Die Spaltungsdisziplin hier ist weder optional noch neu – verwenden Sie einen bereinigten, mit einem Embargo belegten Walk-Forward und verstehen Sie, was jede Leckklasse in überhöhtem Sharpe wert ist, bevor Sie einer dieser Zahlen vertrauen. Beide sind bereits gemessen: die Look-Ahead-Bias-Taxonomie quantifiziert die Ausführung, Indikator- und Normalisierungsverluste in einem kontrollierten Simulator, und Walk-Forward-Optimierung deckt verankerte vs. rollierende Fenster, CPCV, Bereinigung und die WFER-Degradationsdiagnose ab.

Drei Designentscheidungen beziehen sich speziell auf das Stapeln und sind erwähnenswert.

Einfachheit des Meta-Lerners. Verwenden Sie ein lineares Modell – Ridge, Lasso, logistische Regression. Die Basislerner befassen sich mit Nichtlinearität; Der Meta-Lerner verarbeitet nur Kombinationen. Ein komplexer Meta-Lerner zusätzlich zu komplexen Basis-Lernern ist eine Überanpassung zweiter Ordnung, und die L1-Regularisierung auf der Kombinationsebene hat den nützlichen Nebeneffekt, dass Basismodelle, die nur Rauschen beitragen, auf Null gesetzt werden.

Wahrscheinlichkeitsausgaben über Hardlabels. predict_proba enthält Konfidenzinformationen, die von einer Klassenbezeichnung verworfen werden, und ermöglicht es dem Meta-Lernenden, Konfidenzbasisvorhersagen stärker zu gewichten.

Feature-Domain-Partitionierung. Dies ist der Diversity-Hebel mit der höchsten Hebelwirkung und folgt direkt aus dem Kovarianzargument: Modelle, die dieselben Features sehen, erzeugen unabhängig vom Algorithmus korrelierte Fehler.

FEATURE_GROUPS = {
    'momentum': ['ret_5d', 'ret_10d', 'ret_21d', 'ret_63d'],
    'volatility': ['vol_21d', 'vol_ratio', 'vol_skew', 'garch_vol'],
    'volume': ['volume_ratio', 'obv_slope', 'vwap_dist', 'adv_ratio'],
    'mean_reversion': ['dist_from_ma21', 'dist_from_ma63', 'rsi_14', 'bb_pct'],
    'microstructure': ['bid_ask_spread', 'kyle_lambda', 'amihud_illiq'],
    'fundamental': ['ep_ratio', 'bp_ratio', 'roe', 'accruals'],
}

base_models = []
for domain, features in FEATURE_GROUPS.items():
    model = GradientBoostingClassifier(
        n_estimators=200, max_depth=3,
        learning_rate=0.05, subsample=0.7
    )
    base_models.append((domain, model, features))

Jedes Basismodell wird zu einem Domänenexperten: Das Impulsmodell lernt Impulsmuster ohne Störung durch Volumenrauschen, und der Meta-Lernende lernt, welchem ​​Experten er unter welchen Bedingungen vertrauen kann.

Zwei Vorbehalte zu dieser letzten Klausel. Erstens ist die durch das Regime bedingte Gewichtung ein gelöstes und veröffentlichtes Problem – Regimeerkennung mit HMMs leitet Regime ordnungsgemäß über Forward/Viterbi/Baum-Welch ab und speist sie als Merkmale in ein Downstream-Ensemble ein, und dynamisch kombinierende Strategien deckt die regimegewichtete Mittelwertumkehr vs. Momentum mit ab berichtete Ergebnisse. Ersetzen Sie beides nicht durch einen Ad-hoc-Momentum-Sign-Proxy. Zweitens führt die Auswahl auf der Grundlage der Leistung innerhalb der Stichprobe zu Gewinnern, die nicht überleben. Der generische Mechanismus und die CSCV-Abwehr werden in der Wahrscheinlichkeit einer Backtest-Überanpassung gemessen. Beim Stapeln handelt es sich um ein enger gefasstes Beispiel genau dieses Problems.

Leiten Sie zur Gewichtung von Rückgabeströmen anstelle von Modellvorhersagen die Mittelwertvarianz nicht erneut ab. 12 Portfolio-Optimierungsalgorithmen im Vergleich misst HRP, HERC, GHRP, MHRP, Black-Litterman, NCO, MVO, Risikoparität und gleiche Gewichtung mit gemessenen Ergebnissen und Open-Source-Code; Markowitz-Portfoliotheorie für Krypto verfügt über die SLSQP-Mean-Varianz-Implementierung; und das 1/N-ist-schwer zu schlagen-Ergebnis wurde bereits im Vergleich zu HRP und CVaR in der HRP/CVaR-Portfolio-Pipeline getestet.

Umsatzverrechnung: Die Behauptung, die es wert ist, getestet zu werden

Hier ist der Teil des Arguments der Alpha-Bibliothek, den der Ausführungskosten-Cluster dieses Blogs derzeit nicht abdeckt.

Wenn Alpha Nr. 4.721 „MSFT kaufen“ und Alpha Nr. 8.392 „MSFT verkaufen“ sagt, kreuzen sich diese Trades intern. Nur die Nettoposition erreicht den Markt. Die Behauptung ist, dass bei genügend Signalen ein großer Teil des beabsichtigten Bruttoumsatzes zunichte gemacht wird, bevor Spreads, Gebühren oder Marktauswirkungen entstehen – was bedeuten würde, dass ein Ensemble kostengünstiger zu betreiben ist als die Summe seiner Komponenten und nicht nur stabiler.

Dies ist ein anderer Mechanismus als der, den Kaskadenstrategie-Orchestrierung bereits beherrscht. Cascade löst Konflikte auf der Slot-Ebene: Gleiches Paar, entgegengesetzte Richtung wird verboten und durch Punkte geklärt, die paarübergreifende Räumung läuft über eine Prioritätswarteschlange, und der Artikel beweist empirisch, dass PnL pro Strategie aufgrund von Zeitüberschneidungen und Kapitalbeschränkungen nicht einfach summiert werden können. Beim Netting geht es um die Brutto-zu-Netto-Positionsarithmetik, die die gehandelte Menge selbst reduziert.

Es ist auch billig zu fälschen: Berechnen Sie den Brutto- gegenüber dem Nettoumsatz bei realen Ausführungen, wenn die Komponentensignale kombiniert werden, und bewerten Sie dann beide anhand der bestehenden Kostenmaschinerie – Maker-Taker-Gebühren und Rabatte, Implementierungsdefizit und TCA und Slippage-Kosten Modelle.

Eine Anmerkung zum Maßstab, da der Rahmen der Alpha-Bibliothek dazu einlädt. WorldQuant berichtet, eine sehr große Alpha-Bibliothek erstellt zu haben, und Kakushadzes 101 Formulaic Alphas dokumentiert die Form der einzelnen Signale. Aber der Abbau von Alphas im industriellen Maßstab ist auch die größte Mehrfachtestmaschine, die man sich vorstellen kann, und die Position dieses Blogs dazu ist geklärt: eine Suche nach Größe KK muss gegen das erwartete Glück einer Suche dieser Größe deflationiert werden. The Deflated Sharpe Ratio zeigt ein 640-Zellen-Raster, das bereits naive Signifikanztests durchbricht, und The Honest Negative zeigt eine Suche mit ca. 37.000 Versuchen, die einen Out-of-Sample-Gewinner von +16,35 % ergibt, der auf DSR deflationiert 0,00. Die Größe der Bibliothek ist kein Hinweis auf die Kante. Es ist der Nenner, den Sie bezahlen müssen.

Zusammensetzen

Raw Data
  |
  v
Feature Engineering
  |
  v
Feature Subsets (partitioned by domain -> decorrelated errors)
  |
  +---> Base Model 1: RF on momentum features
  +---> Base Model 2: GBM on volatility features
  +---> Base Model 3: LSTM on price sequences
  +---> Base Model 4: Lasso on fundamental features
  +---> Base Model 5: XGBoost on microstructure features
  |
  v
Out-of-Fold Predictions (purged walk-forward)
  |
  v
Meta-Learner (Ridge)
  |
  v
Combined Signal -> Net Position -> Execution
  |
  v
DSR >= 0.95 and PBO <= 0.2 gate, or it does not ship

Die letzte Box ist keine Dekoration. Übereinander stapeln KK Basismodelle ist ein Auswahlverfahren der Größe KK, und ein Ensemble-Artikel, der nicht entleert wird, ist nicht zu rechtfertigen.

Imbissbuden

  1. Struktureller Unterschied übertrifft Modellanzahl. Der Kovarianzterm schrumpft nicht mit NN. Das Hinzufügen eines sechsten korrelierten Baums ist keine Diversifizierung; Das Hinzufügen einer anderen Modellklasse oder einer disjunkten Feature-Domäne ist.
  2. Melden Sie die effektiveNN Band, kein Punkt. Fünf Schätzer, fünf Antworten, manchmal zwei Größenordnungen auseinander.
  3. Halten Sie den Meta-Lernenden linear. Die Komplexität auf der Kombinationsebene ist fast immer überangepasst, und L1 führt dort eine nützliche automatische Modellauswahl durch.
  4. Out-of-Fold oder nichts. Ein Meta-Lernender, der auf In-Sample-Basisvorhersagen geschult ist, lernt mit hoher Sicherheit die falschen Gewichte.
  5. Entleeren Sie das Ensemble selbst. Stapeln ist eine Suche. Bepreisen Sie es wie eins.

Weiterführende Literatur:

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Dem Markt einen Schritt voraus

Abonniere unseren Newsletter für exklusive KI-Trading-Einblicke, Marktanalysen und Plattform-Updates.

Wir respektieren deine Privatsphäre. Jederzeit abbestellbar.