4. 盗刷交易特征工程

特征工程是银行卡盗刷欺诈模型成败的分水岭。原始交易流水只有字段,没有“洞察”;特征工程的任务,是把时间、地点、金额、频次、设备、商户这六个维度上的原始字段,转化为能区分“本人正常消费”与“盗刷者操作”的判别信号。本节围绕这六个维度,讲清每个维度的核心原理、可落地特征、计算口径与常见陷阱。

一、核心原理:盗刷行为的六维偏离假设

盗刷者与持卡人本质上是两类行为主体,其行为模式在统计上存在系统性偏离。特征工程的核心假设是:盗刷交易会在至少一个维度上显著偏离该持卡人的历史行为基线。因此,绝大多数有效特征都是“相对特征”——相对于本人历史、相对于同类人群、相对于近期窗口的偏离度,而非绝对数值。

关键设计原则:先建立持卡人基线,再计算偏离度。绝对金额、绝对时间本身判别力很弱,而“金额是本人近90天均值的8倍”“交易发生在本人从未出现过的城市”“设备指纹首次出现”这类相对特征,才是模型真正依赖的信号。

二、六大维度特征清单与计算口径

下表给出每个维度的代表性特征、计算口径与判别逻辑,可直接作为特征开发的需求清单。

维度代表性特征计算口径判别逻辑
时间交易小时、距上次交易间隔、深夜占比、与本人活跃时段偏离度按持卡人历史交易分布统计活跃时段,计算当前交易落在低频时段的概率盗刷常发生在凌晨2–5点等本人极少交易的时段
地点交易城市、与常用地距离、跨城速度、IP归属地与商户地一致性计算当前交易地与上一笔交易地的球面距离除以时间差短时间内跨城甚至跨国,物理上不可能,是强欺诈信号
金额金额/本人均值比、金额分位、整数金额标记、余额试探标记以持卡人近30/90天金额分布计算z-score或分位数盗刷常先小额试探再大额盗取,金额分布呈双峰
频次1小时/24小时交易笔数、短时突增比、失败后重试次数滑动窗口计数,与本人历史同窗口均值比较盗刷者会连续快速试卡,频次突增明显
设备设备指纹是否首次、设备与持卡人绑定关系、模拟器/root标记、IP代理标记维护设备-持卡人关联表,标记新设备与风险设备新设备+新地点+大额,组合风险极高
商户商户类别码(MCC)、商户历史欺诈率、商户与本人消费偏好匹配度统计商户维度历史拒付率与盗刷率高风险MCC(如虚拟商品、充值)与本人偏好不符时可疑

三、方法流程:从原始字段到模型特征

特征工程不是一次性动作,而是一条可复用的流水线。建议按以下步骤推进:

  1. 数据对齐:以交易为主键,关联持卡人画像、设备表、商户表、地理位置表,确保时间戳统一到同一时区。
  2. 基线构建:为每个持卡人计算近30/90/180天的行为基线,包括金额均值与标准差、活跃时段、常用城市、常用设备。
  3. 偏离度计算:对当前交易逐维计算偏离,形成相对特征。
  4. 窗口聚合:用滑动窗口生成频次、金额累计、失败次数等时序特征。
  5. 组合交叉:构造“新设备×新地点×大额”“深夜×高频×高风险MCC”等交叉特征。
  6. 特征筛选与监控:用IV、PSI评估区分度与稳定性,剔除高相关冗余特征。

下面是一段用Python计算核心偏离特征的示例,展示口径如何落地:

import pandas as pd
import numpy as np

# 假设 tx 为当前交易,base 为该持卡人近90天基线
def build_features(tx, base):
    feats = {}
    # 金额偏离:z-score 与分位
    feats['amt_zscore'] = (tx['amount'] - base['amt_mean']) / (base['amt_std'] + 1e-6)
    feats['amt_ratio'] = tx['amount'] / (base['amt_mean'] + 1e-6)
    # 时间偏离:是否落在本人低频时段
    feats['is_night'] = int(tx['hour'] in [0,1,2,3,4,5])
    feats['hour_dev'] = abs(tx['hour'] - base['active_hour_median'])
    # 地点偏离:是否首次城市、跨城速度
    feats['is_new_city'] = int(tx['city'] not in base['common_cities'])
    feats['cross_city_speed'] = tx['distance_km'] / (tx['gap_hours'] + 1e-6)
    # 设备偏离
    feats['is_new_device'] = int(tx['device_id'] not in base['known_devices'])
    # 频次突增
    feats['cnt_1h_ratio'] = tx['cnt_1h'] / (base['cnt_1h_mean'] + 1e-6)
    return feats

工程建议:偏离度特征对基线窗口长度敏感。窗口太短,基线不稳;窗口太长,无法反映持卡人近期消费习惯变化。实践中常用“近30天为主、近90天为辅”的双窗口策略,并对新卡、低活跃卡单独处理。

四、案例场景:一笔典型盗刷的特征画像

某持卡人历史交易集中在工作日晚间、常住城市A、单笔金额200–800元、常用设备1台。某日凌晨3点发生一笔交易:金额9800元、城市B、新设备、1小时内第4笔、商户为虚拟充值类MCC。逐维特征表现为:

  • 时间:is_night=1,hour_dev 显著偏大;
  • 地点:is_new_city=1,cross_city_speed 远超合理阈值;
  • 金额:amt_zscore 超过5,amt_ratio 约15倍;
  • 频次:cnt_1h_ratio 远高于基线;
  • 设备:is_new_device=1;
  • 商户:高风险MCC且与本人偏好不匹配。

六个维度同时偏离,模型可给出极高欺诈分。反之,若仅金额偏大但时间、地点、设备均正常,则更可能是本人正常大额消费,需谨慎判定,避免误杀。

五、误区与复盘

误区一:把绝对特征当主力。直接用原始金额、原始小时数入模,模型难以泛化到不同消费层级的持卡人。应优先使用相对偏离特征。

误区二:忽视时间窗口泄漏。计算基线时若使用了当前交易之后的数据,会造成标签泄漏,离线AUC虚高、上线效果骤降。务必严格按时间切分。

误区三:设备指纹不稳定。设备ID可能因系统升级、重装而漂移,需结合多因子(设备型号、IP、行为习惯)综合判定,而非单一依赖。

误区四:忽略业务可解释性。风控特征需能向审核人员解释。建议对每个特征保留可读的触发原因,便于人工复核与策略调优。

复盘时建议按维度统计特征覆盖率、区分度(IV)与稳定性(PSI),并定期回看误杀与漏杀案例,定位是哪个维度的特征口径需要修正。特征工程是迭代过程,只有持续用真实盗刷样本校验,六维特征才能真正形成稳定的判别能力。