量化选股基础:因子投资、多因子模型、股票收益预测问题定义、常用数据源与预处理流程
量化选股的本质是将投资逻辑转化为可计算、可回测、可验证的数学模型。在进入树模型的具体应用之前,我们必须先建立一套完整的量化选股基础框架。本章将围绕因子投资的核心思想、多因子模型的构建逻辑、股票收益预测的问题定义方式,以及数据源与预处理流程展开,为后续使用树模型进行选股打下坚实基础。理解这些基础概念,将直接决定树模型在选股任务中的特征工程设计与目标函数设定是否合理。
因子投资的核心原理
因子投资(Factor Investing)是量化选股的基石。其核心思想是:股票的预期收益并非完全随机,而是可以由一系列可观测的、具有经济学逻辑的"因子"(Factor)所解释。这些因子捕捉了股票在特定维度上的系统性风险溢价或行为偏差。例如,价值因子认为低估值股票长期跑赢高估值股票,动量因子则认为过去表现好的股票在短期内继续表现好的概率较大。
在A股市场中,常用的因子类别包括:
- 价值因子:EP(盈利收益率)、BP(账面市值比)、SP(销售收入市值比)、CFP(现金流市值比)。
- 动量/反转因子:过去12个月收益率(剔除最近1个月)、过去1个月反转、60日动量等。
- 质量因子:ROE(净资产收益率)、ROA、毛利率、资产负债率、盈利稳定性。
- 波动率因子:历史波动率、特质波动率、Beta系数、下行波动率。
- 流动性因子:换手率、Amihud非流动性指标、成交额。
- 成长因子:营收增长率、净利润增长率、分析师预期调整。
因子投资的核心逻辑在于:不同因子代表了不同的风险溢价来源或投资者行为偏差。通过系统性地暴露于某些因子,投资者可以获得超越市场的风险调整后收益。然而,因子并非永远有效,它们会经历"拥挤-回撤-修复"的周期,因此需要动态监控因子的有效性指标。
多因子模型:从单因子到组合预测
单因子往往具有较大的波动性和不稳定性,因此实践中通常采用多因子模型。多因子模型的基本假设是:股票的未来收益是多个因子暴露的线性或非线性组合。经典的线性多因子模型可以表示为:
R_i = α + Σ(β_ik × F_k) + ε_i
其中,R_i为股票i的未来收益,β_ik为股票i在因子k上的暴露(即因子值),F_k为因子k的因子收益率,ε_i为特质收益。在实际操作中,我们通常先计算每只股票在各个因子上的暴露值,然后通过某种方式合成一个综合因子得分,最后根据得分进行选股。
因子合成的方法主要有以下几种:
| 合成方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 等权合成 | 所有因子标准化后直接平均 | 简单、稳健、不易过拟合 | 未考虑因子质量差异 |
| IC加权 | 以因子历史IC均值作为权重 | 动态调整、突出有效因子 | IC不稳定时权重波动大 |
| ICIR加权 | 以IC均值/IC标准差作为权重 | 兼顾有效性与稳定性 | 对异常值敏感 |
| 机器学习合成 | 使用树模型/神经网络学习因子与收益的非线性关系 | 捕捉非线性交互、高维度 | 过拟合风险高、可解释性弱 |
多因子模型的优势在于分散风险:即使某个因子暂时失效,其他因子仍能提供预测能力。同时,多因子模型也允许我们控制组合在特定因子上的暴露,从而实现风险约束。例如,我们可以要求组合在行业和市值上的暴露与基准指数保持一致,避免选股结果过度偏向某一风格。
股票收益预测的问题定义
在量化选股中,我们需要将"预测股票收益"这一模糊目标转化为一个精确的数学问题。问题定义的方式直接影响模型的设计与评估。通常有以下几种定义方式:
- 回归问题:直接预测股票未来N日的收益率(如未来5日、20日收益率)。模型输出为连续值,损失函数常用MSE或MAE。
- 排序问题:预测股票在未来N日收益率的相对排名。模型输出为分数,评估指标为Rank IC。
- 分类问题:将股票分为"上涨"与"下跌"两类(或"跑赢指数"与"跑输指数"两类),使用交叉熵损失。
- 分位数回归:预测收益率的特定分位数,用于风险控制。
对于树模型而言,回归问题和排序问题是最常见的设定。需要注意的是,金融数据具有极强的噪声,直接预测精确收益率往往困难,因此实践中更常用排序问题或分类问题。例如,我们可以将目标定义为:
y_i = 1, 如果股票i未来20日收益率 > 中证500指数同期收益率
y_i = 0, 否则
这种二分类定义方式在树模型中非常常见,它降低了回归任务中极端值对模型的影响,同时更贴近实际选股需求——我们只需要知道哪些股票更可能跑赢基准。
常用数据源与预处理流程
量化选股的数据源主要分为三类:行情数据、财务数据、另类数据。数据质量直接决定模型的上限,因此预处理环节至关重要。
| 数据类别 | 常见字段 | 频率 | 主要供应商 |
|---|---|---|---|
| 行情数据 | 开高低收、成交量、成交额、换手率 | 日频/分钟/ tick | Wind、聚宽、米筐、Tushare |
| 财务数据 | 资产负债表、利润表、现金流量表、财务比率 | 季频(需处理披露延迟) | Wind、Choice、巨潮资讯 |
| 一致预期 | 分析师评级、目标价、盈利预测 | 日频/周频 | 朝阳永续、Wind |
| 另类数据 | 新闻舆情、龙虎榜、资金流、股东户数 | 日频/事件驱动 | 通联数据、各数据商 |
预处理流程是量化建模中最耗时但最关键的环节。标准流程包括:
- 缺失值处理:财务数据天然存在披露延迟,需使用"最近可得值"填充,禁止使用未来数据填充。对于缺失率超过50%的因子,建议直接剔除。
- 去极值(Winsorize):将因子值超出[1%, 99%]分位数的样本压缩至边界值,避免极端值对模型产生过大影响。
- 标准化:常用z-score(减去均值除以标准差)或rank标准化(将因子值转换为百分位排名)。对于树模型,标准化并非必须,但有助于特征重要性解释。
- 中性化处理:对因子值进行行业和市值中性化,消除风格暴露。常用方法为对行业哑变量和市值取对数做线性回归,取残差作为中性化后的因子值。
- 行业与市值对齐:确保每只股票都有正确的行业分类和市值数据,用于后续的样本分层与组合构建。
案例拆解:从原始数据到可建模样本
假设我们正在构建一个基于树模型的A股选股策略,目标为预测未来20日个股相对中证500的超额收益方向。以下是完整的处理流程:
背景与约束:我们使用2015年至2023年的全A股数据,剔除ST、上市不满60个交易日的股票。数据源为Wind,日频行情与季频财务数据。计算资源为单机16核CPU,内存64GB。
初始目标:构建一个包含约50个特征的数据集,样本量为"股票-日期"对,约500万行。目标变量为二分类标签。
操作步骤:
- 数据导入与对齐:将日频行情数据与季频财务数据按股票代码和日期对齐。财务数据使用"最近可得值",即T日使用的财务数据为T日之前最近一次已披露的财报数据。
- 因子计算:计算价值(EP、BP)、动量(20日、60日、120日收益率)、质量(ROE、毛利率)、波动(20日年化波动率)、流动性(20日平均换手率)等共50个因子。
- 预处理:对每个因子在截面(同一交易日)上进行去极值(1%/99%分位数)、z-score标准化。然后对行业哑变量和市值对数做回归取残差,实现行业市值中性化。
- 标签生成:对每个股票-日期样本,计算未来20日收益率,并与同期中证500指数收益率比较,若跑赢则标签为1,否则为0。
- 样本划分:按时间顺序划分训练集(2015-2021)、验证集(2022)、测试集(2023)。注意防止时间穿越,训练集与验证集之间需留出1个月的空窗期。
- 模型训练:使用LightGBM,设置参数为:树深度6,学习率0.05,叶子节点最小样本数100,特征采样比例0.8,早停轮数50。
结果对比:在验证集上,模型的Rank IC均值为0.045,ICIR为0.52,多头组合(预测得分前10%)年化超额收益为12.3%,信息比率1.8。相比等权因子合成模型(Rank IC 0.028,IR 1.1),树模型在预测能力上有显著提升。
风险与代价:树模型在训练过程中出现过拟合迹象(训练集AUC 0.82 vs 验证集AUC 0.68),通过增加叶子节点最小样本数、降低学习率、增加早停轮数后得到缓解。此外,树模型对特征工程较为敏感,需要定期重新训练以适应市场风格切换。
常见误区与总结复盘
在量化选股基础环节,初学者常犯以下错误:
- 前视偏差:使用未来数据计算因子或标签,导致回测结果严重虚高。这是量化研究中最严重的错误。
- 忽视财务数据披露延迟:直接使用最新财报数据,而未考虑实际披露日期,导致因子值在回测中"提前得知"。
- 过度标准化:对树模型进行z-score标准化并非必要,但若使用PCA或聚类等距离敏感算法,则必须标准化。
- 样本划分不当:随机划分训练集/测试集在金融数据中不可行,必须按时间顺序划分,否则会造成数据泄漏。
- 忽略行业与市值暴露:未做中性化处理的模型,选股结果可能过度集中于某一行业或市值风格,导致回测表现好但实盘失效。