1. 课程导入
在金融行业,数据不是“辅助材料”,而是定价、风控、交易、清算、监管报送和客户服务的直接输入。一条错误的价格、一个缺失的客户风险等级、一批延迟到达的行情记录,都可能触发错误授信、错误估值、合规罚单甚至市场风险事件。因此,金融数据质量不是IT部门的内部指标,而是业务连续性和机构信誉的基础设施。
一、金融数据质量的重要性:从“报表不准”到“风险失控”
金融数据质量问题的破坏力,通常沿着“数据缺陷 → 分析偏差 → 决策错误 → 资金损失/合规处罚”的链路放大。常见的数据质量维度包括完整性、准确性、一致性、及时性、唯一性和有效性。它们不是抽象概念,而是对应具体的业务后果:
- 完整性:客户身份证号缺失,导致反洗钱筛查无法执行。
- 准确性:债券估值收益率小数点错位,导致基金净值计算错误。
- 一致性:交易系统与清算系统的金额不一致,导致对账失败和资金挂账。
- 及时性:行情数据延迟超过阈值,导致量化策略在错误价格上成交。
- 唯一性:同一客户被重复创建,导致授信额度被重复占用。
- 有效性:交易日期落在非交易日,导致清算指令被监管系统拒绝。
常见误区:很多团队把数据质量等同于“跑一遍非空校验”。实际上,非空只是最低门槛。金融场景更关注跨系统一致性、时间窗口及时性、业务规则有效性以及可追溯的异常处理闭环。没有闭环的校验,只会产生大量无人处理的告警。
二、Great Expectations 的定位:可声明、可执行、可观测的数据质量框架
Great Expectations(简称 GX)是一个开源的数据质量与数据契约框架。它的核心思想是:把“对数据的期望”写成可版本化、可测试、可复用的声明式规则,并在数据管道的各个关键节点自动执行。与一次性脚本校验相比,GX 提供了 Expectation(期望规则)、Checkpoint(检查点)、Data Context(数据上下文)、Data Docs(数据文档)等结构化能力。
在金融数据工程中,GX 的定位可以概括为三层:
- 规则层:用 Expectation 表达“客户号必须唯一”“交易金额必须大于0”“行情时间戳必须落在最近5分钟内”等业务约束。
- 执行层:通过 Checkpoint 将规则绑定到具体数据资产和批次,支持批处理、流式落地表和数据库查询结果。
- 观测层:自动生成 Data Docs,让数据工程师、风控人员和业务分析师看到同一份质量证据,形成可审计的闭环。
关键理解:GX 不是数据清洗工具,它不负责“修数据”。它负责“发现并证明数据是否可信”。修复动作仍应由上游系统、ETL流程或人工工单完成,GX 的价值在于让问题在进入决策前被拦截。
三、核心原理:期望、检查点与数据文档的协作关系
GX 的运行机制可以拆解为四个关键对象:Data Context 管理配置和资产;Expectation Suite 组织一组期望规则;Checkpoint 定义“对哪个数据、跑哪些规则、结果写到哪里”;Data Docs 将结果渲染为可读报告。下图展示了它们之间的数据流与依赖关系:
从图中可以看到,Data Context 是配置中心,Expectation Suite 是规则集合,Checkpoint 是执行入口,Data Docs 是观测出口。金融数据资产经过 Checkpoint 校验后,结果一方面进入 Data Docs 供审计,另一方面触发异常处理闭环,最终反馈到上游系统进行修复。
四、方法流程:一个金融场景的端到端校验示例
假设我们需要校验一张“每日交易流水表”,要求交易金额大于0、客户号非空且唯一、交易日期为最近一个交易日。使用 GX 的典型流程如下:
# 1. 创建 Data Context
import great_expectations as gx
context = gx.get_context()
# 2. 定义数据资产(以 Pandas 为例)
validator = context.sources.pandas_default.read_csv(
"data/daily_trades.csv"
)
# 3. 编写 Expectation Suite
validator.expect_column_values_to_not_be_null("customer_id")
validator.expect_column_values_to_be_unique("customer_id")
validator.expect_column_values_to_be_between(
"trade_amount", min_value=0.01
)
validator.expect_column_values_to_be_between(
"trade_date",
min_value="2024-01-02",
max_value="2024-01-02"
)
# 4. 保存 Suite 并运行 Checkpoint
validator.save_expectation_suite()
checkpoint = context.add_or_update_checkpoint(
name="daily_trade_checkpoint",
validations=[{
"batch_request": validator.batch_request,
"expectation_suite_name": "daily_trade_suite"
}]
)
result = checkpoint.run()
# 5. 查看 Data Docs
context.open_data_docs()
运行后,Data Docs 会生成一份 HTML 报告,逐条展示每个 Expectation 的成功或失败状态。如果“客户号唯一性”失败,报告会列出重复的客户号样本,便于快速定位问题。
| 质量维度 | GX 期望规则示例 | 金融业务场景 | 失败后果 |
|---|---|---|---|
| 完整性 | expect_column_values_to_not_be_null | 客户风险等级不能为空 | 反洗钱筛查漏判 |
| 准确性 | expect_column_values_to_be_between | 交易金额在合理区间 | 估值或授信计算错误 |
| 一致性 | expect_column_pair_values_to_be_equal | 交易系统与清算系统金额一致 | 对账失败、资金挂账 |
| 及时性 | expect_column_max_to_be_between | 行情时间戳在最近5分钟内 | 策略在过期价格上成交 |
| 唯一性 | expect_column_values_to_be_unique | 客户号全局唯一 | 重复授信、额度超限 |
| 有效性 | expect_column_values_to_be_in_set | 交易状态属于合法枚举值 | 清算指令被监管拒绝 |
五、课程学习目标与整体框架
本课程围绕“金融数据质量实战”展开,目标是让学员能够独立设计、落地并运维一套基于 Great Expectations 的数据质量体系。具体学习目标包括:
- 理解金融数据质量的六大维度及其业务影响。
- 掌握 GX 的 Data Context、Expectation Suite、Checkpoint、Data Docs 核心对象。
- 能够针对交易、行情、客户、清算等典型金融数据资产编写期望规则。
- 能够将 GX 集成到批处理、流式管道和调度系统中。
- 能够设计告警、工单和复盘机制,形成数据质量闭环。
课程整体框架分为四个阶段:基础认知(数据质量维度与 GX 定位)、核心能力(期望规则、检查点、数据文档)、金融场景实战(交易流水、行情快照、客户主数据、监管报送)、工程化与运维(调度集成、告警闭环、性能优化与复盘)。每个阶段都配有可运行的代码示例和真实业务场景,帮助学员从“知道”走向“做到”。
本章小结:金融数据质量是业务决策的信任基础。Great Expectations 通过声明式期望、可执行检查点和可审计数据文档,把数据质量从“事后补救”前移到“事前拦截”。后续章节将逐步展开规则编写、检查点配置和金融场景落地,帮助你把质量能力真正嵌入数据管道。