PLUS会员

四金_作业

由bqf6mces创建,最终由bqf6mces 被浏览 36 用户

总结

因子更重要还是模型更重要?

因子和模型同样重要,模型相同的情况,不同因子在回测中,差异巨大。相同因子在不同的模型下进行回测,表现也各不相同。

一个好的策略,是因子和模型共同组合得到的。

本次作业的三个模型对比:

  • Random Forest:鲁棒、易调、抗过拟合,但“水平”有限,对时间序列动态特征捕捉不足。
  • Sklearn 原生 GBDT/RandomForest:接口统一、工程简单,但训练慢、难并行、不支持缺失值自动处理,对金融时序非平稳性表现一般。
  • XGBoost:精度高、能学到复杂非线性、支持缺失值与自定义损失,但对超参敏感、训练/调参成本高,且同样容易过拟合于未来不可重现的噪声。

KIMI总结:做股价回归,RandomForest 是“稳健但笨重的大锤”,Sklearn-GBDT/RF 是“顺手但不快的螺丝刀”,XGBoost 则是“锋利却容易割手的手术刀”。先用大锤砸出方向,再拿手术刀精雕细琢,同时永远记得——金融数据里的信号稀少且转瞬即逝,再锋利的刀也敌不过市场的 regime shift

\

相同因子下不同模型的区别?

因子可以决定回一个量化交易的潜在收益空间,好的模型可以在回测和实盘中,不断提升这个收益的空间。

模型和因子的相对重要性会随环境变化。相同回测时间不同因子+不同的模型,回测结果不同。


但在当前作业中sklearn的大部分年化收益都优于xgboost,这是因为小样本、低噪声、特征维度有限的环境里,sklearn 的线性/树模型往往更快、更稳,而 XGBoost 因为 过拟合风险 + 参数空间大 + 对样本量敏感,反而容易把噪声当信号,于是出现 sklearn > XGBoost 的年化收益。 但这并不代表“XGBoost 不如 sklearn”,而是 “当前数据/参数/约束” 让 XGBoost 的优势没发挥出来。

部分时间段,xgboost可能优于sklearn

\

作业

sklearn年化收益率118% sklearn年化收益率136% 多模型收益率对比
https://bigquant.com/codesharev3/2afb994f-5391-4639-bb5d-b8174c998f01 https://bigquant.com/codesharev3/6fd80ec6-754c-40ed-8363-3ced54f0e543 https://bigquant.com/codesharev3/48ed5bd7-afd3-4c70-842b-7b79db150ee7

\

随机种子 → 以下内容由模型生成

sklearn 里,同一数据集 + 相同代码,多次训练却得到 不同预测结果,造成这种问题的原因可能为1、模型本身带随机性,2、没有给随机数生成器设置np.random.seed(42)设置随机种子,导致多次回测中,结果不一致。

是否需要设置随机种子:

把 5 个步骤拆成 “必须固定 / 建议固定 / 无需固定 / 必须不固定” 四类,直接给出可落地的清单。(默认使用 sklearn + XGBoost;如无特别说明,固定值统一用 random_state=42seed=42


1 数据抽取

  • 纯 SQL / API 拉数 ➜ 无需固定

  • 若抽样(如按月随机采样) ➜ 必须固定

    df.sample(frac=0.8, random_state=42)
    

2 特征提取

子步骤 是否固定 示例
计算价量因子 纯数学公式 无需固定
标准化 / 归一化 涉及随机分位数 必须固定 StandardScaler, QuantileTransformer(random_state=42)
PCA / ICA / FA 降维 随机初始化 必须固定 PCA(random_state=42)
缺失值多重插补 IterativeImputer 内部随机 必须固定 random_state=42
训练-验证切分 时间序列外 ➜ 顺序切分不随机;随机切分 ➜ 必须固定 TimeSeriesSplit 无需,train_test_splitrandom_state=42

3 模型训练

模型 随机源 固定方式
sklearn 线性模型(Ridge/Lasso/ElasticNet) 无需
sklearn 树模型(RF/GBDT) bootstrap & 特征抽样 必须固定 random_state=42
sklearn RandomizedSearchCV 随机采样超参 必须固定 random_state=42
XGBoost 列/行抽样、树初始化 必须固定 seed=42, random_state=42
XGBoost 早停 验证集划分 若自己切分需固定;用 TimeSeriesSplit 则无需

4 模型评估

  • 交叉验证 / 滚动窗口 ➜ 切分方式固定TimeSeriesSplit 已天然固定顺序)
  • 评估指标计算 ➜ 无需固定
  • 蒙特卡洛稳健性检验 ➜ 故意不固定(多次随机种子跑分布)

5 模型推理(线上)

  • 纯预测 ➜ 无需固定(模型已训练好,权重确定)
  • 集成 Bagging 推理 ➜ 每棵树内部已训练好,无需再设

一键记忆表

步骤 必须固定 建议固定 无需固定 必须不固定
数据抽取 抽样时 纯拉数
特征提取 降维/缩放/缺失插补 切分 数学公式
模型训练 所有含随机超参的模型/搜索 纯线性
模型评估 交叉验证切分 指标计算 蒙特卡洛
模型推理 纯预测





\

标签

量化交易因子模型策略回测
{link}