วิธีการรวมกลุ่ม: ผสมผสานผู้เรียนที่อ่อนแอเพื่ออัลฟ่าที่แข็งแกร่ง
การเขียนเกี่ยวกับกลุ่มการค้าขายส่วนใหญ่แย้งว่าโมเดลจำนวนมากจะดีกว่า นั่นคือแกนที่ผิด ข้อผิดพลาดของวงดนตรีแบ่งออกเป็นสามเงื่อนไข และในการซื้อขายมีเพียงเงื่อนไขเดียวเท่านั้นที่ถือเป็นข้อจำกัดที่มีผลผูกพัน
บทความนี้เป็นเรื่องเกี่ยวกับคำศัพท์หนึ่งคำนั้น และผลที่ตามมาประมาณสองประการที่ส่วนที่เหลือของบล็อกนี้ไม่ครอบคลุม: การซ้อนกันเป็นเลเยอร์การรวมสัญญาณที่ชัดเจน และการรวมสัญญาณจำนวนมากเข้าด้วยกันจะทำให้มูลค่าการซื้อขายลดลงจริง ๆ ก่อนที่การซื้อขายจะเข้าสู่ตลาดหรือไม่
คำที่ผูกมัดจริงๆ: อคติ-ความแปรปรวน-ความแปรปรวนร่วม
สำหรับชุดการถดถอยของ แบบจำลอง ซึ่งเป็นความคลาดเคลื่อนกำลังสองที่คาดหวังของการทำนายโดยเฉลี่ย สลายตัวเป็น:
สามเทอม สามคันโยก:
- การใส่ถุง โจมตีเงื่อนไขความแปรปรวนโดยการหาค่าเฉลี่ยจากตัวอย่างบูตสแตรป
- การเร่ง โจมตีระยะอคติโดยการแก้ไขสิ่งตกค้างซ้ำๆ
- การซ้อน โจมตีคำศัพท์ความแปรปรวนร่วมโดยการเรียนรู้น้ำหนักรวม แทนที่จะถือว่าเท่ากัน
- เพิ่มขึ้น ลดเฉพาะส่วนร่วมของผลต่าง มันไม่ได้ทำอะไรเลยกับความแปรปรวนร่วม — ค่าสัมประสิทธิ์อยู่ที่ 0.99 แล้วที่ .
จุดสุดท้ายนั่นคือข้อโต้แย้งทั้งหมด ในการซื้อขาย โมเดลจะได้รับการฝึกโดยใช้ตราสารเดียวกันในประวัติศาสตร์เดียวกัน โดยเทียบกับเป้าหมายที่มีการเปลี่ยนแปลงที่ใกล้เคียงกันของชุดราคาเดียวกัน ข้อผิดพลาดของพวกเขาไม่ใกล้เคียงกับความเป็นอิสระ ดังนั้นระยะความแปรปรวนร่วมจึงมีมาก และระยะความแปรปรวนก็หมดลงแล้ว ซึ่งหมายความว่าการนับแบบจำลองทำให้คุณแทบไม่ได้ทำอะไรเลย และความแตกต่างทางโครงสร้างก็ซื้อทุกอย่างให้กับคุณ
รูปแบบการกล่าวอ้างที่เป็นรูปธรรมและปลอมแปลงได้: การเพิ่มทรีที่มีการไล่ระดับสีครั้งที่ 101 ควรย้ายเมตริกทั้งมวลน้อยกว่าการเพิ่มโมเดลที่มีโครงสร้างต่างกันหนึ่งโมเดล — LSTM ซึ่งเป็นโมเดลเชิงเส้นบนโดเมนฟีเจอร์ที่ไม่เชื่อมต่อกัน สิ่งใดก็ตามที่มีอคติเชิงอุปนัยที่แตกต่างกัน ต้นไม้ชายขอบเกือบจะขนานกับต้นไม้ที่มีอยู่ในหนังสือแล้ว ไม่ใช่โมเดลที่มีโครงสร้างแตกต่างกัน
ความสัมพันธ์ ไม่ใช่การนับโมเดล จะกำหนดความกว้างที่มีประสิทธิภาพของทั้งมวล — การได้มา ปัจจัยความสัมพันธ์ที่เข้ารหัสลับที่วัดตามประเภทสินทรัพย์ และการจำลองกับข้อมูลคู่จริงอยู่ใน Signal Correlation: จำนวนคู่ที่ต้องตรวจสอบ
อย่าลดความหลากหลายของวงดนตรีให้เหลือเพียงตัวเลขเดียว The Deflated Sharpe Ratio คำนวณห้าประสิทธิภาพ- ตัวประมาณค่า (ความสัมพันธ์โดยเฉลี่ย, อัตราส่วนการมีส่วนร่วม, PCA-95%, Kaiser, Cheverud-Nyholt) บนตาราง 640 เซลล์จริง แสดงให้เห็นช่วง จาก 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)
การแบ่งแยกวินัยในที่นี้ไม่ใช่ทางเลือกและไม่ใช่เรื่องแปลกใหม่ ใช้แนวทางเดินไปข้างหน้าที่ถูกกวาดล้างและห้ามขนส่ง และทำความเข้าใจว่าการรั่วไหลแต่ละประเภทมีมูลค่าเท่าใดใน Sharpe ที่สูงเกินจริง ก่อนที่จะเชื่อถือตัวเลขเหล่านี้ ทั้งสองได้รับการวัดผลแล้ว: อนุกรมวิธานอคติแบบ look-ahead จะวัดปริมาณการดำเนินการ ตัวบ่งชี้ และการรั่วไหลของการทำให้เป็นมาตรฐานในโปรแกรมจำลองที่มีการควบคุม และ การเพิ่มประสิทธิภาพแบบ walk-forward ครอบคลุมหน้าต่างแบบทอดสมอและแบบกลิ้ง, CPCV, การล้างข้อมูล และการวินิจฉัยการย่อยสลายของ 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))
โมเดลพื้นฐานแต่ละแบบจะกลายเป็นผู้เชี่ยวชาญในโดเมน โดยโมเดลโมเมนตัมจะเรียนรู้รูปแบบโมเมนตัมโดยปราศจากการรบกวนจากเสียงรบกวน และผู้เรียนเมตาจะเรียนรู้ว่าผู้เชี่ยวชาญคนใดที่จะไว้วางใจภายใต้เงื่อนไขใด ๆ
คำเตือนสองประการในข้อสุดท้ายนั้น ประการแรก การถ่วงน้ำหนักแบบมีเงื่อนไขของระบอบการปกครองคือปัญหาที่ได้รับการแก้ไขและเผยแพร่แล้ว — การตรวจจับระบอบการปกครองด้วย HMM ได้มาซึ่งระบอบการปกครองอย่างเหมาะสมผ่านทาง Forward/Viterbi/Baum-Welch และป้อนให้เป็นคุณลักษณะของวงดนตรีดาวน์สตรีม และ กลยุทธ์การรวมแบบไดนามิก ครอบคลุม การกลับตัวเฉลี่ยถ่วงน้ำหนักตามระบอบการปกครองเทียบกับโมเมนตัมพร้อมผลลัพธ์ที่รายงาน อย่าแทนที่พร็อกซีสัญญาณโมเมนตัมเฉพาะกิจสำหรับอย่างใดอย่างหนึ่ง ประการที่สอง การเลือกประสิทธิภาพในตัวตัวอย่างทำให้ผู้ชนะไม่รอด กลไกทั่วไปและการป้องกัน CSCV วัดใน ความน่าจะเป็นของ backtest overfitting การซ้อนเป็นตัวอย่างที่แคบกว่าของปัญหานั้น
สำหรับการถ่วงน้ำหนัก ส่งคืนสตรีม แทนการคาดการณ์แบบจำลอง อย่าหาค่าความแปรปรวนเฉลี่ยอีกครั้ง 12 อัลกอริธึมการเพิ่มประสิทธิภาพพอร์ตโฟลิโอเมื่อเปรียบเทียบ แข่ง HRP, HERC, GHRP, MHRP, Black-Litterman, NCO, MVO, ความเท่าเทียมกันของความเสี่ยงและน้ำหนักที่เท่ากันพร้อมผลลัพธ์ที่วัดได้และโค้ดโอเพ่นซอร์ส ทฤษฎีพอร์ตโฟลิโอของ Markowitz สำหรับการเข้ารหัสลับ มีการนำ SLSQP ไปใช้ด้วยความแปรปรวนเฉลี่ย และผลลัพธ์ 1/N-is-hard-to-beat ได้รับการทดสอบแล้วกับ HRP และ CVaR ใน ไปป์ไลน์พอร์ตโฟลิโอ HRP/CVaR
Turnover Netting: การทดสอบการเรียกร้องที่คุ้มค่า
นี่คือส่วนหนึ่งของอาร์กิวเมนต์ alpha-library ที่คลัสเตอร์ต้นทุนการดำเนินการของบล็อกนี้ไม่ครอบคลุมในปัจจุบัน
เมื่อ Alpha #4,721 พูดว่า "ซื้อ MSFT" และ Alpha #8,392 พูดว่า "ขาย MSFT" ในการปรับสมดุลเดียวกัน การซื้อขายเหล่านั้นจะข้ามกันภายใน เฉพาะตำแหน่งสุทธิเท่านั้นที่เข้าถึงตลาด คำกล่าวอ้างก็คือเมื่อมีสัญญาณเพียงพอ การยกเลิกมูลค่าการซื้อขายรวมที่ตั้งใจไว้ส่วนใหญ่ก่อนที่จะเกิดสเปรด ค่าธรรมเนียม หรือผลกระทบต่อตลาด ซึ่งหมายความว่าวงดนตรีมีราคาถูกกว่าการดำเนินงานมากกว่าผลรวมของส่วนประกอบ ไม่ใช่แค่มีเสถียรภาพมากขึ้นเท่านั้น
นี่เป็นกลไกที่แตกต่างจากสิ่งที่ cascade Strategy orchestration จัดการอยู่แล้ว Cascade แก้ไขข้อขัดแย้งที่ระดับ ช่อง: คู่เดียวกัน ทิศทางตรงกันข้ามเป็นสิ่งต้องห้ามและตัดสินด้วยคะแนน การขับไล่คู่ข้ามดำเนินการผ่านคิวลำดับความสำคัญ และบทความนี้พิสูจน์ให้เห็นอย่างชัดเจนว่า PnL ต่อกลยุทธ์ไม่สามารถสรุปได้ง่ายๆ เนื่องจากการทับซ้อนกันของเวลาและข้อจำกัดด้านเงินทุน การหักกลบเป็นเรื่องเกี่ยวกับ เลขคณิตตำแหน่งรวมต่อสุทธิ เพื่อลดปริมาณการซื้อขาย
การปลอมแปลงยังมีราคาถูก: คำนวณยอดรวมเทียบกับมูลค่าการซื้อขายสุทธิจากการเติมจริงเมื่อสัญญาณส่วนประกอบถูกรวมเข้าด้วยกัน จากนั้นให้กำหนดราคาทั้งสองผ่านกลไกต้นทุนที่มีอยู่ — ค่าธรรมเนียมและส่วนลดของผู้ทำ, การขาดแคลนการดำเนินการและ TCA และ ต้นทุนการเลื่อนหลุดของหน้า รุ่น
หมายเหตุเกี่ยวกับขนาด เนื่องจากเฟรมอัลฟ่าไลบรารีเชิญชวน รายงานของ WorldQuant ได้สร้างไลบรารีอัลฟ่าขนาดใหญ่มากและ 101 Formulaic Alphas บันทึกรูปร่างของสัญญาณแต่ละรายการ แต่การขุดอัลฟ่าในระดับอุตสาหกรรมก็เป็นเครื่องทดสอบหลายตัวที่ใหญ่ที่สุดเท่าที่จะจินตนาการได้ และจุดยืนของบล็อกนี้ก็ได้รับการแก้ไขแล้ว: การค้นหาขนาด จะต้องแฟบลงเมื่อเทียบกับความโชคดีที่คาดไว้ของการค้นหาขนาดนั้น The Deflated Sharpe Ratio แสดงตาราง 640 เซลล์ที่ทำลายการทดสอบนัยสำคัญที่ไร้เดียงสาไปแล้ว และ The Honest Negative แสดงการค้นหา ~37,000 การทดลอง ทำให้เกิดผู้ชนะ +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
กล่องสุดท้ายไม่ใช่ของตกแต่ง ซ้อนๆ กัน รุ่นพื้นฐานเป็นขั้นตอนการเลือกขนาด และบทความทั้งมวลที่ไม่ยุบไม่สามารถป้องกันได้
ของทานเล่น
- ความแตกต่างของโครงสร้างมากกว่าการนับแบบจำลอง เงื่อนไขความแปรปรวนร่วมไม่ลดลงด้วย . การเพิ่มต้นไม้ที่มีความสัมพันธ์กันลำดับที่หกไม่ใช่การกระจายความเสี่ยง การเพิ่มคลาสโมเดลอื่นหรือโดเมนฟีเจอร์ที่ไม่เป็นสมาชิกร่วมคือ
- รายงานผล- วงดนตรี ไม่ใช่ประเด็น ตัวประมาณค่าห้าตัว ห้าคำตอบ บางครั้งห่างกันสองขนาด
- รักษา meta-learner ให้เป็นเส้นตรง ความซับซ้อนที่เลเยอร์การรวมกันมักจะเกินพอดีเสมอ และ L1 ก็เลือกแบบจำลองอัตโนมัติที่มีประโยชน์
- ไม่อยู่ในครึ่งหน้าหรือไม่มีอะไรเลย ผู้เรียนเมตาที่ได้รับการฝึกอบรมเกี่ยวกับการคาดการณ์ฐานในตัวอย่างจะเรียนรู้น้ำหนักที่ไม่ถูกต้องด้วยความมั่นใจสูง
- ยุบวงดนตรี การซ้อนคือการค้นหา ให้ราคาเหมือนอันหนึ่ง
อ่านเพิ่มเติม:
- Kakushadze, Z. (2016). 101 อัลฟาสูตร
- การเรียนรู้ทั้งมวลในการลงทุน — มูลนิธิวิจัยสถาบัน CFA, 2025
- การทำนายการคืนสินค้าในสต็อก: การซ้อนแบบจำลองที่หลากหลาย — วารสารเศรษฐศาสตร์การเงิน
- Jansen, S. การเรียนรู้ของเครื่องเพื่อการซื้อขายอัลกอริทึม ฉบับที่ 2
ผู้เขียน
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.