调水温:一次调准很难,边试边调更常见
洗澡时水太冷,你不会先计算一个完美公式再调水龙头。更常见的做法是调一点、试一下,再继续修正。梯度下降和递归更新就是这种“边观察、边调整”的思想。
金融模型面对的是不断变化的数据。客户今天还款、明天经营、下个月行业变化,模型不能永远停留在第一次训练的状态。
模型现在的参数和误差
新样本告诉我们方向偏在哪里
沿着误差下降方向逐步修正
第三章
在线更新、数值稳定与过拟合控制
本章解释最小二乘闭式解在金融场景下的局限,系统介绍梯度下降、SGD、动量、Adam、递归最小二乘以及 LASSO、Ridge 和 Elastic Net。
普通最小二乘的闭式解清晰优雅,但在大规模、高维、实时更新的金融场景中存在计算和稳定性问题。
洗澡时水太冷,你不会先计算一个完美公式再调水龙头。更常见的做法是调一点、试一下,再继续修正。梯度下降和递归更新就是这种“边观察、边调整”的思想。
金融模型面对的是不断变化的数据。客户今天还款、明天经营、下个月行业变化,模型不能永远停留在第一次训练的状态。
模型现在的参数和误差
新样本告诉我们方向偏在哪里
沿着误差下降方向逐步修正
一个学生为了记住训练题,把每道题答案都背下来,考试换题就不会了。过拟合也是这样:模型把历史样本里的偶然噪声当成规律。
正则化的作用像刹车:不让模型为了追求训练集完美而把参数调得过于极端。普惠金融中,稳健比漂亮的训练集分数更重要。
把噪声当规律
限制模型复杂度
换一批客户仍能保持效果
旧课件中提到 Banach 不动点定理,这里不要求把它作为数学分析课程来掌握。需要把握的直觉是:如果一次更新可以把“当前估计”和“真实稳定状态”的距离缩小,那么反复更新以后,参数就会逐步靠近一个稳定解。
初始评分可以是 600。若连续按时还款,模型可能先调到 620,再调到 625,再调到 626。越到后面,单次调整越小,说明模型越来越接近该客户的稳定信用水平。
金融数据不是一次性静止样本。申请、还款、交易、逾期、地域冲击都会持续进入系统。递归方法把模型训练变成“持续校正”的过程,更适合实时风控和在线画像。
闭式解适合讲清楚原理,但不一定适合实时业务。金融数据不断进入,模型也需要能逐步更新。
线上小微信贷每天新增申请和还款记录,如果每次都从头训练模型,成本高且反应慢;递归更新能更快吸收新信息。
哪些金融场景必须在线更新?哪些场景可以定期离线重训?
梯度下降把参数估计看作目标函数最小化问题。SGD 每次使用一个或一小批样本更新,适合数据流和大规模训练。
讲梯度下降时,最容易漏掉的一句话是:梯度不是凭空出现的,它是某个损失函数对参数的变化率。在本章中,可以先从学生熟悉的线性回归进入。假设用客户经营流水变化 预测贷款后的经营增长 ,一个最简单的模型写作:
模型预测值和真实值之间的差,就是误差。如果误差有正有负,直接相加会互相抵消,所以最小二乘法把误差平方后再平均,得到 Mean Squared Error,MSE:
因此,梯度下降真正要做的事情是:不断调整 和 ,让 MSE 越来越小。这里的“下降”,下降的是误差;这里的“方向”,来自 MSE 对参数的导数或梯度。
导数描述一个变量变化时,函数值变化得多快。单参数模型里,如果横轴是 ,纵轴是 MSE,那么某一点的导数就是那一点切线的斜率。
斜率为正,说明继续增大参数会让误差变大;斜率为负,说明继续增大参数会让误差变小。
当参数不止一个,例如同时有 ,就不能只看一条横轴上的斜率。梯度把每个参数方向上的导数放在一起,形成一个向量。
它告诉模型:如果想让误差上升最快,应朝哪个方向走。梯度下降则反过来,沿着负梯度方向走。
对线性回归 MSE 求导,可以得到每个参数应该怎样调整。以斜率参数 为例:
这个表达式不用死记。只要记住:误差大、样本特征值大、方向一致时,参数更新幅度就更明显。
为了看清楚“随机”是什么意思,先用一个极简例子。假设用月收入 预测违约状态 ,只估计一个参数 。每来一位客户,就用这一位客户的误差更新一次参数。
| 顺序 | 客户 | 收入 x | 实际 y | 当前预测 | 梯度 | 更新后参数 |
|---|---|---|---|---|---|---|
| 1 | 张三 | 3 | 0 | 0.3000 | 0.9000 | 0.0910 |
| 2 | 李四 | 5 | 1 | 0.4550 | -2.7250 | 0.1183 |
| 3 | 王五 | 2 | 0 | 0.2365 | 0.4730 | 0.1135 |
| 4 | 赵六 | 4 | 1 | 0.4541 | -2.1837 | 0.1354 |
| 5 | 孙七 | 1 | 0 | 0.1354 | 0.1354 | 0.1340 |
这个表说明:SGD 的“随机”不是随便乱调,而是不等所有样本凑齐,每次抽取一个样本或一个小批量样本,用当前看到的信息推动参数下降。样本顺序会影响中间路径,但只要学习率合理,整体会向低误差方向移动。
梯度指向的是损失函数上升最快的方向。如果目标是让误差变小,就不能顺着梯度走,而要沿着负梯度走。以 为例,在 时导数为 。
,函数值从 增加到 ,离最低点更远。
,函数值从 降到 ,误差下降。
因此,梯度下降不是“看到梯度就往梯度方向走”,而是先确认目标是最小化损失,再使用负号把参数推向损失更低的位置。
批量梯度下降每一步都使用全部样本计算 MSE 和梯度。这样方向比较稳定,但当样本很多、特征很多、数据持续进入时,每一步都很慢。
随机梯度下降里的 stochastic,意思是每一步不再看全部样本,而是随机抽一条样本或一小批样本来估计梯度。对小微信贷来说,可以理解为:系统不等到攒够全年的申请记录才更新模型,而是每来一批新申请、还款、逾期或补充材料,就做一次小幅修正。
这里的 是随机抽到的一小批样本。它带来的梯度不一定等于全样本梯度,所以路径会抖动;但长期看,它通常能以较低成本把参数推向较好的区域。这种“有噪声的修正”是 SGD 的核心特征。
学习率决定每次沿负梯度方向走多远。太小会很稳,但像每次只挪一厘米,训练时间很长;在实时业务中,模型可能来不及吸收新变化。
太大会让参数一步跨过最低点,在误差曲线两边来回跳,甚至越跳越远。表现为训练误差不降反升,或者模型结果非常不稳定。
常见做法是先用较大学习率快速靠近较好区域,再逐渐减小学习率,进入精细调整。直觉上就是:刚开始方向大致对即可,越接近最低点越要慢。
Adagrad、RMSProp、Adam会根据不同参数的历史梯度自动调整步长。频繁变化的参数可以走得更谨慎,稀疏但重要的参数可以获得更合适的更新幅度。
SGD 的直觉是“每看到一条新样本,就把模型方向修正一点”。它不追求一步到位,而追求持续改进。
一个农户按月还款,系统每个月都能观察到新的还款行为。SGD 可以把这些新行为逐步纳入风险评分。
如果新数据中有异常值,SGD 为什么可能比批量训练更容易受冲击?
动量方法通过累积历史梯度方向减少震荡;Adam 进一步为不同参数设置自适应学习率。
在真实模型中,损失函数往往不是一条平滑的单参数曲线,而更像一条狭长的山谷。某些方向很陡,某些方向很平。普通梯度下降在陡峭方向上容易左右震荡,在真正通向低误差区域的方向上反而走得慢。
动量的想法来自物理直觉:如果连续几步的梯度都指向类似方向,就说明这个方向比较稳定,可以积累“速度”;如果某个方向一会儿向左、一会儿向右,就让相反方向互相抵消,减少无意义震荡。
这里 是当前梯度, 是积累后的“速度”, 控制过去方向保留多少。若 ,就退化成普通梯度下降;若 较大,历史方向影响更强,但也要防止冲过最优区域。
每一步只看当前梯度。若样本噪声较大或误差曲面狭长,路径可能来回摆动,训练看起来“不稳”。
把过去几步的方向也考虑进去。稳定方向会被加强,反复横跳的方向会被削弱,通常能更快穿过平缓区域。
如果连续多个批次的客户数据都显示“现金流下降”对应更高复核概率,模型可以更坚定地调整相关参数;如果信号时正时负,就不应剧烈更新。
Adam 可以理解为在动量之外,再根据梯度平方的历史大小调整每个参数的学习率。它同时考虑“方向是否稳定”和“这个参数过去震荡是否剧烈”。
普通 SGD 或 Momentum 通常给所有参数使用相同的基础学习率。但金融特征的出现频率和波动强度很不一样:年龄、学历等变量比较稳定,交易频率、节假日消费、直播带货收入等变量可能突然变化。自适应优化算法希望对不同参数使用不同的有效步长。
Adagrad 会累计历史梯度平方。经常被更新、梯度长期较大的参数,其有效学习率会下降;较少出现的稀疏特征还能保留较大的更新幅度。它适合稀疏特征,但后期可能因为累计量过大而学习率过小。
Adam 同时记录一阶矩估计和二阶矩估计。可以简单理解为:它既有 Momentum 的方向记忆,又有 Adagrad 的自适应步长,但通过指数衰减避免学习率一路衰减到几乎不动。
| 数据特征 | SGD + Momentum | Adagrad | Adam | 课堂理解 |
|---|---|---|---|---|
| 稳定连续变量 | 适合 | 适合 | 适合 | 变化慢,步长不宜过激。 |
| 稀疏离散变量 | 一般 | 适合 | 适合 | 少见但可能重要的特征,需要保留更新能力。 |
| 非平稳波动变量 | 容易滞后 | 后期可能变慢 | 通常更稳 | 需要兼顾近期冲击和历史方向。 |
| 训练阶段 | 推荐算法 | 典型场景 | 原因 |
|---|---|---|---|
| 冷启动 | Adagrad | 新县域、新产品初始模型 | 稀疏变量多,少见特征仍需要较快学习。 |
| 中期迭代 | Adam | 助农贷款季度更新、线上风控迭代 | 同时兼顾方向记忆和自适应步长,响应更稳。 |
| 成熟系统 | SGD + Momentum 或周期学习率 | 全国性稳定风控系统 | 数据量充足、目标稳定时,简单算法更容易监控和部署。 |
动量像给优化方向加了惯性,Adam 像给每个参数配了自己的步伐。它们解决的是“怎么更稳、更快地走到较好解”。
在高维交易特征模型中,有些变量变化频繁,有些变量很稀疏。Adam 的自适应学习率能更灵活地处理这种不均衡。
优化器越复杂,模型一定越好吗?如何用验证集判断?
递归最小二乘直接更新参数估计和协方差矩阵,适合参数可能随时间缓慢变化的金融时间序列问题。
递归最小二乘特别适合“关系会慢慢变”的场景。遗忘因子就是告诉模型:近期数据是否应该更重要。
利率市场化后,客户对存款利率变化的反应可能变快。用遗忘因子可以让模型更重视近期行为,而不是被多年旧数据拖住。
遗忘因子设得太小或太大,分别会有什么风险?
正则化通过在损失函数中加入复杂度惩罚,牺牲少量训练集拟合能力,换取样本外稳定性。
正则化可以理解成给模型“降噪”和“收敛”。金融模型宁可少抓一点训练集细节,也要在未来样本上稳定。
如果一个信用评分模型用了几百个高度相似的交易变量,训练集效果可能很好,但换一个月份就失效。正则化能压制这种脆弱性。
为什么普惠金融模型更需要稳健,而不是只追求训练集准确率?
三类正则化回归分别回答变量筛选、相关变量稳定和“既要筛选又要稳定”的问题。本节完整保留旧课件中关于几何直觉、数学推导、交叉验证和系数路径的要点。
旧课件中的三张图非常重要:LASSO、Ridge、Elastic Net 不只是公式不同,它们对参数空间施加的“约束形状”不同。形状不同,会直接影响系数是否容易变成 0、相关变量是否会被一起保留。
菱形有尖角,最优解容易落在坐标轴上,因此某些系数会被压成 0。
圆形没有尖角,系数会被整体拉小,但通常不会精确归零。
它把 L1 的变量筛选和 L2 的稳定收缩放在一起,通过 调节比例。
把误差函数的等高线想成一圈圈椭圆。椭圆第一次碰到约束边界的位置,就是惩罚后的估计点。碰到尖角时,某个坐标可能正好为 0;碰到圆弧时,两个坐标通常都非零但更小。
LASSO 的目标是在拟合误差之外加入 惩罚。它最重要的特点是稀疏性:部分系数会被压到 0,因此可用于自动特征选择。
第一步,写出目标函数:
第二步,对平滑的平方损失部分求梯度:
第三步,处理 项。由于绝对值函数在 0 点不可导,所以使用次梯度:
第四步,写出一阶最优性条件。由于目标函数包含不可导项,这里使用 KKT / 次梯度条件:
逐坐标展开,第 个变量满足:
第五步,在坐标下降中令部分残差 ,得到软阈值更新:
第六步,解释为什么会归零:如果 ,软阈值函数直接给出 ;如果信号超过阈值,系数保留但会向 0 收缩一个幅度。
绘制 随 变化的路径,可以直观看到哪些变量最先被裁撤。虚拟示例中,HOLIDAY_ACTIVITY 可能先归零,PROMO_COUNT 和 INQUIRIES 随后归零,DEFAULTS、DTI、LATE_30 等稳定风险变量保留到较大的 。
在小微信贷评分中,LASSO 适合从大量候选变量中形成较简洁的变量清单,便于向业务人员解释。但强相关变量组中,它可能任意保留一个、压掉其他,导致信息损失。
Ridge 不直接做变量筛选,而是把所有系数整体拉小。它适合特征高度相关、矩阵接近奇异、预测稳定性比变量稀疏性更重要的场景。
第一步,写出目标函数:
第二步,平方损失部分的梯度为:
第三步, 惩罚项是平滑可导的:
第四步,令总梯度为 0,得到一阶条件:
整理后得到 Ridge 的线性方程:
因此闭式解为:
第五步,坐标下降中令部分残差 ,第 维更新为:
如果特征已标准化,,则进一步简化为:
第六步,解释 Ridge 为什么稳定:分母中的 会连续压缩系数,但没有软阈值截断,因此通常不会产生精确的 0 系数。
例如 LATE_30、LATE_60、LATE_90 同时描述逾期风险,相关性很强。Ridge 不会随意删掉某一个,而是把它们的权重一起压小,避免某个变量因为样本扰动突然变得特别大。这对跨月份、跨地区稳定部署很重要。
Elastic Net 同时加入 和 惩罚。它既可以保留 LASSO 的变量筛选能力,也可以借助 Ridge 稳定相关变量组。
第一步,写出目标函数:
其中 。当 时接近 LASSO;当 时接近 Ridge。
第二步,平方损失部分梯度仍为:
第三步, 部分使用次梯度:
第四步,写出 KKT / 次梯度条件:
第五步,令 ,得到坐标更新:
第六步,解释两个惩罚项如何分工:分子中的软阈值负责把弱变量压到 0;分母中的 负责把保留下来的变量继续收缩。
固定一个 后,绘制系数随 变化的路径。部分变量会因为软阈值归零,另一些变量则因 部分平滑收缩。对 LATE_30、LATE_60、LATE_90 这类变量家族,可用同一颜色分组观察是否保留了相关结构。
当逾期变量、流水变量和交易活跃度变量高度相关,同时又希望模型不要太复杂时,Elastic Net 通常比单纯 LASSO 更稳,比单纯 Ridge 更简洁。它适合“变量很多 + 共线性强 + 需要一定解释性”的综合场景。
选择正则化方法时,不要只问“哪个更高级”,而要问“当前业务更需要变量少、预测稳,还是二者兼顾”。
| 方法 | 惩罚形式 | 是否稀疏 | 共线性处理 | 数值稳定性 | 可解释性 | 适用场景 | 可能不足 |
|---|---|---|---|---|---|---|---|
| Ridge | 否 | 强 | 强 | 中等 | 、强相关、强调稳健预测 | 无法直接做特征选择,系数不为 0 不便简化。 | |
| LASSO | 是 | 较弱 | 中等 | 强 | 高维、需要变量筛选和评分卡解释 | 强共线时可能任意保留一个变量,丢失相关组信息。 | |
| Elastic Net | 适中,可控 | 强 | 强 | 较强 | 同时希望“稀疏 + 稳定”的综合场景 | 需要同时调参 和 。 |
农户信用评分可以先用 LASSO 形成简洁变量清单;如果逾期、流水、交易行为等变量高度相关,再用 Ridge 或 Elastic Net 提升稳定性。上线前应采用时间切分验证,检查模型是否能跨月份、跨区域泛化。
LASSO 像变量筛选器,Ridge 像稳定器,Elastic Net 像二者之间的调节旋钮。
农户信贷中,交易次数、交易金额、收款天数可能共同反映经营活跃度。Elastic Net 比单纯 LASSO 更可能保留这一组业务含义。
如果模型要给客户经理解释,变量越少是否一定越好?如果变量少但不稳定,风险在哪里?
练习题建议用真实业务语言回答,不要只写公式。先说明业务场景,再说明变量、假设和可能的失败点。
例如“欺诈识别”的回答可以从低欺诈率、误报成本、人工审核资源和客户体验四个角度展开。
如果你的模型把很多正常客户误判为高风险,对普惠金融目标有什么影响?