2. 金融文本数据基础
在构建金融新闻NLP情绪因子之前,必须先回答一个比模型更底层的问题:你手里的文本数据,究竟长什么样?很多情绪因子在回测中表现优异、上线后迅速失效,根源往往不在模型,而在数据层——来源混杂、时间戳错位、正文缺失、标题与正文语义冲突。本节把金融文本数据拆成五个可检查的维度:来源、格式、时间戳、结构、质量问题,并给出可落地的处理原则。
一、核心原理:情绪因子的“数据血缘”决定因子上限
金融文本不是普通语料。它的价值密度高、时效性强、噪声类型特殊。一条新闻的情绪得分,实际是“来源可信度 × 文本完整性 × 时间对齐精度 × 结构解析正确性”的乘积。任何一项接近零,因子就失效。因此我们需要建立数据血缘(Data Lineage)意识:从原始抓取到因子入库,每一步都要可追溯、可复现。
二、新闻来源:不同来源的情绪“方言”差异
金融新闻来源大致分为四类,它们的语言风格、发布节奏和情绪倾向差异显著,直接混用会导致因子漂移。
| 来源类型 | 典型代表 | 语言特征 | 时效性 | 情绪处理要点 |
|---|---|---|---|---|
| 官方公告 | 交易所、证监会、公司公告 | 格式化、法律化、低频情绪词 | 准点、可预期 | 需规则+模型结合,避免误判中性为负面 |
| 财经媒体 | 财新、证券时报、路透 | 专业、结构化、带记者倾向 | 分钟级 | 区分事实陈述与评论 |
| 社交舆情 | 股吧、微博、雪球 | 口语化、情绪极端、噪声大 | 秒级 | 需去重、去水军、降权 |
| 研报纪要 | 券商研报、电话会议 | 长文本、逻辑密集 | 日级/周级 | 需分段抽取,避免整篇平均 |
实践中建议为每个来源维护独立的来源权重表和情绪校准集,而不是用一套模型打天下。
三、数据格式与时间戳:最容易被忽视的“隐形杀手”
新闻数据常见格式包括 JSON、XML、CSV 和 HTML 快照。JSON 最主流,但字段命名极不统一:有的叫 publish_time,有的叫 pubDate,有的叫 ctime。时间戳更是重灾区,常见问题包括:
- 时区不统一:UTC、北京时间、交易所本地时间混用,导致因子与行情错位数小时。
- 精度不一致:秒级、毫秒级、甚至只有日期,无法做日内因子。
- 时间语义混淆:“发布时间”与“事件发生时间”不同,公告常在收盘后发布。
- 字符串格式多样:
2024-01-05 09:30:00、2024/01/05、1704418200并存。
# 统一时间戳处理示例
import pandas as pd
def normalize_timestamp(ts, tz='Asia/Shanghai'):
# 兼容多种输入格式
dt = pd.to_datetime(ts, utc=True, errors='coerce')
if dt.tz is None:
dt = dt.tz_localize('UTC')
return dt.tz_convert(tz)
# 对齐到行情分钟线
news['ts_norm'] = news['publish_time'].apply(normalize_timestamp)
news = news.set_index('ts_norm').sort_index()
aligned = news['sentiment'].resample('1min').mean().reindex(price.index, method='ffill')
四、标题与正文结构:情绪信号的分层提取
一条新闻的标题和正文承担不同功能。标题是高浓度情绪载体,正文是事实与语境补充。二者情绪可能一致,也可能冲突。例如标题写“某公司业绩大幅预增”,正文却提示“但低于市场预期”,此时标题情绪偏正,正文情绪偏负。
建议采用分层结构解析:
- 标题层:短文本,适合快速情绪打分,权重高、衰减快。
- 导语层:首段通常包含核心事实,适合抽取事件类型。
- 正文层:长文本,适合实体识别、关系抽取和细粒度情绪。
- 元数据层:来源、作者、板块、标签,用于加权和过滤。
五、常见数据问题与复盘清单
以下是金融文本数据中最常见的六类问题,建议在因子构建前逐项排查:
- 重复新闻:同一内容被多家媒体转载,导致情绪被重复计数。需做标题指纹去重。
- 正文缺失:只有标题没有正文,或正文为“点击查看全文”。需标记并降权。
- 编码乱码:GBK/UTF-8 混用导致中文乱码,影响分词和情绪识别。
- HTML残留:正文中混入标签、广告、脚本,需清洗后再入模型。
- 时间穿越:抓取时间晚于发布时间,但被误用为发布时间,造成未来函数。
- 来源漂移:某来源改版后字段变化,导致解析静默失败,数据量骤降。
总结来看,金融文本数据基础不是“脏活”,而是情绪因子的第一道风控。来源决定信号纯度,格式决定解析成本,时间戳决定因子有效性,结构决定提取粒度,质量问题决定因子稳定性。把这五件事做扎实,后续的模型和回测才有意义。