机器学习做股票研究的第一目标,不应是训练最复杂的模型,而是证明数据、切分和回测没有偷看未来。一个线性基线配合可信数据,通常比泄漏的深度模型更有价值。
一、把问题定义成可验证任务
常见任务有三类:预测未来波动率、预测风险事件概率、对同一时点的股票做相对排序。直接预测精确价格容易受尺度和市场状态影响。实践中可先做横截面排序,例如预测未来 20 个交易日相对行业基准的收益分位。
标签必须写明形成期、持有期和可交易时点。若使用收盘后才完整的数据生成信号,最早只能在下一可交易时点执行。文本特征还应继承新闻事件流水线中的首次可得时间,而不能使用文章最终修订时间。
二、建立点时数据集
publishedAt 与 periodEnd 不是一回事。季度数据描述过去的报告期,但只有披露后市场才知道。特征表需保存 effectiveAt,按研究时点进行 as-of join。
还要处理:退市股票、历史指数成分、更名与代码变化、复权方式、停牌、涨跌停、公司行动和更正数据。只用今天仍上市的股票回看历史会产生幸存者偏差。
三、从简单基线开始
先使用行业中性后的单因子、线性/逻辑回归或树模型。输入可包括估值、盈利质量、动量、波动率、流动性和前文构建的事件特征。所有标准化、缺失填充和特征选择只能在训练窗口拟合。
训练窗口 1 ──> 验证窗口 1 ──> 测试窗口 1
训练窗口 2 ──> 验证窗口 2 ──> 测试窗口 2
滚动或扩展窗口比随机打乱更符合时间顺序。相邻样本的持有期重叠时,还要避免训练标签与验证区间共享未来信息。
四、把预测变成组合前先做诊断
分类准确率不够。排序任务可观察 Rank IC、分组单调性、行业与规模暴露、换手率、不同市场状态下的稳定性。预测波动率则应关注校准和尾部误差。
每次实验记录数据快照、特征版本、代码提交、随机种子、超参数搜索空间和被尝试过的模型数量。大量尝试后只展示最好结果,会放大回测过拟合。相关研究发现,样本内表现良好的策略在样本外可能缺乏稳健性,因此应保留未参与选择的最终测试期。
五、构建现实成本模型
净收益至少扣除佣金、税费、买卖价差和滑点。高级一些还要模拟成交量参与率、冲击成本、停牌、价格限制和无法按理论价格成交的情况。
可实现净收益 = 毛收益 - 显性费用 - 买卖价差 - 滑点 - 市场冲击
成本随交易规模、流动性和市场状态变化,不应只填一个永久常数。换手越高,模型对成本假设越敏感。
六、与真正可用的基准比较
至少比较等权、市场或行业基准、简单动量/价值信号和上一版本模型。报告年化收益之外,还应包括波动率、最大回撤、换手、持仓集中度、容量假设、最差时期和样本外区间。
如果复杂模型没有稳定超过简单基线,结论应是“未证明有增量价值”。这是有效研究结果,不需要用更多参数把回测修到好看。
七、从回测进入仿真
通过样本外测试后,先冻结模型进入纸面交易或影子模式。系统实时生成信号和目标仓位,但不发真实订单;对比理论价、可成交价、实际延迟和数据缺失。至少跨越不同波动环境后,再讨论有限额度试运行。
建立实验停止规则
在开始前写明最多尝试多少组特征、模型和参数,以及最终测试集何时只允许打开一次。如果最终结果失败,不要继续围绕同一测试期调参;应记录失败原因,等待新的独立数据。每次实验还要保存删除特征、提高成本和缩短样本后的敏感性结果,判断收益是否依赖某个脆弱假设。
团队评审时应展示全部实验分布,而不只展示冠军模型。若十次尝试中只有一次略好于基线,优先把它视为需要更多证据的候选。若不同起止日期、股票池或成本假设下方向反复变化,也不适合进入仿真。
下一步可阅读组合优化与风险控制,把模型分数转成受约束的目标权重,而不是按分数直接满仓排序。也可回到AI 股票应用路线图,检查数据、研究和治理层是否完整。