4. 数据准备与理解
重复付款与重复报销的异常检测,成败往往不在模型算法,而在数据准备阶段。很多项目在建模环节反复调参却收效甚微,根源是数据源没找全、字段含义没对齐、脏数据没清洗。本节围绕四个关键动作展开:识别数据源、采集数据、建立数据字典、评估数据质量,为后续的规则引擎与模型检测打下可信基础。
一、核心原理:异常检测的数据底座
重复付款与重复报销的本质,是同一笔经济业务被多次记录或多次支付。要识别这种"同一性",系统必须同时掌握三类信息:业务事实(谁、何时、因何、向谁付了多少)、流程状态(审批、支付、记账各环节是否完成)、主数据(供应商、员工、银行账户的唯一标识)。这三类信息通常散落在多个系统中,因此数据准备的核心任务是"把分散的事实拼成一条可比较的完整链路"。
判断重复的关键维度包括:金额、日期、收款方、单据号、发票号、银行流水号、业务摘要。任意两个维度高度相似,就构成疑似重复。数据准备阶段要确保这些维度字段可获取、可对齐、可比较。
二、方法流程:从数据源到质量报告
完整的数据准备流程可分为四步,每一步都有明确的交付物。
- 数据源识别:梳理与付款、报销相关的所有系统,明确每个系统提供哪些字段、更新频率、数据量级和责任人。
- 数据采集:确定采集方式(数据库直连、接口抽取、文件导出),建立采集任务与调度,保证数据可重复获取。
- 数据字典:为每个字段定义名称、类型、含义、取值范围、来源系统和业务口径,消除歧义。
- 数据质量评估:从完整性、准确性、一致性、及时性、唯一性五个维度打分,输出问题清单与修复建议。
下面是一个典型的数据采集配置示例,用于从财务系统抽取付款流水:
source: finance_db.payment_flow
extract_mode: incremental
watermark_field: pay_time
schedule: "0 2 * * *"
fields:
- pay_id # 付款单号
- vendor_id # 供应商编码
- vendor_name # 供应商名称
- bank_account # 收款账号
- pay_amount # 付款金额
- pay_time # 付款时间
- invoice_no # 发票号
- biz_summary # 业务摘要
- status # 支付状态
采集完成后,需要对关键字段做标准化处理,例如金额统一为两位小数、时间统一为同一时区、账号去除空格与分隔符,否则后续比对会出现"看似不同实则相同"的漏判。
三、数据字典与质量评估清单
数据字典是团队协作的"共同语言"。没有字典,业务人员说的"金额"可能是含税价,技术人员理解的却是净额,比对结果必然偏差。下表给出重复付款检测中核心字段的字典示例与质量检查要点。
| 字段 | 含义 | 来源系统 | 质量检查要点 |
|---|---|---|---|
| pay_id | 付款单唯一编号 | 财务系统 | 非空、全局唯一 |
| vendor_id | 供应商主数据编码 | 主数据系统 | 与名称一一对应 |
| bank_account | 收款银行账号 | 财务系统 | 去空格、长度校验 |
| pay_amount | 实际付款金额 | 财务系统 | 大于0、两位小数 |
| pay_time | 付款完成时间 | 财务系统 | 格式统一、无未来时间 |
| invoice_no | 关联发票号码 | 报销系统 | 可空、格式校验 |
质量评估建议采用量化打分,例如完整性按非空率计算,唯一性按主键重复率计算,一致性按跨系统字段匹配率计算。得分低于阈值的字段要列入修复清单,不能直接进入检测环节。
四、案例与误区复盘
案例场景:某企业发现同一供应商在同一周内收到两笔金额相同的付款。排查后发现,一笔来自采购系统自动付款,一笔来自员工手工报销,两个系统的供应商编码规则不同,导致系统未能自动关联。若在数据准备阶段建立了统一的主数据映射,这类重复本可在检测前被识别。
常见误区:
- 只取一个系统的数据:重复往往跨系统发生,单源数据无法覆盖。
- 忽略时间窗口:不设定合理的时间范围,会把正常分期付款误判为重复。
- 字段口径不统一:金额含税与不含税混用,导致比对失真。
- 跳过质量评估:脏数据直接进入模型,产生大量误报,消耗人工核查资源。
数据准备与理解是重复付款检测的"地基工程"。只有把数据源、采集、字典、质量四件事做扎实,后续的规则匹配与模型识别才能建立在可信的数据之上,减少误报与漏报,真正提升审计与风控效率。