2. 金融数据基础

在金融数据分析中,缺失值与异常值处理并不是孤立的清洗步骤,而是建立在对数据类型、数据来源和数据质量维度充分理解之上的系统性工作。只有先明确“数据长什么样、从哪里来、质量如何衡量”,才能判断某个空值是应该填补还是删除,某个极端值是错误还是真实信号。

一、金融数据类型:结构化与非结构化的分层理解

金融数据按形态可分为结构化、半结构化和非结构化三类。结构化数据以表格形式存在,字段固定、类型明确,例如股票日行情表、财务报表、交易流水;半结构化数据带有标签但结构灵活,如JSON格式的接口返回、XML报文;非结构化数据则包括研报PDF、新闻文本、电话录音、图像凭证等。

按业务属性,金融数据又可划分为行情数据、交易数据、基本面数据、衍生指标、宏观数据和文本舆情数据。行情数据具有高频、时间戳严格、连续性强等特点;交易数据强调账户、金额、方向、状态等字段的完整性;基本面数据更新频率低但字段多、口径复杂;文本舆情数据则天然存在噪声大、边界模糊的问题。不同类型的数据,其缺失与异常的成因和判定标准差异显著。

二、常见数据源及其质量特征

金融数据来源多样,常见包括交易所与登记结算机构、行情供应商、银行与券商核心系统、第三方数据服务商、公开政府统计网站以及网络爬虫采集。不同来源的数据在时效性、准确性、一致性和覆盖度上各有短板。

数据源 典型内容 常见质量问题
交易所/登记结算 行情、成交、持仓 停牌导致空缺、复权口径差异
行情供应商 Level-1/Level-2快照 丢包、时间戳漂移、字段截断
银行/券商核心系统 账户、交易、余额 状态未同步、金额精度丢失
第三方数据商 财务、评级、舆情 口径不统一、更新延迟、重复记录
公开统计网站 宏观、行业指标 发布滞后、修订频繁、单位不一致
接入多源数据时,建议先建立“数据源—字段—口径—更新频率—责任人”的元数据清单,再开展缺失与异常治理,否则后续规则容易互相冲突。

三、数据质量维度:判断缺失与异常的标尺

数据质量通常从完整性、准确性、一致性、时效性、唯一性和有效性六个维度衡量。完整性关注字段是否为空、记录是否缺失;准确性关注数值是否真实反映业务事实;一致性关注同一指标在不同表、不同系统间是否统一;时效性关注数据是否在预期时间内到达;唯一性关注是否存在重复主键;有效性关注取值是否落在合理业务范围内。

缺失值和异常值的判定,本质上就是这些质量维度在具体字段上的落地。例如,某股票收盘价为空,属于完整性问题;某笔交易金额为负数但业务上不允许,属于有效性问题;同一客户在两张表中风险等级不同,属于一致性问题。明确维度后,处理策略才有依据。

金融数据质量维度与缺失/异常判定关系 完整性 字段为空、记录缺失 准确性 数值偏离真实值 一致性 跨表口径冲突 时效性 延迟到达 缺失值 NULL、空串、占位符、未同步 异常值 极端值、逻辑矛盾、单位错误 处理策略:删除、填补、插值、截断、分箱、标记复核 策略选择取决于业务含义、缺失比例、异常成因与下游模型容忍度

四、缺失与异常的定义、成因与影响

缺失值指在应记录的位置没有有效取值,常见形式包括NULL、空字符串、特殊占位符(如-999、N/A)以及记录整体未到达。其成因可分为机械缺失和业务缺失:机械缺失来自采集失败、接口超时、字段映射错误;业务缺失则可能是停牌、未披露、客户未填写等真实状态。

异常值指明显偏离整体分布或业务逻辑的取值。它既可能是错误,例如价格小数点错位、金额单位从元误写为万元;也可能是真实极端事件,例如市场闪崩、大额赎回。若不加区分地删除,可能丢失关键风险信号;若不加处理地保留,又会扭曲统计量和模型参数。

缺失与异常的影响具有传导性:缺失会降低样本量并引入偏差,异常会拉偏均值、方差和回归系数,二者都会削弱风控、定价、推荐和报表的可靠性。更隐蔽的风险是,错误处理本身会制造新的偏差。

五、案例场景:从一条行情记录看问题链路

假设某日行情表中,某股票收盘价字段为空,成交量为0,而当日该股票实际正常交易。排查发现,上游行情供应商在14:57的推送中发生丢包,导致最后三分钟快照缺失,下游按“最后一笔快照”生成日线时收盘价为空。这里缺失的根因是采集链路问题,而非股票停牌。

若直接删除该行,会丢失当日真实交易信息;若用前一日收盘价填补,会低估波动;若用当日均价填补,又可能偏离收盘集合竞价结果。更合理的做法是:先标记为“采集缺失”,回溯供应商原始文件补录;若无法补录,则按业务规则选择插值并记录数据血缘。这个案例说明,缺失处理必须结合数据源、业务状态和下游用途综合判断。

-- 示例:识别行情表中的疑似缺失与异常
SELECT
  trade_date,
  stock_code,
  close_price,
  volume,
  CASE
    WHEN close_price IS NULL THEN '缺失-价格为空'
    WHEN close_price <= 0 THEN '异常-价格非正'
    WHEN volume < 0 THEN '异常-成交量为负'
    WHEN close_price > LAG(close_price) OVER (
         PARTITION BY stock_code ORDER BY trade_date) * 1.5
      THEN '异常-单日涨幅过大'
    ELSE '正常'
  END AS quality_flag
FROM market_daily
WHERE trade_date = '2024-06-28';

六、常见误区与复盘要点

  • 误区一:把缺失一律当错误。停牌、未披露等业务缺失是真实状态,应保留并标记,而非强行填补。
  • 误区二:用全局均值填补所有字段。不同股票、不同行业、不同时间段的均值差异很大,全局填补会抹平结构信息。
  • 误区三:异常值直接删除。极端值可能是风险事件信号,应先判定成因,再决定截断、分箱或保留。
  • 误区四:忽略数据血缘。不记录缺失与异常的处理过程,后续无法复现和审计,也难以定位问题源头。
复盘要点:建立“数据源—质量维度—缺失/异常类型—处理策略—影响评估”的闭环清单。每次处理前先问三个问题:这个值为什么空或异常?业务上它代表什么?下游模型或报表能容忍什么?答案不同,策略就不同。

掌握金融数据类型、常见数据源和数据质量维度,是后续缺失值填补与异常值检测的认知基础。只有把数据放回业务语境中理解,才能避免“为了清洗而清洗”,让数据治理真正服务于金融分析与决策。