Ансамблдик методдор: күчтүү Alpha үчүн алсыз окуучуларды бириктирүү
Соода ансамблдери жөнүндө жазгандардын көбү көбүрөөк моделдер жакшыраак деп ырасташат. Бул туура эмес огу. Ансамблдин катасы үч мөөнөткө бөлүнөт жана соодада алардын бирөө гана милдеттүү чектөө болуп саналат.
Бул макала ошол бир термин жөнүндө жана анын бул блогдун калган бөлүгү камтылбаган эки кесепети жөнүндө: ачык сигналдын айкалышы катмары катары стекинг жана көптөгөн сигналдарды айкалыштыруу чындыгында соодалар рынокко жеткенге чейин жүгүртүүнү азайтат.
Иш жүзүндө байланыштыруучу термин: Bias-Viance-Covariance
нын регрессиялык ансамбли үчүн моделдер, орточо болжолдоонун күтүлгөн квадраттык катасы катары ажырайт:
Үч термин, үч рычаг:
- Bagging жүктөөчү үлгүлөрдөн орточо алуу менен дисперсия терминине чабуул коёт.
- Boosting калдыктарды итеративдик оңдоо менен бир жактуу терминге чабуул коёт.
- Stacking тең салмактарды кабыл алуунун ордуна айкалыштырылган салмактарды үйрөнүү менен ковариация терминине чабуул коёт.
- Көбөйүүдө дисперсия салымын гана кыскартат. Бул ковариацияга эч нерсе кылбайт — бул Коэффициент буга чейин 0,99 болуп саналат .
Бул акыркы пункт бүт аргумент болуп саналат. Соодада моделдер ошол эле инструменттерде, ошол эле тарыхта, ошол эле баа сериясынын окшош трансформациялары болгон максаттарга каршы окутулат. Алардын каталары көз карандысыздыкка жакын эмес. Ошентип, ковариация термини чоң жана дисперсия термини түгөндү, демек, моделдердин саны дээрлик эч нерсе сатып албайт, ал эми структуралык айырма бардыгын сатып алат.
Дооматтын конкреттүү, бурмалануучу формасы: 101-градиент менен күчөтүлгөн даракты кошуу структуралык жактан башка бир моделди кошууга караганда ансамбль метрикасын азыраак жылдырышы керек — LSTM, ажыратылган өзгөчөлүк домениндеги сызыктуу модель, башка индуктивдүү тенденциясы бар бардык нерсе. Четки дарак китептеги дарактар менен дээрлик дал келет; структуралык жактан айырмаланган модель эмес.
Корреляция, моделдин саны эмес, ансамблдин эффективдүү кеңдигин белгилейт — туунду, актив классы боюнча крипто-өлчөнгөн корреляция факторлору жана чыныгы жуп маалыматтарына каршы симуляция Сигналдын корреляциясы: Канча жупту көзөмөлдөө керек.
Ансамблдин көп түрдүүлүгүн бир санга чейин азайтпаңыз. Deflated Sharpe Ratio беш натыйжалуу- реалдуу 640-уячалуу тор боюнча баалоочулар (орточо корреляция, катышуу катышы, PCA-95%, Кайзер, Чеверуд-Нихолт), алардын аралыгын көрсөтөт 1,6дан 370ге чейин жана топтун - эч кандай бир баллдык баа эмес - жеткирүү мүмкүн экендигин ырастайт. Топту кабарлаңыз.
Сигнал-комбинация катмары катары стекинг
Каптоо жана жогорулатуу башка жерлерде жакшы камтылган. Машина үйрөнүү менен жайылган моделдөө градиентти күчөтүүчү орнотууну, кыйшайган максаттар үчүн жоготууларды тандоону, SHAPтын маанилүүлүгүн, өзгөчөлүк таксономиясын жана алдыга карай жылдыруу менен тазаланган алдыга бөлүнүүнү жөнөтөт. Ошол жерден баштоо; бул бөлүм аны болжолдойт.
Капталбаган нерсе жогорудагы деңгээл: базалык моделдин болжолдоолорун киргизүү өзгөчөлүктөрү катары кабыл алган жана аларды кантип айкалыштырууга үйрөнгөн мета-үйрөнүүчү.
- ** 0-деңгээл (базалык окуучулар):** чийки функциялардан болжолдоолорду чыгарган ар түрдүү моделдер.
- 1-деңгээл (мета-окуучу): окуучулардын кайсы базага качан жана качан ишенүү керектигин үйрөнүүчү модель.
Бул коопсуз кылат механизми сырткы мета-функциялар болуп саналат. Мета-үйрөнүүчү эч качан базалык модель даярдалган маалыматтарга негизделген базалык моделдин болжолун көрбөшү керек - бул божомолдор оптимисттик түрдө жандуу соодалоого туруштук бербестен, жана мета-үйрөнүүчү аларды ошого жараша салмактайт.
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)
Бул жерде бөлүү дисциплина милдеттүү эмес жана роман эмес - тазаланган, эмбарго коюлган алдыга кадамды колдонуңуз жана бул сандардын бирине ишенерден мурун, Шарптын ар бир классы канчалык деңгээлде агып жатканын түшүнүңүз. Экөө тең өлчөнгөн: алдыга көз салуу таксономиясы контролдонуучу симулятордогу аткарууну, индикаторду жана нормалдаштырууну сандык жактан аныктайт жана [алдыга карай оптималдаштыруу](/en/blog/post/walk-forward-optimging, CV vs.) жана WFER деградация диагностикасы.
Үч дизайн чечими стектелүүгө мүнөздүү жана айтууга арзырлык.
Мета-үйрөнүүчүнүн жөнөкөйлүгү. Сызыктуу моделди колдонуңуз — кыр, лассо, логистикалык регрессия. Негизги окуучулар сызыктуу эместикти колго алышат; мета-үйрөнүүчү комбинацияны гана иштетет. Татаал базалык окуучулардын үстүнөн турган комплекстүү мета-үйрөнүүчү экинчи даражадагы ашыкча жабдылган жана айкалыштырылган катмардагы L1 регуляризациясы ызы-чууну гана камсыз кылган базалык моделдерди жокко чыгаруунун пайдалуу терс эффектине ээ.
Катуу энбелгилердин үстүнөн чыгуу ыктымалдыгы. predict_proba класс энбелгиси четке каккан ишеним маалыматын алып жүрөт жана мета-үйрөнүүчүгө ишенимдүү базалык болжолдоолорду көбүрөөк салмактоого мүмкүндүк берет.
Функция-доменди бөлүү. Бул эң жогорку рычагдык көп түрдүүлүк рычагы жана ал түздөн-түз ковариация аргументинен келип чыгат: бирдей функцияларды көргөн моделдер алгоритмге карабастан корреляцияланган каталарды чыгарышат.
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))
Ар бир базалык модель домендин эксперти болуп калат: импульс модели ызы-чуунун кийлигишүүсүз импульстун үлгүлөрүн үйрөнөт, ал эми мета-үйрөнүүчү кайсы экспертке кандай шарттарда ишенүү керектигин үйрөнөт.
Бул акыркы пункт боюнча эки эскертүү. Биринчиден, режимдин шарттуу салмагы чечилген жана жарыяланган маселе — HMMs менен режимди аныктоо Forward/Viterbi/Baum-Welch аркылуу режимдерди туура чыгарып, аларды төмөнкү агымдагы ансамблге өзгөчөлүктөр катары берет, жана динамикалык түрдө бириктирүү, жана strategies режим боюнча салмактанып алынган орточо-реверсияны жана кабарланган натыйжалар менен импульсту камтыйт. Экөөнүн тең убактылуу импульс белгисинин проксисин алмаштырбаңыз. Экинчиден, үлгүдөгү аткаруу боюнча тандоо аман калбаган жеңүүчүлөрдү чыгарат; жалпы механизм жана CSCV коргонуу [backtest overfitting ыктымалдыгы] (/en/blog/post/probability-backtest-overfitting-pbo) менен өлчөнөт. Stacking так ошол көйгөйдүн тар бир мисалы болуп саналат.
Моделдик божомолдорго караганда кайтаруу агымдарын салмактоо үчүн орточо дисперсияны кайра чыгарбаңыз. 12 Portfolio оптималдаштыруу алгоритмдери, салыштырылган расалар HRP, HERC, GHRP, MHRP, Black-Litterman, NCO, MVO, тобокелдик паритети жана өлчөнгөн натыйжалар жана ачык булак коду менен бирдей салмак; Markowitz портфолио теориясы крипто SLSQP орточо дисперсияны ишке ашырууга ээ; жана 1/N-тирүү кыйын натыйжа буга чейин [HRP/CVaR портфолио трубасында] (/en/blog/post/portfolio-pipeline-hrp-cvar) HRP жана CVaR менен сыналган.
Жүгүртүү неттинги: текшерүүгө арзыган доомат
Бул жерде бул блогдун аткаруу наркы кластери учурда камтылбаган альфа-китепкана аргументинин бөлүгү.
Ошол эле баланста Alpha №4,721 "MSFT сатып ал" деп айтканда жана Alpha #8,392 "MSFT сатам" деп айтканда, бул соодалар ички түрдө кайчылашат. рынокко таза позиция гана жетет. Доомат жетиштүү сигналдар менен жалпы болжолдонгон жүгүртүүнүн чоң бөлүгү жайылууга, жыйымдарга же рыноктук таасирге дуушар болгонго чейин жокко чыгарылат - бул ансамбль туруктуураак эмес, анын компоненттеринин суммасына караганда арзаныраак иштейт дегенди билдирет.
Бул каскаддык стратегия оркестри мурунтан эле башкарган механизмден айырмаланган механизм. Каскад чыр-чатактарды slot деңгээлинде чечет: бирдей жуп, карама-каршы багытта тыюу салынат жана упай менен чечилет, кайчылаш жуптарды чыгаруу артыкчылыктуу кезек аркылуу өтөт жана макала PnL үчүн стратегияны убакыттын кайталанышынан жана капиталдык чектөөлөрдөн улам жөн эле жыйынтыктоо мүмкүн эмес экенин эмпирикалык түрдө далилдейт. Неттинг - бул * дүңүнөн таза позициянын арифметикасы* соода көлөмүнүн өзүн азайтуу.
Аны бурмалоо да арзан: компоненттик сигналдар бириктирилгенде, реалдуу толтуруулар боюнча дүң жана таза жүгүртүүнү эсептеп, андан кийин учурдагы чыгымдардын механизми аркылуу да баалоо — жаюучу-акылар жана жеңилдиктер, ишке ашыруунун жетишсиздиги жана TCA жана slippage cost models.
Масштаб боюнча эскертүү, анткени альфа-китепкана рамкасы аны чакырат. WorldQuant абдан чоң альфа китепканасын чыгарганын кабарлайт жана Какушадзенин 101 формулалык альфасы айрым сигналдардын формасын документтештирет. Бирок өнөр жайлык масштабдагы тоо-кен казып алуу дагы элестете турган эң чоң көп сыноочу машина жана бул блогдун позициясы чечилди: өлчөмдү издөө ошол өлчөмдөгү издөөдө күтүлгөн эң жакшы ийгиликке каршы дефляция керек. Deflated Sharpe Ratio 640-уячалуу торду мурунтан эле жөнөкөй маанилик тесттен бузуп көрсөтөт жана [The Honest Negative](/en/blog/post/honest-negative-no-robust-edge, издөө a00-37) +16,35% үлгүдөн тышкары жеңүүчү, DSR 0,00 дефляты. Китепкананын көлөмү чектин далили эмес. Бул сиз төлөшүңүз керек болгон деноминатор.
Аны бириктирүү
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
Акыркы куту кооздук эмес. Үстөлүп жатат базалык моделдер өлчөмүн тандоо жол-жобосу болуп саналат , жана дефляты жок ансамбль макаласы корголбойт.
Алып кетүүчү нерселер
- Структуралык айырма моделдин санынан ашат. Ковариация термини менен кичирейбейт . Алтынчы корреляцияланган даракты кошуу диверсификация эмес; башка моделдин классын же бөлүнүүчү функция доменин кошуу болуп саналат.
- Натыйжалуулугу жөнүндө кабарлоо- тилке, чекит эмес. Беш баалоочу, беш жооп, кээде эки чоңдук тартиби.
- Мета-үйрөнүүчүнү сызыктуу кармаңыз. Комбинациялуу катмардагы татаалдык дээрлик ар дайым ашыкча болуп саналат жана L1 бул жерде пайдалуу автоматтык моделди тандап алат.
- Бүктөлгөн же эч нерсе эмес. Үлгүдөгү базалык божомолдор боюнча үйрөтүлгөн мета-үйрөнүүчү туура эмес салмактарды жогорку ишеним менен үйрөнөт.
- Ансамблдин өзүн өчүрүңүз. Стектөө – бул издөө. Баа бериңиз.
Көбүрөөк окуу:
- Какушадзе, З. (2016). 101 формулалык альфа
- Инвестициядагы ансамблди үйрөнүү — CFA институтунун изилдөө фонду, 2025
- Акциялардын кайтарымын болжолдоо: Ар түрдүү моделдерди чогултуу — Финансылык экономика журналы
- Jansen, S. Machine Learning for Algorithmic Trading, 2-басылышы
Authors
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.