4、数据准备:财务数据、市场数据、另类数据的获取、清洗与标准化
AI估值模型与传统估值模型的本质差异,在于其能够同时消化和处理海量、异构、非结构化的数据。传统估值依赖三大报表和可比公司倍数,而AI估值模型则试图捕捉市场情绪、供应链动态、舆情信号等“软信息”。然而,数据是模型的燃料——燃料不纯,引擎再先进也无法稳定运行。本章将系统拆解AI估值模型的数据供应链:从三类核心数据的获取渠道,到清洗逻辑,再到标准化方法,最终形成可直接输入机器学习算法的特征矩阵。
4.1 三类数据的获取渠道与核心字段
AI估值模型的数据输入可划分为三大类:财务数据、市场数据和另类数据。每一类数据的获取渠道、更新频率和数据结构差异极大,需要分别设计采集策略。
4.1.1 财务数据:模型的基本盘
财务数据是估值模型的“锚”。主要包括资产负债表、利润表、现金流量表三大报表,以及审计附注中的细分科目。获取渠道以Wind、Bloomberg、Choice等金融终端为主,也可通过交易所官网、巨潮资讯网等公开渠道获取原始PDF后解析。关键字段包括:营业收入、净利润、EBITDA、总资产、净资产、经营现金流、资本开支等。财务数据的核心问题是报表重述和会计准则差异——同一家公司在不同年份可能因会计政策变更导致数据不可比。
4.1.2 市场数据:市场预期的直接反映
市场数据包括股价、成交量、市值、市盈率、市净率、股息率等行情指标,以及分析师一致预期(EPS预测、目标价)、评级变动等卖方数据。获取渠道包括行情API(如Tushare、AkShare)、券商研报数据库(如慧博、朝阳永续)。市场数据的核心特征是高频——日频甚至分钟频,且存在前复权、后复权、除权除息等复权问题。分析师预期数据则存在乐观偏差,需要做系统性修正。
4.1.3 另类数据:差异化信息的来源
另类数据是AI估值模型区别于传统模型的“胜负手”。常见类型包括:
- 舆情数据:新闻标题、社交媒体讨论、股吧帖子,通过NLP提取情感分数和关注度指标。
- 供应链数据:上下游企业的订单、招标信息、物流数据,用于交叉验证收入真实性。
- 卫星遥感数据:停车场车辆计数、工厂夜间灯光亮度、油罐液位等,适用于特定行业(如零售、能源)。
- 招聘数据:企业招聘岗位数量和结构变化,可作为业务扩张或收缩的前瞻信号。
另类数据的获取通常需要爬虫、API订阅或第三方数据供应商(如Genscape、RS Metrics)。其核心挑战在于非结构化——需要大量清洗和特征工程才能转化为可用变量。
| 数据类型 | 典型来源 | 更新频率 | 核心字段示例 | 主要挑战 |
|---|---|---|---|---|
| 财务数据 | Wind、Bloomberg、巨潮资讯 | 季度/年度 | 营收、净利润、EBITDA、资产负债率 | 报表重述、会计准则差异 |
| 市场数据 | Tushare、AkShare、券商数据库 | 日频/分钟频 | 收盘价、成交量、PE、PB、分析师预期 | 复权处理、预期偏差 |
| 另类数据 | 爬虫、API订阅、第三方供应商 | 实时/日频 | 情感分数、招聘指数、卫星计数 | 非结构化、噪声大、成本高 |
4.2 数据清洗:从原始数据到可用数据
原始数据几乎总是“脏”的——存在缺失、异常、重复、格式不一致等问题。清洗的目标是让数据达到“可用”状态,而非“完美”状态。过度清洗可能引入偏差,清洗不足则会让模型学到噪声。
4.2.1 缺失值处理策略
缺失值处理需区分机制:随机缺失(MCAR)可直接删除或均值插补;非随机缺失(MNAR)则需谨慎——例如小市值公司可能因披露不完整而缺失部分财务科目,直接删除会引入幸存者偏差。推荐策略:
- 先判断缺失比例,超过30%的字段考虑删除或合并。
- 时间序列数据优先使用前向填充(forward fill)或插值法。
- 截面数据可使用中位数或行业均值插补,但需生成“缺失标记”作为额外特征。
4.2.2 异常值检测与处理
异常值可能来自数据录入错误、极端市场事件或真实的极端经营表现。处理前必须区分“错误异常”和“真实极端”。常用方法包括:
- 统计方法:3σ原则、IQR(四分位距)法。
- 机器学习方法:孤立森林(Isolation Forest)、DBSCAN聚类。
- 业务规则:例如资产负债率超过100%但非金融企业,大概率是数据错误。
处理方式上,错误异常直接修正或删除;真实极端值可做Winsorize缩尾处理(如上下1%分位数截断),避免极端值主导模型训练。
4.3 数据标准化:让不同量纲的特征可比
标准化是AI估值模型训练前的必要步骤。不同特征的量纲差异巨大——营收以亿元计,市盈率以倍数计,情感分数在[-1,1]区间——如果不做标准化,梯度下降类算法(如神经网络、逻辑回归)会偏向量纲大的特征。
4.3.1 常用标准化方法
| 方法 | 公式 | 适用场景 | 注意事项 |
|---|---|---|---|
| Z-Score标准化 | (x - μ) / σ | 数据近似正态分布 | 对异常值敏感,需先处理异常 |
| Min-Max归一化 | (x - min) / (max - min) | 数据有明确边界 | 新数据超出边界时需重新计算 |
| RobustScaler | (x - 中位数) / IQR | 存在较多异常值 | 对异常值鲁棒,但计算量稍大 |
| 行业中性化 | 减去行业均值后除以行业标准差 | 跨行业比较 | 需先定义行业分类标准 |
4.3.2 时间序列对齐与面板数据构建
AI估值模型通常使用面板数据(Panel Data)——即多个公司在多个时间点的观测值。财务数据是季度频率,市场数据是日频率,另类数据可能是实时频率。必须将所有数据对齐到统一的时间网格上。推荐做法:
- 确定基准频率(如季度或月度),以财务报告期为锚点。
- 市场数据在报告期截止日取截面值(如季度末收盘价)。
- 另类数据在报告期内做聚合(如季度平均情感分数)。
- 生成滞后特征(lag features),避免未来函数泄漏。
4.4 案例拆解:某消费零售企业的数据准备全流程
以下案例展示一个完整的实操闭环,帮助理解数据准备各环节如何衔接。
4.4.1 背景与目标
某券商量化团队计划为A股消费零售板块构建AI估值模型,覆盖约80家上市公司,时间跨度为2018-2023年。目标是用财务、市场和另类数据预测未来12个月的EV/EBITDA倍数。
4.4.2 数据获取与初始状态
- 财务数据:从Wind导出季度三大报表,共获取80家公司×24个季度=1920个样本,但发现约15%的样本存在缺失(主要是小市值公司早期数据不全)。
- 市场数据:通过Tushare获取日频行情,发现部分公司存在长期停牌(超过30个交易日),导致价格数据中断。
- 另类数据:爬取主流财经媒体的新闻标题,共获取约50万条新闻,但存在大量重复转载和无关广告内容。
4.4.3 清洗与处理过程
第一步:财务数据清洗。对缺失率超过30%的字段(如“研发费用”)直接删除;对缺失率较低的字段(如“营业总收入”)使用行业中位数插补,并生成“是否插补”标记列。发现3家公司的资产负债率超过200%,经人工核查为数据录入错误,予以修正。
第二步:市场数据清洗。对停牌超过30天的样本,将停牌期间的价格填充为停牌前最后交易日价格,并生成“停牌天数”特征。对复权价格使用后复权方式,确保历史价格可比。
第三步:另类数据处理。使用Jieba分词+预训练情感模型(如FinBERT)对新闻标题进行情感打分,过滤掉重复新闻(基于标题MD5去重),并计算每家公司每季度的平均情感分数和新闻数量。
4.4.4 标准化与面板构建
将所有数据对齐到季度频率。财务数据直接使用报告期值;市场数据取季度末收盘价和季度平均换手率;另类数据取季度平均情感分数。然后进行Z-Score标准化,并按申万一级行业做行业中性化处理。最终生成的特征矩阵维度为1920×45(样本×特征)。
4.4.5 结果与复盘
模型训练后,在验证集上的R²达到0.62,相比仅使用财务数据的基线模型(R²=0.41)有显著提升。复盘发现,另类数据中的“新闻情感分数”和“新闻数量”是贡献度排名前五的特征。但同时也发现,2020年疫情期间的极端市场环境下,模型预测偏差较大——原因是异常值处理时对极端市场事件做了Winsorize缩尾,导致模型对尾部风险不敏感。
4.5 常见误区与总结复盘
在数据准备环节,以下误区最为常见:
- 误区一:追求数据完美。试图清洗掉所有异常值,结果丢失了真实的市场信号。正确做法是区分“错误”和“极端”,保留后者并做缩尾处理。
- 误区二:忽视时间对齐。将不同频率的数据直接拼接,导致模型学到虚假的领先-滞后关系。
- 误区三:未来函数泄漏。在特征中使用了未来信息(如使用了t+1期的实际财务数据),回测结果虚高。
- 误区四:标准化时机错误。在划分训练集/测试集之前就做全量标准化,导致测试集信息泄漏到训练过程。
正确的标准化流程是:先划分训练集和测试集,然后在训练集上计算均值和标准差,再用同样的参数转换测试集。对于时间序列数据,应使用滚动窗口的标准化方式,避免使用未来数据计算统计量。
总结而言,数据准备是AI估值模型中最耗时但最关键的环节。一个扎实的数据管道,应当具备自动化采集、规则化清洗、标准化输出和版本管理四大能力。当数据质量得到保障后,后续的因子构建和模型训练才能建立在可靠的基础之上。