风控规则分类与常见规则示例
风险控制系统的规则通常根据业务场景和风险类型进行分类。以下是一个全面的风控规则分类及具体示例:
一、基础规则分类
1. 频率类规则
-
高频检测:
- 同一IP/设备在X分钟内登录超过N次
- 同一账户在X秒内连续发起相同操作超过N次
- 同一银行卡在X小时内绑定超过N个账户
- 同一设备在X分钟内注册超过N个新账户
-
低频异常:
- 长期活跃用户突然长时间无活动
- 高频访问用户突然停止活动
2. 行为序列规则
- 非常规操作序列:
- 登录后直接进行大额转账(跳过常规浏览步骤)
- 注册→立即绑定银行卡→大额充值
- 短时间内连续修改关键信息(密码、手机号、邮箱)
3. 地理位置规则
-
不合理位置跳跃:
- 5分钟前在北京登录,5分钟后在上海操作
- 境外登录后立即进行敏感操作
- 与常用登录地距离超过合理范围
-
高风险地区:
- 来自已知诈骗高发地区的访问
- 来自政治敏感地区的异常访问
4. 设备指纹规则
-
设备异常:
- 模拟器/虚拟机特征检测
- 设备ID频繁更换
- 设备参数异常(非常规分辨率、非标准ROM)
-
设备关联:
- 多个账户共用同一设备
- 新设备首次登录即进行敏感操作
5. 时间维度规则
-
非活跃时段:
- 用户通常在白天活动,突然凌晨3点进行大额操作
- 节假日期间的异常活动模式
-
操作间隔异常:
- 两次关键操作间隔时间过短(如修改密码后立即转账)
- 操作响应时间异常(自动化脚本特征)
二、业务场景专项规则
1. 金融支付场景
-
支付风控:
- 单笔交易金额超过用户历史平均的X倍
- 当日累计交易金额达到阈值
- 收款账户为新添加的或高风险账户
- 交易时间与常规模式不符
-
信用卡欺诈:
- 短时间内多笔小额测试交易
- 交易金额呈阶梯式增长($1→$10→$100→$1000)
- "卡号测试"模式(连续尝试多个相似卡号)
2. 电商平台场景
-
刷单检测:
- 同一IP/设备大量购买同一商品
- 新注册账户首单即大额消费
- 购买后立即申请退货退款
-
薅羊毛检测:
- 同一优惠券被多个账户重复使用
- 异常领取模式(如脚本自动化领取)
- 新账户集中爆发式参与促销活动
3. 账户安全场景
-
账户盗用:
- 登录后敏感操作与用户历史行为不符
- 密码错误次数超限
- 账户在多个地理位置同时活跃
-
注册风险:
- 批量注册检测(相似用户名、相似注册时间)
- 虚假信息检测(临时邮箱、虚拟手机号)
- 注册后立即进行敏感操作
三、高级智能规则
1. 关联图谱规则
-
社交网络分析:
- 多个账户之间存在设备/IP/支付方式关联
- 聚集性异常(多个关联账户同时出现相似异常行为)
-
资金流转分析:
- 环形转账检测
- 资金快速分散集中模式
2. 机器学习模型
-
异常检测模型:
- 基于用户历史行为的异常度评分
- 无监督学习检测新型欺诈模式
-
预测模型:
- 基于行为的信用评分
- 交易风险概率预测
3. 复合规则
-
多维度加权评分:
- 综合设备风险分+行为异常分+位置风险分
- 动态阈值调整(根据当前风险态势自动调整阈值)
-
渐进式验证:
- 根据风险等级触发不同强度的验证措施
- 低风险:短信验证
- 中风险:人脸识别
- 高风险:人工审核
四、规则实现技术方案
1. 简单规则实现示例(Flink)
// 高频登录检测
public class HighFrequencyLoginRule extends KeyedProcessFunction<String, UserEvent, RiskAlert> {
private transient ValueState<Long> lastLoginTimeState;
private transient ValueState<Integer> loginCountState;
@Override
public void open(Configuration parameters) {
ValueStateDescriptor<Long> timeDescriptor =
new ValueStateDescriptor<>("lastLoginTime", Long.class);
lastLoginTimeState = getRuntimeContext().getState(timeDescriptor);
ValueStateDescriptor<Integer> countDescriptor =
new ValueStateDescriptor<>("loginCount", Integer.class);
loginCountState = getRuntimeContext().getState(countDescriptor);
}
@Override
public void processElement(
UserEvent event,
Context ctx,
Collector<RiskAlert> out) throws Exception {
if ("LOGIN".equals(event.getEventType())) {
Long lastLoginTime = lastLoginTimeState.value();
Integer count = loginCountState.value();
long currentTime = event.getTimestamp();
if (lastLoginTime != null &&
(currentTime - lastLoginTime) < TimeUnit.MINUTES.toMillis(5)) {
// 5分钟内再次登录
count = (count == null) ? 1 : count + 1;
if (count >= 5) {
out.collect(new RiskAlert(
event.getUserId(),
"HIGH_FREQ_LOGIN",
"5分钟内登录超过5次",
"HIGH"
));
}
} else {
count = 1;
}
loginCountState.update(count);
lastLoginTimeState.update(currentTime);
}
}
}
2. 复杂规则配置示例(JSON)
{
"ruleId": "GEO_LOCATION_001",
"ruleName": "异常地理位置跳跃检测",
"ruleType": "COMPLEX",
"conditions": [
{
"field": "location",
"operator": "CHANGED",
"compareTo": "last_location"
},
{
"field": "time_diff",
"operator": "LT",
"value": "3600000",
"unit": "ms"
},
{
"field": "distance_km",
"operator": "GT",
"value": "800"
}
],
"riskLevel": "HIGH",
"action": {
"type": "MULTI_STEP",
"steps": [
{
"action": "REQUIRE_2FA",
"method": "SMS_OTP"
},
{
"action": "NOTIFY",
"channel": "RISK_TEAM"
},
{
"action": "FLAG_ACCOUNT",
"level": "SUSPECTED"
}
]
}
}
五、规则管理最佳实践
-
分层规则体系:
- 基础规则:高准确率简单规则(如黑名单)
- 业务规则:特定场景规则(如支付风控)
- 智能规则:模型驱动的复杂规则
-
生命周期管理:
- 规则版本控制
- 规则效果评估(准确率/召回率)
- 规则自动退役机制
-
动态调整:
- 节假日特殊规则
- 基于实时风险态势的阈值调整
- A/B测试新规则
-
可视化配置:
实际风控系统通常会组合数百甚至上千条规则,并根据业务变化持续优化。有效的风控系统应该既能覆盖已知风险模式,又能通过智能方法发现新型风险。