跳转至

5 · 候选规则如何变成可以审查的证据?

本批保留 Home Credit 两张 application 表的全部 356,255 条记录。TARGET 来自原比赛训练表,比赛测试表的 48,744 条记录保持 null。APPLY_DATE 是按 ID 稳定散列生成的演示日期。0train 用于拟合和 PSI 基准,1val 用于验证或筛选,2test 与 3oot 用于固定结果的独立复核,4_oot_undue 仅表示比赛未公开标签。日期、元数据和角色映射见输入方案与分区说明。

本批实际结果

打开报告 · 有限查询与结论

规则 状态 阶段 原因
来源分2 b0 × 来源分3 b0 selected — —
来源分2 b1 × 来源分3 b0 rejected validation_filter 未通过验证阈值或切片通过率
来源分2 b0 × 来源分3 b1 rejected validation_filter 未通过验证阈值或切片通过率
来源分2 b3 × 来源分3 b3 rejected candidate_filter 未通过训练集候选阈值

固定规则独立复核;sample_count 为已观测人数。

分区 规则 全部命中 已观测命中 坏率 Lift
2test 来源分2 b0 × 来源分3 b0 1829 1829 21.1591% 2.7828
3oot 来源分2 b0 × 来源分3 b0 1757 1757 23.7336% 2.9437

0train 发现候选,1val 验证或筛选;固定规则再交给 2test 与 3oot 独立复核。1val 参与选择后不作为最终独立效果证明。 种子格子候选和自动组合生成分别保存候选数、预算与审计,开发淘汰和验证淘汰按实际原因展示。 使用探索或随机验证的适当配置,模拟 APPLY_DATE 不构成真实时间验证或上线依据。Rule 仍为 Experimental。 evaluation 的 sample_count 沿用已观测人数,total_count/observed_count 明确总样本与标签覆盖;null 不当作好样本。 MarsRuleReport 保存统计证据;RuleSet 才能对新样本命中或执行受门禁控制的 SQL。这里不部署策略。

自动生成报告 · 生成预算与审计 · 固定规则独立评估快照 · 外部 Agent 规则任务

从报告查看真实表与图,按实际分母判断。完整可运行代码使用共享准备入口,复用同一宽表与固定参考样本。

def _rules(inputs: HomeCreditInputs, cross: Report, output: Path) -> None:
    """种子格子和自动生成器各有真实审计;独立评估不重新选择。"""
    produce(output, inputs=inputs, cross_report=cross)
    report = load_report(output / "rules.marsreport")
    fixed = load_report(output / "rules-independent.marsreport")
    queries = [
        _query(report, "summary", "种子候选最终保留多少", limit=1),
        _query(report, "candidates", "实际入选/拒绝阶段及原因", limit=8),
        _query(report, "evaluation", "Val 参与选择的风险与覆盖", filters={"dataset": "validation", "target": "TARGET", "group": "hit"}, limit=8),
        _query(fixed, "slices", "固定规则在独立 test/oot 的表现", filters={"slice": {"op": "in", "value": ["2test", "3oot"]}, "group": "hit"}, limit=8),
        _query(fixed, "slices", "无标签组的全部人数与未观测状态", filters={"slice": "4_oot_undue", "group": "hit"}, limit=8),
    ]
    automatic = _automatic_rules(inputs, output)
    _case(output, 5, report, "从 Train 发现、Val 选择,走到固定规则的独立复核", queries, {
        "summary_rows": queries[0]["rows"], "candidates": queries[1]["rows"],
        "validation": queries[2]["rows"], "independent": queries[3]["rows"], "unobserved": queries[4]["rows"],
        "cross_report_id": cross.report_id, "independent_report_id": fixed.report_id,
        "candidate_origins": report.describe()["business_context"]["candidate_origins"],
        "raw_data_saved": False, "rule_status": "Experimental", "automatic_generation": automatic,
        "auto_report_id": automatic["report_id"],
    }, "Val 被用于选择;3oot 仅为模拟时间外样本。报告不授予生产策略部署许可。")

新进程按目录读取已保存统计;实际有限 JSON 中的引用可重放。

from mars.reporting import load_report

report = load_report("rules.marsreport")
print(report.describe())
page = report.query_page("candidates", features="EXT_SOURCE_2", limit=3)
print(page["reference"], page["data"])
实际查询结果与分页引用
{
  "case": 5,
  "report_id": "408b6056-e5a0-4558-88d4-98cbbc56b0ea",
  "consumer": "deterministic public API queries; no LLM",
  "question": "从 Train 发现、Val 选择,走到固定规则的独立复核",
  "query": {
    "question": "种子候选最终保留多少",
    "reference": {
      "report_id": "408b6056-e5a0-4558-88d4-98cbbc56b0ea",
      "table": "summary",
      "query": {
        "offset": 0,
        "limit": 1
      }
    },
    "total_rows": 1,
    "returned_rows": 1,
    "omitted_rows": 0,
    "next_offset": null,
    "rows": [
      {
        "status": "success",
        "candidate_count": 4,
        "selected_count": 1,
        "validation_status": "independent",
        "profile": "production",
        "qualification": "validated"
      }
    ]
  },
  "unavailable": "Val 被用于选择;3oot 仅为模拟时间外样本。报告不授予生产策略部署许可。"
}

运行与下载

python docs/snippets/task_cases.py --case 5 --data-dir examples/home-credit-2018/data/raw_data --output-dir output/task-cases

首次生成全部关联证据用 --case all。文件缺失会明确失败,正式入口不回退合成数据。 数据下载与输入准备 · 完整共享源码 · 共享包 · 来源和哈希 · 案例索引