Release Notes¶
0.0.28¶
本版本将 deimos-rule 来源快照 e6714c5e795054e44f0c58ad7097668b4117b4a2 完整重设计为
Experimental mars.rule 模块,并随同一个 mars-risk wheel 发布。没有 deimos namespace、
Dm* 兼容别名或旧 RuleSet JSON 读取分支。
规则生成、验证与部署¶
- 新增
mine_rules()、类型化筛选策略、五类生成器、固定长表评估、训练/验证隔离、切片稳定性、 精确与 IoU 去重、ranked/cascade选择和完整候选淘汰审计。 - 新增受限 DSL v2,明确区分
NULL与浮点MISSING(null/NaN),并增加 schema 与资源预算 fail-closed 校验。表达式经过 AST 解析、规范化、重复条件简化和明显矛盾检测。 - 新增严格
schema_version=1RuleSet artifact、同类型transform()、等级命中计数、按需交互与 累计分析,以及 HTML/Excel 报告。 cascade每轮在剩余训练与验证人群重新生成、筛选和审计候选;模型生成器使用显式缺失指示器, 浅层树的n_jobs真实控制并行训练,Optuna 改用确定性分层 CV ROC AUC。- 新增 explore/production profile、
exploratory/validated/temporally_validated资格、Wilson Lift 保守界、单侧精确检验与 BH-FDR 生产硬门禁;探索 RuleSet 默认禁止部署 SQL。 - 候选预算改为 seed 优先和生成器确定性轮询;IoU 使用批量压缩位图,切片评估使用单次分组聚合, 高级分析复用一次命中矩阵并支持可选 top-k bootstrap。
- 高级分析恢复金额和客户维度的交互、累计与边际指标;报告新增结构化规则解释和 benchmark HTML 构造能力。44 项来源回归的迁移状态见Deimos Rule 迁移矩阵。
- 组合生成器在 500 个数值特征时直接复用
MarsStatsSelector;LightGBM 和 Optuna 分别复用[ml]与[tuning],并保持延迟导入。
兼容性与来源¶
- 公开入口仅为
mars.rule,不从根mars重复导出;模块状态为 Experimental。 - Python 支持范围仍为 3.8–3.12;核心规则测试进入全部版本矩阵,可选后端在 Python 3.10 验证。
- 来源和许可证记录见规则模块来源。旧
deimos-ruleartifact 必须重新挖掘或 重新导出,不能直接载入。
0.0.27¶
本版本修正数据画像 PSI、nullable target 统计和统计筛选器空结果口径,并升级实验性的
缺失率异常扫描器。MarsMissingShiftScanner 仍不从 mars.analysis 顶层导出,本次配置与
结果 schema 调整属于有意的实验 API breaking change。
数据画像与筛选修正¶
- 显式
benchmark_df中的退化特征不再导致整份 PSI 画像失败;不可计算特征保留为nullPSI,并写入 diagnostics,其他特征继续计算。 profile_bin_performance()排除 target 为 null/NaN 的未表现样本,再计算 count、 good/bad、WOE、IV、KS、AUC 和 Lift;全空标签给出明确错误。MarsStatsSelector.fit()允许零特征存活,保留漏斗与决策报告,不再调用prune([])。- 普通趋势、PSI 和 unseen 画像删除
group_mean、group_var、group_cv,保留逐组值和total。
缺失率异常扫描¶
- 新增
MarsMissingShiftConfig,阈值和检测器配置不再作为scan()的扁平参数传递。 - 同时支持
segment_shift、boundary、point、high_level,可准确定位首日或末日异常、 内部单日尖峰、持续分段变化和长期高缺失。 - 统计候选统一经过最小效果门槛与 Benjamini-Hochberg 全局 FDR;小期望频数使用 Fisher 精确检验,其余使用两比例检验。
- 低样本日期保留在长版
trend_table,但不参与检测,也不会跨日期桥接检测窗口。 - 重叠检测证据合并为一个业务事件,并通过
detected_by保留来源。 MarsMissingShiftResult新增 Notebook 格式化表、趋势图和四表格式化 Excel 导出;trend_table取代旧的宽版missing_rate_table。
升级检查¶
- 将缺失率扫描调用迁移到
MarsMissingShiftConfig,并改用trend_table。 - 如果业务需要识别扫描区间第一天的相对异常,优先提供扫描期之前的
benchmark_df; 没有 benchmark 时只能使用后续有效日期或绝对高缺失红线。 - 持续高缺失默认红线为 90%,自然稀疏特征应通过
feature_high_missing_rate_thresholds显式覆盖。
0.0.26¶
发布依赖补充 Jinja2>=3.1.2,确保默认安装即可使用基础报告、特征筛选器和
Pandas Styler 展示接口;Python 3.8 冻结栈使用 Jinja2 3.1.6 与 MarkupSafe 2.1.5。
该版本将基础包的运行范围扩展到 Python 3.8–3.12,并对 Analysis、Feature 和 Reporting Stable API 执行 fail-closed 收口。本版本包含明确的 API、报告和序列化 breaking changes, 升级前必须按本页的迁移清单核对。
Python 与依赖兼容¶
- Python 3.8 固定使用 Polars 1.8.2,并将 scikit-learn 限制在 1.3.x;仓库通过
constraints/python38.txt固定验证栈。Windows 环境固定 OSQP 1.0.4,避免旧 0.6.x 在 Polars 已加载后导入时的原生库崩溃。 - Python 3.9 使用现代 Polars 与 scikit-learn 1.6.x;Python 3.10–3.12 延续当前现代依赖。
- Python 3.8 已停止官方安全维护。MARS 的兼容承诺仅表示冻结栈可以运行,不延长解释器的 安全支持周期。
ml、tuning、notebook、docs和devextras 要求 Python 3.10+;Python 3.6、3.7 以及 3.13+ 不在本版本支持范围内。
实现与结果口径¶
- 新增内部 Polars 兼容层,统一 membership 与 streaming collect 的跨版本差异。
- KS/AUC 的前一累计分布改为“当前累计值减当前箱分布”,以兼容 Polars 1.8 的窗口表达式 限制;指标结果与现代 Polars 保持一致。
- Python 3.8 语言兼容改造本身只涉及注解求值、dataclass、zip 和字符串后缀处理, 不改变业务算法;本版本的 Stable API 与 artifact 变更单独列在下文。
- 特征筛选的监督指标和 WOE 相关性只使用 target 非空的已表现样本;质量、分布和 PSI 仍 使用全量样本。
- Optimal Binner 的失败特征统一批量回退到 Native Binner,避免随失败特征数增长的重复拟合。
profile_stats()与MarsDataProfiler.generate_profile()新增benchmark_df:基准样本只负责 PSI 分箱和 expected distribution,不进入当前数据的质量与统计指标;未分组时可直接输出 当前全量相对 benchmark 的totalPSI。- 数据画像删除
sample_frac参数。抽样改由调用方在传入前显式完成;仍传该参数的旧调用会 收到 Python 标准TypeError,升级时应删除参数并在外部准备抽样 DataFrame。
Stable API 与报告加固¶
- Binner
transform()新增features和on_missing,默认要求全部规则列齐全;Selectortransform()使用相同的严格缺列策略。update_bins()、prune()和get_bin_mapping()不再静默忽略未知特征。 - 三种 Binner 新增固定 schema 的
get_fit_report()。合法 fallback 可继续,真正无规则的 特征标为failed,全部失败终止。 to_dict()/from_dict()改为schema_version=1的自描述 artifact,新增save_json()和MarsBinnerBase.load_json()。旧{params, state}载荷不兼容,必须重新拟合或导出。- WOE transform/SQL 必须具备完整 WOE 映射;SQL 类别值使用安全引号转义。
- 报告级指标列缺失会终止;单特征空值、NaN 或 Inf 指标以
metric_unavailable淘汰并记录。MarsImportanceSelector删除未实现的rfe/sfm公开选项。 - Excel、HTML、JSON 写入、资源读取和空报告导出失败现在会显式抛异常;Binning
HTML 如需图表,任一图表构建失败会使导出失败,可显式使用
include_charts=False。
画像对比能力¶
profile_stats()和generate_profile()新增categorical_features,使整数编码类别同时进入 unseen 与类别 PSI 口径。- 新增显式
schema和unseenmetrics,不加入默认指标。Schema 表区分两侧列存在性、 兼容和不兼容 dtype 变化;unseen 排除缺失与特殊值,输出 total 与分组趋势。 MarsProfileReport新增comparison_tables、report_meta和自包含交互式write_html()。 Profile Excel 新增 Metadata 和 comparison 工作表。ProfileData从三字段扩展为四字段,位置解包调用需增加comparisons。
发布与工程门禁¶
- 普通 CI 和 Release 均只构建一次 wheel/sdist,静态核对版本、Python 范围、依赖 marker、
py.typed、Excel 模板和 dist-info,再运行twine check。 - 同一 wheel 会在 Python 3.8 与 3.12 全新环境中独立安装,并验证递归导入、
profile_risk、 selector、Pandas Styler、Excel/HTML 报告和安装后的模板资源;发布 job 不再重新构建。 - Mypy 固定为 1.13.0,并以 Python 3.8 为统一目标检查全部
src/mars;业务模块 override 与 源码type: ignore已清零,第三方动态边界通过显式类型收窄处理。
升级检查¶
- Python 3.8 环境按约束文件重建,不要在已有环境中强制覆盖整套依赖。
- 使用可选建模或文档依赖时升级到 Python 3.10+。
- 使用数据画像内部抽样的调用,改为先对 DataFrame 显式抽样,再调用
profile_stats()或generate_profile()。 - 将 Binner 旧 dict/JSON 载荷全部用 0.0.26 重新拟合或
save_json()导出。 - 将依赖缺列静默忽略的 Binner/Selector 调用改为显式
features或on_missing。 - 将
ProfileData的三元素解包改为四元素,并移除 Importance Selector 的rfe/sfm配置。 - 发布前同时验证 Python 3.8 冻结栈、Python 3.9 依赖边界和 Python 3.10–3.12 现代栈。
0.0.24¶
从当前公开版本 0.0.21 升级到 0.0.24 时,重点核对分析报告链路、基准样本语义、
趋势图时间范围、HTML 大报告和 Modeling/Pipeline 契约。
用户可见变化¶
profile_risk()返回MarsRiskProfile,同时提供report、binner、targets和metadata。benchmark_df统一用于基准期分箱和 PSI expected distribution,不进入当前期 Total。MarsStatsSelector.fit()支持benchmark_df,筛选指标仍在当前df上计算。- 风险趋势图的时间范围只来自有效
time_col;group_col只负责面板分组。 - HTML 报告支持可检索视图、图表数量控制、图片资产模式和懒加载。
- Modeling/Pipeline 增加结果对象、replay、artifact 和多 target 评估能力,状态仍为 Experimental。
升级检查¶
- 将旧代码中直接假定
profile_risk()返回 report 的访问改为risk_profile.report。 - 使用固定分箱规则时改用
MarsBinEvaluator.evaluate(..., binner=...)。 - 生成趋势图或 Charts HTML 前显式提供有效
time_col。 - 使用
MarsStatsSelector默认 PSI/RC 阈值时提供group_col或time_col;静态筛选应显式关闭 对应阈值。 - 升级 Modeling/Pipeline 后重新核对结果字段和 artifact 路径。
发布状态
本页随 0.0.28 源码维护。版本发布前,main 站点内容仅作为预览;PyPI 发布和 release tag
通过版本一致性检查后,安装命令才表示正式可用。