文本与另类数据:情绪因子的构建思路
本课目标:了解 A 股语境下主要的文本与另类数据类型,掌握”文本到股票日频因子”的完整流水线,学会检验情绪因子并识别另类数据特有的陷阱。
另类数据版图:量价财报之外还有什么
传统因子的原料是行情和财报,全市场都在用,拥挤是必然的。另类数据的吸引力在于提供尚未被充分定价的信息维度。A 股语境下常见的文本与另类数据类型:
| 数据类型 | 内容 | 特点 |
|---|---|---|
| 财经新闻 | 公司与行业报道、突发事件 | 覆盖面广、时效强,噪声也大 |
| 卖方研报 | 评级、盈利预测、正文观点 | 专业度高,但有系统性乐观倾向 |
| 上市公司公告 | 定期报告、业绩预告、重大事项 | 法定披露、信息权威,语言高度模板化 |
| 投资者互动平台 | 投资者提问与公司回复 | 反映散户关注度,信息密度低 |
| 社交媒体与股吧 | 散户讨论、情绪宣泄 | 情绪信号强,操纵与水军风险高 |
| 非文本另类数据 | 卫星图像、招聘、APP 活跃度、供应链 | 与基本面挂钩,获取与合规门槛高 |
本课聚焦文本类,因为它可得性最好,且方法论可以迁移到其他另类数据上。
从文本到因子:一条完整的流水线
文本本身不能进回测框架,必须变成”股票 × 日期”的数值矩阵。标准流水线分四步:
**第一步,清洗与实体对齐。**去重(同一新闻多渠道转载)、去噪(广告、自动生成稿),然后把每条文本映射到具体股票。实体识别是脏活也是护城河:公司简称、曾用名、集团与子公司混淆,都会把信号安在错误的股票上。
**第二步,情绪打分。**由浅入深有三档:金融情绪词典法(统计正负面词频,简单透明);在标注数据上训练的分类模型;直接用预训练语言模型或大模型做情绪与事件抽取。工程上常见的组合是词典法做基线、模型法做增强——基线的作用是让你随时能检查复杂模型有没有跑偏。
**第三步,聚合到股票日频。**一只股票一天可能对应零条或几百条文本,需要聚合:
def build_sentiment_factor(scores: pd.DataFrame, halflife: int = 5): """scores: 列为 [date, stock, score] 的单条文本打分表""" daily = (scores.groupby(['date', 'stock'])['score'] .agg(sent_mean='mean', n_docs='count') .reset_index()) panel = daily.pivot(index='date', columns='stock', values='sent_mean') # 无新闻的日子不代表情绪为零, 用时间衰减延续近期情绪 factor = panel.ewm(halflife=halflife).mean() return factor, daily细节决定成败:无新闻日应视为”信息缺失”而非”情绪中性”;新闻数量本身(关注度)往往和情绪得分同样有信息量,值得单独做成因子。
**第四步,时间戳对齐。**每条文本必须用真实可获取时间打戳。收盘后发布的公告只能用于下一交易日的决策,用发布日收盘价”回测”盘后新闻是最典型的前视偏差。
情绪因子的检验:老规矩,但有新问题
情绪因子的检验框架与价量因子相同——IC 序列、分组收益、多空组合、换手率——但要额外回答几个问题:
- 增量性:情绪因子往往与短期反转、动量、流动性高度相关。必须对传统因子做中性化后再看剩余 IC,否则你可能只是用昂贵的方式复制了动量。
- 衰减速度:文本信号通常寿命短,IC 随预测期拉长快速衰减。要评估在你的调仓频率和交易成本下,衰减后的信号是否还剩得下东西。
- 事件驱动 vs 日常情绪:业绩预告、监管处罚等重大事件的文本信号强但稀疏,日常报道信号弱但连续。两者最好分开建模、分开检验,混在一起会互相稀释。
- 覆盖偏斜:新闻天然偏向大市值、高热度股票。因子在有新闻覆盖的子集内有效,不等于全市场有效,分组回测要在覆盖样本内做,并明确因子的适用域。
另类数据的坑:数据本身比模型更容易骗你
另类数据研究里,大部分失败不是模型问题,而是数据问题:
- 覆盖度不足且不随机:只覆盖部分股票、部分时段,且缺失与市值、热度相关。在这种样本上做的统计推断带系统性偏差。
- 幸存者偏差与回填:数据商整理历史库时,可能只保留了”活到今天”的主体,或用今天的口径回填历史。拿到任何另类数据,第一件事是问清历史是”当时存档”还是”事后重建”。
- 时点性存疑:研报的入库时间晚于发布时间、数据商修订历史记录不留痕,都会让回测悄悄用到未来信息。理想的数据是 point-in-time 存档。
- 时效性与拥挤:另类数据的阿尔法来自信息差,一旦数据商把同一份数据卖给足够多的机构,信号会加速衰减。评估数据时要问:还有多少人在用同样的东西?
- 合规边界:数据来源是否合法合规、是否涉及个人信息或内幕信息、爬取行为是否越界,必须在研究开始前确认,而不是产生收益后再补课。
一个务实的态度:对另类数据的默认假设是”有坑”。拿到新数据后,先花时间做数据体检——覆盖了多少股票、历史有多长、缺失分布在哪里、时间戳是否可信——再用小规模、可解释的实验验证它与已知变量(成交量、波动率、公告日)的关系是否符合常识,最后才谈因子构建。跳过体检直接跑回测,往往是把数据缺陷当成了阿尔法。本文不构成投资建议。
本课小结
- 另类数据的价值在于提供未被充分定价的信息维度,文本类(新闻、研报、公告)可得性最好。
- 文本转因子的流水线:清洗与实体对齐、情绪打分、聚合到股票日频、严格的时间戳对齐。
- 检验时必须验证对传统因子的增量性、信号衰减速度和覆盖偏斜下的适用域。
- 数据坑比模型坑更致命:覆盖度、幸存偏差、时点性、拥挤度、合规五关都要过。
- 词典法基线加模型法增强是务实的打分方案,可检查性本身就是价值。
动手练习:收集一批上市公司业绩预告文本(或用公开新闻标题替代),先用一个自建的正负面词表做词典法打分,聚合成股票日频情绪因子;对市值、行业、过去 20 日收益做中性化后计算未来 5 日与 20 日的 RankIC,回答两个问题:信号衰减有多快?剔除无文本覆盖的股票后,你的可交易股票池还剩多大?