量化交易进阶篇:非线性模型、另类数据与机构级 Alpha
超越 OLS 与 GARCH 的「经典力学」:树模型、深度学习、NLP 与图像另类数据、 走步验证与过拟合防御,勾勒 Two Sigma、幻方等机构 2020s 量化实战的知识地图。
从经典力学到相对论:为什么还要一篇进阶?
原理篇 与 模型篇 教的是量化世界的经典力学——OLS 回归、GARCH、Markowitz。它们假设(或近似)线性关系、固定参数、可解释的闭式解,在风控归因、波动率估计、组合约束里至今仍是基础设施。
但若把时钟拨到 2026 年的机构实战,画面会不太一样:
- Two Sigma、Citadel、国内 幻方、九坤 等头部量化机构,大量研究员的时间花在:高维特征工程、非线性模型集成、另类数据采购与清洗,以及如何把这一切塞进低延迟、可审计、可回滚的生产管线。
- Kaggle 式的「一个 XGBoost 打天下」在个人竞赛里有效,在机构里往往活不过第一个季度——竞争对手同样在读你的因子逻辑,alpha 衰减(alpha decay)是常态。
本文是进阶篇:不重复 CAPM 公式,而是回答——经典模型之后,钱从哪里来?代码长什么样?坑在哪里?
线性模型教你市场的语法;非线性模型与另类数据,是在语法之上竞争谁能更快读到尚未被定价的信息。
经典力学的边界:线性世界哪里不够用?
| 经典工具 | 擅长 | 2020s 实战中的瓶颈 |
|---|---|---|
| OLS / 因子回归 | 解释 β、剥离风格、快速归因 | 交互效应(价值×动量×流动性)需手工交叉项,维度爆炸 |
| GARCH | 波动率聚集、VaR | 对结构突变(政策、熔断)反应慢;多资产联合波动建模笨重 |
| Markowitz | 组合方差最小化 | 样本协方差矩阵病态,权重极端;难融入非凸约束(换手、行业上限) |
| 协整配对 | 价差回归 | 关系断裂频繁;另类数据时代,价差信号被更快套利抹平 |
市场的真实映射往往是:
- 非线性:同样 PE 因子,在流动性充裕时有效,枯竭时失效——阈值与交互,树模型天然擅长。
- 高维稀疏:数千只股票的数百个特征,每日截面更新——深度学习与梯度提升树的主战场。
- 非结构化输入:财报电话会语气、新闻实体关系、停车场卫星图——无法直接塞进 OLS 的 X 矩阵。
非线性机器学习:树模型为何成为中流砥柱?
在表格型金融数据(因子截面、财务比率、微观结构特征)上,2015–2025 年实证一致偏向:梯度提升树(XGBoost / LightGBM / CatBoost)往往优于浅层神经网络——特征异构、缺失值多、样本噪声大,树的分段常数逼近更鲁棒。
树模型相对 OLS 的优势
- 自动交互:无需事先构造
价值 × 动量 - 非单调:PE 过低过高都可能差,树可拟合 U 型
- 缺失值处理:内置分裂方向,适合财报字段残缺
- 特征重要性:比深度网络更易做初步归因(但仍需谨慎解读)
机构常见用法
- 截面排序:预测未来 5~20 日收益排名,做多 top decile、做空 bottom decile(市场中性)
- 多模型集成:线性因子 + GBDT + 神经网络,按 IC 或夏普加权
- 目标工程:预测排名而非绝对收益,降低尺度漂移
下面用 LightGBM 演示截面因子 → 未来收益排名的监督学习(合成数据):
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.metrics import spearmanr
np.random.seed(42)
# 500 天 × 50 只股票,3 个因子 + 噪声
days, stocks = 500, 50
dates = pd.date_range("2022-01-01", periods=days, freq="B")
records = []
for d in dates:
f_value = np.random.randn(stocks)
f_mom = np.random.randn(stocks)
f_liq = np.random.randn(stocks)
# 真实关系:非线性——动量仅在流动性好时有效
ret_fwd = (
0.02 * f_value
+ 0.03 * f_mom * (f_liq > 0).astype(float)
+ np.random.randn(stocks) * 0.1
)
for i in range(stocks):
records.append({
"date": d, "stock": f"s{i:02d}",
"value": f_value[i], "mom": f_mom[i], "liq": f_liq[i],
"ret_fwd": ret_fwd[i],
})
df = pd.DataFrame(records)
features = ["value", "mom", "liq"]
# 走步验证:用过去 400 天训练,预测后 100 天
split = dates[400]
train = df[df["date"] < split]
test = df[df["date"] >= split]
model = lgb.LGBMRegressor(
n_estimators=200, learning_rate=0.05,
max_depth=4, subsample=0.8, colsample_bytree=0.8,
verbosity=-1,
)
model.fit(train[features], train["ret_fwd"])
pred = model.predict(test[features])
# 评价:每日截面 Spearman IC(预测排名 vs 真实收益排名)
test = test.copy()
test["pred"] = pred
ic_list = []
for d, g in test.groupby("date"):
ic, _ = spearmanr(g["pred"], g["ret_fwd"])
ic_list.append(ic)
print(f"样本外平均 IC: {np.nanmean(ic_list):.4f}")
print("特征重要性:", dict(zip(features, model.feature_importances_.round(2))))解读:IC(信息系数)是截面预测排名与真实收益排名的 Spearman 相关。机构内部常要求 IC > 0.02 且稳定 才值得进入组合层——单看样本内 R² 毫无意义。
深度学习:序列、图与表征学习
当输入不再是「每只股票几个因子」,而是整段价量序列、新闻文本、供应链图,深度学习的占比上升。
| 架构 | 典型输入 | 量化场景 |
|---|---|---|
| LSTM / GRU / Temporal CNN | 分钟/日频 OHLCV 序列 | 短周期模式、订单流编码 |
| Transformer / Informer | 长序列多变量 | 跨资产时序、事件窗口 |
| BERT / FinBERT | 新闻、公告、电话会文本 | 情绪、主题、实体关系 |
| CNN / ViT | 卫星图、工厂夜光、图表图像 | 宏观行业、产能_PROXY |
| GNN | 供应链、持股、行业图 | 风险传染、关联定价 |
深度学习在量化里的特殊难点
- 信噪比极低:收益标签噪声大,大模型易记住样本内巧合
- 非平稳:2020 年的文本分布与 2025 年不同,预训练模型需持续微调
- 可解释性与合规:监管与风控要求知道「为何买」
- 算力与延迟:训练贵;推理必须压到收盘前可完成
极简 LSTM 价量序列示意(单标的,教学用):
import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset
np.random.seed(0)
torch.manual_seed(0)
# 构造序列:用过去 20 日收益预测下一日符号
T, seq_len = 3000, 20
rets = np.random.normal(0, 0.01, T)
# 嵌入微弱可预测性
for t in range(seq_len, T):
rets[t] += 0.3 * rets[t - 1] + np.random.normal(0, 0.009)
X, y = [], []
for t in range(seq_len, T - 1):
X.append(rets[t - seq_len : t])
y.append(1 if rets[t + 1] > 0 else 0)
X = torch.tensor(np.array(X), dtype=torch.float32).unsqueeze(-1)
y = torch.tensor(y, dtype=torch.float32)
split = int(0.8 * len(y))
train_dl = DataLoader(TensorDataset(X[:split], y[:split]), batch_size=64, shuffle=True)
class LSTMClassifier(nn.Module):
def __init__(self):
super().__init__()
self.lstm = nn.LSTM(1, 32, batch_first=True)
self.fc = nn.Linear(32, 1)
def forward(self, x):
out, _ = self.lstm(x)
return torch.sigmoid(self.fc(out[:, -1, :]))
model = LSTMClassifier()
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
loss_fn = nn.BCELoss()
for epoch in range(5):
for xb, yb in train_dl:
opt.zero_grad()
loss = loss_fn(model(xb).squeeze(), yb)
loss.backward()
opt.step()
model.eval()
with torch.no_grad():
acc = ((model(X[split:]).squeeze() > 0.5) == y[split:]).float().mean()
print(f"样本外方向准确率: {acc:.3f}(微弱优于 50% 即可能有交易价值,需扣费验证)")幻方、Two Sigma 等机构不会公开架构细节,但招聘与技术分享中反复出现:大规模 GPU 集群、自研训练框架、因子与 DL 的混合流水线——核心壁垒常在数据与工程,而非某一个公开模型结构。
另类数据:NLP、图像与「信息套利」
另类数据(Alternative Data)指传统行情与财报之外、可用于预测资产价格的信息源。2020s 机构 alpha 竞赛的重要战场。
| 数据类型 | 来源示例 | 信号逻辑 | 门槛 |
|---|---|---|---|
| 文本 / NLP | 新闻、微博、财报 MD&A、电话会 | 情绪、不确定性、主题突变 | 清洗、实体消歧、点-in-time 对齐 |
| 图像 | 卫星停车场、油储罐阴影、作物叶绿素 | 经济活动_PROXY、供应链 | 标注贵、供应商垄断 |
| 消费 | 信用卡聚合、App 下载、电商销量 | 营收前瞻 | 合规与隐私 |
| 网络 | 招聘页、GitHub 提交、域名注册 | 公司扩张/收缩 | 噪声大 |
| 微观结构 | 逐笔委托、订单簿快照 | 短周期压力 | 存储与延迟 |
NLP 流水线(简化)
原始文本 → 时间戳对齐 → 实体链接(股票代码) → 情绪/主题/事件抽取 → 日频因子 → 与价量合并 → 模型用 TF-IDF + 逻辑回归 演示新闻情绪因子(合成文本):
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
np.random.seed(1)
n = 400
# 合成:正面词多的日子,次日收益略高
vocab_pos = ["增长", "超预期", "回购", "突破"]
vocab_neg = ["下滑", "调查", "亏损", "减持"]
texts, labels, fwd_ret = [], [], []
for i in range(n):
pos = np.random.randint(0, 4)
neg = np.random.randint(0, 4)
words = vocab_pos[:pos] + vocab_neg[:neg]
np.random.shuffle(words)
texts.append(" ".join(words) if words else "平稳")
sentiment = pos - neg
labels.append(1 if sentiment > 0 else 0)
fwd_ret.append(sentiment * 0.002 + np.random.normal(0, 0.01))
split = 300
pipe = Pipeline([
("tfidf", TfidfVectorizer(max_features=50)),
("clf", LogisticRegression(max_iter=500)),
])
pipe.fit(texts[:split], labels[:split])
proba = pipe.predict_proba(texts[split:])[:, 1]
# 情绪概率 vs 次日收益
ic = np.corrcoef(proba, fwd_ret[split:])[0, 1]
print(f"情绪概率与次日收益相关: {ic:.4f}")实务中会换用 FinBERT、大模型 Embedding + 下游回归,并严格保证:文章发布时间 < 交易信号生效时间(point-in-time),否则回测虚高。
图像数据
卫星图量化约 2015 年起在美股零售(停车场车流)、能源(油罐储量)中成熟。流程通常是:供应商提供已地理编码的图像 → CV 模型估计指标 → 与营收 surprise 对齐验证 → 纳入基本面预测模型。
对个人研究者:另类数据最大障碍往往是采购成本与许可,而非模型本身。
过拟合战争:机构比模型更在意验证
非线性模型 + 高维特征 = 过拟合的完美温床。Marcos López de Prado 在 Advances in Financial Machine Learning 中强调的方法,已成为机构研究规范:
| 技术 | 作用 |
|---|---|
| Purged K-Fold | 训练/测试之间剔除标签窗口重叠样本,防止信息渗漏 |
| Embargo | 测试集后再空出几天,模拟执行延迟 |
| Walk-forward | 滚动训练窗口,永远用「过去」预测「未来」 |
| Deflated Sharpe | 修正多次试验后的夏普膨胀 |
| 组合净化交叉验证(CPCV) | 更保守的样本外分布估计 |
走步验证骨架(接 LightGBM 示例):
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.metrics import spearmanr
def walk_forward_ic(df, features, train_days=400, test_days=20, embargo=5):
"""滚动训练 test_days,训练集与测试集之间留 embargo 天"""
dates = sorted(df["date"].unique())
ics = []
for start in range(train_days, len(dates) - test_days, test_days):
train_end = dates[start - embargo - 1]
test_start = dates[start]
test_end = dates[min(start + test_days - 1, len(dates) - 1)]
tr = df[df["date"] <= train_end]
te = df[(df["date"] >= test_start) & (df["date"] <= test_end)]
if len(te) < 50:
continue
m = lgb.LGBMRegressor(n_estimators=100, verbosity=-1)
m.fit(tr[features], tr["ret_fwd"])
te = te.copy()
te["pred"] = m.predict(te[features])
for d, g in te.groupby("date"):
ic, _ = spearmanr(g["pred"], g["ret_fwd"])
ics.append(ic)
return np.nanmean(ics), ics
# 复用上一章 df
mean_ic, all_ic = walk_forward_ic(df, features)
print(f"Walk-forward 平均 IC: {mean_ic:.4f}, 窗口数: {len(all_ic)}")思想实验
样本外 IC 为正,不代表能赚钱。换手、冲击成本、容量(capacity) 会把纸面 alpha 吃掉。Two Sigma 内部常说:edge 的大小要与可部署资金规模匹配——十亿资金能吃的信号,百万资金未必值得做。
机构级工程:数据湖、特征商店与生产管线
头部量化机构的技术栈,通常分层如下:
另类数据供应商 ─┐
行情/财务 ETL ─┼→ 数据湖 (Parquet/S3) → 特征商店 (point-in-time)
宏观/舆情 ─┘ ↓
研究笔记本 (Python/R)
↓
模型训练集群 (GPU/CPU 调度)
↓
信号发布 → 组合优化 → 风控 → OMS/执行
↓
归因 & 监控 (alpha decay 报警)与 Today Stock Finance 相比,机构管线多了:
- Point-in-time 数据库:任意历史日只能看到「当时已发布」的财报字段
- 特征商店:同一因子定义在研究、回测、实盘三处一致
- 仿真撮合:回测不能永远用收盘价成交
- Alpha 衰减监控:IC 滚动下滑时自动降权或退役模型
幻方等国内头部在公开报道中强调 AI 全流程——从数据清洗到训练到推理均在自有集群完成,且与极低延迟执行(尤其指增与中高频)深度耦合。对个人研究者,可落地的第一步往往是:把因子计算脚本版本化 + 走步回测自动化,而非急于上大模型。
2026 知识地图:怎么读进阶篇?
建议路径:
原理篇 → 模型篇(经典力学)→ 本文(非线性 + 另类数据)→ 专项深入| 你想做的事 | 下一步 |
|---|---|
| 截面选股 ML | 学 LightGBM + walk-forward + 行业中性化 |
| 文本情绪 | FinBERT / 中文金融语料微调 + point-in-time |
| 高频微观结构 | C++ / FPGA 与订单簿,已超出本文范围 |
| 风控与组合 | 经典 Markowitz + 风险模型仍必修 |
Edge_t = Signal_t − Cost_t − Crowding_t
经典力学仍是地基,相对论在天上
OLS、GARCH、Markowitz 不是「过时」,它们是风控语法与研究基准。Two Sigma、幻方等机构的大量收益,来自在同样语法之上,用非线性模型榨取高维交互,用另类数据抢占信息时差,用工程纪律把样本外验证过关的信号送进实盘——并在 alpha 衰减前持续迭代。
对个人研究者,诚实的前景是:
- 公开数据的 ML edge 极薄,需要极强的验证与成本意识
- 经典模型仍应掌握——否则无法判断 ML 信号是 alpha 还是隐性因子暴露
- 工程与数据质量,往往比换一个 Transformer 层数更重要
学习顺序建议不变:先跑通 模型篇 的闭式解,再跑本文的 LightGBM 与 walk-forward——前者让你理解市场结构,后者让你理解 2020s 机构在竞争什么。
阅读提示
本文讨论行业技术趋势,不构成投资建议;机构实践为概括性描述,非内幕信息。
代码使用合成数据;真实 NLP/另类数据须解决 point-in-time、许可与合规。
非线性模型过拟合风险极高,样本外 IC 与扣费后夏普才是硬指标。
依赖:lightgbm, scikit-learn, torch(pip install),可选 transformers 用于 FinBERT。