一、基础模型选择:线性回归、逻辑回归、决策树、随机森林在量化交易中的应用场景
做量化交易这些年,我见过太多人一上来就堆深度学习模型。
结果呢?过拟合、跑不动、解释不了。
其实,基础模型才是量化交易的基石。今天我就把这四个模型在量化里的真实用法,掰开了讲给你听。
1. 线性回归:量化里的"老黄牛"
线性回归,说白了就是找一条线,让数据点离这条线最近。
在量化交易里,它最常见的用法是——预测收益率。
核心应用场景:
- 因子收益率预测:用过去N天的因子值,预测未来一天的收益
- 套利定价模型(APT):多因子线性组合,解释股票收益
- 对冲比率计算:统计套利中,算两个品种的线性关系
举个例子。你想知道"市盈率"这个因子能不能预测收益。
用线性回归一跑,系数为正,说明低市盈率股票未来收益可能更高。就这么直接。
# 一个简单的线性回归预测收益
import numpy as np
from sklearn.linear_model import LinearRegression
# 假设X是因子值,y是未来收益率
X = np.array([[pe_ratio, turnover_rate, volatility] for ...])
y = np.array([future_return for ...])
model = LinearRegression()
model.fit(X, y)
# 系数解读
print(f"因子权重: {model.coef_}")
print(f"截距项: {model.intercept_}")
⚠️ 避坑指南:
我曾经在回测里用线性回归跑得特别漂亮,一上实盘就崩。为什么?因为金融数据有"序列相关性",普通线性回归假设样本独立,这假设在金融里基本不成立。
我的建议:用Newey-West标准误修正,或者干脆用滚动窗口训练。
2. 逻辑回归:涨跌分类的好手
逻辑回归名字带"回归",干的却是分类的活。
它输出的是一个概率——明天涨的概率是70%还是30%。
核心应用场景:
- 涨跌方向预测:二分类,涨/跌,或者三分类,涨/跌/平
- 风控信号生成:当预测下跌概率超过阈值,触发减仓
- 多空策略信号:概率高做多,概率低做空
我个人习惯把逻辑回归作为"基线模型"。什么意思?
任何复杂的模型,先拿逻辑回归跑一遍。如果逻辑回归都跑不出有效信号,那复杂模型大概率也是白搭。
from sklearn.linear_model import LogisticRegression
# 二分类:1=涨,0=跌
model = LogisticRegression(penalty='l2', C=1.0)
model.fit(X_train, y_train)
# 预测概率
prob_up = model.predict_proba(X_test)[:, 1]
# 当概率 > 0.6 时做多
if prob_up[-1] > 0.6:
print("生成买入信号")
💡 我的经验:
逻辑回归的系数可以直接当"因子权重"用。我经常用它来做因子筛选——系数不显著的因子,直接扔掉。
另外,记得加L1正则化,它会自动把不重要的因子系数压到0,省得你手动筛选。
3. 决策树:规则提取器
决策树这东西,你想想看,它就像在问一连串问题:
"市盈率小于15吗?是→再看换手率;否→再看市值..."
最后走到叶子节点,给出一个预测。
核心应用场景:
- 规则提取:从树结构里提取可解释的交易规则
- 特征筛选:看哪个因子被优先分裂,重要性一目了然
- 非线性关系捕捉:因子和收益之间不是直线关系时,决策树比线性模型强
我记得有一次做CTA策略,用线性模型死活找不到有效因子。
换成决策树,发现了一个"非线性阈值"——当波动率在某个区间时,收益模式完全不一样。线性模型根本抓不住这个。
from sklearn.tree import DecisionTreeRegressor
# 控制树深度,防止过拟合
tree = DecisionTreeRegressor(
max_depth=4, # 深度别太大
min_samples_leaf=50, # 叶子节点最少50个样本
random_state=42
)
tree.fit(X, y)
# 特征重要性
importance = tree.feature_importances_
print(f"最重要的因子: {np.argmax(importance)}")
⚠️ 避坑指南:
决策树非常容易过拟合。我曾经把深度设到10,回测曲线完美得像假的一样——结果实盘直接打脸。
我的建议:max_depth控制在3-5,min_samples_leaf至少设到30以上。宁可欠拟合,不要过拟合。
4. 随机森林:稳健的集成方案
随机森林就是"三个臭皮匠,顶个诸葛亮"。
它训练很多棵决策树,每棵树用不同的数据子集和特征子集,最后投票或取平均。
核心应用场景:
- 稳健预测:单棵树容易过拟合,森林就稳多了
- 选股模型:用多因子预测股票未来排名,选排名靠前的
- 异常检测:看样本在树群里的"隔离程度",发现异常交易
我个人在实盘里用得最多的就是随机森林。为什么?
因为它不容易过拟合,而且对缺失值不敏感。金融数据经常有缺失,随机森林能很好地处理。
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(
n_estimators=200, # 树的数量
max_depth=5, # 每棵树深度
min_samples_leaf=30,
max_features='sqrt', # 每棵树只用sqrt(n_features)个特征
random_state=42
)
rf.fit(X_train, y_train)
# 预测
y_pred = rf.predict(X_test)
# 特征重要性排序
importance_df = pd.DataFrame({
'feature': feature_names,
'importance': rf.feature_importances_
}).sort_values('importance', ascending=False)
💡 调参小技巧:
随机森林有两个关键参数:
- n_estimators:树越多越稳,但200棵以后收益递减
- max_features:我习惯用'sqrt'或'log2',增加树之间的多样性
另外,记得用OOB(袋外样本)做验证,不用额外划分验证集,省事。
模型选择速查表
| 模型 | 适合场景 | 优点 | 缺点 |
|---|---|---|---|
| 线性回归 | 收益率预测、对冲比率 | 可解释性强、速度快 | 只能捕捉线性关系 |
| 逻辑回归 | 涨跌分类、风控信号 | 输出概率、可解释 | 决策边界是线性的 |
| 决策树 | 规则提取、特征筛选 | 可解释、非线性 | 容易过拟合 |
| 随机森林 | 稳健预测、选股模型 | 抗过拟合、处理缺失值 | 模型较大、解释性弱于单树 |
最后说一句:别小看这些基础模型。我见过太多人用LSTM跑出来的结果,还不如一个调好参的随机森林。
模型不在多,在于用得对。先把这四个模型吃透,量化交易的路就走稳了一大半。
公众号:蓝海资料掘金营,微信deep3321