资讯详情

资讯详情

大模型挖因子:从Transformer到提示工程,生成可回测的选股信号

简介这份PDF是国金证券金融工程团队「Alpha掘金系列之五」的专题报告面向量化研究员、因子挖掘从业者及对AI辅助投研感兴趣的进阶读者系统探讨如何借助ChatGPT这一大语言模型挖掘高频选股因子。全文围绕模型原理、提示工程与因子实战三条主线展开先解析Transformer架构、规模定律与RLHF训练流程再讲解角色—任务—指令提示公式及思维链提示技巧最后以价量变异系数因子和买卖盘力量因子为例给出完整测试结果其中日频买卖盘力量因子多头年化超额收益达17.29%并据此构建中证1000指数增强策略。资源包仅含1个PDF文件大小约2.16MB便于随身查阅与归档。目前已有248人学习适合希望把提示工程落地到因子研究、并了解策略回测与风险提示的读者参考。1. 大模型挖因子为什么“会聊天”的模型能吐出可回测的选股信号一份量化研究报告里最反直觉的结论往往不是某个因子年化多少而是“因子不是人想出来的”。当研究者把委托价、委托量这类高频字段丢给一个通用对话模型经过几轮提示约束后模型给出的买卖盘力量因子在日频上做出了 17.29% 的多头年化超额降到周频仍有 9.77% 到 10.20%。这件事值得搞懂的地方不在于模型多聪明而在于它把“因子挖掘”这个原本依赖研究员经验、文献阅读和反复试错的环节变成了一个可被提示工程约束的生成过程。ChatGPT 背后的 Transformer 自注意力机制、RLHF 对齐和思维链提示恰好构成了这条链路的三个支点。搞清它们怎么咬合才能判断模型给出的因子是玄学还是可复现的工程产物也才知道哪些环节必须人工兜底。2. Transformer 与 RLHF模型凭什么能“理解”金融语义2.1 从 LSTM 的两个硬伤说起要理解 ChatGPT 为什么能在量化场景里给出像样的回答得先看它替代了什么。传统语言模型常用 LSTM处理序列时有两个绕不过去的缺陷一是对文本中不同词无法区分重要程度所有输入被相对均匀地压缩进隐状态二是长距离信息难以有效提取和记忆序列一长就大量丢失。金融文本和高频字段描述恰恰是“关键信息稀疏、依赖跨度大”的典型比如“买盘力量”这个概念需要同时关联委托价偏离程度和委托量大小LSTM 很难把这两类信号的权重拉开。Transformer 的引入直接针对这两点。它通过跟踪序列数据中的关系来学习上下文核心是自注意力机制对输入数据的不同部分赋予不同权重。用机制语言描述给定一个输入序列模型为每个位置计算它与其余所有位置的相关性得分再按得分加权聚合信息。这样“委托量”这个词在和“价格偏离”共现时会被赋予更高权重而无关的填充词被压低。这个机制让模型能处理更大的数据集也为后续参数规模扩张留出了空间。从 GPT-1 的约 1.17 亿参数到 GPT-2 的 15 亿再到 GPT-3 的 1750 亿参数数量的提升带来了所谓的涌现现象Scaling Law规模跨过某个阈值后模型表现出训练目标之外的能力。这是“会聊天”的模型能跨界做因子挖掘的第一层底层原因——它不是被专门训练来做量化的而是规模足够大之后语言中隐含的逻辑结构被压缩进了参数里。2.2 RLHF 三步把“能生成”变成“按人类偏好生成”仅有预训练模型只是一个概率续写器输出未必符合人类预期。RLHF人类反馈的强化学习解决的是对齐问题。报告里给出的训练流程可以拆成三步每一步都有明确的数据流第一步从大量包含人类真实意图的指令集合中采样由标注人员对这些指令进行标注标注完成后对模型做微调。这一步让模型学会“指令—回答”的基本格式。第二步再次从指令集采样作为输入让模型对同一输入生成多个不同结果标注员对这些输出的好坏顺序进行标注。得到排序后训练一个打分模型Reward Model目标是让打分模型的输出贴近人类的偏好排序。这里的关键设计是“排序而非绝对打分”因为人类对两个答案谁更好判断更稳定对单个答案打几分则噪声很大。第三步从指令集合中采样新的指令作为输入根据打分模型进一步优化模型输出结合打分模型训练得到最终模型。用伪代码表达这个偏好学习的目标大致是这样# 简化示意RLHF 第三阶段的偏好优化目标 # reward_model: 第二步训练出的打分模型 # policy: 当前待优化的语言模型 # ref_policy: 微调后的参考模型用于约束偏移 for batch in instruction_sampler: response policy.generate(batch.prompt) # 采样新指令下的输出 reward reward_model.score(batch.prompt, response) # 打分模型给偏好分 kl_penalty kl_divergence(policy, ref_policy) # 防止模型跑偏 loss -reward beta * kl_penalty # 最大化偏好分同时约束偏移 policy.update(loss)这段逻辑里有两个参数值得注意reward来自打分模型而非人工实时标注所以打分模型的质量直接决定对齐效果beta控制策略模型偏离参考模型的程度太小会退化成只会讨好打分模型的“应试”输出太大则学不到偏好。报告没有展开这个系数但常见的实现思路是用它平衡“有用”和“不胡说”。对齐之后模型才具备“常识”——输出内容接近人类的认知和需求。这也是为什么在因子挖掘时模型能理解“原创性”“逻辑支撑”这类约束而不是随机拼接字段。2.3 Zero-shot、One-shot、Few-shot提示的三种学习姿态模型的学习能力还体现在示例泛化上。Zero-shot 指模型在没有经过训练数据的情况下利用已有知识和推理能力完成新任务One-shot 指只有一组训练数据时学习并完成任务Few-shot 指少量训练数据下完成任务。这三者不是模型架构的差异而是提示中给多少示例的差异。对量化研究的意义在于不需要重新训练模型只要在提示里放一两个因子构建示例模型就能模仿出结构相似但字段组合不同的新因子。这为下一章的提示工程提供了操作空间。3. 提示工程角色、任务、指令如何约束因子输出3.1 提示公式的三要素与约束力提示工程的核心是通过设计和提供有效提示指导模型的文本生成。基本公式由三个元素组成角色即模型在生成任务中应扮演的角色任务对需要生成的内容做清晰简洁的叙述指令生成文本时应遵循的规则。一般形式是“作为一个【角色】按照这些指示生成【任务】【指令】”。以客服场景为例提示可以写成“作为一名客服人员请生成客户询问的回复这些回复应当专业、准确、简洁”。这个公式的作用不是玄学而是向模型灌输一种“角色”起到约束行为的作用。角色越具体输出越有针对性。报告里把角色从“量化研究员”细化为“资深的量化研究员”并在指令部分追加“具有原创性、具有较强的逻辑支撑、且因子也应当有出色的业绩表现”模型给出的因子就从泛泛而谈收敛到可构建的形态。这里有一个容易被忽略的机制提示中的约束词会改变模型输出分布的重心。模型在预训练时见过大量“因子”“IC”“回测”相关的文本当提示明确限定数据范围比如只用委托价和委托量时模型会优先激活与这些字段共现过的构建模式而不是自由发挥。这就是为什么“限定数据使用范围”能显著提升因子可用性——它把搜索空间从整个语言分布压缩到了金融字段的子分布。3.2 提示类型分类与情感分析的随机性除标准公式外提示可以按任务类型分类。知识生成提示把新信息与特定主题的现有知识结合生成新知识情感分析提示让模型判断输入文本的情感色彩强化学习提示通过输入和奖励让模型调整行为对抗性提示则让模型生成难以被分类的文本。这些类型在量化场景里各有对应知识生成对应因子构思情感分析对应新闻情绪因子对抗性提示可以用来检验因子是否容易被市场“反向利用”。报告用两段新闻热点测试情感分析发现当输入文本没有特别明确的情感词时模型输出会有一定不确定性但整体仍能保证一定准确率。这个现象要归因于神经网络本身的随机性而不是提示写错了。常见的实现思路是在提示里要求模型给出判断依据把“结论”变成“结论加理由”用理由的合理性来过滤随机波动。这一点在因子挖掘里同样适用要求模型解释因子的经济学逻辑比只要求它给公式更可靠。3.3 思维链提示把 IC 指标的漏洞逼出来思维链提示Chain-of-Thought Prompting的思路是把复杂问题拆成多个步骤引导模型逐步思考并纠偏。报告用一个具体例子展示了它的价值IC 指标秩相关系数作为因子评价方式存在漏洞两个 IC 值分别为 0.22 和 0.25 的因子A 因子 IC 较低但多头表现较好B 因子 IC 较高但多头组表现最差。如果直接问模型“怎么改进 IC 指标”模型很难给出切中要害的回答但用思维链分步引导后模型先认识到问题再给出“每组内分别计算 IC 值再求均值”的方案经进一步提示后收敛到“计算加权平均 IC给做多组更高权重”。这个过程的机制意义在于思维链把模型的单步映射变成了多步推理每一步的输出成为下一步的上下文自注意力机制在每一步重新分配权重。模型并不是真的“想”了而是中间步骤的文本为后续生成提供了更精确的条件分布。报告也指出模型对 A 股做空限制认识不足需要进一步提示才给出“做多组权重更高”的答案。这说明思维链能提升推理质量但不能替代领域知识注入提示者必须自己知道正确答案的方向。4. 因子构建实战从变异系数到买卖盘力量的实现细节4.1 周频变异系数因子IC 好看但多头不赚钱中低频测试里模型给出的因子在收盘价和成交量两个维度分别计算变异系数再相乘得到综合因子用来衡量波动性和流动性。研究者进一步变形把两者相除得到 LI2VLI。构建方式用日频量价数据取过去 5 天的价格和成交量变异系数# 变异系数因子构建示意 # price, vol: 过去 5 日的收盘价与成交量序列 import numpy as np li np.std(price) / np.mean(price) # 价格变异系数 vli np.std(vol) / np.mean(vol) # 成交量变异系数 li_x_vli li * vli # 相乘综合因子 li_2_vli li / vli # 相除变形因子参数上np.std默认总体标准差np.mean为均值5 日滚动窗口对应周度调仓的观察期。测试区间为 2016 年至 2022 年 8 月股票范围是中证 1000 成份股周初开盘价买入、周末收盘价卖出。结果四个因子 IC 的 T 值均大于 2IC 均值从 2.79% 到 5.36% 不等方向为负说明价格和成交量波动率越低越好符合低波动异象。但多空组合指标暴露了问题LI 因子年化收益 8.35%、夏普 0.51多头组合年化超额收益却是 -1.09%VLI 因子多头超额 2.75%也不足以支撑策略。IC 显著而多头不赚钱本质是因子单调性不够空头端的贡献被多头端的疲弱抵消。这个结果对提示工程的反馈是模型能给出统计上显著的因子但“显著”和“可交易”之间隔着组合构建这一层提示里如果不约束多头表现模型不会主动考虑交易方向的不对称。4.2 买卖盘力量因子委托价与委托量的加权逻辑高频测试限定数据范围为委托价和委托量模型经过引导给出买卖盘力量因子。构建时对每只股票每天的 3 秒快照数据分别求出前十档的买入委托价、买入委托量、卖出委托价、卖出委托量每个交易日求均值。核心公式为# 买卖盘力量因子示意基于前十档快照均值 # b_vol, s_vol: 买盘/卖盘委托量均值 # b_price, s_price: 买盘/卖盘委托价均值 # mid_price: 参考中间价用于标准化价格偏离 b_force b_vol * (1 - b_price / mid_price) # 买盘力量 s_force s_vol * (s_price / mid_price - 1) # 卖盘力量 bs_force (b_force - s_force) / (b_force s_force) # 差异因子标准化到横截面可比三个公式的设计动机不同。买盘力量用1 - 买价/中间价买价越接近中间价买盘越强卖盘力量用卖价/中间价 - 1卖价越远离中间价卖压越弱。差异因子做(B-S)/(BS)的标准化是为了让不同股票之间可比——原始力量值受委托量绝对规模影响直接相减会让大盘股天然占优。报告特别说明这一步标准化是研究者基于逻辑合理性做的修正模型原始输出未必包含。日频测试区间为 2016 年 1 月至 2022 年 8 月中证 1000 成份股次日开盘价买入。结果 BSForce 的 IC 均值 1.13%、T 值 7.00多空年化 37.00%、夏普 4.51、最大回撤 4.88%多头年化超额 17.29%。SForce 的 IC 均值 -1.02%、T 值 -2.87多头超额 6.57%。BForce 的 IC 不显著但多头超额有 11.17%。这组数字说明两件事差异因子综合了两个方向的信息表现最稳单方向因子的 IC 显著性和多头收益并不一致选因子不能只看 IC。4.3 降频与指数增强衰减速度决定调仓频率日频调仓成本过高报告把因子降到周频测试。由于 BSForce 衰减过快第二天基本失效降频只保留买盘和卖盘力量因子。周频下多头年化超额分别为 9.77% 和 10.20%多空单调性一般但多头组合尚可。最终用表现较好的卖盘力量因子构建中证 1000 指数增强策略在单边千分之二手续费率下年化超额 7.17%信息比率 0.57。这条链路里最值得记住的参数是“衰减速度”。高频因子往往在日内或次日最强降频不是简单地把信号拉长而是重新检验信号在更长持有期内的排序能力。报告选择卖盘力量而非差异因子做策略正是因为差异因子衰减太快周频下已经失去区分度。常见的实现思路是在降频时同时测试多个持有期用 IC 衰减曲线选拐点而不是拍脑袋定周频。4.4 代码能力测试框架能给细节要自己兜报告还测试了模型的代码输出结论是针对常用的量化研究框架、函数能较准确给出结果但使用时需要注意代码细节确保符合实际需求微调后可以大幅提升研究效率。这一点在因子实现里尤其明显模型可能给出正确的滚动窗口逻辑但字段名、复权方式、停牌处理这些细节需要人工核对。把模型当“框架生成器”而不是“最终代码作者”是更稳妥的用法。5. 避坑与排查模型挖因子时最容易翻车的几处5.1 现象IC 显著但多头亏钱原因模型优化的是因子与收益的秩相关不区分多空两端贡献遇到单调性差的因子时 IC 被空头端拉高。解决在提示里明确要求“多头组表现”并在回测时单独看多头超额IC 只作为初筛。5.2 现象同一提示两次输出因子不同原因神经网络生成具有随机性温度参数和采样策略都会影响结果。解决对同一提示多次采样保留结构稳定、逻辑可解释的版本要求模型给出构建理由用理由一致性过滤随机波动。5.3 现象高频因子回测很好实盘成本吃光收益原因日频调仓换手极高单边千分之二的手续费在频繁交易下累积惊人。解决先看因子衰减曲线再定调仓频率降频后重新检验 IC 和多头超额不要直接沿用日频参数。5.4 现象模型给出的公式字段对不上原因模型基于通用语料生成不熟悉具体数据源的字段命名和复权规则。解决在提示里附上字段清单和数据样例生成后逐字段核对复权、停牌、涨跌停处理必须人工补。5.5 现象思维链引导后模型“顺着说”原因模型会迎合提示中的暗示给出看似合理但经不起推敲的方案。解决分步验证每一步的中间结论对关键假设如做空限制、交易成本主动追问不让模型在错误前提上继续推理。6. 设计取舍把模型当研究助手而不是策略作者走到这里最该想清楚的是一个取舍模型在因子挖掘里到底该承担多少责任。报告给出的证据是双向的——它能给出买卖盘力量这种有原创性、逻辑自洽的因子也能给出 IC 显著但多头不赚钱的变异系数因子它能生成可用的测试框架代码但字段细节需要人工兜底。这个边界不是模型能力不足的临时状态而是生成式模型的工作方式决定的它优化的是文本的合理性不是策略的盈利性。我一般会这么理解这套流程的分工提示工程负责把研究员的领域知识压缩成约束条件模型负责在约束下做组合搜索回测负责做最终裁判。三者缺一不可但权重不同。约束条件写得好模型的搜索空间就窄产出可用率高约束写得松模型会给出一堆“看起来像因子”的东西筛选成本反而更高。报告里从“量化研究员”到“资深量化研究员”再到限定数据范围就是逐步收紧约束的过程。验证方法上有几个可操作的检查点。第一看因子是否有经济学解释模型给出的构建理由能不能用市场微观结构或行为金融的逻辑讲通第二看参数敏感性滚动窗口从 5 日改到 10 日IC 是否剧烈波动第三看衰减曲线信号在持有期内是否平滑衰减而不是断崖式失效第四看多头和空头贡献是否对称不对称时策略只能做单边。这四点不需要复杂工具但能过滤掉大部分“回测好看、实盘翻车”的因子。还有一个容易被低估的取舍是随机性管理。模型的随机性在情感分析里表现为输出波动在因子挖掘里表现为同一提示产出不同公式。完全消除随机性不现实可行的做法是把随机性当成采样工具多采几次取交集或取逻辑最自洽的版本。这比追求“一次问对”更符合模型的工作特性。从那以后我每次用模型做因子构思都强制走一遍“提示约束—多次采样—逻辑复核—衰减检验”的流程不跳过任何一步。模型可以帮你把搜索空间打开但关上门做决定的还得是回测和交易常识。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →