跳转至

1 · 这份数据能直接用吗?

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

本批实际结果

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

分区 全部人数 已观测 坏率
0train 215374 215374 8.1091%
1val 30720 30720 8.2975%
2test 30657 30657 7.6035%
3oot 30760 30760 8.0624%
4_oot_undue 48744 0 —

画像覆盖完整候选字段。先从缺失与外部分覆盖率定位需要解释的字段,再比较五分区的分布。 DAYS_EMPLOYED 的异常占位值只按该字段的实际规则登记,原值保留,不把它套到其他字段。 July 的差异同时包含原比赛 train/test 来源差异,不能仅凭模拟日期称为生产漂移。 PSI 使用 0train 为参考,缺失与特殊值是否纳入由实际参数记录。

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

def _profile(inputs: HomeCreditInputs, output: Path) -> None:
    """全部候选字段画像,全部五组进入质量与 Train 参考 PSI。"""
    report = profile_stats(
        inputs.df, features=inputs.fcols, metrics=["missing", "zeros", "mean", "psi"],
        benchmark_df=inputs.benchmark_df, group_col="dataset_flag",
        categorical_features=[name for name in inputs.fcols if inputs.df.schema[name] == pl.String],
        feature_metadata=inputs.feature_metadata, business_context=inputs.business_context,
    )
    _export(report, output, "profile")
    queries = [
        _query(report, "overview", "真实外部来源分覆盖率及字段单位", features=list(DIRECTIONS), limit=3),
        _query(report, "dq.missing", "五分区外部来源分缺失率", features=list(DIRECTIONS), limit=3),
        _query(report, "overview", "收入与原始就业天数的质量", features=["AMT_INCOME_TOTAL", "DAYS_EMPLOYED"], limit=3),
    ]
    _case(output, 1, report, "全量数据与无标签组有哪些质量差异?", queries, {
        "input_row_count": inputs.df.height, "candidate_features": inputs.fcols,
        "analyzed_features": inputs.fcols, "labels_by_split": inputs.summary["partition_stats"],
        "special_values": inputs.summary.get("special_values", {}),
        "reference_row_count": inputs.benchmark_df.height,
        "feature_example": report.describe()["feature_metadata"]["EXT_SOURCE_2"],
    }, "July 是原始比赛测试来源;模拟日期的差异不能解释成真实时间漂移。")

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

from mars.reporting import load_report

report = load_report("profile.marsreport")
print(report.describe())
page = report.query_page("overview", features="EXT_SOURCE_1", limit=3)
print(page["reference"], page["data"])
实际查询结果与分页引用
{
  "case": 1,
  "report_id": "5d00f397-1768-44b0-9306-cd2531e7e9a6",
  "consumer": "deterministic public API queries; no LLM",
  "question": "全量数据与无标签组有哪些质量差异?",
  "query": {
    "question": "真实外部来源分覆盖率及字段单位",
    "reference": {
      "report_id": "5d00f397-1768-44b0-9306-cd2531e7e9a6",
      "table": "overview",
      "query": {
        "offset": 0,
        "limit": 3,
        "features": [
          "EXT_SOURCE_2",
          "EXT_SOURCE_3"
        ]
      }
    },
    "total_rows": 2,
    "returned_rows": 2,
    "omitted_rows": 0,
    "next_offset": null,
    "rows": [
      {
        "feature": "EXT_SOURCE_2",
        "display_name": "外部来源分 2",
        "dtype": "Float64",
        "data_source": "Home Credit 2018 application_{train|test}.csv",
        "missing_rate": 0.0018750614026469803,
        "zeros_rate": 0.0,
        "mean": 0.5148899751498333
      },
      {
        "feature": "EXT_SOURCE_3",
        "display_name": "外部来源分 3",
        "dtype": "Float64",
        "data_source": "Home Credit 2018 application_{train|test}.csv",
        "missing_rate": 0.19545830935706165,
        "zeros_rate": 0.0,
        "mean": 0.5093502021860119
      }
    ]
  },
  "unavailable": "July 是原始比赛测试来源;模拟日期的差异不能解释成真实时间漂移。"
}

运行与下载

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

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