AI 在金融风控中的应用——工程师能做什么
AI 在金融风控中的应用——工程师能做什么
适读人群:对金融 AI 应用感兴趣的工程师 | 阅读时长:约16分钟 | 核心价值:去掉概念包装,讲清楚金融风控里 AI 真正在做什么
我有个前同事,现在在某头部消费金融公司做风控工程。上个月他跟我聊了三个小时,讲他们团队过去两年把 AI 引入风控系统的经历。
他说了一句话让我印象深刻:"金融 AI 和其他行业 AI 最大的区别,不是技术,是监管。技术问题我们都能解决,监管问题才是每个决策的天花板。"
这篇文章的内容主要来自这次聊天,加上我自己在几个相关项目里的观察。我不是金融从业者,写的是工程师视角的分析,金融专业人士如果有不同看法欢迎指正。
金融风控在做什么
很多人说到"金融 AI"就想到量化交易、股价预测。但风控是另一回事,它的核心问题是:这笔业务/这个用户是不是有问题?
风控场景大概分三类:
信贷风控:评估贷款申请人的还款能力和意愿,决定是否放款、放多少、利率多少。
交易风控:实时监控每一笔交易,识别欺诈、洗钱、异常操作。
运营风控:识别薅羊毛、黑产攻击、账号盗用等运营风险。
这三类场景对 AI 的要求不同,能用 AI 做的事情也不同。
交易异常检测:AI 最适合的场景
交易异常检测是金融风控里 AI 落地最成熟的场景,也是效果最明显的。
原因很简单:数据量大(每天几百万笔交易),规律复杂(正常交易和异常交易的边界模糊),规则很难穷举(黑产手法每天在变)——这几个特征天然适合机器学习。
我前同事他们团队的实现思路大概是这样的:
交易数据流
|
v
特征工程层
|
+---> 实时特征(当前交易的属性)
| - 金额、时间、商户类别
| - 设备指纹、IP 地理位置
|
+---> 历史统计特征(用户的行为统计)
| - 近7天/30天交易频率
| - 常用商户分布
| - 历史大额交易记录
|
+---> 图特征(社交网络和关联关系)
- 同设备的其他账号
- 收款方的风险评分
|
v
模型层
|
+---> 规则引擎(快,覆盖已知模式)
+---> 实时 ML 模型(XGBoost/LightGBM)
+---> 异步深度模型(更复杂的特征)
|
v
决策层
|
+---> 直接放行(低风险)
+---> 直接拦截(高风险)
+---> 人工审核队列(中间灰色地带)LLM 在这个流程里扮演什么角色?目前主要是辅助人工审核,不是替代模型做决策。
具体来说,当一笔交易进入人工审核队列,审核员要快速判断是否真的有问题。以前审核员要自己查很多系统,把信息拼在一起判断。现在可以用 LLM 做一个"案情摘要":
import anthropic
def generate_fraud_case_summary(transaction: dict, user_history: dict) -> str:
client = anthropic.Anthropic()
prompt = f"""你是一个金融风控分析助手。请根据以下信息,生成一份简洁的风险分析摘要,供人工审核员参考。
【当前交易】
- 交易金额:{transaction['amount']} 元
- 交易时间:{transaction['time']}
- 商户类型:{transaction['merchant_category']}
- 设备:{transaction['device_info']}
- IP 归属:{transaction['ip_location']}
- 风控模型评分:{transaction['risk_score']}(0-1,越高风险越大)
【用户历史行为特征】
- 近30天平均日交易额:{user_history['avg_daily_amount']} 元
- 历史常用商户类型:{user_history['common_merchants']}
- 历史大额交易(>5000元)次数:{user_history['large_tx_count']}
- 账号注册时长:{user_history['account_age_days']} 天
- 近7天是否有密码修改:{user_history['recent_pwd_change']}
【风控规则命中情况】
{transaction['triggered_rules']}
请输出:
1. 主要风险点(1-3条,简洁)
2. 支持放行的理由(如果有)
3. 审核建议(放行/拦截/需要联系用户验证)
注意:只提供分析参考,最终决定由人工审核员做出。"""
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=400,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text这个东西上线后,我前同事说审核效率提升了很多——审核员平均处理一个案件从 4 分钟降到 90 秒。不是因为判断变快了,而是信息整合变快了。
贷款风险评估:可解释性是核心要求
贷款风控对 AI 的要求比交易风控复杂得多,核心原因是可解释性。
在中国,金融机构的信贷决策受银保监会监管,如果拒绝一笔贷款申请,必须能够给出明确的拒绝理由(《商业银行互联网贷款管理暂行办法》等法规要求)。一个黑盒模型说"风险评分 0.78,拒绝"是不够的,必须能解释"因为您近6个月有3次逾期记录"。
这个要求让那些可解释性差的深度模型在信贷决策上很难用。实际上目前大多数机构用的还是 Scorecard(评分卡)或者可解释的 LightGBM,配合 SHAP 值输出特征贡献度。
import lightgbm as lgb
import shap
import numpy as np
def predict_with_explanation(model: lgb.Booster, features: np.ndarray, feature_names: list):
"""
给出预测结果和可解释的特征贡献度
"""
# 预测
risk_score = model.predict(features)[0]
# SHAP 解释
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(features)[0]
# 找出贡献最大的前3个特征
top_indices = np.argsort(np.abs(shap_values))[-3:][::-1]
explanations = []
for idx in top_indices:
feature = feature_names[idx]
contribution = shap_values[idx]
value = features[0][idx]
direction = "增加" if contribution > 0 else "降低"
explanations.append({
"feature": feature,
"value": value,
"contribution": contribution,
"direction": direction
})
return {
"risk_score": float(risk_score),
"top_risk_factors": explanations
}
# 输出示例:
# {
# "risk_score": 0.78,
# "top_risk_factors": [
# {"feature": "overdue_count_6m", "value": 3, "direction": "增加"},
# {"feature": "credit_utilization", "value": 0.92, "direction": "增加"},
# {"feature": "account_age_months", "value": 8, "direction": "增加"}
# ]
# }LLM 在这里可以做的事:把机器生成的特征贡献度翻译成人类可读的语言,用于给申请人的拒绝通知。
def generate_rejection_reason(explanation_data: dict) -> str:
client = anthropic.Anthropic()
factors_text = "\n".join([
f"- {f['feature']}:当前值 {f['value']},{f['direction']}风险"
for f in explanation_data['top_risk_factors']
])
prompt = f"""请将以下风控分析结果转化为一段给申请人的友好说明(约100字),说明本次申请未通过的主要原因。
风险因素:
{factors_text}
要求:
- 语言客观、礼貌
- 不要出现具体的模型分数
- 给出改善建议
- 符合金融机构的专业表述风格"""
response = client.messages.create(
model="claude-haiku-20240307",
max_tokens=200,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text用户行为分析:识别黑产的新思路
这是我觉得 LLM 在金融风控里最有潜力但还没被充分开发的方向。
传统的黑产识别靠的是特征工程——提取各种行为特征,训练分类器。但黑产手法更新很快,新的攻击模式出现时,旧的特征失效了,模型需要重新训练。
有一个思路是用 LLM 的语义理解能力,直接分析用户的操作序列是否符合正常用户行为模式。
def analyze_user_behavior_sequence(operations: list) -> dict:
"""
分析用户操作序列,判断是否存在异常行为模式
operations: 用户的操作记录列表,如 ['打开APP', '查看余额', '转账', ...]
"""
client = anthropic.Anthropic()
ops_text = " -> ".join(operations)
prompt = f"""你是一个金融风控专家。请分析以下用户操作序列是否存在异常:
操作序列:{ops_text}
正常用户通常的操作模式:
- 打开APP -> 查看账户 -> 进行目标操作(转账/消费/理财)
- 操作间隔自然,有停留查看时间
- 操作路径符合使用目的
请判断:
1. 该操作序列是否符合正常用户行为
2. 如果有异常,具体异常点在哪里
3. 风险等级(低/中/高)
以 JSON 格式返回:
{{"is_normal": true/false, "anomaly_points": [], "risk_level": "low/medium/high", "reason": ""}}"""
response = client.messages.create(
model="claude-haiku-20240307",
max_tokens=300,
messages=[{"role": "user", "content": prompt}]
)
import json, re
json_match = re.search(r'\{.*\}', response.content[0].text, re.DOTALL)
return json.loads(json_match.group())这个方案的实用性有争议——LLM 的延迟和成本在实时风控场景里未必合适,更适合用在离线分析或者人工复核辅助上。
金融场景对 AI 的特殊要求
聊了这么多具体应用,最后说几个金融场景特有的要求,是做一般 AI 项目不太会遇到的。
合规审计要求。 每一个风控决策必须可追溯、可审计。AI 模型的版本、输入特征、输出结果要全部留存,时间要求一般是5年以上。这意味着你不能随便更新模型,每次模型变更都要做 A/B 测试和影响评估,还要存档。
模型漂移监控。 金融数据分布会随宏观经济变化而变化。疫情、政策调整、经济周期都会导致模型在训练数据上效果好、上线后逐渐失效。必须有持续的监控机制,检测模型性能下降。
对抗样本的鲁棒性。 金融风控面对的是主动对抗——黑产会研究你的模型,构造能过检测的样本。模型不能只在测试集上效果好,还要经得起对抗测试。
数据隐私合规。 用户的金融数据属于敏感个人信息,用这些数据训练 AI 模型有严格的合规要求,包括数据最小化原则、用途限制原则。把用户金融数据发给第三方 AI API(包括 OpenAI、Anthropic)是明确违规的,所有 AI 处理必须在自己的基础设施上进行。
这最后一条是很多技术人员容易忽视的红线,但它是真实存在的硬约束,不是可以讨论的选项。
工程师的机会在哪里
说完这些,工程师在金融风控 AI 里能做什么?
不要想着"替换整个风控系统",那是大厂的事,有专门的风控团队和历史数据积累。
更现实的切入点:
- 效率工具:审核辅助、报告生成、规则文档整理
- 解释性增强:给现有模型的决策加上 LLM 生成的自然语言解释
- 知识库建设:把风控规则、历史案例结构化,做成内部知识检索工具
- 监控报警:用 LLM 分析日志,生成每日/每周的风险摘要报告
这些方向技术门槛不高,但真正能提升业务效率,是容易落地的切入点。
