v0.7.2¶
本次 patch release 聚焦 0.7.1 回归边界的正确性与可审计性:补齐类别小箱在初始拟合阶段的治理,收紧 Format-A 分箱往返契约,冻结 FVP 每个 target/split 的类别转换统计,并让加权 VIF 与常量权重相关性筛选遵守明确的权重语义。没有移除公开 API,也没有翻转默认值。
单调 WOE 分箱与 Format-A 往返¶
- 类别特征现在会在
MonotoneWOEBinner.fit()内实际执行small_bin_policy:"merge"按既有类别坏率聚类逻辑合并,"warn"保留分箱并告警,"raise"抛出BinningPolicyViolation。"merge"不会把普通箱数压到min_n_bins以下;若到达下限后仍有违规箱,_small_bin_stats[feature]["remaining_violation"]会保留该事实。small_bin_policy=None的历史路径不变。 get_final_bins()的 Format-A DataFrame 现在把精确数值边界、稀疏箱号、类别成员与逐特征missing_woe存在DataFrame.attrs["smf_woe_format_a"]。load_woe_bins()只有在 metadata 摘要和行身份均校验通过后才使用这些隐藏信息,因此直接传递或 pickle 往返可精确恢复。- 类别 metadata 可区分显示文本相同但成员不同的分箱,并保留 hashable tuple 类别与看似数值区间的类别文本。篡改、陈旧、非整型箱号或无法深拷贝的 metadata 不会穿透 loader,而是整体退回可见
bin_label解析。 - CSV/Excel 不保存
DataFrame.attrs,因此回载时以导出的可见标签为事实来源;默认标签仍保持历史.8g显示精度。这条回退可恢复可见的压缩区间结构,但不能恢复文本之外的精确边界、原始稀疏箱号、歧义类别成员或非默认missing_woe。 - 数值转换继续使用右闭区间:值恰好等于切点时进入左侧箱。类别转换只把精确匹配和受支持的
str()dtype 回退都失败的值计为 unseen;已由 dtype 回退成功解析的值仍会留下 fallback 告警与覆盖统计,但不会再被重复报告为 unseen。
FVP 类别转换审计¶
- FVP 在每次 split 转换完成后立即深拷贝
_categorical_transform_stats与_unseen_category_stats,形成每个 target 下相互独立的categorical_transform_stats_by_split/unseen_category_stats_by_split。后续 split 转换或 engine 状态变化不会覆盖先前快照。 - 轻量批次结果会清除重型
screening_artifact与woe_artifacts["by_target"]引用,但保留woe_artifacts["categorical_transform_stats_by_target"]和woe_artifacts["unseen_category_stats_by_target"],因此 batch/slim 汇总仍可追溯 target → split → feature。 - 批次合并按 target/split/feature 深合并统计;同一键出现内容冲突时抛出
ValueError,不再静默用后一个批次覆盖前一个批次。
加权 VIF 与相关性筛选¶
FeatureSelectionAnalyzer.compute_vif()新增可选sample_weight。非恒定权重使用 statsmodels WLS 辅助回归计算 VIF;未传权重或传入任意正常数的恒定权重时,仍走原有 OLS 实现并保持严格结果一致。drop_rows模式会同步裁剪权重,非法长度、非有限值、负权重或总权重为零继续响亮失败。- G06 VIF 门现在把
weight_col传入上述计算,因此非恒定频数/样本权重能够真实影响 VIF 与淘汰决策;既有 IV tie-break 语义不变。 corr_nan_policy="pairwise"时,正常数恒定权重的 corr 去重直接复用无权重决策路径,选择结果与无权重路径一致,同时仍输出加权筛选的corr_dropped审计表。审计中的kept/dropped、pair 端点和相关系数来自实际迭代决策。corr_nan_policy="raise"不会因恒定权重快路径被绕过。加权 WOE corr 尊重 adapter 的自定义后缀;部分 WOE 编码失败时保留完整矩阵形状,继续计算可用数值子矩阵,并以告警 + NaN 行列保留未编码特征,避免静默误删。
验证¶
合并前的最终核心 PR CI 已在 legacy、modern、bleeding 三组依赖环境与 Python 3.11/3.12 的六个组合中全部通过;每个组合均为 930 passed、0 failed、0 skipped。source-package verify、wheel/sdist 构建以及 wheel 隔离安装 smoke 也均为绿色。