1. 课程导入

课程导入 学习卡片

欢迎进入《Qlib实验管理与信号评估实战》。在量化研究里,真正拉开差距的往往不是某个模型结构,而是实验是否可复现、信号是否被正确评估。很多团队能跑通一次回测,却无法回答三个关键问题:这次收益来自哪个因子?换一组参数结果是否稳定?同样的信号在不同股票池、不同时间段是否依然有效?本课程的目标,就是围绕 Qlib 建立一套可管理、可比较、可复盘的实验与评估体系。

一、学习目标:从“能跑”到“可解释、可复现、可迭代”

本课程不是单纯讲 Qlib 的 API 用法,而是把 Qlib 当作量化实验的操作系统。学完之后,你应当具备以下能力:

  • 实验管理能力:能够用 Qlib 的 workflow、配置文件和记录机制,把数据、模型、训练、预测、回测串成一条可复现流水线。
  • 信号评估能力:理解 IC、Rank IC、ICIR、分组收益、换手率、回测指标之间的区别,知道什么信号值得继续投入。
  • 对比分析能力:能够设计 A/B 实验,控制变量,比较不同模型、不同特征、不同标签构造对最终信号的影响。
  • 工程落地能力:能够把实验中的最佳配置沉淀为可重复运行的脚本或配置,而不是停留在 Notebook 的一次性结果。
核心判断标准:一个量化实验是否合格,不取决于单次回测收益有多高,而取决于别人能否用同样的配置复现你的结果,以及你是否能解释收益来源与风险暴露。

二、核心概念:实验、信号与评估的三层关系

在 Qlib 中,实验管理、信号生成和信号评估并不是三个孤立环节,而是一条链。数据层提供行情与特征,模型层产出预测分数,信号层把预测分数转化为可交易信号,评估层则判断这个信号是否具备统计显著性和经济意义。

层级 核心对象 关键问题 常见产出
数据与特征层 行情、因子、标签 数据是否干净?标签是否未来函数? 特征矩阵、标签序列
模型与实验层 模型、超参数、训练配置 实验是否可复现?变量是否受控? 模型文件、预测分数、实验记录
信号与评估层 信号、组合、回测 信号是否稳定?收益是否来自风险暴露? IC 报告、分组收益、回测曲线

其中,信号评估是最容易被低估的一环。很多人只盯着年化收益,却忽略了 IC 的稳定性、分组单调性和换手率。一个高收益但高换手的信号,在扣除交易成本后可能迅速衰减;一个 IC 很高但只集中在少数股票上的信号,也可能只是过拟合。

三、整体框架:Qlib 实验管理与信号评估的闭环

Qlib 的实验管理可以理解为一个闭环:配置驱动 → 数据准备 → 模型训练 → 预测打分 → 信号评估 → 结果记录 → 迭代优化。这个闭环的关键在于配置与记录。Qlib 通过 YAML 配置和 workflow 把实验参数固化下来,使得每次运行都有迹可循。

# 典型 Qlib 实验配置结构(示意)
qlib_init:
    provider_uri: "~/.qlib/qlib_data/cn_data"
    region: cn

market: &market csi300
benchmark: &benchmark SH000300

data_handler_config: &data_handler_config
    start_time: 2018-01-01
    end_time: 2022-12-31
    fit_start_time: 2018-01-01
    fit_end_time: 2020-12-31
    instruments: *market

task:
    model:
        class: LGBModel
        module_path: qlib.contrib.model.gbdt
        kwargs:
            loss: mse
            learning_rate: 0.05
    dataset:
        class: DatasetH
        module_path: qlib.data.dataset
        kwargs:
            handler:
                class: Alpha158
                module_path: qlib.contrib.data.handler
                kwargs: *data_handler_config
            segments:
                train: [2018-01-01, 2020-12-31]
                valid: [2021-01-01, 2021-06-30]
                test: [2021-07-01, 2022-12-31]
    record:
        - class: SignalRecord
          module_path: qlib.workflow.record_temp
        - class: SigAnaRecord
          module_path: qlib.workflow.record_temp

这段配置体现了 Qlib 实验管理的核心思想:把数据区间、模型参数、训练/验证/测试切分、记录器全部显式声明。当你需要比较两个模型时,只需替换 model 部分,其余保持不变,实验就具备了可比性。

建议在实验初期就固定 benchmark、股票池和时间切分。否则后续所有对比都会失去意义,因为你无法判断差异来自模型还是来自数据划分。

四、实战路线图:从第一个实验到信号评估报告

本课程的实战路线分为四个阶段,每个阶段都对应可交付成果:

  1. 环境与数据准备:安装 Qlib,下载或接入行情数据,确认数据字段和交易日历正确。
  2. 第一个可复现实验:使用 Alpha158 特征和 LightGBM 模型,跑通训练、预测、回测全流程,并生成实验记录。
  3. 信号评估体系:计算 IC、Rank IC、ICIR,绘制分组收益曲线,分析换手率和回测指标。
  4. 对比与迭代:设计 A/B 实验,比较不同模型或特征组合,沉淀最佳配置并形成评估报告。

下面是一个典型的信号评估命令示例,用于在 Qlib 中生成分析记录:

# 运行实验并生成信号分析记录
python -m qlib.workflow.cli run --config experiment_config.yaml

# 查看实验记录
python -m qlib.workflow.cli info --experiment_name my_first_experiment

# 输出 IC、Rank IC 等指标(示意日志)
Signal Analysis:
    IC:      0.042
    Rank IC: 0.051
    ICIR:    0.38
    Rank ICIR: 0.45

五、常见误区与复盘思路

在进入正式实验之前,先了解几个高频误区,可以少走很多弯路:

  • 误区一:只看收益,不看风险调整。年化 30% 但最大回撤 40% 的信号,未必优于年化 15% 但回撤 10% 的信号。
  • 误区二:忽略交易成本。高换手信号在扣费后可能完全失效,评估时必须加入成本假设。
  • 误区三:用测试集调参。测试集一旦参与调参,就不再是测试集,评估结果会严重高估。
  • 误区四:实验不可复现。没有固定随机种子、没有记录配置、没有保存模型,结果无法追溯。
复盘时优先问三个问题:第一,信号在样本外是否依然有效?第二,收益是否集中在少数交易日或少数股票?第三,换手率和成本假设是否合理?如果这三个问题答不清楚,再高的回测收益也不应直接采信。

本章的核心任务是建立全局认知:Qlib 实验管理解决的是“可复现”问题,信号评估解决的是“可信度”问题,两者结合才能形成可持续迭代的量化研究流程。接下来,我们将从环境搭建和数据准备开始,逐步把这套框架落到真实代码与实验中。