案例数据
300 辆二手车 × 16 列。15 个候选自变量混合"真有效"特征(车龄/公里数/品牌等级/动力类型/整车评级/排量/排放标准)与"看似相关实则无关"的噪声特征(车身颜色/座椅材质/原车主性别/车牌区域/雨刮评分/香水气味/贴膜深度/备胎型号),因变量为成交价格(万元)。专为演示 Lasso 的 L1 稀疏化能力设计:在多余候选特征里把没贡献的一刀切到精确 0,实现自动变量筛选。
| 文件名 | lasso.xlsx |
|---|---|
| 样本量 | 300 行 |
| 变量数 | 16 列(15 个候选特征 + 1 个因变量) |
| 数据用途 | 二手车价格预测:演示 Lasso 通过 L1 惩罚把噪声变量系数压成精确 0,自动完成变量选择。 |
| 变量说明 | 强预测组:车龄 1-12 年、公里数 0.6-15 万公里、品牌等级 1-5、排量 1.0-3.9 L、动力类型 1-3(燃油/混动/纯电)、整车评级 40-96 分、排放标准 4-6(国IV/V/VI);噪声组:车身颜色 1-8、座椅材质 1-3、原车主性别 0-1、车牌区域 1-31、雨刮评分 1-5、香水气味 1-6、贴膜深度 1-10、备胎型号 1-4。因变量:价格 16.6-57.8 万元。 |
完整案例
1. 背景
真实业务中常面对"候选变量远多于真有效变量"的局面:分析师手里有几十个看似相关的字段,但其中多半与因变量并无可解释的因果路径。直接拿 OLS 跑一遍会发现 —— 即便噪声变量的系数从统计上不显著,它们仍会得到非零估计值,没有任何变量被"自动剔除",模型既不简洁也容易过拟合。岭回归(L2)同样救不了这一点:L2 惩罚收缩所有系数但永远不会精确到 0。Lasso(Least Absolute Shrinkage and Selection Operator)在目标函数里使用 L1 惩罚 λ‖β‖₁,由于 L1 范数在 0 处不可导且呈"菱形"约束域,最优解几乎必然落在某些坐标轴上 —— 这意味着部分系数会被压缩为精确 0,从而完成自动变量筛选。本案例用 300 辆二手车演示:15 个候选特征中只有 7 个真实驱动价格,Lasso 在 α* 一组合理取值下能把噪声变量准确归零,得到既稀疏又稳健的最终模型。
2. 理论与公式
Lasso 在 OLS 残差平方和上叠加 L1 惩罚,惩罚强度由调节参数 α(或写作 λ)控制;L1 范数的几何性质决定了它能让系数精确为 0。
第二项 α‖β‖₁ 即 L1 惩罚,α 越大稀疏度越高。
当 |zj|≤α 时 β̂j=0,即"小于阈值即剔除"。
L1 菱形约束 → 解在轴上 → 稀疏;L2 圆形约束 → 解远离轴 → 收缩但不为 0。
3. 数据结构
每行 1 辆车,15 个候选特征按"是否真正驱动价格"分为强预测组与噪声组,外加 1 个因变量:
| 组别 | 变量名 | 类型 | 说明 |
|---|---|---|---|
| 强预测组(7 个,真实驱动价格) | 车龄 | 连续 1-12 年 | 距出厂年数,强负向 |
| 公里数 | 连续 0.6-15 万公里 | 累计行驶里程,与车龄轻度共线 | |
| 品牌等级 | 序数 1-5 | 品牌定位(1 经济/5 豪华),强正向 | |
| 排量 | 连续 1.0-3.9 L | 发动机排量,与品牌等级相关 | |
| 动力类型 | 名义 1-3 | 1 燃油 / 2 混动 / 3 纯电(混动+电动溢价) | |
| 整车评级 | 连续 40-96 分 | 车况综合评分,强正向 | |
| 排放标准 | 序数 4-6 | 国 IV / V / VI,正向 | |
| 噪声组(8 个,与价格无因果联系) | 车身颜色 | 名义 1-8 | 8 种颜色编码 |
| 座椅材质 | 名义 1-3 | 布 / 混搭 / 真皮 | |
| 原车主性别 | 名义 0-1 | 原车主性别哑变量 | |
| 车牌区域 | 名义 1-31 | 登记省份代码 | |
| 雨刮评分 | 连续 1-5 | 雨刮品牌主观评分 | |
| 香水气味 | 名义 1-6 | 车载香水种类 | |
| 贴膜深度 | 连续 1-10 | 车窗贴膜遮光度 | |
| 备胎型号 | 名义 1-4 | 备胎规格代码 | |
| 因变量 Y | 价格 | 连续 16.6-57.8 万元 | 成交总价 |
这是 Lasso 的典型适用场景 —— 候选变量多、真正有效的比例不到一半、噪声特征看起来都能"凑个相关性"。
4. 操作步骤
- 登录 SPSSzero,进入 工作台 → 上传
lasso.xlsx - 左侧方法栏 → 进阶方法 → 点击 Lasso 回归
- 把 价格 拖入 因变量 Y
- 把 15 个候选特征全部拖入 自变量 X(系统自动 z-score 标准化 —— 这是 Lasso 必做的预处理)
- 勾选 α 路径:在 α 序列 {0.001, 0.01, α*, 0.30, 1.00, 3.00} 上画系数轨迹与非零计数
- 勾选 交叉验证选 α(默认 10-fold CV),系统给出两套候选:α*(min CV) 最小化预测误差,α*(1se) 在误差容忍内取最稀疏解
- 勾选 OLS 对照,用于和 Lasso 结果做系数对比,直观看出"哪些变量被压成 0"
- 点击 开始分析,依次得到:OLS vs Lasso 系数对比表、α 路径表、最优 α 下的最终保留变量表
5. 结果表格与结果阅读
结果区按"先看 OLS 留全部、再走 α 路径、最后定最稀疏解"输出 3 张表:
| 变量 | 真实属性 | OLS β* | OLS SE | OLS p | Lasso β* (α*=0.0918) | 是否保留 |
|---|---|---|---|---|---|---|
| 车龄 | 强预测 | −3.180 | 0.415 | <0.001 | −3.218 | ✓ |
| 公里数 | 强预测 | −1.579 | 0.409 | <0.001 | −1.462 | ✓ |
| 品牌等级 | 强预测 | 4.194 | 0.242 | <0.001 | 4.118 | ✓ |
| 排量 | 弱预测 | 0.165 | 0.242 | 0.497 | 0.101 | ✓ |
| 动力类型 | 强预测 | 1.218 | 0.160 | <0.001 | 1.127 | ✓ |
| 整车评级 | 强预测 | 2.405 | 0.168 | <0.001 | 2.323 | ✓ |
| 排放标准 | 中预测 | 0.553 | 0.161 | <0.001 | 0.438 | ✓ |
| 车身颜色 | 噪声 | 0.300 | 0.160 | 0.062 | 0.193 | ✓ |
| 座椅材质 | 噪声 | −0.189 | 0.162 | 0.246 | −0.087 | ✓ |
| 原车主性别 | 噪声 | −0.114 | 0.161 | 0.478 | −0.028 | ✓ |
| 车牌区域 | 噪声 | 0.027 | 0.161 | 0.869 | 0.000 | ✗ |
| 雨刮评分 | 噪声 | 0.029 | 0.162 | 0.859 | 0.000 | ✗ |
| 香水气味 | 噪声 | 0.114 | 0.160 | 0.479 | 0.026 | ✓ |
| 贴膜深度 | 噪声 | −0.183 | 0.166 | 0.270 | −0.097 | ✓ |
| 备胎型号 | 噪声 | 0.001 | 0.162 | 0.994 | 0.000 | ✗ |
| N=300;α*=0.0918 为 LassoCV 10-fold 在最小化 CV-MSE 准则下选出的最优值 | ||||||
关键观察:①OLS 给所有 15 个变量都估了非零系数,即便对 p≈0.99 的"备胎型号"也估出 0.001 —— OLS 从不主动剔除变量;②Lasso 在 α*=0.0918 下直接把 3 个 OLS p>0.85 的极端噪声(车牌区域 / 雨刮评分 / 备胎型号)压成精确 0;③仍有 5 个噪声变量(车身颜色 / 座椅材质 / 原车主性别 / 香水气味 / 贴膜深度)逃过这一刀 —— 这暗示 α* 选小了,需要看 α 路径并考虑 1se 规则。
| α | 非零系数 | R²(训练) | 10-fold CV-MSE | 说明 |
|---|---|---|---|---|
| 0.001 | 15 | 0.8775 | 7.910 | α≈0,几乎等同 OLS,所有变量都留 |
| 0.010 | 14 | 0.8775 | 7.895 | 轻微剔除,1 个变量被归 0 |
| 0.0918 (α*min CV) | 12 | 0.8759 | 7.784 | 最小化 CV-MSE 的 α,剔除 3 个明显噪声 |
| 0.4227 (α*1se) | 6 | 0.8582 | 8.525 | 1-SE 规则下的最稀疏解,仅留 6 个变量 |
| 1.000 | 5 | 0.8040 | 11.820 | 惩罚过强,开始损失真实结构 |
| 3.000 | 2 | 0.4609 | 33.233 | 过度收缩,R² 崩塌 |
| α=0 为 OLS;α 越大稀疏度越高;α* 由 LassoCV 10-fold 选出 | ||||
路径观察:①α 从 0 → 0.09 期间 R² 仅下降 0.0016,但非零变量从 15 → 12 —— 几乎免费地剔掉了 3 个最离谱的噪声;②α 从 0.09 → 0.42 时 R² 损失 0.0177,但非零变量从 12 → 6 —— 用 1.8 个百分点的拟合换 6 个变量的稀疏化非常划算;③α ≥ 1 时 CV-MSE 大幅恶化,说明开始误伤真实信号;④1-SE 规则(α*1se)选 α=0.4227 —— 在最小 CV-MSE 一个标准误以内最稀疏的解,是统计学界推荐的稳健报告口径。
| 排序 | 变量 | Lasso β*(标准化) | 原始尺度 B | 方向 | 业务解读 |
|---|---|---|---|---|---|
| 1 | 品牌等级 | 3.786 | 3.042 | 正 | 品牌每升 1 档,价格 +3.0 万元 —— 第一影响因子 |
| 2 | 车龄 | −3.171 | −0.994 | 负 | 每多 1 年,价格 −1.0 万元 —— 强负向 |
| 3 | 整车评级 | 2.034 | 0.155 | 正 | 评级每多 10 分,价格 +1.5 万元 —— 车况溢价 |
| 4 | 公里数 | −1.218 | −0.397 | 负 | 每多 1 万公里,价格 −0.4 万元 —— 损耗折扣 |
| 5 | 动力类型 | 0.782 | 0.998 | 正 | 混动 / 纯电相对燃油有 +1.0~2.0 万元溢价 |
| 6 | 排放标准 | 0.040 | 0.054 | 正 | 勉强保留,业务影响最小 |
| 9 个被剔除(Lasso β* = 0):排量 / 车身颜色 / 座椅材质 / 原车主性别 / 车牌区域 / 雨刮评分 / 香水气味 / 贴膜深度 / 备胎型号 | |||||
| 截距 | — | — | 23.47 | — | 原始尺度截距(万元) |
| R² | — | 0.8582 | — | — | 仅用 6 个变量解释了 85.8% 的价格方差 |
| RMSE | — | 2.856 | — | — | 原始尺度均方根误差(万元) |
| 原始尺度 B 单位:万元 / 单位 年·万公里·档·级·档;标准化 β* 由 z-score 设计阵估得 | |||||
关键对比:①Lasso 在 α*1se 下把 8 个噪声特征 + 排量(弱预测)全部归零,仅保留 6 个真正驱动价格的变量 —— 自动复原了"真实模型"的稀疏结构;②R² 从 OLS 的 0.8775 仅降到 0.8582,但参数数量从 15 砍到 6(−60%),模型简洁度大幅提升;③业务排序与常识完全吻合 —— 品牌、车龄、车况、里程是二手车定价四大主因子。
7. 文字分析
对二手车价格 15 候选特征 Lasso 建模的完整解读:
- α* 的选择(表2 + LassoCV):10-fold CV 给出两套候选 —— α*min CV=0.0918(最小 CV-MSE,保留 12 个变量)与 α*1se=0.4227(在 min+1SE 容忍内取最稀疏解,保留 6 个变量)。前者偏向预测优先,后者偏向稀疏可解释优先,工程实践通常推荐 1se 规则作为正式报告口径,因为它在统计噪声允许范围内给出最简洁的模型。本案例两个口径之间 R² 仅差 0.018,但变量数从 12 减到 6,1se 规则胜出。
- 保留 6 个有效变量:品牌等级(β*=3.79,最强正向)、车龄(β*=−3.17,最强负向)、整车评级(β*=2.03)、公里数(β*=−1.22)、动力类型(β*=0.78)、排放标准(β*=0.04)—— 这 6 个变量与数据生成时设定的"真有效"特征高度重叠,说明 Lasso 在 α*1se 下近乎完美地复原了真实因果结构。其中"排量"作为弱预测组成员(OLS p=0.497)也被 Lasso 主动剔除,进一步验证了 L1 的稀疏化威力。
- 丢弃 9 个噪声/弱变量:排量、车身颜色、座椅材质、原车主性别、车牌区域、雨刮评分、香水气味、贴膜深度、备胎型号 —— Lasso 把它们的系数压成精确 0(而不是岭回归式的"很小但非零")。这是与 Ridge 最本质的区别 —— Lasso 的输出本身就是一份"变量入选清单"。
- R² 对比:OLS 用 15 个变量得 R²=0.8775;Lasso(α*1se) 仅用 6 个变量得 R²=0.8582,损失仅 0.0193。换算到原始尺度,OLS RMSE=2.65 万元、Lasso RMSE=2.86 万元,预测精度只差 0.21 万元/辆 —— 但模型从 15 个参数缩到 6 个,每个保留参数都"扛实在的",跨样本稳定性、可解释性、上线维护成本全面占优。
- 业务建议:①二手车定价的 ROI 最高变量是品牌等级(+3.0 万元/档) —— 上架时优先把品牌信息标注到位;②"车龄+公里数"组成损耗双因子,5 年 / 5 万公里以内的车在定价模型中拥有显著溢价;③整车评级对最终价格的边际贡献约 0.15 万元/分,做一次专业车况检测带来的评分提升通常能直接覆盖检测成本;④"颜色 / 座椅材质 / 原车主性别 / 车牌区域"等卖家常宣传的"卖点"被 Lasso 实证否定 —— 不必在话术上重点投入;⑤新能源动力(混动/纯电)相对燃油有 1.0~2.0 万元溢价,符合 2025-2026 年新车市场趋势。
结论:Lasso 把 15 个候选变量精简到 6 个核心驱动因子,R² 仅损失 2 个百分点,模型简洁度和可解释性大幅提升 —— 这是面对"候选变量多、真有效比例低"场景时的标准建模流程。
8. 剖析提醒
Lasso 与岭回归的本质区别:Ridge 用 L2 把系数收缩到接近 0 但永远不等于 0,所有变量都留;Lasso 用 L1 把系数压缩为精确 0,自动完成变量筛选 —— 因此"想做变量选择"用 Lasso,"已知所有变量都该留只想稳定估计"用 Ridge。当两者都想兼顾时,使用 Elastic Net(同时加 L1 + L2 惩罚)。标准化是 Lasso 的硬性前置条件:L1 惩罚对系数绝对值一视同仁,未标准化则单位大的变量看似"系数小"会被错误地优先剔除,本案例所有结果都基于 z-score 标准化。Lasso 在高度相关的变量组中只会随机挑一个保留(例如本案例的"车龄 vs 公里数"组),这是 L1 的著名局限 —— 如果业务上希望相关组"全部入选或全部剔除",应改用 Elastic Net 或 Group Lasso。最后,Lasso 报告必须给出 α* 的来源(10-fold CV / 1se 规则)和 α 路径作为佐证,避免读者怀疑"为何刚好剔除这些变量";保留变量进入业务解释前建议再跑一次普通 OLS 复核显著性,因为 Lasso 系数本身是有偏估计、p 值需用专门方法(如 selective inference)。