3. 客户基础特征层:客户身份属性(国籍、职业、年龄)、注册信息、账户类型与开户时长

客户基础特征层是 AML 模型中最稳定、最易获取的特征来源。该层直接反映客户在金融机构中的静态身份与账户行为起点,是构建客户风险画像的基石。本节将系统拆解身份属性、注册信息、账户类型与开户时长四大子模块,并给出特征工程的具体实践方法。

3.1 特征子模块总览

客户基础特征可归纳为以下四类,每类在 AML 模型中承担不同的风险区分角色:

子模块 典型字段 AML 风险关联 特征工程要点
身份属性 国籍、职业、年龄 高风险国籍/职业识别、年龄异常分布 WOE 编码、风险等级映射、年龄分箱
注册信息 注册渠道、注册 IP、设备指纹 批量注册、代理 IP、设备聚集 频次统计、渠道风险分、IP 信誉分
账户类型 账户等级、币种、功能权限 高权限账户滥用、跨境交易通道 One-Hot / 目标编码、权限等级量化
开户时长 开户日期、距今天数 休眠账户突活、短期开户即交易 时间差计算、生命周期阶段划分
实践提示:基础特征层虽然静态,但在 AML 规则引擎中常作为第一道筛选关卡。例如,国籍风险分与职业风险分的乘积可作为初始风险阈值,快速过滤低风险客户,减少后续复杂模型的计算压力。

3.2 身份属性特征工程

3.2.1 国籍(Nationality)

国籍是 AML 模型中最敏感的身份属性之一。FATF(金融行动特别工作组)定期发布高风险国家名单,金融机构需将客户国籍与名单进行映射。

特征构造方法:

  • 风险等级映射:将国籍分为低/中/高/制裁四档,编码为 0/1/2/3。
  • WOE 编码:基于训练集中每个国籍的正负样本比例,计算 Weight of Evidence 值,替代原始类别。
  • 交叉特征:国籍 × 交易对手国籍,用于识别跨境资金异常流动。

3.2.2 职业(Occupation)

某些职业天然具有更高的洗钱风险敞口,如珠宝商、房地产经纪人、律师、会计师等。职业字段通常缺失率高、类别多,需要做聚合处理。

特征构造方法:

  • 高风险职业标记:建立 PEP(政治公众人物)及高风险职业白名单,生成二值特征。
  • 频次聚合:将低频职业归入“其他”类别,避免稀疏矩阵。
  • 收入层级映射:根据职业平均收入水平分箱,辅助识别收入与交易量不匹配的异常。

3.2.3 年龄(Age)

年龄分布异常往往是身份冒用或账户出借的信号。例如,80 岁以上老人突然进行高频大额交易,或 18 岁以下客户持有高等级账户。

特征构造方法:

  • 分箱处理:[0-18], [18-25], [25-40], [40-60], [60+] 五箱,每箱统计风险概率。
  • 年龄偏差特征:客户年龄与账户注册年龄之差,用于检测账户转让。
  • 交互特征:年龄 × 账户类型,如“老年 + 投资账户”组合风险权重调整。
案例:某支付平台在训练 AML 模型时,发现年龄在 18-22 岁且职业为“学生”的群体中,异常交易占比是其他群体的 3.2 倍。通过引入“年龄-职业交叉风险分”,模型召回率提升了 11%。

3.3 注册信息特征工程

注册信息是客户进入系统的第一道数字足迹,对识别团伙作案和自动化注册至关重要。

注册字段 原始数据示例 AML 特征 计算逻辑
注册渠道 APP / Web / 线下 / 第三方 渠道风险分 各渠道历史涉案率归一化
注册 IP 192.168.x.x IP 聚集度、代理检测 同一 IP 关联账户数 + IP 类型(机房/住宅/代理)
设备指纹 设备 ID / IDFA / OAID 设备关联账户数、设备更换频率 滑动窗口内设备关联唯一账户数
注册时间 2024-01-15 03:22:10 夜间注册标记、注册时段 UTC 时间转换为本地时段(凌晨/白天/夜晚)

3.4 账户类型与开户时长

3.4.1 账户类型(Account Type)

账户类型决定了客户可使用的金融产品范围。高权限账户(如企业账户、VIP 账户、跨境账户)在 AML 模型中应赋予更高的风险权重。

特征构造方法:

  • 权限等级量化:将账户类型按功能权限从低到高映射为 1-5 分。
  • 币种组合特征:账户支持币种数量,多币种账户通常涉及更复杂的资金流转。
  • 账户功能标记:是否支持对外转账、是否支持加密货币、是否支持跨境汇款。

3.4.2 开户时长(Account Age)

开户时长是 AML 模型中最简单但最有效的时序特征之一。大量洗钱案例显示,犯罪分子倾向于使用新开账户或长期休眠后突然激活的账户。

特征构造方法:

  • 基础计算:当前日期 - 开户日期,得到“开户天数”。
  • 生命周期阶段:将开户天数划分为:
    [0-7天] → 新开户期
    [7-30天] → 观察期
    [30-180天] → 成长期
    [180-365天] → 稳定期
    [365天+] → 成熟期
  • 休眠标记:若账户连续 90 天无交易,标记为休眠;若休眠后重新交易,标记为“休眠激活”。
注意:开户时长特征在模型训练中容易产生时间穿越问题。例如,用当前日期减去开户日期得到的值,在训练集和测试集的时间窗口不一致时会导致特征分布偏移。建议使用固定参考日期(如训练集最大日期)统一计算,或使用相对时间差(如“开户距首次交易天数”)。

3.5 客户基础特征层架构图

下图展示了客户基础特征层的整体架构,从原始数据输入到特征加工、风险映射,最终汇入 AML 特征宽表:

客户基础特征层架构图 原始数据输入 身份属性(国籍/职业/年龄) | 注册信息(渠道/IP/设备) | 账户类型 | 开户日期 特征加工与编码 WOE 编码 风险等级映射 分箱/聚合 频次统计 交叉特征 时间差计算 休眠标记 IP 信誉分 风险映射与聚合 客户基础风险分 | 国籍-职业交叉风险 | 账户生命周期阶段 | 注册聚集度指标 AML 特征宽表(基础特征层)

3.6 特征工程代码示例

以下 Python 代码演示了客户基础特征层的典型加工流程,使用 Pandas 和 NumPy 实现:

import pandas as pd
import numpy as np
from datetime import datetime

def build_customer_base_features(df, ref_date='2024-12-31'):
    """
    构建客户基础特征层
    df: 包含原始字段的 DataFrame
    ref_date: 固定参考日期,避免时间穿越
    """
    features = pd.DataFrame(index=df.index)
    ref_date = pd.to_datetime(ref_date)

    # 1. 国籍风险映射
    high_risk_countries = ['IR', 'KP', 'SY', 'MM', 'YE']
    features['nationality_risk'] = df['nationality'].apply(
        lambda x: 3 if x in high_risk_countries else (2 if x in ['RU', 'CN'] else 1)
    )

    # 2. 职业风险标记
    high_risk_occupations = ['lawyer', 'accountant', 'real_estate', 'jewelry']
    features['is_high_risk_occ'] = df['occupation'].isin(high_risk_occupations).astype(int)

    # 3. 年龄分箱
    bins = [0, 18, 25, 40, 60, 120]
    labels = ['0-18', '18-25', '25-40', '40-60', '60+']
    features['age_bin'] = pd.cut(df['age'], bins=bins, labels=labels)

    # 4. 开户时长计算
    account_open = pd.to_datetime(df['account_open_date'])
    features['account_age_days'] = (ref_date - account_open).dt.days

    # 5. 生命周期阶段
    def lifecycle_stage(days):
        if days <= 7: return 'new'
        elif days <= 30: return 'observation'
        elif days <= 180: return 'growth'
        elif days <= 365: return 'stable'
        else: return 'mature'
    features['lifecycle_stage'] = features['account_age_days'].apply(lifecycle_stage)

    # 6. 注册渠道风险分(示例映射)
    channel_risk_map = {'app': 1, 'web': 2, 'offline': 3, 'third_party': 4}
    features['channel_risk'] = df['register_channel'].map(channel_risk_map).fillna(2)

    # 7. 设备聚集度(同一设备关联账户数)
    device_counts = df.groupby('device_id')['customer_id'].transform('nunique')
    features['device_account_count'] = device_counts

    return features

3.7 特征有效性验证

基础特征层构建完成后,建议通过以下维度验证特征有效性:

  • 单变量分析:计算每个特征与目标变量(是否涉案)的 IV(Information Value)值,IV > 0.02 的特征保留。
  • 稳定性检验:使用 PSI(Population Stability Index)监控特征在训练集与测试集之间的分布偏移,PSI < 0.1 为合格。
  • 缺失率检查:职业、注册 IP 等字段缺失率通常较高,缺失率 > 60% 的特征建议剔除或使用“未知”类别填充。
最佳实践:在 AML 模型迭代中,建议将客户基础特征层作为基准特征集。先仅用基础特征训练一个轻量模型(如 Logistic Regression),作为后续引入交易行为特征、网络关系特征后的性能对比基线。这有助于量化每一层特征对模型的实际贡献。