一、基础模型选择:线性回归、逻辑回归、决策树、随机森林在量化交易中的应用场景

做量化交易这些年,我见过太多人一上来就堆深度学习模型。

结果呢?过拟合、跑不动、解释不了。

其实,基础模型才是量化交易的基石。今天我就把这四个模型在量化里的真实用法,掰开了讲给你听。

量化交易基础模型选择 · 知识体系 量化交易模型 线性回归 逻辑回归 决策树 随机森林 ▶ 因子收益率预测 ▶ 套利定价模型 ▶ 涨跌方向判断 ▶ 风控信号生成 ▶ 规则提取 ▶ 特征筛选 ▶ 集成预测 ▶ 稳健选股 从简单到复杂,从线性到非线性

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-5min_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