2. 交易数据源解析:常见交易数据字段及其业务含义
交易风控的本质是从海量、异构的交易数据中提取出能够区分“正常”与“欺诈”行为的信号。要构建有效的特征,首先必须深刻理解每一类数据源背后的业务含义。本章将系统解析交易链路中六大核心数据源:订单、用户、商户、设备、IP 和 地理位置,并阐明每个字段在风控场景下的潜在价值。
核心原则: 风控特征工程不是简单的字段搬运,而是基于业务逻辑的“信号再编码”。理解字段的生成机制与异常模式,是特征有效性的前提。
2.1 交易数据全景图
一次完整的线上交易,会串联起多个系统,留下多维度的数据足迹。下图展示了交易事件发生时,各数据源之间的关联关系与数据流向。
2.2 订单数据字段解析
订单数据是交易的核心载体,记录了交易本身的属性。风控系统首先关注的便是订单层面的异常信号。
| 字段名称 | 业务含义 | 风控关注点 |
|---|---|---|
order_id |
订单唯一标识 | 是否连续、是否异常跳跃 |
amount |
交易金额(含币种) | 金额分布、整数金额、与历史偏离度 |
currency |
交易币种 | 是否与用户/商户所在地区匹配 |
product_id |
商品/服务ID | 是否为高风险品类(虚拟商品、充值卡) |
quantity |
购买数量 | 批量购买、与历史行为不一致 |
order_time |
订单创建时间 | 凌晨交易、节假日交易、与历史活跃时段偏离 |
payment_method |
支付方式(卡、钱包、转账) | 是否频繁更换、是否为高风险支付渠道 |
is_first_order |
是否首单 | 首单欺诈率显著高于复购 |
特征工程提示: 订单金额的
log1p 变换、金额与历史均值的 Z-Score、订单时间与用户典型活跃时段的差值(分钟级),都是高频使用的衍生特征。
2.3 用户数据字段解析
用户数据刻画了交易主体的身份与行为画像。欺诈分子通常会使用虚假或盗用的身份信息。
| 字段名称 | 业务含义 | 风控关注点 |
|---|---|---|
user_id |
用户唯一标识 | 是否为新建账号、账号年龄 |
register_time |
注册时间 | 注册距今时长、是否为批量注册 |
register_ip |
注册IP | 注册IP与交易IP是否一致、IP是否在黑名单 |
phone_number |
绑定手机号 | 是否为虚拟号段、是否与多个账号关联 |
email_domain |
邮箱域名 | 是否为临时邮箱、一次性邮箱 |
name |
用户姓名 | 是否与支付卡持卡人姓名一致 |
id_card |
身份证号(脱敏) | 年龄校验、是否与多个账号共用 |
vip_level |
用户等级 | 低等级用户突然高额消费 |
注意: 用户数据中的
phone_number 和 email_domain 是构建“关联网络特征”的关键字段。一个手机号关联超过 3 个账号,通常意味着存在团伙风险。
2.4 商户数据字段解析
商户数据在 B2C 或平台型交易中至关重要。商户本身可能被黑产控制,或存在恶意经营行为。
| 字段名称 | 业务含义 | 风控关注点 |
|---|---|---|
merchant_id |
商户唯一标识 | 商户入驻时长、历史投诉率 |
merchant_category |
商户类别(MCC) | 高风险 MCC(赌博、成人、虚拟货币) |
merchant_country |
商户所在国家 | 是否与用户 IP 所在地冲突 |
settlement_account |
结算账户 | 结算账户是否与历史欺诈商户关联 |
daily_txn_count |
商户日交易量 | 交易量突增、测试交易模式 |
2.5 设备数据字段解析
设备指纹是识别欺诈团伙和模拟器攻击的核心手段。设备数据通常由 SDK 采集,具有高维度、高噪声的特点。
| 字段名称 | 业务含义 | 风控关注点 |
|---|---|---|
device_id |
设备唯一指纹 | 是否在黑名单、是否与多个账号关联 |
device_type |
设备型号(如 iPhone 14) | 是否为模拟器、设备型号与系统版本是否匹配 |
os_version |
操作系统版本 | 版本过低、版本与设备型号不匹配 |
screen_resolution |
屏幕分辨率 | 模拟器常用分辨率(如 1080x1920) |
is_rooted |
是否越狱/ROOT | 越狱设备风险显著升高 |
is_emulator |
是否为模拟器 | 模拟器是批量欺诈的典型特征 |
language |
系统语言 | 系统语言与 IP 所在地语言不一致 |
timezone |
设备时区 | 时区与 IP 所在地时区偏差过大 |
特征工程提示: 设备数据中,“
device_id 关联账号数”和“device_id 关联 IP 数”是识别设备农场和代理 IP 池的强特征。建议使用 groupby('device_id')['user_id'].nunique() 进行聚合。
2.6 IP 数据字段解析
IP 地址是连接用户网络身份与物理位置的关键桥梁。IP 数据具有动态性,需要结合外部情报进行解析。
| 字段名称 | 业务含义 | 风控关注点 |
|---|---|---|
ip_address |
客户端 IP | 是否在黑名单 IP 库中 |
ip_country |
IP 所属国家 | 是否与用户注册地/商户所在地一致 |
ip_city |
IP 所属城市 | 是否与收货地址城市一致 |
isp |
网络运营商 | 是否为数据中心 IP、代理 IP |
is_proxy |
是否为代理/VPN | 代理 IP 是欺诈行为的高危信号 |
connection_type |
网络类型(WiFi/4G/5G) | 频繁切换网络类型、使用公共 WiFi |
注意: 不要直接使用原始 IP 地址作为特征,因为其基数过大且缺乏泛化能力。应使用 IP 的衍生特征,如
ip_country、isp、is_proxy,以及基于 IP 的统计特征(如“该 IP 过去 1 小时交易次数”)。
2.7 地理位置数据字段解析
地理位置数据(GPS、基站定位、WiFi 定位)提供了用户物理位置的精确信息,是识别位置欺诈和物流欺诈的关键。
| 字段名称 | 业务含义 | 风控关注点 |
|---|---|---|
latitude |
纬度 | 是否与 IP 定位经纬度一致 |
longitude |
经度 | 是否与 IP 定位经纬度一致 |
gps_accuracy |
GPS 精度(米) | 精度过低可能为伪造定位 |
geohash |
地理哈希编码 | 用于快速计算距离和区域聚集 |
shipping_address |
收货地址 | 是否与 GPS 位置匹配、是否为虚假地址 |
address_type |
地址类型(住宅/公司/驿站) | 驿站地址在欺诈交易中占比较高 |
2.8 数据源交叉验证:发现异常模式
单一数据源的特征往往容易被绕过,而多数据源交叉验证是提升风控鲁棒性的关键。下图展示了如何通过字段间的逻辑一致性来识别欺诈行为。
2.9 实战:字段解析与初步特征构建
下面通过一个简化的 Python 代码示例,展示如何对原始交易数据进行字段解析,并构建几个基础的风控特征。
import pandas as pd
import numpy as np
# 模拟原始交易数据
data = {
'order_id': ['ORD001', 'ORD002', 'ORD003'],
'amount': [150.00, 9999.99, 35.50],
'user_id': ['U1001', 'U1002', 'U1001'],
'register_days': [365, 1, 365], # 注册天数
'device_id': ['DEV_A', 'DEV_B', 'DEV_A'],
'ip_country': ['CN', 'US', 'CN'],
'gps_country': ['CN', 'CN', 'CN'],
'is_proxy': [0, 1, 0]
}
df = pd.DataFrame(data)
# 特征工程:字段解析与衍生
# 1. 金额异常度:与用户历史均值比较(此处简化,使用全局均值)
global_mean_amount = df['amount'].mean()
df['amount_z_score'] = (df['amount'] - global_mean_amount) / df['amount'].std()
# 2. 账号年龄特征:注册天数取对数
df['log_register_days'] = np.log1p(df['register_days'])
# 3. 设备关联账号数(示例中手动计算)
device_user_count = df.groupby('device_id')['user_id'].nunique().to_dict()
df['device_user_count'] = df['device_id'].map(device_user_count)
# 4. 交叉验证特征:IP 国家与 GPS 国家是否一致
df['ip_gps_match'] = (df['ip_country'] == df['gps_country']).astype(int)
# 5. 代理 IP 标记
df['is_high_risk_ip'] = df['is_proxy']
print("衍生特征预览:")
print(df[['order_id', 'amount_z_score', 'log_register_days',
'device_user_count', 'ip_gps_match', 'is_high_risk_ip']])