Ansambl usullari: mustahkam alfa uchun zaif o'quvchilarni birlashtirish
Savdo ansambllari haqida ko'pchilik yozganlar ko'proq modellar yaxshiroq ekanligini ta'kidlaydi. Bu noto'g'ri eksa. Ansamblning xatosi uchta shartga bo'linadi va savdoda faqat bittasi majburiy cheklovdir.
Ushbu maqola ushbu bir atama va uning ushbu blogning qolgan qismi qamrab ololmaydigan ikkita oqibatlari haqida: aniq signal-kombinatsiya qatlami sifatida stacking va ko'plab signallarni birlashtirish savdolar bozorga yetib borishdan oldin aylanmani pasaytiradimi yoki yo'qmi.
Haqiqatda bog'laydigan atama: tarafkashlik-variance-kovariance
ning regressiya ansambli uchun modellar, o'rtacha bashoratning kutilgan kvadrat xatosi quyidagicha parchalanadi:
Uch atama, uchta tutqich:
- Bagging bootstrap namunalari ustidan o'rtacha hisoblash orqali variatsiya terminiga hujum qiladi.
- Boosting qoldiqlarni takroriy tuzatish orqali noto'g'ri atamaga hujum qiladi.
- Stacking teng qiymatlarni qabul qilish o‘rniga kombinatsiyalangan og‘irliklarni o‘rganish orqali kovariatsiya atamasiga hujum qiladi.
- O'sib bormoqda faqat tafovut hissasini qisqartiradi. Bu kovariatsiyaga hech narsa qilmaydi - bu koeffitsient allaqachon 0,99 da .
Bu oxirgi nuqta butun argumentdir. Savdoda modellar bir xil asboblarda, bir xil tarixda, o'zlari bir xil narxlar seriyasining o'xshash o'zgarishlari bo'lgan maqsadlarga qarshi o'qitiladi. Ularning xatolari mustaqillikka yaqin emas. Shunday qilib, kovariatsiya atamasi katta va dispersiya atamasi allaqachon tugagan, ya'ni modellar soni sizga deyarli hech narsa sotib olmaydi va tizimli farq sizga hamma narsani sotib oladi.
Daʼvoning aniq, soxtalashtirilgan shakli: 101-gradient kuchaytirilgan daraxtni qoʻshish ansambl koʻrsatkichini strukturaviy jihatdan boshqa modelni qoʻshishdan koʻra kamroq siljitishi kerak — LSTM, ajratilgan xususiyat domenidagi chiziqli model, boshqa induktiv moyillikka ega boʻlgan har qanday narsa. Marginal daraxt kitobdagi daraxtlar bilan deyarli mos keladi; strukturaviy jihatdan farqli model emas.
Modellar soni emas, korrelyatsiya ansamblning samarali kengligini belgilaydi - kelib chiqish, aktivlar sinfi bo'yicha kripto-o'lchangan korrelyatsiya omillari va haqiqiy juftlik ma'lumotlariga nisbatan simulyatsiya Signal korrelyatsiyasi: qancha juftlik kuzatilishi kerak da.
Ansambl xilma-xilligini bitta raqamga kamaytirmang. Deflated Sharpe Ratio beshta samarali-ni hisoblaydi Haqiqiy 640 hujayrali to'r bo'yicha baholovchilar (o'rtacha korrelyatsiya, ishtirok nisbati, PCA-95%, Kaiser, Cheverud-Nyholt), ular oralig'ini ko'rsatadi 1,6 dan 370 gacha, va ta'kidlaydiki, guruh - har qanday bitta nuqtali taxmin emas - etkazib berish mumkin. Guruh haqida xabar bering.
Signal-kombinatsiya qatlami sifatida stacking
Qoplash va kuchaytirish boshqa joylarda yaxshi yoritilgan. Mashina oʻrganish bilan yoyilgan modellashtirish gradientni kuchaytiruvchi sozlashni, egri nishonlar uchun yoʻqotishlarni tanlashni, SHAP ahamiyati topilmalarini, xususiyatlar taksonomiyasini va oldinga siljish bilan oldinga siljish boʻlinishini yuboradi. U erda boshlang; bu bo'lim buni nazarda tutadi.
Yuqoridagi daraja qamrab olinmagan: asosiy model bashoratlarini kirish xususiyatlari sifatida qabul qiladigan va ularni qanday birlashtirishni o'rganadigan meta-o'rganuvchi.
- 0-darajali (asosiy o'quvchilar): xom xususiyatlardan bashorat qiluvchi turli modellar.
- 1-darajali (meta-o'quvchi): o'quvchilar qaysi bazaga va qachon ishonishlarini o'rganadigan model.
Buni xavfsiz qiladigan mexanizm - bu ochilgan meta-xususiyatlar. Meta-o'rganuvchi hech qachon bazaviy model o'qitilgan ma'lumotlarga asoslangan bazaviy-model bashoratini ko'rmasligi kerak - bu bashoratlar jonli savdoda omon qolmaydigan tarzda optimistik tarzda qarama-qarshidir va meta-o'rganuvchi ularni shunga mos ravishda tortadi.
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)
Bu erda ajratish intizomi ixtiyoriy emas va yangi emas - tozalangan, embargo qilingan oldinga siljishdan foydalaning va bu raqamlarning birortasiga ishonishdan oldin shishirilgan Sharpe-da har bir oqish sinfi nima ekanligini tushunib oling. Ikkalasi ham allaqachon o'lchangan: oldinga qarashning bias taksonomiyasi boshqariladigan simulyatorda bajarilish, indikator va normalizatsiya oqishini va oldinga o'tishni optimallashtirish va boshqalarni aniqlaydi. va WFER degradatsiyasi diagnostikasi.
Uchta dizayn qarori stacking uchun xosdir va e'tiborga loyiqdir.
Meta-o‘rganuvchining soddaligi. Chiziqli modeldan foydalaning — tizma, lasso, logistik regressiya. Asosiy o'quvchilar chiziqli bo'lmaganlikni boshqaradi; meta-o'quvchi faqat kombinatsiyani boshqaradi. Murakkab tayanch o'quvchilarning ustidagi murakkab meta-o'rganuvchi ikkinchi darajali ortiqcha moslamadir va kombinatsiyalangan qatlamda L1 tartibga solish faqat shovqinga hissa qo'shadigan asosiy modellarni nolga tushirishning foydali yon ta'siriga ega.
Qattiq yorliqlar bo‘yicha chiqish ehtimoli. predict_proba sinf yorlig'i o'chirib tashlagan ishonch ma'lumotlarini olib yuradi va meta-o'quvchiga ishonchli tayanch bashoratlarini yanada og'irlashtirish imkonini beradi.
Xususiyatlar-domen bo'linishi. Bu eng yuqori leverageli xilma-xillik dastagi bo'lib, u to'g'ridan-to'g'ri kovariatsiya argumentidan kelib chiqadi: bir xil xususiyatlarni ko'radigan modellar algoritmdan qat'iy nazar korrelyatsiya qilingan xatolarni keltirib chiqaradi.
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))
Har bir asosiy model domen ekspertiga aylanadi: impuls modeli ovoz balandligi shovqiniga aralashmasdan impuls modellarini o'rganadi va meta-o'rganuvchi qaysi sharoitda qaysi mutaxassisga ishonishni o'rganadi.
Oxirgi bandda ikkita ogohlantirish. Birinchidan, rejim-shartli tortishish hal qilingan va nashr etilgan muammodir - HMMs bilan rejimni aniqlash Forward/Viterbi/Baum-Welch orqali rejimlarni to'g'ri chiqaradi va ularni quyi oqim ansambliga xususiyatlar sifatida taqdim etadi va dinamik ravishda birlashtiruvchi, va strategies hisobot natijalari bilan rejim boʻyicha oʻrtacha teskari oʻzgarishlar va momentumni qamrab oladi. Har ikkisini ham vaqtinchalik momentum belgisi proksi-serverini almashtirmang. Ikkinchidan, namunadagi ishlash bo'yicha tanlov omon qolmaydigan g'oliblarni ishlab chiqaradi; umumiy mexanizm va CSCV himoyasi [backtest overfitting ehtimoli] (/en/blog/post/probability-backtest-overfitting-pbo) bilan o'lchanadi. Stacking aynan shu muammoning torroq namunasidir.
Model bashoratidan ko'ra qaytib keladigan oqimlarni tortish uchun o'rtacha farqni qayta chiqarmang. 12 Portfel optimallashtirish algoritmlari, solishtirildi poygalar HRP, HERC, GHRP, MHRP, Black-Litterman, NCO, MVO, risk pariteti va o'lchangan natijalar va ochiq kodli kod bilan teng og'irlik; Kripto uchun Markowitz portfeli nazariyasi SLSQP oʻrtacha farqni amalga oshirishga ega; va 1/N-unish qiyin natija [HRP/CVaR portfeli quvur liniyasida] (/en/blog/post/portfolio-pipeline-hrp-cvar) HRP va CVaR bo'yicha allaqachon sinovdan o'tgan.
Tovar aylanmasi: Sinovga arziydigan da'vo
Mana alfa-kutubxona argumentining ushbu blogning ijro xarajatlari klasteri hozirda qamrab ololmaydigan qismi.
Alpha #4,721 "MSFT sotib ol" deb aytsa va Alpha #8,392 "MSFT ni soting" deganida, xuddi shu rebalansda, bu savdolar ichki o'zaro kesishadi. Bozorga faqat aniq pozitsiya yetib boradi. Da'vo shundan iboratki, etarli signallar bilan yalpi mo'ljallangan aylanmaning katta qismi tarqalish, to'lovlar yoki bozor ta'siriga duchor bo'lgunga qadar bekor qilinadi - bu ansamblning ishlashi shunchaki barqaror emas, balki uning tarkibiy qismlari yig'indisidan ko'ra arzonroq ekanligini anglatadi.
Bu kaskad strategiyasi orkestratsiyasi allaqachon boshqaradigan mexanizmdan farqli mexanizmdir. Kaskad slot darajasidagi nizolarni hal qiladi: bir xil juftlik, qarama-qarshi yo'nalish taqiqlanadi va ball bilan hal qilinadi, o'zaro juftlikdan chiqarib yuborish ustuvor navbatdan o'tadi va maqola PnL har bir strategiyani vaqtning o'xshashligi va kapital cheklovlari tufayli shunchaki yig'ib bo'lmasligini empirik tarzda isbotlaydi. Netting - bu * yalpi-to-net pozitsiyasi arifmetikasi* sotilgan miqdorning o'zini kamaytirish.
Soxtalashtirish ham arzon: komponent signallari birlashtirilganda real toʻlovlar boʻyicha yalpi va sof aylanmani hisoblang, soʻngra mavjud xarajat mexanizmlari orqali narxni hisoblang — maker-taker toʻlovlari va chegirmalar, amalga oshirishdagi kamomad va TCA va slippage cost models.
Masshtab bo'yicha eslatma, chunki alfa-kutubxona ramkasi uni taklif qiladi. WorldQuant juda katta alfa kutubxonasini yaratgani haqida xabar beradi va Kakushadzening 101 formulali alfa alohida signallarning shaklini hujjatlashtiradi. Ammo sanoat miqyosida alfa qazib olish ham tasavvur qilish mumkin bo'lgan eng katta ko'p sinovli mashinadir va bu blogning bu boradagi pozitsiyasi aniq: o'lchamlarni qidirish bu o'lchamdagi qidiruvning kutilgan omadiga qarshi deflatsiya qilinishi kerak. Deflated Sharpe Ratio 640-hujayrali tarmoqni allaqachon sodda ahamiyatlilik testini buzadi va [The Honest Negative](/en/blog/post/honest-negative-no-robust-edge, qidiruv) pro00-37-ni ko'rsatadi. +16,35% namunadan tashqari g'olib, bu DSR 0,00 ga tushadi. Kutubxona o'lchami chekka dalil emas. Bu siz to'lashingiz kerak bo'lgan denominator.
Uni birlashtirish
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
Oxirgi quti bezak emas. Yig'ish asosiy modellar - bu o'lchamni tanlash tartibi , va deflate qilmaydigan ansambl maqolasi himoya qilinmaydi.
Talablar
- Tuzilish farqi modellar sonidan oshadi. Kovariatsiya atamasi bilan qisqarmaydi . Oltinchi korrelyatsiya qilingan daraxtni qo'shish diversifikatsiya emas; boshqa model sinfini yoki ajratilgan xususiyat domenini qo'shish.
- Effektivligi haqida xabar bering- band, nuqta emas. Beshta baholovchi, beshta javob, ba'zan bir-biridan ikkita kattalik tartibi.
- Meta-o'rganuvchini chiziqli tuting. Kombinatsiyalangan qatlamdagi murakkablik deyarli har doim haddan tashqari mos keladi va L1 u erda foydali avtomatik model tanlash imkonini beradi.
- Ochish yoki hech narsa. Namunadagi asosiy bashoratlar bo'yicha o'qitilgan meta-o'rganuvchi noto'g'ri og'irliklarni yuqori ishonch bilan o'rganadi.
- Ansamblning o'zini o'chiring. Stacking - bu qidiruv. Xuddi shunday baho bering.
Qo'shimcha o'qish:
- Kakushadze, Z. (2016). 101 formulali alfa
- Investmentda ansamblni o'rganish - CFA instituti tadqiqot fondi, 2025 yil
- Qimmatli qog'ozlar daromadini bashorat qilish: turli xil modellarni yig'ish - Financial Economics jurnali
- Jansen, S. Machine Learning for Algoritmic Trading, 2-nashr
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.