拓冰建站拓冰建站
首页 / 资讯中心 / 正文

评分卡分数转换:从逻辑回归概率到业务分数的完整推导与实战

1. 评分卡分数转换从概率到分数的“翻译”过程做风控或者信贷策略的朋友对评分卡肯定不陌生。我们经常看到“客户评分650分”这样的表述但这个分数是怎么从模型预测的概率变过来的很多人直接用现成的公式套但里面的参数怎么定为什么是650分而不是别的数字今天我就把这块掰开揉碎了讲清楚从逻辑回归的概率输出开始一步步推导出那个大家常用的分数转换公式并聊聊在实际应用里怎么设置参数以及那些容易踩的坑。简单说评分卡分数转换就是一个“标准化”和“业务化”的过程。模型比如逻辑回归吐出来的是一个介于0到1之间的概率值表示客户违约的可能性。但这个概率值对业务人员来说不直观——“这个客户违约概率是0.03到底是好是坏” 不如一个像考试分数一样的分数来得直接。所以我们需要一个映射规则把概率映射到一个预设的分数区间比如300-850分同时还要让分数的变化有业务意义比如分数每增加多少分违约几率就翻一倍这就是所谓的“刻度”。这个过程的核心就是解决“怎么转”和“参数怎么设”这两个问题。2. 逻辑回归概率输出的再理解WOE与LogOdds的桥梁在进入公式推导前我们得先统一一下起跑线。评分卡模型尤其是传统风控评分卡其基石往往是逻辑回归而逻辑回归的输入又常常是经过WOEWeight of Evidence编码后的变量。所以理解分数转换得从逻辑回归的表达式开始。一个标准的逻辑回归模型其输出的并不是直接的分数而是事件发生比如违约的概率P。逻辑回归的公式是P 1 / (1 e^(-z))这里的z就是所谓的“线性组合”或“Logit”它等于z β₀ β₁*x₁ β₂*x₂ ... βₙ*xₙ其中β₀是截距项β₁到βₙ是各个特征x的系数。当我们的特征x是连续变量或哑变量时z就是这些值的加权和。但在评分卡的世界里x通常是分箱后的变量并且用WOE值替代了原始值。WOE是什么简单说它衡量了某个分箱内好坏客户的分布与整体分布的差异。公式是WOE ln((%Good_i) / (%Bad_i))。你可以把它理解为这个分箱的“证据权重”正值表示这个分箱的客户相对整体更好好客户占比高负值则相反。关键的一步来了当我们用WOE值作为逻辑回归的输入特征时一个美妙的性质出现了。逻辑回归的线性部分z可以写成z β₀ Σ(β_i * WOE_i)由于逻辑回归的系数β_i和 WOE 都是对数形式它们的乘积β_i * WOE_i具有可加性。更重要的是整个z值在逻辑回归的语境下它其实就是Log(Odds)也就是好坏比的对数。因为逻辑回归的本质就是拟合Log(P/(1-P)) z。所以z Log(Odds) Log( (好客户概率) / (坏客户概率) )。这个等式是后续所有推导的基石。评分卡的分数最终就是要与这个Log(Odds)建立线性关系。为什么是线性因为线性关系最简单、最稳定分数每变化固定单位Odds好坏比就变化固定的倍数这对业务解释至关重要。注意这里有一个常见的误解区。有些资料会直接说“分数是概率的线性转换”这是不准确的。分数是与Log(Odds)呈线性关系而不是与概率P本身。概率P和Log(Odds)之间是非线性的S型曲线关系。直接线性转换概率会带来很多问题比如分数区间无法控制、刻度意义不明确等。3. 核心公式的详细推导参数θ与PDO的由来现在我们知道分数Score应该与Log(Odds)成线性关系于是可以写出最基础的公式Score A - B * Log(Odds)这里为什么是A - B * z而不是A B * z这是一个约定俗成的习惯我们希望分数越高风险越低即Odds越小Log(Odds)越小。所以给Log(Odds)加上一个负号确保Log(Odds)减小时分数增加。A和B就是我们需要确定的两个关键参数。接下来我们引入两个业务上可理解的参数来定义A和B基准分数θ, Theta当好坏比Odds为某个特定值θ时的分数。例如我们设定当好坏比为1:60即60个好客户对应1个坏客户时基准分数为600分。那么θ 60。分数翻倍间隔PDO, Points to Double the Odds分数每增加多少分好坏比Odds就翻一倍即变为原来的2倍。例如设定PDO20意味着分数每增加20分客户是好客户的可能性Odds就翻一倍。有了这两个业务解释我们就可以列方程求解A和B了。步骤1根据基准分数定义列方程当Odds θ时Score 基准分数。记基准分数为S_θ。 代入公式S_θ A - B * Log(θ)………… (方程1)步骤2根据PDO定义列方程PDO的定义是分数增加PDO分Odds翻倍。 假设当前分数为S对应Odds。那么分数变成S PDO时对应的Odds应该等于2 * Odds。 分别写出等式S A - B * Log(Odds)S PDO A - B * Log(Odds) A - B * Log(2 * Odds)用第二个等式减去第一个等式(S PDO) - S [A - B * Log(2*Odds)] - [A - B * Log(Odds)]PDO -B * [Log(2*Odds) - Log(Odds)]PDO -B * Log(2)因为Log(2*Odds) - Log(Odds) Log(2)PDO -B * ln(2)这里Log通常指自然对数ln于是我们得到参数B的表达式B -PDO / ln(2)………… (方程2)步骤3求解参数A将方程2的B代入方程1S_θ A - [-PDO / ln(2)] * ln(θ)S_θ A (PDO / ln(2)) * ln(θ)所以A S_θ - (PDO / ln(2)) * ln(θ)………… (方程3)最终公式将A和B代回原始公式Score A - B * Log(Odds)得到评分卡分数转换的完整公式Score A - B * ln(Odds)其中B PDO / ln(2)A S_θ B * ln(θ)更常见的写法是将其合并Score S_θ (PDO / ln(2)) * [ln(θ) - ln(Odds)]Score S_θ (PDO / ln(2)) * ln(θ / Odds)公式解读S_θ和PDO是你根据业务需求设定的两个“锚点”。θ是你设定的基准好坏比。Odds是模型对单个客户预测出的好坏比Odds (1 - P) / P其中P是模型预测的违约概率。公式计算出的Score就是该客户的最终得分。Odds越小客户越好ln(θ/Odds)越大分数越高。4. 参数设定实战如何确定θ与PDO理论推导完了到了最关键的实操环节S_θ、θ和PDO这三个参数到底该怎么设这里没有绝对正确的答案但有通用的策略和需要避开的坑。4.1 基准点 (θ, S_θ) 的设定基准点定义了分数体系的“原点”。通常分两步确定基准好坏比θ这需要参考你业务的整体好坏客户比例。例如在你的建模样本或近期业务中好客户未违约与坏客户违约的比例大约是50:1。那么你可以设定θ 50。这意味着一个“中等”风险水平的客户其好坏比等于整体平均水平将会获得基准分数S_θ。有时为了计算方便也会取θ1即好坏比1:1时对应基准分但这样基准分的业务含义就不如参照整体水平直观。确定基准分数S_θ这决定了你分数区间的中位数。常见的个人信用评分区间是300-850或400-800。如果你想将600分设为中等水平那么就令S_θ 600。这样当客户的风险等于整体平均水平时他的得分就是600。分数高于600说明他优于平均水平低于600则劣于平均水平。实操心得不要闭门造车。设定基准点时最好能参考一下行业惯例或公司历史评分卡的分数分布。比如你公司旧系统的评分中位数大概是620分那么新模型设置S_θ620可以保证分数人群分布不会出现剧烈跳变便于业务方理解和接受。突然把中等风险客户的分数从620改成500会让业务团队非常困惑。4.2 分数翻倍间隔 (PDO) 的设定PDO决定了分数的“刻度”即分数每变化一分风险变化有多敏感。PDO值越小刻度越“精细”分数变化一点风险变化就很大。这适合对风险区分度要求极高的场景但分数可能对模型波动过于敏感。PDO值越大刻度越“粗糙”需要更大的分数变化才能体现风险差异。分数会更稳定但可能掩盖了一些细微的风险差别。行业常见值20、30、40、50 都是常见的PDO取值。其中PDO20尤为普遍。为什么我们来算一下如果PDO20根据公式B PDO / ln(2) ≈ 20 / 0.693 ≈ 28.85。这意味着Log(Odds)每减少1即Odds变为原来的e^-1 ≈ 0.368倍风险降低约63%分数增加约28.85分。这个变化幅度在业务上比较直观好记分数差20分风险差一倍。如何选择你的PDO看业务需求和业务方讨论他们希望分数相差多少分时风险水平应该有“明显”或“倍数级”的差异。是20分一倍还是50分一倍看分数分布你可以用不同的PDO值做模拟计算观察最终分数的人群分布。一个好的PDO应该让分数尽可能均匀地分布在预设的区间内避免大量客户堆积在某个狭窄的分数段。同时分数分布应该与风险等级如A、B、C、D卡有清晰的对应关系。与旧系统对齐如果是在更新旧模型可以反推旧模型的PDO。从旧模型中取几个典型分数和对应的通过率/坏账率反向计算出近似的PDO值然后新模型沿用或微调以保证策略的连续性。注意PDO和基准点设定后整个分数体系就固定了。一旦上线严禁随意修改。因为策略规则如“分数低于580分拒绝”都是基于这个分数体系制定的。修改参数等于重置了整个评分体系所有历史策略和数据分析都会失效。4.3 一个完整的计算示例假设我们设定基准好坏比θ 50整体好坏比约50:1基准分数S_θ 600分分数翻倍间隔PDO 20分首先计算常数B和AB PDO / ln(2) 20 / 0.693147 ≈ 28.8539A S_θ B * ln(θ) 600 28.8539 * ln(50) ≈ 600 28.8539 * 3.912 ≈ 600 112.9 ≈ 712.9现在模型预测出一个客户的违约概率P 0.02即2%。 那么该客户的好坏比Odds (1 - P) / P 0.98 / 0.02 49。 计算该客户得分Score A - B * ln(Odds) 712.9 - 28.8539 * ln(49) ≈ 712.9 - 28.8539 * 3.8918 ≈ 712.9 - 112.3 ≈ 600.6这个得分约601分非常接近我们的基准分600。这是合理的因为他的好坏比49:1几乎等于我们设定的基准好坏比50:1。再计算一个高风险客户违约概率P 0.110%。Odds 0.9 / 0.1 9Score 712.9 - 28.8539 * ln(9) ≈ 712.9 - 28.8539 * 2.1972 ≈ 712.9 - 63.4 ≈ 649.5得分约649.5分。相比601分的客户他的分数低了约48.5分。根据PDO20分数差48.5分意味着风险相差约2^(48.5/20) ≈ 2^2.425 ≈ 5.4倍。我们来验证一下601分客户的Odds是49649.5分客户的Odds是949 / 9 ≈ 5.44完全吻合。这证明了我们公式和参数设置的正确性。5. 从模型输出到最终分数全链路计算步骤在实际的评分卡开发与部署中分数转换不是一个简单的后期公式套用而是嵌入在全链路中的。下面我梳理一下从原始数据到最终分数的完整步骤并指出每个环节的注意事项。5.1 步骤一模型训练与系数获取首先你用逻辑回归通常结合WOE编码训练好一个模型。模型会输出两部分核心信息截距β₀一个数值。特征系数β_i每个特征对应一个WOE变量的系数也是一个数值。关键检查点务必确认你的逻辑回归模型是使用WOE值作为输入特征进行训练的而不是原始分箱或其它编码方式。因为后续的分数计算公式依赖于“每个特征的贡献 系数 * WOE”这个形式。如果你用了One-Hot编码整个推导逻辑会不同公式会更复杂。5.2 步骤二计算每个特征的分档分数这是评分卡“可解释性”的精华所在。我们不直接使用β_i * WOE_i而是将其转换为分数。 回顾总公式Score A - B * (β₀ Σ(β_i * WOE_i))可以将其拆解Score (A - B * β₀) Σ( -B * β_i * WOE_i )令BaseScore A - B * β₀基础分Score_i -B * β_i * WOE_i第i个特征在特定分箱下的得分那么总得分Score BaseScore Σ(Score_i)实操过程根据设定的A和B由你设定的θ,S_θ,PDO计算得出以及模型输出的截距β₀计算BaseScore。对于每个特征变量计算其每个分箱Bin的得分。你需要该特征在模型中的系数β_i。该分箱的WOE值WOE_i。计算Score_i -B * β_i * WOE_i。将每个特征的所有分箱及其对应的Score_i整理成一张表这就是经典的“评分卡”。业务人员可以直观地看到“年龄在30-35岁”加5分“近3个月查询次数大于10次”扣15分。注意这里-B * β_i是一个常数对于某个特征是固定的。所以一个特征下不同分箱的分数差异完全由WOE_i决定。WOE越高的分箱客户质量越好Score_i也越高因为-B * β_i通常为正数如果β_i为负的话。逻辑回归中正系数表示该特征值增大会增加违约概率所以好分箱的WOE对应负的系数贡献乘以-B后变正分。5.3 步骤三对新样本进行评分当一个新的客户申请进来评分过程如下数据预处理获取客户原始特征值。分箱映射根据建模时定义的分箱规则确定每个特征值属于哪个分箱。查表得分根据“评分卡”表查找每个特征对应分箱的分数Score_i。求和计算将所有特征的Score_i相加再加上BaseScore得到该客户的总分。为什么用查表而不是重新计算WOE效率查表是O(1)操作极其快速满足线上实时评分的高并发要求。稳定性避免了线上环境因小数精度或计算库差异导致的WOE计算微小偏差确保分数绝对一致。可解释性评分的每一步都清晰可见便于对评分结果进行解释和质疑。5.4 步骤四分数校准与验证分数转换后绝不能直接上线必须进行严格的校准和验证。分数分布检验在验证集或跨时间样本上计算分数观察分数分布是否合理是否呈近似正态分布是否在预设区间内有无异常堆积。预测一致性验证将分数分段如每20分一段。计算每个分数段内客户的实际违约率。根据每个分数段的中位数分数利用分数转换公式反向推导出该分数对应的预测违约率。公式为P 1 / (1 exp( (A - Score) / B ))。对比每个分段内“实际违约率”和“预测违约率”。它们应该基本一致。如果出现系统性的高估或低估说明模型本身或分数转换的基准可能有问题。业务对齐验证将分数分布与现有的业务策略如通过率、坏账率进行对比。例如当前拒绝线是580分对应的坏账率是2%。新模型下580分对应的预测和实际坏账率是否也接近2%如果偏差较大可能需要与业务方协商调整拒绝线或者重新审视模型和分数参数。6. 常见陷阱与高级考量在实际应用中即使公式推导得再完美也会遇到各种意想不到的问题。下面分享几个我踩过的坑和对应的解决方案。6.1 陷阱一训练与预测的分数偏移问题描述在训练集上计算出的分数分布与在全新的测试集或上线后的真实数据上计算出的分数分布存在整体性的偏移例如整体高了10分或低了10分。根本原因样本分布变化训练样本通常是历史放款样本的好坏比例θ_train与当前总体客户的好坏比例θ_population不一致。你设定的基准点θ如果基于训练样本那么当应用到总体时分数基准就偏了。特征分布变化客群特征本身发生了变化例如新拓展的年轻客群占比增加导致特征分箱的WOE值所基于的分布发生了变化但评分卡仍然使用旧的、基于训练样本计算的WOE分数表。解决方案基准点校正在设定θ时不要直接用建模样本的Odds而要使用一个对总体客群更有代表性的估计值例如通过时间窗口外样本或通过业务经验判断。分数平移不推荐如果偏移是整体性的可以计算一个偏移量对所有分数进行加减调整。但这破坏了分数与Log(Odds)的线性关系是下策。模型重构与监控最根本的方法是定期重构模型和评分卡并使用PSIPopulation Stability Index等指标持续监控特征分布和分数分布的稳定性。6.2 陷阱二逻辑回归截距项的处理问题描述在计算BaseScore A - B * β₀时很多人忽略了β₀的意义。β₀是在建模样本的特定好坏比下估计出来的。如果建模样本的好坏比与设定的基准好坏比θ差异很大会导致BaseScore异常进而影响整体分数区间。解决方案 在训练逻辑回归模型时可以考虑使用样本权重或分层抽样使训练样本的好坏比尽可能接近你设定的基准好坏比θ或者接近真实的总体好坏比。这样得到的β₀会更合理。如果无法调整样本那么在设定A和B后计算出的BaseScore可能非常大或非常小这时需要结合S_θ来评估。如果BaseScore占据了总分的绝大部分比如90%而特征分数波动很小说明模型区分能力可能不足或者参数设定需要调整。6.3 高级考量非逻辑回归模型的分数转换现在很多项目会用更复杂的模型如XGBoost、LightGBM。这些模型直接输出的是概率值但没有逻辑回归那样清晰的Log(Odds) 线性组合的结构。如何为这类模型创建评分卡常用方法分数映射法将模型预测的概率P直接视为逻辑回归输出的概率。然后套用同样的公式Odds (1-P)/P再代入Score A - B * ln(Odds)。这种方法简单粗暴但失去了“特征分数可加”的可解释性。你只能得到一个总分无法知道每个特征具体贡献了多少分。逻辑回归校准法将复杂模型如GBDT的输出概率或其中间结果作为特征训练一个逻辑回归模型进行校准。这个逻辑回归模型可以只有一个输入特征即GBDT的输出分数也可以将GBDT中各个树的输出或重要特征加入。然后用这个逻辑回归模型来套用评分卡公式。这样可以在一定程度上保留可解释性。基于分段的经验映射放弃严格的公式推导直接根据业务目标定义分数段。例如将预测概率排序后等分为20段然后手动给每段赋予一个分数范围如概率最低的5%给800-850分。这种方法非常灵活但完全依赖于主观经验缺乏数学一致性且难以在不同模型或时间点之间保持一致。对于追求模型性能又需要一定解释性的场景我个人的经验是采用“GBDT 逻辑回归校准”的混合模式。用GBDT做特征转换和初步预测将其输出结果可以是概率值也可以是叶子节点索引的One-Hot向量输入到一个逻辑回归中最终以逻辑回归的输出为准来套用评分卡公式。这样既能利用GBDT强大的非线性拟合能力又能通过逻辑回归获得稳定、可解释的分数转换结构。分数转换公式的推导看似是枯燥的数学但每一个参数背后都连着真实的业务决策。PDO设大一点还是小一点基准分定高一点还是低一点直接影响了审批策略的松紧和风险定价的高低。下次当你再看到“评分650”时希望你能立刻想到它背后代表的违约几率以及这个分数是如何从一个个细小的客户特征中累积起来的。这才是评分卡作为风险管理工具真正发挥价值的地方。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门