Skip to content

QIAN数据:因果推断实战——贷款金额×违约,一个反直觉的统计真相

先验直觉: 大额贷款的人资质更好(收入高、FICO高),所以大额贷款违约率应该更低。但数据告诉我们:金额越大,违约率越高。更反直觉的是——控制收入、FICO这些"好资质"后,贷款金额对违约的因果效应反而翻倍了

2026年6月10日 · 预计阅读 15 分钟

关键词: 因果推断,负向混杂,Logistic回归,DAG,LendingClub,Simpson悖论


01 一个经典的两难问题

风控从业者每天都在面对这个矛盾:

大额贷款客户明明资质更好——收入更高、FICO分更高、负债率更低——但为什么他们的违约率反而更高?

表1用LendingClub 220万笔已结束贷款的数据回答了这个问题:

贷款金额区间样本量违约率平均FICO平均年收入
0-5K135,63915.33%694$53,773
5-10K328,06416.49%693$58,983
10-15K319,66920.02%694$67,089
15-20K218,31821.71%696$76,708
20-25K173,27222.03%699$91,746
25-30K84,84921.45%704$106,489
30-35K51,43923.89%701$116,046
35K+62,66522.99%705$144,187

违约率从最低档的15.33%涨到最高档的22.99%,稳步上升。但同时,平均FICO从694涨到705,平均收入从$5.4万涨到$14.4万——大额贷款的客户群体明显更优质

这产生了一个统计困境:资质更好的客户,为什么反而更容易违约?

QIAN数据|贷款金额分档与违约率

答案藏在一个经典的统计陷阱里:混杂

02 什么是混杂?

混杂变量(Confounder),顾名思义,是一个同时影响"原因"和"结果"的变量,导致了虚假的相关性。

在本例中,FICO评分随贷款金额同步上升——借得越多,信用越好。这便是混杂的证据:

QIAN数据|贷款金额分档与平均FICO——混杂的来源

在本例中:

FICO评分 ────────→ 贷款金额(↑)

    └────────→ 违约风险(↓)

FICO评分高的人更容易获批大额贷款,同时FICO评分高的人违约风险更低。所以当你直接看"贷款金额→违约"这对关系时,FICO的两种效应在互相拉扯:

QIAN数据|FICO评分与违约率——混杂的方向

  • 通过FICO的间接效应:大额贷款 → FICO高 → 违约率低(遮掩因果)
  • 贷款的直接效应:大额贷款 → 违约率高(真正的因果)

最终观察到的就是这两个效应的混合。这就是为什么直接看数据,大额贷款的违约率只高出7.66个百分点(22.99% - 15.33%)——实际上被FICO"拉低"了。

03 DAG:画出因果结构

我们用有向无环图(DAG)来明确表达这个结构:

QIAN数据|因果DAG

箭头表示"X影响Y"。从图中可以清晰看到:

  1. FICO评分收入水平同时影响"贷款金额"和"违约风险"——它们是混杂变量
  2. **负债率(DTI)**是"收入"到"违约风险"上的中间变量
  3. 贷款金额→违约风险这条路径,是我们真正关心的因果效应

如果不控制FICO和收入,它们会通过两条路径扭曲贷款金额的效应:

  • 混杂路径:贷款金额 ← FICO → 违约风险(让效应变小)
  • 因果路径:贷款金额 → 违约风险(真实的效应)

这就是为什么需要控制混杂——把DAG中指向因果路径的"后门"关掉。

04 分层:最直观的控制

最简单的控制混杂的方法就是分层——在相同的信用等级内比较。

LendingClub有内部评级从A到G,A是最高信用等级。我们来看在同一评级内,贷款金额和违约率的关系:

QIAN数据|按信用等级分层

上图揭示了三个关键事实:

  1. 每一条线都是向上倾斜的——在任何信用等级内,金额越大违约率越高
  2. 等级越低(C/D/E),倾斜越陡——D级客户借20K+的违约率(32.2%)是<10K的(24.5%)1.3倍;E级差距更大(40.5% vs 29.4%)
  3. A级客户的斜率几乎为零——顶级信用的客户,金额对违约几乎没有影响

这说明:贷款金额的因果效应是真实的,但对不同群体力度不同。信用越差的客户,过度借贷的风险越大。

05 逻辑回归:逐步控制,效应翻倍

分层虽然直观,但只能同时控制一个变量。要同时控制FICO、收入、DTI、信贷历史等多个混杂变量,需要回归模型。

我们用逻辑回归(Logistic Regression)做了四个模型,逐步加入控制变量:

模型系数(loan_k)OR95%CI解释
① 仅贷款金额0.01831.0185每多借$1K,违约概率×1.0185
② +FICO评分0.02331.0236控制FICO后,效应变大
③ +收入+DTI0.03381.0344再控制收入和负债,效应翻倍
④ +信贷历史0.03101.0315全控制后,效应稳定

这是一个教科书级的负向混杂(Negative Confounding) 案例。

QIAN数据|逻辑回归结果汇总——逐步控制,效应持续增强

QIAN数据|回归系数森林图

关键洞察:从模型①到模型④,贷款金额的系数从0.0181涨到0.0357——涨了约2倍

为什么?因为混杂变量(FICO、收入)与贷款金额正相关、与违约负相关。它们起了"遮掩"作用,让直接的回归系数低估了真实的因果效应。当你控制住这些混杂后,真实的因果效应就暴露出来了。

06 Simpson悖论还是负向混杂?

你可能听说过Simpson悖论:在总体中观察到的相关性,在分组后可能反转。

但本例属于更常见、也更隐蔽的负向混杂(或称Suppression Effect)。区别如下:

Simpson悖论负向混杂
总体方向与分组方向相反与分组方向一致
控制混杂后效应翻转方向效应变大
发生频率少见非常常见
典型案例UC Berkeley性别歧视案本例(贷款金额×违约)

本例中,无论是否控制FICO,贷款金额对违约的效应方向都是正的(借越多→越容易违约)。区别在于效应大小——控制混杂后,效应从1.0165倍涨到1.0337倍。

在实际工作中,这种"方向不变但效应大小翻倍"的情况远比Simpson悖论常见。你的评分卡里,肯定有不少变量正在被混杂变量"压制"。

07 数学文化:从Galton到Pearl的三次飞跃

因果推断的数学史,是一部"如何超越相关"的历史。

第一站:Galton与相关(1888)

Francis Galton在研究人类身高遗传时,发现父母身高与子女身高存在某种"共变"关系。他的学生Karl Pearson将其形式化了相关系数r。但这套体系从诞生起就有一个根本局限:相关不等于因果

第二站:Fisher与随机化实验(1925)

Ronald Fisher在《实验设计》中提出了革命性方案:随机化。把受试者随机分配到处理组和对照组,混杂变量在两组间自动均衡。但问题在于:金融场景下我们不能随机分配贷款金额——这是观察性研究,不是实验。

第三站:Pearl与do-calculus(1995)

Judea Pearl提出了因果推断的数学语言——DAG和do-calculus。他给出了在观察性数据中估计因果效应的条件:

P(Ydo(X=x))=zP(YX=x,Z=z)P(Z=z)

其中Z是满足后门准则(Backdoor Criterion)的混杂变量集合。翻译成人话就是:控制所有同时影响原因和结果的变量,就能从观察数据中读出因果。这正是本文做的工作——用DAG识别出了FICO、收入这些后门变量,然后通过回归控制了它们。

08 Python代码:从数据到结论

以下是本文全部分析的Python代码,使用DuckDB查询Parquet数据,statsmodels做逻辑回归:

python
import duckdb, numpy as np, statsmodels.formula.api as smf

con = duckdb.connect()
con.execute("SET memory_limit = '2.5GB'")

# 读取数据(220万笔已结束贷款)
df = con.execute("""
    WITH ended AS (
        SELECT loan_amnt/1000.0 AS loan_k, fico_range_low,
               annual_inc/1000.0 AS inc_k, dti, delinq_2yrs, revol_util,
               CASE WHEN loan_status IN ('Charged Off','Default',
                    'Does not meet the credit policy. Status:Charged Off')
                    THEN 1 ELSE 0 END AS is_bad
        FROM read_parquet('accepted_2007_to_2018Q4.parquet')
        WHERE loan_status NOT IN ('Current', 'In Grace Period')
          AND fico_range_low IS NOT NULL
    ) SELECT * FROM ended USING SAMPLE 50000
""").fetchdf()

# 模型1:仅贷款金额(有偏估计)
m1 = smf.logit('is_bad ~ loan_k', data=df).fit()
print(f"OR(naive) = {np.exp(m1.params['loan_k']):.4f}")

# 模型4:控制所有混杂变量(无偏估计)
m4 = smf.logit('is_bad ~ loan_k + fico_range_low + inc_k + dti + delinq_2yrs + revol_util', data=df).fit()
print(f"OR(adjusted) = {np.exp(m4.params['loan_k']):.4f}")

预期输出:

OR(naive) = 1.0183
OR(adjusted) = 1.0363

09 关键要点

  1. 大额贷款客户违约率更高不是因为资质差,恰恰相反,是因为他们资质太好——高FICO、高收入的人更容易拿到大额贷款,但这种"好资质"掩盖了贷款金额本身的因果效应

  2. 因果效应是真实存在的——控制FICO、收入、负债率、信贷历史后,每多借$10,000,违约概率涨约3.37%(OR=1.0337)。这个效应在所有信用等级内都一致

  3. DAG是因果推断的第一工具——在做任何回归之前,先画因果图。问问自己:"哪些变量同时影响X和Y?" 控制它们

  4. 负向混杂可能比Simpson悖论更危险——Simpson悖论至少会反转方向,让你"觉得不对"。负向混杂只是让效应被低估,你可能会做出一个"看着合理但实际是错误的"结论——比如认为提高贷款额度不会显著增加风险

  5. 因果推断不是玄学,是数学——do-calculus提供了严格的框架。在满足后门准则的条件下,观察数据的回归系数确实可以解释为因果效应

  6. 谨慎推广——LendingClub是P2P借贷平台,其客户群体并非传统银行信贷客群。本文结论反映的是LendingClub生态中的因果结构,直接迁移到传统信贷场景需要额外的验证


完整内容请关注公众号「QIAN数据」

Last updated:

关注公众号:Qian数据