संयोजन विधियाँ: मजबूत अल्फा के लिए कमजोर शिक्षार्थियों का संयोजन
व्यापारिक समूह के बारे में अधिकांश लेखन का तर्क है कि अधिक मॉडल बेहतर हैं। वह ग़लत धुरी है. एक संयोजन की त्रुटि तीन शर्तों में विघटित हो जाती है, और व्यापार में उनमें से केवल एक ही बाध्यकारी बाधा होती है।
यह लेख उस एक शब्द के बारे में है, और इसके दो परिणामों के बारे में है, जिन्हें इस ब्लॉग के बाकी हिस्सों में शामिल नहीं किया गया है: एक स्पष्ट सिग्नल-संयोजन परत के रूप में स्टैकिंग, और क्या कई संकेतों का संयोजन वास्तव में ट्रेडों के बाजार में पहुंचने से पहले टर्नओवर को कम करता है।
वह शब्द जो वास्तव में बांधता है: पूर्वाग्रह-विचरण-सहप्रसरण
के एक प्रतिगमन समूह के लिए मॉडल, औसत भविष्यवाणी की अपेक्षित वर्ग त्रुटि इस प्रकार विघटित होता है:
तीन पद, तीन लीवर:
- बैगिंग बूटस्ट्रैप नमूनों के औसत से विचरण पद पर हमला करता है।
- बूस्टिंग अवशेषों को पुनरावृत्तीय रूप से सही करके पूर्वाग्रह शब्द पर हमला करता है।
- स्टैकिंग समान मान लेने के बजाय संयोजन भार सीखकर सहप्रसरण शब्द पर हमला करता है।
- की बढ़ती केवल विचरण योगदान को कम करता है। यह सहप्रसरण के लिए बिल्कुल भी कुछ नहीं करता है - द गुणांक पहले से ही 0.99 है .
वह अंतिम बिंदु ही संपूर्ण तर्क है। ट्रेडिंग में, मॉडलों को समान उपकरणों पर, समान इतिहास पर, उन लक्ष्यों के विरुद्ध प्रशिक्षित किया जाता है जो स्वयं समान मूल्य श्रृंखला के लगभग समान परिवर्तन होते हैं। उनकी त्रुटियां स्वतंत्र के करीब नहीं हैं। तो सहप्रसरण शब्द बड़ा है और विचरण शब्द पहले ही समाप्त हो चुका है, जिसका अर्थ है कि मॉडल गणना आपको लगभग कुछ भी नहीं खरीदती है और संरचनात्मक अंतर आपको सब कुछ खरीदता है।
दावे का ठोस, मिथ्याकरणीय रूप: 101वें ग्रेडिएंट-बूस्टेड ट्री को जोड़ने से एक संरचनात्मक रूप से भिन्न मॉडल को जोड़ने से कम समग्र मीट्रिक को स्थानांतरित करना चाहिए - एक एलएसटीएम, एक असंयुक्त सुविधा डोमेन पर एक रैखिक मॉडल, एक अलग आगमनात्मक पूर्वाग्रह के साथ कुछ भी। सीमांत वृक्ष पुस्तक में पहले से ही मौजूद वृक्षों के लगभग संरेख में है; संरचनात्मक रूप से भिन्न मॉडल नहीं है।
सहसंबंध, मॉडल गणना नहीं, एक समूह की प्रभावी चौड़ाई निर्धारित करता है - व्युत्पत्ति, परिसंपत्ति वर्ग द्वारा क्रिप्टो-मापा सहसंबंध कारक, और वास्तविक जोड़ी डेटा के खिलाफ सिमुलेशन [सिग्नल सहसंबंध: मॉनिटर करने के लिए कितने जोड़े] (/en/ब्लॉग/पोस्ट/सिग्नल-सहसंबंध-जोड़े) में हैं।
सामूहिक विविधता को एक ही संख्या तक सीमित न करें। डिफ्लेटेड शार्प रेशियो पांच प्रभावी की गणना करता है- वास्तविक 640-सेल ग्रिड पर अनुमानक (औसत सहसंबंध, भागीदारी अनुपात, पीसीए-95%, कैसर, चेवरुड-न्योहोल्ट), दिखाते हैं कि वे फैले हुए हैं 1.6 से 370 तक, और तर्क है कि बैंड - कोई एकल बिंदु अनुमान नहीं - वितरण योग्य है। बैंड की रिपोर्ट करें.
सिग्नल-संयोजन परत के रूप में स्टैकिंग
बैगिंग और बूस्टिंग को अन्यत्र अच्छी तरह से कवर किया गया है। [मशीन लर्निंग के साथ स्प्रेड मॉडलिंग] (/en/ब्लॉग/पोस्ट/स्प्रेड-मॉडलिंग-मशीन-लर्निंग) ग्रेडिएंट-बूस्टिंग सेटअप, तिरछे लक्ष्यों के लिए हानि चयन, एसएचएपी महत्व निष्कर्ष, फीचर टैक्सोनॉमी और फॉरवर्ड-विंडो ओवरलैप के साथ एक पर्ज्ड वॉक-फॉरवर्ड स्प्लिट को शिप करता है जो अंतर को प्रेरित करता है। वहां से प्रारंभ करें; यह खंड इसे मानता है।
जो कवर नहीं किया गया है वह ऊपर का स्तर है: एक मेटा-लर्नर जो बेस-मॉडल भविष्यवाणियों को अपनी इनपुट सुविधाओं के रूप में लेता है और सीखता है कि उन्हें कैसे संयोजित किया जाए।
- स्तर 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)
यहां विभाजन अनुशासन वैकल्पिक नहीं है और नया भी नहीं है - एक शुद्ध, प्रतिबंधित वॉक-फॉरवर्ड का उपयोग करें, और समझें कि इनमें से किसी भी संख्या पर भरोसा करने से पहले बढ़े हुए शार्प में रिसाव के प्रत्येक वर्ग का क्या मूल्य है। दोनों को पहले से ही मापा जाता है: लुक-फॉरवर्ड बायस टैक्सोनॉमी एक नियंत्रित सिम्युलेटर में निष्पादन, संकेतक और सामान्यीकरण रिसाव को मापता है, और वॉक-फॉरवर्ड ऑप्टिमाइज़ेशन एंकर बनाम रोलिंग विंडो, सीपीसीवी, पर्जिंग और डब्लूएफईआर गिरावट डायग्नोस्टिक्स को कवर करता है।
तीन डिज़ाइन निर्णय स्टैकिंग के लिए विशिष्ट हैं और बताने योग्य हैं।
मेटा-लर्नर सादगी। एक रैखिक मॉडल का उपयोग करें - रिज, लासो, लॉजिस्टिक रिग्रेशन। आधार शिक्षार्थी गैर-रैखिकता को संभालते हैं; मेटा-लर्नर केवल संयोजन को संभालता है। जटिल आधार शिक्षार्थियों के शीर्ष पर एक जटिल मेटा-लर्नर दूसरे क्रम की ओवरफिटिंग है, और संयोजन परत पर एल 1 नियमितीकरण में बेस मॉडल को शून्य करने का उपयोगी दुष्प्रभाव होता है जो केवल शोर में योगदान देता है।
हार्ड लेबल पर संभाव्यता आउटपुट। 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))
प्रत्येक बेस मॉडल एक डोमेन विशेषज्ञ बन जाता है: गति मॉडल वॉल्यूम शोर के हस्तक्षेप के बिना गति पैटर्न सीखता है, और मेटा-शिक्षार्थी सीखता है कि किन परिस्थितियों में किस विशेषज्ञ पर भरोसा करना है।
उस अंतिम खंड पर दो चेतावनियाँ। सबसे पहले, शासन-सशर्त भार एक हल और प्रकाशित समस्या है - [एचएमएम के साथ शासन का पता लगाना] (/ en/blog/post/regime-detection-hmm-adaptive-trading) फॉरवर्ड/विटर्बी/बॉम-वेल्च के माध्यम से शासन को ठीक से प्राप्त करता है और उन्हें डाउनस्ट्रीम समूह की सुविधाओं के रूप में फ़ीड करता है, और [गतिशील रूप से रणनीतियों का संयोजन] (/ en/blog/post/dynamic-combining-strategies) शासन-भारित को कवर करता है रिपोर्ट किए गए परिणामों के साथ माध्य-प्रत्यावर्तन बनाम गति। इनमें से किसी के लिए तदर्थ गति-चिह्न प्रॉक्सी को प्रतिस्थापित न करें। दूसरा, इन-सैंपल प्रदर्शन के आधार पर चयन ऐसे विजेताओं का निर्माण करता है जो जीवित नहीं रह पाते; सामान्य तंत्र और सीएससीवी रक्षा को बैकटेस्ट ओवरफिटिंग की संभावना में मापा जाता है। स्टैकिंग बिल्कुल उसी समस्या का एक संक्षिप्त उदाहरण है।
मॉडल पूर्वानुमानों के बजाय वापसी धाराओं को महत्व देने के लिए, माध्य-विचरण को दोबारा प्राप्त न करें। 12 पोर्टफोलियो अनुकूलन एल्गोरिदम, तुलना दौड़ एचआरपी, एचईआरसी, जीएचआरपी, एमएचआरपी, ब्लैक-लिटरमैन, एनसीओ, एमवीओ, जोखिम समता और मापा परिणामों और ओपन-सोर्स कोड के साथ समान वजन; क्रिप्टो के लिए मार्कोविट्ज पोर्टफोलियो सिद्धांत में SLSQP माध्य-विचरण कार्यान्वयन है; और 1/एन-इज़-हार्ड-टू-बीट परिणाम का परीक्षण पहले ही एचआरपी/सीवीएआर पोर्टफोलियो पाइपलाइन में एचआरपी और सीवीएआर के खिलाफ किया जा चुका है।
टर्नओवर नेटिंग: परीक्षण योग्य दावा
यहां अल्फा-लाइब्रेरी तर्क का वह हिस्सा है जिसे इस ब्लॉग का निष्पादन-लागत क्लस्टर वर्तमान में कवर नहीं करता है।
जब अल्फा #4,721 कहता है "एमएसएफटी खरीदें" और अल्फा #8,392 कहता है "एमएसएफटी बेचें" उसी पुनर्संतुलन में, वे ट्रेड आंतरिक रूप से क्रॉस होते हैं। केवल शुद्ध स्थिति ही बाज़ार तक पहुँचती है। दावा यह है कि पर्याप्त संकेतों के साथ सकल इच्छित टर्नओवर का एक बड़ा हिस्सा प्रसार, शुल्क या बाजार प्रभाव से पहले रद्द हो जाता है - जिसका अर्थ यह होगा कि एक समूह को उसके घटकों के योग की तुलना में चलाना सस्ता है, न कि केवल अधिक स्थिर।
यह एक अलग तंत्र है जिसे कैस्केड रणनीति ऑर्केस्ट्रेशन पहले से ही संभाल रहा है। कैस्केड स्लॉट स्तर पर संघर्षों को हल करता है: एक ही जोड़ी, विपरीत दिशा निषिद्ध है और स्कोर द्वारा तय की जाती है, क्रॉस-जोड़ी निष्कासन एक प्राथमिकता कतार के माध्यम से चलता है, और लेख अनुभवजन्य रूप से साबित करता है कि समय ओवरलैप और पूंजी की कमी के कारण प्रति-रणनीति पीएनएल को आसानी से सारांशित नहीं किया जा सकता है। नेटिंग कारोबार की मात्रा को कम करने के लिए सकल-से-शुद्ध स्थिति अंकगणित के बारे में है।
इसे गलत साबित करना भी सस्ता है: घटक संकेतों को संयोजित करने पर वास्तविक भरण पर सकल बनाम शुद्ध कारोबार की गणना करें, फिर मौजूदा लागत मशीनरी के माध्यम से दोनों की कीमत - [निर्माता-लेने वाले की फीस और छूट] (/ en/blog/post/maker-taker-fees-rebates-execution), [कार्यान्वयन कमी और TCA] (/ en/blog/post/कार्यान्वयन-कमी-tca-निष्पादन), और स्लिपेज लागत मॉडल।
पैमाने पर एक नोट, क्योंकि अल्फा-लाइब्रेरी फ़्रेमिंग इसे आमंत्रित करती है। वर्ल्डक्वांट की रिपोर्ट में एक बहुत बड़ी अल्फ़ा लाइब्रेरी और काकुशाद्ज़े के [101 फॉर्मूलाइक अल्फ़ाज़] का निर्माण किया गया है।https://arxiv.org/pdf/1601.00991) व्यक्तिगत संकेतों के आकार का दस्तावेजीकरण करता है। लेकिन औद्योगिक पैमाने पर अल्फ़ाज़ का खनन भी सबसे बड़ी बहु-परीक्षण मशीन है जिसकी कल्पना की जा सकती है, और उस पर इस ब्लॉग की स्थिति तय हो गई है: आकार की खोज उस आकार की खोज के अपेक्षित सर्वोत्तम-भाग्य के मुकाबले इसे कम किया जाना चाहिए। डिफ्लेटेड शार्प रेशियो एक 640-सेल ग्रिड दिखाता है जो पहले से ही अनुभवहीन महत्व परीक्षण को तोड़ रहा है, और द ऑनेस्ट नेगेटिव एक ~37,000-ट्रायल खोज दिखाता है जो +16.35% आउट-ऑफ-सैंपल विजेता उत्पन्न करता है जो डिफ्लेट हो जाता है डीएसआर 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 फॉर्मूलाइक अल्फ़ाज़
- एनसेंबल लर्निंग इन इन्वेस्टमेंट - सीएफए इंस्टीट्यूट रिसर्च फाउंडेशन, 2025
- स्टॉक रिटर्न भविष्यवाणी: विभिन्न प्रकार के मॉडलों को स्टैक करना - जर्नल ऑफ फाइनेंशियल इकोनॉमिक्स
- जेनसन, एस. एल्गोरिदमिक ट्रेडिंग के लिए मशीन लर्निंग, दूसरा संस्करण
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.