一、因果推断与风控概述:什么是因果推断?为什么风控需要因果?从相关到因果的思维转变
1.1 先讲个真实的故事
几年前,我接手了一个信贷模型优化项目。
模型上线后,AUC 从 0.72 提升到了 0.78,看起来不错。但奇怪的是,逾期率反而上升了 5%。
排查后发现,模型学到了一个强特征:「用户是否在凌晨 3 点登录 APP」。这个特征跟逾期高度相关——凌晨活跃的用户,逾期率确实高。
但问题是:凌晨登录,真的是导致逾期的原因吗?
不是。那些用户只是夜班工作者,收入稳定,还款意愿并不差。模型把「相关」当成了「因果」,结果误杀了大量好客户。
嗯,这就是典型的「相关 ≠ 因果」陷阱。
核心观点:风控模型如果只学「相关」,很容易被数据中的虚假信号带偏。因果推断,就是帮你找到真正的「因」。
1.2 什么是因果推断?
说白了,因果推断就是回答「如果……会怎样」的问题。
- 如果我给这个用户提额 20%,他会逾期吗?
- 如果我拒绝这笔贷款,用户会去借高利贷吗?
- 如果我发送催收短信,用户会提前还款吗?
这些问题,传统机器学习回答不了。因为机器学习只看到「发生了什么」,而因果推断要回答的是「如果发生别的情况,会怎样」。
我个人的理解是:因果推断 = 数据 + 假设 + 反事实推理。
举个例子:
- 相关:打伞的人越多,下雨的概率越大。
- 因果:打伞不会导致下雨,下雨才是打伞的原因。
在风控里,这个区别太重要了。你想想看,如果模型把「打伞」当成「下雨」的原因,那晴天里看到有人打伞,模型就会预测要下雨——这不就乱套了吗?
1.3 为什么风控需要因果?
我总结了三个最直接的原因:
- 干预决策的需要
风控的本质是做决策:批不批?提不提额?催不催收?
每个决策都是一个「干预」。因果推断能告诉你干预的效果。 - 避免辛普森悖论
我在项目中遇到过:整体上看,某个特征跟逾期正相关,但分到每个子群体里,却是负相关。
如果不做因果分析,你根本发现不了这种「反转」。 - 模型的可解释性
监管越来越严,你不能只说「模型说拒就拒」。你得解释:为什么这个用户会被拒?是哪个因素导致的?
因果推断天然提供这种解释能力。
避坑指南:我曾经以为,只要特征足够多、模型足够复杂,就能自动学到因果关系。后来发现,这是天真的想法。没有因果假设,再深的神经网络也只是在拟合「相关」。
1.4 从相关到因果的思维转变
这个转变,说起来简单,做起来难。我把它拆成三个层次:
| 层次 | 传统思维(相关) | 因果思维 |
|---|---|---|
| 第一层 | 看到 A 和 B 一起出现 | 问:A 是否导致 B? |
| 第二层 | 用 A 预测 B | 问:改变 A,B 会变吗? |
| 第三层 | 追求预测精度 | 追求干预效果 |
举个例子:
- 相关思维:「用户点击了广告 → 用户申请了贷款 → 用户逾期了。所以点击广告的用户风险高。」
- 因果思维:「用户点击广告,可能是因为他本来就缺钱。缺钱才是逾期的原因,点击广告只是结果。所以,屏蔽广告并不能降低逾期率。」
你看,同样的数据,不同的思维,得出的结论完全不同。
1.5 因果推断的核心框架
下面这张图,是我自己总结的因果推断在风控中的落地框架:
1.6 一个简单的代码示例
为了让你更直观地理解「相关 vs 因果」,我写个简单的 Python 模拟:
import numpy as np
import pandas as pd
# 模拟数据:10000个用户
np.random.seed(42)
n = 10000
# 真实因果结构:
# 收入 → 逾期(负相关)
# 收入 → 凌晨登录(负相关)
# 所以:凌晨登录和逾期正相关,但这是虚假相关
income = np.random.normal(5000, 1500, n) # 收入
overdue_prob = 1 / (1 + np.exp(-(income - 5000) / 1000)) # 逾期概率,收入越高逾期越低
overdue = np.random.binomial(1, overdue_prob)
late_night_login_prob = 1 / (1 + np.exp(-(5000 - income) / 800)) # 收入越低越容易凌晨登录
late_night_login = np.random.binomial(1, late_night_login_prob)
# 计算相关性
corr_login_overdue = np.corrcoef(late_night_login, overdue)[0, 1]
corr_income_overdue = np.corrcoef(income, overdue)[0, 1]
print(f"凌晨登录与逾期的相关系数: {corr_login_overdue:.3f}")
print(f"收入与逾期的相关系数: {corr_income_overdue:.3f}")
# 输出:
# 凌晨登录与逾期的相关系数: 0.152
# 收入与逾期的相关系数: -0.487
看到了吗?凌晨登录和逾期正相关(0.152),但收入才是真正的因(-0.487)。
如果你只看相关,就会误以为「凌晨登录导致逾期」。但因果分析告诉你:是低收入同时导致了凌晨登录和逾期。
注意:这个例子虽然简单,但真实业务中类似的陷阱比比皆是。我见过太多团队,因为没做因果分析,把「相关」当「因果」,结果策略上线后效果远低于预期。
1.7 小结
这一章,我们聊了:
- 因果推断是什么——回答「如果……会怎样」
- 风控为什么需要因果——干预决策、避免悖论、可解释性
- 从相关到因果的思维转变——三个层次,一个框架
我个人觉得,因果推断最大的价值不是给你一个「更好的模型」,而是给你一个更清醒的头脑。让你在做决策时,能问出那个关键问题:
「这个关系,是真的因果,还是只是相关?」
下一章,我们会深入因果推断的数学基础——DAG(有向无环图)和 do-算子。到时候我会用实际案例,带你一步步构建因果图。
公众号:蓝海资料掘金营,微信deep3321