数据准备:数据源梳理、ETL流程、关键字段定义
做关联交易异常检测,数据准备这一步,我把它叫做「地基工程」。
为什么这么说?你想想看,模型再牛、算法再花哨,如果喂进去的数据是脏的、乱的、缺胳膊少腿的,那结果基本就是垃圾进垃圾出。我在风控这行干了快十年,见过太多项目死在了数据准备阶段——不是技术不行,是数据没理清楚。
2.1 数据源梳理:你得知道你的数据从哪来
关联交易的数据源,说白了就三大类:内部系统、外部接口、手工台账。
内部系统是最主要的来源。包括ERP系统、财务系统、采购系统、销售系统。这些系统里记录了交易的主体、金额、时间、合同号等核心信息。我个人习惯,第一步先把这些系统的数据字典拉出来,看看每个字段的定义和取值范围。
外部接口呢,主要是工商信息、股权结构、关联方名单。比如天眼查、企查查的API,或者央行征信系统的关联方数据库。这些数据用来补全「谁和谁有关系」这个关键信息。
手工台账——嗯,这个最头疼。很多企业有历史遗留的Excel表格,记录了一些特殊交易。我曾经在一个项目里,发现财务部有个老同事用Excel记了三年的大额关联交易,格式五花八门,日期有的写「2023.1.1」,有的写「2023-01-01」,还有写「2023年1月1日」的。这种数据,必须单独处理。
2.2 ETL流程:从原始数据到可用数据
ETL,就是抽取(Extract)、转换(Transform)、加载(Load)。说白了,就是把原始数据洗成你能用的样子。
我一般把ETL分成四个步骤:
- 数据抽取:从各个源系统拉取数据。注意增量抽取和全量抽取的策略。我建议每天做增量,每周做一次全量对账。
- 数据清洗:处理空值、异常值、重复值。比如交易金额为负数、日期格式不统一、关联方名称有错别字。
- 数据转换:字段映射、单位统一、编码转换。比如把「人民币元」统一为「CNY」,把「关联方名称」标准化为统一格式。
- 数据加载:写入数据仓库或分析表。注意主键唯一性约束,避免重复加载。
这里我分享一个避坑指南:我曾经在一个项目中,ETL跑完发现交易金额少了几个亿。查了半天,原来是某个系统的金额字段是「分」为单位,其他系统是「元」为单位。转换逻辑写错了。从那以后,我要求所有ETL脚本必须包含单位校验步骤。
2.3 关键字段定义:哪些字段是必须的?
关联交易异常检测,核心字段就这几类。我整理了一个表格,方便你对照:
| 字段类别 | 字段名称 | 说明 | 示例 |
|---|---|---|---|
| 交易主体 | 交易方A、交易方B | 交易双方的企业名称或统一社会信用代码 | 甲公司、乙公司 |
| 交易金额 | 交易金额、币种 | 注意单位统一,建议保留两位小数 | 1000000.00、CNY |
| 交易时间 | 交易日期、记账日期 | 精确到日,注意时区 | 2024-01-15 |
| 交易类型 | 采购、销售、借款、担保等 | 需要标准化编码 | PURCHASE、SALE |
| 关联关系 | 关联方标识、关系类型 | 股权关系、高管关系、亲属关系等 | 控股子公司、同一控制人 |
| 合同信息 | 合同编号、合同金额 | 用于核对交易是否在合同范围内 | HT2024001 |
除了这些基础字段,我还会额外生成几个衍生字段:
- 交易偏离度:实际交易金额与合同金额的比值。偏离度超过20%的,我一般会标记为「需关注」。
- 交易频率:同一对交易方在30天内的交易次数。频率异常高,可能是资金拆借或利益输送。
- 交易时间异常标记:比如交易发生在周末、节假日、深夜。这些时间点的交易,往往有猫腻。
2.4 数据质量检查清单
数据准备好了,不代表就能直接用了。我每次都会跑一遍质量检查:
- 完整性检查:关键字段是否有空值?比如交易金额为空,这条记录基本废了。
- 一致性检查:同一笔交易在两个系统中的金额是否一致?不一致的,要追查原因。
- 时效性检查:数据是否及时更新?比如关联方名单,如果是一年前的,可能已经失效了。
- 准确性检查:随机抽取100条记录,人工核对原始凭证。准确率低于99%的,要重新清洗。
嗯,数据准备这块,说白了就是「磨刀不误砍柴工」。你花80%的时间把数据理清楚,后面建模和检测就轻松了。我见过太多人急着跑模型,结果数据一塌糊涂,最后还得回头补数据。何必呢?
公众号:蓝海资料掘金营,微信deep3321