2. AML数据源与特征分类:内部交易数据、客户信息数据、外部黑名单数据、公共制裁名单数据
在AML模型训练中,数据源的质量与特征工程直接决定模型的上限。本章系统梳理四大核心数据源及其对应的特征分类,帮助你在特征分层实践中建立清晰的数据地图。
2.1 四大数据源全景
AML模型通常依赖以下四类数据源,它们分别覆盖交易行为、客户属性、负面名单与监管制裁四个维度:
| 数据源类别 | 核心内容 | 数据获取方式 | 更新频率 |
|---|---|---|---|
| 内部交易数据 | 账户流水、交易对手、渠道、金额、时间 | 核心银行系统/支付系统 | 实时/准实时 |
| 客户信息数据 | 身份信息、职业、收入、注册信息、KYC文档 | CRM系统、KYC系统 | 开户时/定期更新 |
| 外部黑名单数据 | 本地监管黑名单、行业共享黑名单、内部历史风险名单 | 监管机构、行业协会、内部风控库 | 每日/每周同步 |
| 公共制裁名单数据 | 联合国、OFAC、EU、各国财政部制裁名单 | 官方发布、第三方数据服务商 | 实时/每日更新 |
特征分层提示: 在特征工程中,建议将内部交易数据作为高频行为特征层,客户信息数据作为静态属性特征层,黑名单与制裁名单作为标签/标记特征层。三层特征在模型中的权重与处理方式差异显著。
2.2 内部交易数据特征
内部交易数据是AML模型最核心的行为数据源,通常包含以下特征维度:
- 金额特征: 单笔交易金额、日累计金额、月累计金额、近30天平均金额、金额标准差、金额与历史均值的偏离度。
- 时间特征: 交易时间(小时/星期/月份)、交易间隔、夜间交易占比、节假日交易标记。
- 频次特征: 日交易笔数、周交易笔数、高频交易标记(如1小时内超过5笔)。
- 对手特征: 对手账户数量、对手地域分布、对手行业分布、对手是否为高风险地区。
- 渠道特征: 交易渠道(网银/手机银行/柜台/ATM)、渠道切换频率、跨境渠道标记。
# 内部交易特征计算示例(Python伪代码)
def compute_transaction_features(df):
features = {}
# 金额特征
features['avg_amount_30d'] = df['amount'].rolling(30).mean().iloc[-1]
features['amount_std_30d'] = df['amount'].rolling(30).std().iloc[-1]
features['amount_deviation'] = (df['amount'].iloc[-1] - features['avg_amount_30d']) / (features['amount_std_30d'] + 1e-6)
# 频次特征
features['tx_count_1h'] = df[df['timestamp'] >= (now - timedelta(hours=1))].shape[0]
# 对手特征
features['unique_counterparties_7d'] = df[df['timestamp'] >= (now - timedelta(days=7))]['counterparty_id'].nunique()
return features
2.3 客户信息数据特征
客户信息数据提供静态属性特征,用于建立客户风险画像基线:
| 特征类别 | 具体特征 | 特征类型 |
|---|---|---|
| 身份特征 | 年龄、国籍、居住国、证件类型、证件有效期 | 分类/数值 |
| 职业与经济特征 | 职业类型、行业、年收入、资产规模、资金来源 | 分类/数值 |
| 注册与关系特征 | 开户时长、账户类型、关联账户数、关联企业数 | 数值 |
| KYC状态特征 | KYC等级、KYC最后更新日期、证件是否过期、受益所有人是否明确 | 分类/布尔 |
| 风险标记特征 | 历史风险等级、是否PEP(政治公众人物)、是否SOE(国有企业关联) | 分类/布尔 |
注意: 客户信息数据中的静态特征(如国籍、职业)在模型训练中容易引入人口统计学偏差。建议在特征分层时,将此类特征放入辅助特征层,并配合公平性评估指标(如Demographic Parity)进行监控。
2.4 外部黑名单数据特征
外部黑名单数据通常以匹配结果的形式参与特征构建:
- 精确匹配特征: 客户姓名/证件号/账户号是否命中黑名单(布尔值)。
- 模糊匹配特征: 姓名相似度分数(如Levenshtein距离)、证件号部分匹配标记。
- 名单层级特征: 命中名单的级别(高风险/中风险/低风险)、名单来源(监管/行业/内部)。
- 时间衰减特征: 命中黑名单距今天数、历史命中次数、最近一次命中时间。
# 黑名单匹配特征计算示例
def compute_blacklist_features(customer_name, blacklist_db):
features = {}
# 精确匹配
features['exact_match'] = 1 if customer_name in blacklist_db['exact_names'] else 0
# 模糊匹配(使用Levenshtein距离)
max_similarity = max([levenshtein_similarity(customer_name, name) for name in blacklist_db['names']], default=0)
features['fuzzy_match_score'] = max_similarity
# 时间衰减
if features['exact_match']:
days_since_match = (datetime.now() - blacklist_db['match_date']).days
features['time_decay_weight'] = np.exp(-days_since_match / 365)
else:
features['time_decay_weight'] = 0
return features
2.5 公共制裁名单数据特征
公共制裁名单数据与黑名单类似,但具有更强的法律约束力和更严格的匹配要求:
| 特征维度 | 说明 | 示例 |
|---|---|---|
| 制裁类型 | 全面制裁/行业制裁/定向制裁 | OFAC SDN List、EU Consolidated List |
| 匹配字段 | 姓名、别名、护照号、出生日期、出生地 | 多字段联合匹配 |
| 匹配强度 | 强匹配(多字段完全一致)/弱匹配(单字段部分一致) | 强匹配直接触发报警 |
| 制裁国家/地区 | 交易对手或客户所在国是否受制裁 | 伊朗、朝鲜、叙利亚等 |
| 制裁有效期 | 名单生效日期、过期日期、是否仍在有效期内 | 过期名单可降权处理 |
实践要点: 公共制裁名单数据在AML模型中通常作为硬规则特征使用——命中强匹配规则时,模型输出应直接置为高风险,不依赖模型权重。建议在特征分层中单独设置规则层,与模型层并行决策。
2.6 数据源融合与特征分层架构
下图展示了四大数据源在AML模型特征分层中的融合关系:
2.7 数据源质量评估与特征有效性
在特征分层实践中,不同数据源的质量直接影响特征有效性。以下是常见质量问题的对照:
| 数据源 | 常见质量问题 | 对特征的影响 | 缓解策略 |
|---|---|---|---|
| 内部交易数据 | 缺失对手信息、金额异常值、时间戳漂移 | 频次特征失真、金额特征偏斜 | 异常值截断、缺失值填充(中位数/均值) |
| 客户信息数据 | 证件过期、职业信息缺失、收入不实 | 静态特征噪声大、风险画像偏差 | KYC定期更新、使用最近有效值 |
| 外部黑名单数据 | 名单更新滞后、模糊匹配误报 | 标签特征延迟、假阳性增加 | 设置匹配阈值、引入人工复核反馈 |
| 公共制裁名单 | 多语言姓名变体、别名覆盖不全 | 强匹配漏报、弱匹配噪声 | 使用多字段联合匹配、引入音译算法 |
特征分层建议: 在模型训练前,建议对每个数据源单独进行质量评分(如缺失率、异常率、更新延迟天数),并将质量评分作为特征权重的调整因子。质量评分低于0.6的数据源,其特征应降级到辅助特征层,不参与主模型训练。