2. Qlib基础概念与核心组件

Qlib是微软开源的AI量化投资平台,面试官问基础概念,并不是想听你背文档,而是想确认三件事:你是否真正跑过完整流程、是否理解各组件之间的数据契约、能否把Qlib的能力映射到目标公司的业务场景。本章围绕高频问题、回答框架和公司侧重点展开,帮你把"用过"讲成"懂原理、能落地"。

Qlib回答框架:从数据到决策的四层链路 数据层 DataHandler 特征层 Alpha158/360 模型层 Model+Trainer 决策层 Strategy+Executor 追问路径:数据对齐→特征泄漏→模型过拟合→回测偏差→实盘滑点 每一层都要能说出"为什么这样设计"和"踩过什么坑" 加分点:能画出组件依赖图,并指出Qlib与自研框架的取舍 公司侧重点:高频看数据与执行,私募看因子与回测,大厂看工程化与扩展

一、核心原理:Qlib的组件分层与数据契约

Qlib的核心设计思想是"配置驱动、组件解耦"。一次完整的量化研究流程被拆成数据、特征、模型、决策四层,每层通过标准接口衔接。面试中最常被问的是:DataHandler、Dataset、Model、Strategy、Executor各自负责什么,它们之间传递什么数据。

DataHandler负责把原始行情加工成统一格式,输出以"日期×股票"为索引的DataFrame;Dataset在DataHandler之上切分训练集、验证集、测试集,并处理标签;Model只关心输入特征和输出预测;Strategy把预测分数转成目标持仓;Executor负责回测撮合与记录。理解这条链路,才能回答"如果我要换一个因子库,应该改哪一层"这类问题。

# Qlib典型配置片段(workflow_config.yaml)
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
    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]
回答时先给"分层图",再落到具体类名和配置项。面试官听到你能准确说出Alpha158、DatasetH、LGBModel、TopkDropoutStrategy,基本判断你跑过真实流程。

二、方法流程:从qrun到回测的完整链路

Qlib提供两种使用方式:命令行qrun和Python API。面试中常问"你平时怎么跑实验",建议按以下流程回答,体现工程规范。

  1. 数据准备:用scripts/get_data.py下载或转换自有数据,统一存入~/.qlib/qlib_data。
  2. 配置实验:在YAML中定义数据区间、特征集、模型、策略和回测参数。
  3. 训练与预测:qrun workflow_config.yaml自动完成训练、验证、预测和回测。
  4. 结果分析:查看mlruns或recorder中的IC、Rank IC、年化收益、最大回撤、换手率。
  5. 迭代优化:调整特征、模型超参或策略阈值,重复上述流程。
# 常用命令
qrun workflow_config.yaml
# 查看回测指标
python -c "from qlib.workflow import R; print(R.list_experiments())"

如果面试官追问"回测结果和实盘差距大怎么办",可以从数据对齐、交易成本、涨跌停处理、滑点模型四个角度展开,并说明Qlib中backtest配置如何设置open_cost、close_cost和min_cost。

三、案例/场景:不同公司的侧重点

同样问Qlib基础,不同公司考察重点差异明显。下表整理了典型画像与应对策略。

公司类型 高频追问 回答侧重 加分动作
高频/私募 因子如何入库、回测偏差 Alpha158/360细节、IC衰减 展示因子分层回测图
互联网大厂 组件扩展、分布式训练 Qlib架构解耦、自定义Handler 给出二次开发接口设计
券商金工 报告复现、基准对比 配置驱动、实验可复现 用mlruns管理实验版本
资管/FOF 策略容量、风险控制 Strategy与Executor配合 说明换手率与成本约束
场景示例:面试官问"如果我要把Qlib接入公司自研因子库,你会怎么做?"回答应聚焦DataHandler的load接口和instruments对齐,而不是泛泛谈"改配置"。

四、误区与复盘:常见失分点

很多候选人在Qlib基础题上失分,不是因为不会用,而是因为表达停留在"我跑过demo"。以下是最常见的四类误区。

  • 只背概念,不连链路:能说出Alpha158,却说不清它输出多少维特征、如何与Dataset衔接。
  • 混淆回测与实盘:忽略Qlib回测默认的撮合假设,被追问滑点和涨跌停时卡壳。
  • 过度贬低或神化Qlib:要么说"就是个玩具",要么说"能直接实盘",都显得不专业。
  • 没有版本管理意识:说不清实验如何复现,recorder和mlruns的作用答不上来。
复盘建议:面试前用Qlib跑通一个最小闭环,记录每一步的输入输出形状和关键参数。被问到时,用"数据→特征→模型→策略→回测"五步法回答,每步补一个具体数字或类名,可信度会大幅提升。

最后提醒:Qlib基础概念题的本质是"用工具讲业务理解"。回答时始终把组件和量化研究的关键问题挂钩——数据是否对齐、特征是否泄漏、模型是否过拟合、回测是否真实、策略是否可执行。做到这一点,你就不再是"用过Qlib的人",而是"能用Qlib解决问题的人"。