2. Qlib基础概念与核心组件
Qlib是微软开源的AI量化投资平台,面试官问基础概念,并不是想听你背文档,而是想确认三件事:你是否真正跑过完整流程、是否理解各组件之间的数据契约、能否把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]
二、方法流程:从qrun到回测的完整链路
Qlib提供两种使用方式:命令行qrun和Python API。面试中常问"你平时怎么跑实验",建议按以下流程回答,体现工程规范。
- 数据准备:用
scripts/get_data.py下载或转换自有数据,统一存入~/.qlib/qlib_data。 - 配置实验:在YAML中定义数据区间、特征集、模型、策略和回测参数。
- 训练与预测:
qrun workflow_config.yaml自动完成训练、验证、预测和回测。 - 结果分析:查看
mlruns或recorder中的IC、Rank IC、年化收益、最大回撤、换手率。 - 迭代优化:调整特征、模型超参或策略阈值,重复上述流程。
# 常用命令
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配合 | 说明换手率与成本约束 |
load接口和instruments对齐,而不是泛泛谈"改配置"。四、误区与复盘:常见失分点
很多候选人在Qlib基础题上失分,不是因为不会用,而是因为表达停留在"我跑过demo"。以下是最常见的四类误区。
- 只背概念,不连链路:能说出Alpha158,却说不清它输出多少维特征、如何与Dataset衔接。
- 混淆回测与实盘:忽略Qlib回测默认的撮合假设,被追问滑点和涨跌停时卡壳。
- 过度贬低或神化Qlib:要么说"就是个玩具",要么说"能直接实盘",都显得不专业。
- 没有版本管理意识:说不清实验如何复现,recorder和mlruns的作用答不上来。
最后提醒:Qlib基础概念题的本质是"用工具讲业务理解"。回答时始终把组件和量化研究的关键问题挂钩——数据是否对齐、特征是否泄漏、模型是否过拟合、回测是否真实、策略是否可执行。做到这一点,你就不再是"用过Qlib的人",而是"能用Qlib解决问题的人"。