4. 数据采集与预处理:金融数据源(财报、新闻、交易记录)的采集、清洗、去重与标准化
金融知识图谱的构建质量,从根本上取决于底层数据的质量。金融数据源具有多源异构、高噪声、强时效性等特点,若未经过严格的采集与预处理,后续的样本偏差校验将失去意义。本章系统讲解从财报、新闻、交易记录三大核心数据源的采集策略,到清洗、去重、标准化的完整流水线。
4.1 三大金融数据源的特征与采集策略
不同数据源在结构、频率、可靠性上差异显著,需采用差异化的采集方案。下表对比了三类数据源的核心特征:
| 数据源类型 | 典型格式 | 更新频率 | 结构化程度 | 主要采集方式 |
|---|---|---|---|---|
| 财报数据 | PDF、XBRL、CSV | 季度/年度 | 高(表格为主) | API接口、EDGAR爬取、数据库直连 |
| 新闻数据 | HTML、JSON、RSS | 分钟级/实时 | 低(非结构化文本) | 新闻API、RSS订阅、网页爬虫 |
| 交易记录 | CSV、Parquet、二进制 | 毫秒级/日终 | 高(固定字段) | 交易所数据源、券商接口、量化平台 |
采集策略要点: 财报数据优先使用官方XBRL解析库(如Python的
arelle),避免PDF解析带来的表格错位;新闻数据需配置反爬机制与速率限制;交易记录应建立增量采集管道,避免全量重复拉取。
4.2 数据清洗:金融噪声的识别与处理
金融数据中的噪声类型多样,清洗需针对不同场景设计规则。以下是三类数据源常见的脏数据模式及清洗方法:
- 财报数据:
- 缺失值:关键财务指标(如营收、净利润)缺失时,优先从历史报告或行业均值插补,标记插补来源。
- 单位不一致:部分报告以“亿元”为单位,部分以“万元”为单位,需统一转换为标准单位(如元)。
- 会计政策变更:同一公司不同年份的折旧方法、收入确认规则可能变化,需记录变更时间点。
- 新闻数据:
- HTML标签残留:使用BeautifulSoup或lxml提取纯文本,去除脚本、样式、广告区块。
- 重复新闻:同一事件被多家媒体转载,需通过标题相似度(SimHash)与发布时间窗口去重。
- 情感噪声:包含大量无关评论或营销内容,需基于关键词黑名单过滤。
- 交易记录:
- 异常价格:涨跌幅超过阈值(如A股±10%限制外的价格)需标记为异常,结合前后笔数据修正或剔除。
- 停牌/复牌标记:停牌期间无交易数据,需在时间序列中保留占位符,避免时间断裂。
- 复权处理:前复权与后复权选择需统一,通常使用后复权用于长期趋势分析。
清洗避坑: 不要对缺失值直接填充0,尤其在财务比率计算中(如资产负债率),填充0会严重扭曲指标。建议使用行业中位数或前向填充(ffill)策略,并在元数据中记录填充标记。
4.3 去重策略:实体对齐与记录消歧
金融数据去重不仅是删除重复行,更核心的是解决实体对齐问题——同一公司在不同数据源中可能以不同名称出现(如“阿里巴巴”、“Alibaba”、“BABA”)。去重流程分为两个层次:
- 记录级去重: 基于主键(如股票代码+报告期)直接删除完全重复的记录。
- 实体级去重: 使用相似度算法(编辑距离、Jaccard系数)匹配公司名称、高管姓名等实体,合并同一实体的不同表述。
下图展示了金融数据去重的完整决策流程:
4.4 标准化:统一金融数据表达
标准化是将清洗后的数据转换为统一格式、编码与量纲的过程,是知识图谱构建的前置条件。标准化覆盖以下维度:
- 日期标准化: 统一为ISO 8601格式(YYYY-MM-DD),处理不同时区(如美股交易时间转换为UTC+8)。
- 货币标准化: 所有金额统一为人民币(CNY),外币按报告日汇率折算,记录汇率来源与折算时间。
- 行业分类标准化: 将不同分类体系(GICS、申万、证监会行业)映射到统一的知识图谱行业本体。
- 财务科目标准化: 不同会计准则(CAS、IFRS、GAAP)下的科目名称映射到统一财务本体(如“营业收入”对应“Revenue”)。
标准化示例代码:财务科目映射
# 财务科目标准化映射表(片段)
fin_mapping = {
"营业收入": "revenue",
"营业成本": "cost_of_revenue",
"净利润": "net_income",
"总资产": "total_assets",
"总负债": "total_liabilities",
"经营活动现金流": "operating_cash_flow"
}
def standardize_financial_statement(df, mapping):
"""将中文财报科目映射为标准化英文标识"""
df['standard_account'] = df['account_name_cn'].map(mapping)
# 未匹配到的科目标记为 'unknown',后续人工审核
df['standard_account'] = df['standard_account'].fillna('unknown')
return df
4.5 数据预处理流水线架构
将采集、清洗、去重、标准化串联为自动化流水线,是保障金融图谱数据质量的关键。下图展示了完整的预处理架构:
流水线实践建议: 使用Apache Airflow或Prefect编排预处理DAG,每个步骤独立可重试。关键节点(如财报发布日)设置数据质量告警,当清洗后数据量低于预期阈值时自动触发人工核查。
4.6 数据质量评估指标
预处理完成后,需用量化指标评估数据质量,为后续样本偏差校验提供基线。建议监控以下指标:
| 指标名称 | 计算公式 | 目标阈值 | 监控频率 |
|---|---|---|---|
| 完整率 | 非空字段数 / 总字段数 | ≥ 95% | 每批次 |
| 唯一率 | 去重后记录数 / 去重前记录数 | ≥ 80% | 每日 |
| 一致率 | 标准化通过记录数 / 总记录数 | ≥ 98% | 每批次 |
| 时效性 | 数据采集时间与事件发生时间差 | 财报≤7天,新闻≤1小时 | 实时 |
通过上述采集、清洗、去重、标准化的系统化实践,金融知识图谱的底层数据质量将得到有效保障,为后续样本偏差校验与模型训练奠定坚实基础。