2. 金融数据特性

在构建金融风控、量化投研或营销响应模型时,数据科学家最先遇到的挑战往往不是算法选择,而是数据本身的结构。金融数据并非独立同分布的静态表格,它同时具备时间维度、横截面维度和个体维度,形成三类典型形态:金融时间序列、横截面数据与面板数据。理解这三类数据的生成机制,是判断漂移来源、设计监控指标的前提。

一、三类金融数据的核心特征

金融时间序列以时间为唯一索引,记录单一资产或指标随时间的演变,如日频收益率、分钟级成交量、月度违约率。其核心特征是自相关、波动率聚集、非平稳性。收益率序列常呈现尖峰厚尾,波动率存在GARCH效应,且均值与方差随时间漂移。这意味着训练集与测试集之间天然存在分布差异,模型在样本外衰减几乎是必然。

横截面数据在同一时点观察多个个体,如某日全部A股上市公司的市盈率、某月所有申请人的信用评分。其核心特征是个体间可比但时点单一,样本量由个体数量决定。横截面模型容易受到市场状态切换的影响:牛市与熊市中,同一财务指标对违约的判别力可能完全相反。

面板数据是时间序列与横截面的结合,同时包含个体维度和时间维度,如2000—2024年各省份的信贷余额、每只基金每季度的持仓收益。面板数据兼具组内变异与组间变异,能够控制不可观测的个体异质性,但也使漂移诊断更加复杂:漂移可能来自时间维度、个体维度,或二者交互。

三类金融数据结构与漂移敏感维度 金融时间序列 索引:时间 自相关 · 波动聚集 非平稳 · 厚尾 漂移敏感:时间维度 横截面数据 索引:个体 时点单一 · 可比性强 受市场状态影响大 漂移敏感:状态切换 面板数据 索引:个体 × 时间 组内变异 + 组间变异 可控制个体异质性 漂移敏感:时间 + 个体交互

二、漂移问题的业务影响

数据漂移与概念漂移在金融业务中并非学术概念,而是直接对应可量化的损失。数据漂移指输入特征分布变化,例如用户收入分布整体下移、交易金额量纲改变;概念漂移指输入与目标之间的映射关系变化,例如同样的负债收入比,在经济下行期对违约的预测方向发生反转。

漂移类型 典型触发场景 业务影响 监控信号
数据漂移(协变量) 客群渠道切换、监管口径调整 评分分布偏移,通过率异常波动 PSI、KS、特征均值漂移
概念漂移(真实关系) 宏观经济周期、政策转向 坏账率上升,模型区分度下降 AUC衰减、校准曲线偏移
标签漂移 违约定义变更、观察窗口调整 训练目标与业务目标脱节 正样本率突变、混淆矩阵变化
面板结构漂移 个体退出、新个体进入 组间方差扩大,模型泛化变差 组内/组间方差比、固定效应检验

常见误区:许多团队只监控模型输出分数,而忽略输入特征与标签定义。当概念漂移发生时,分数分布可能仍然稳定,但排序能力已经失效。必须同时监控特征层、标签层与模型层。

三、诊断流程与代码示例

针对三类数据,建议采用分层诊断流程:先确认数据结构类型,再分别计算时间维度与个体维度的漂移指标,最后关联业务损失。以下示例展示如何对面板数据按时间窗口计算PSI,并区分组内与组间漂移。

import pandas as pd
import numpy as np

def psi(base, curr, bins=10):
    breakpoints = np.percentile(base, np.linspace(0, 100, bins + 1))
    base_pct = np.histogram(base, breakpoints)[0] / len(base)
    curr_pct = np.histogram(curr, breakpoints)[0] / len(curr)
    base_pct = np.clip(base_pct, 1e-6, None)
    curr_pct = np.clip(curr_pct, 1e-6, None)
    return np.sum((curr_pct - base_pct) * np.log(curr_pct / base_pct))

# 面板数据:按时间切分,同时按个体分组
panel = pd.read_parquet("credit_panel.parquet")
train = panel[panel["month"] <= "2023-12"]
test  = panel[panel["month"] >= "2024-01"]

overall_psi = psi(train["score"], test["score"])
within_psi = test.groupby("customer_id").apply(
    lambda g: psi(train[train["customer_id"] == g.name]["score"], g["score"])
).mean()

print(f"整体PSI: {overall_psi:.4f}")
print(f"组内平均PSI: {within_psi:.4f}")

参数建议:PSI小于0.1视为稳定,0.1~0.25需预警,大于0.25应触发重训练评估。对面板数据,若组内PSI显著高于整体PSI,说明漂移主要来自个体行为变化,而非客群结构变化。

四、案例复盘:某消费金融评分卡衰减

某消费金融公司在2023年上线的评分卡,上线6个月后AUC从0.72降至0.64。初期团队仅监控分数分布,未发现异常。复盘发现:

  • 数据漂移:新渠道引入大量年轻客群,年龄均值下降8岁,收入特征PSI达0.31。
  • 概念漂移:同期宏观利率上行,多头借贷指标与违约的关系由负转正,模型权重方向失效。
  • 面板结构漂移:老客户复贷率下降,新客户占比从15%升至42%,组间方差扩大。

最终整改方案包括:按渠道分层建模、引入宏观变量交互项、建立月度PSI与AUC双监控看板。该案例说明,金融数据的多维结构决定了漂移诊断不能只看单一指标,必须结合时间、个体与业务语义综合判断。

核心结论:金融时间序列关注时间维度的非平稳性,横截面数据关注状态切换,面板数据关注个体与时间的交互。漂移的业务影响最终体现为通过率、坏账率与资本占用的变化。诊断时应同时覆盖特征层、标签层与模型层,并将统计指标映射到可解释的业务损失。