跳转至

Home Credit 输入与分区

当前案例使用 Home Credit Default Risk 2018 的 application_train.csv、 application_test.csv 和 HomeCredit_columns_description.csv。原始特征与训练表的 TARGET 是公开比赛数据;APPLY_DATE 是本例生成的模拟日期。 这次案例迁移发生在 0.0.28 发布之后,没有重发软件,也没有改变包版本。

获取本地输入

从 Kaggle 官方数据页 获取三个文件。先查看当前比赛规则, 按官方页面提示登录并自行处理需要的规则确认;项目不会替你接受条款。 页面依赖 JavaScript,本次验证环境未能读取完整规则正文,因此不另行声明数据许可。

在仓库中可放到 examples/home-credit-2018/data/raw_data/,也可使用自己的目录。 仅需上述三个文件,不读取 bureau、previous_application、installments 等子表。 原始数据、清洗宽表、真实 ID、样本分区成员和逐行结果只留在本地。 项目 MIT 许可不替代原始数据的规则;公开案例包只含统计报告、字段解释和源码。

使用本次更新的仓库源码运行完整复算:

pip install -e .
python docs/snippets/home_credit_data.py --data-dir examples/home-credit-2018/data/raw_data
python docs/snippets/task_cases.py --case all --data-dir examples/home-credit-2018/data/raw_data --output-dir output/home-credit-cases

也可以分别指定三个路径:

python docs/snippets/home_credit_data.py --train-csv /my/data/application_train.csv --test-csv /my/data/application_test.csv --columns-description-csv /my/data/HomeCredit_columns_description.csv

完整生成器接受相同三个路径参数。缺文件、schema、规模或标签异常会明确失败, 不会改用合成数据。小型测试必须显式提供 fixture 输入,并关闭正式规模核对。 已发布的 mars-risk==0.0.28 可加载和查询公共快照;从 CSV 重新计算还需要本次源码中的 无标签规则评估修复。此修复没有通过本任务发布到 PyPI。

共享准备脚本随案例下载包提供。 在仓库中从 docs/snippets 导入;下载包中可从脚本所在目录直接导入:

from home_credit_data import prepare_home_credit_data

inputs = prepare_home_credit_data("my-local-home-credit")
df = inputs.df
fcols = inputs.fcols
benchmark_df = inputs.benchmark_df

原表、标签和字段角色

本地已核对训练表 307,511 行、122 列,比赛测试表 48,744 行、121 列。 测试表原本没有 TARGET。对齐原列后纵向合并是 356,255 行、122 列; 新增 APPLY_DATE 和 dataset_flag 后是 356,255 行、124 列。

准备过程先核对 ID 非空、表内唯一、两表互斥、列名不重复、除 TARGET 外字段集合相同。 训练标签必须为原始 0/1;测试表临时用 Int8 的 -1 区分来源。 日期与分区准备完成后将 -1 转为 null,进入 MARS 的标签只有 0、1、null。 训练标签不修改,不把比赛测试表补成好样本。

官方 TARGET=1 表示客户出现比赛定义的还款困难:贷款前 Y 期中至少一期逾期超过 X 天; X/Y 没有在字段说明中公开。TARGET=0 表示其他情况,不能改写成 bad30、bad60 或自行补一个表现期限。无标签组的标签指标要读取报告的 unobserved、not_computed 等实际状态,不能把 null 当作零风险。

角色 字段或输入 本例口径
特征 features=fcols 119 个原始候选字段,按实际模块支持范围分析
目标 target="TARGET" 训练表原始 0/1;比赛测试表 null
分组 group_col="dataset_flag" 五个演示分区
时间 time_col="APPLY_DATE" 明确的 Date 类型、模拟日期
基准 benchmark_df=inputs.benchmark_df 仅 0train;用于参考分布与适用拟合
金额 amount_col="AMT_CREDIT" 贷款金额,原始金额单位,币种未公开
元数据 feature_metadata=inputs.feature_metadata 中文名、官方定义、来源、单位

这是角色映射;每个入口只传其实际支持的参数。默认不设置权重。 fcols 排除 ID、目标、日期、分组和单独承担金额角色的 AMT_CREDIT,不增加衍生特征。 20 个 display_features 用于有限图表;候选全集、模块支持子集和实际参与计算的字段在产物中分别记录。

模拟日期如何生成

准备版本为 home-credit-2018-v1,默认 seed 为 20261001。 把 "{seed}:{SK_ID_CURR}" 按 UTF-8 编码;ID 为没有前导零的十进制整数。 使用 SHA256 全部 32 字节按 big-endian 转整数,再对区间天数取模。 训练来源映射到 2026-01-01 至 2026-06-30(181 天),测试来源映射到 2026-07-01 至 2026-07-31(31 天),包含首尾。

0/1 的标签值、外部分、收入和分析结果均不参与区间内日期分配。 同一配置下打乱 CSV 行序、重新运行和新进程的结果相同。 这些日期不是真实申请、放款或表现日期,不能证明业务季节性、线上漂移或真实跨期泛化。 July 与前六个月同时存在原始数据来源差异,不能把它当作生产时间变化。

五组按完整自然日划分

对有标签样本按日期升序、ID 作为稳定次序排列,汇总每天人数。 从末日向前分别选择最接近 30,000 人的完整日期段,依次记为 3oot、2test、1val; 剩余归 0train。误差相同选择更早起始日,并保留前组至少一个非空自然日。 不拆同一天、不按标签分层凑人数。不足四个非空有标签自然日时明确失败。 原始比赛测试表全部归 4_oot_undue。

以下是本次全量执行的实际结果,人数不是预设整数目标。

分区 人数 日期范围 已观测标签 TARGET=1 已观测 Bad Rate
0train 215,374 01-01~05-07 215,374 17,465 8.1091%
1val 30,720 05-08~05-25 30,720 2,549 8.2975%
2test 30,657 05-26~06-12 30,657 2,331 7.6035%
3oot 30,760 06-13~06-30 30,760 2,480 8.0624%
4_oot_undue 48,744 07-01~07-31 0 未观测 未观测

0train 用于拟合分箱、发现规则、开发筛选和 PSI 参考。1val 若参与筛选,不能再称为完全独立的最终评估。 2test、3oot 用于固定结果的独立复核,不用于反复调整候选门槛;3oot 是模拟时间外分区。 2test 是有标签训练来源的一个分区,与原始 application_test.csv 不同。 4_oot_undue 是指定的演示名称,只表示比赛标签未公开,不表示真实贷款未到期或承诺以后补标签。

缺失率、分布和适用 PSI 使用全量样本;是否纳入缺失/特殊箱按报告参数核对。 IV、KS、AUC、Bad Rate 等只用观测标签,实际分母和状态看报告表。 不要把所有表中的 count 都解释成全样本人数:规则的监督统计与分箱分布可能采用不同口径。

字段说明与复现边界

实际字段说明是 cp1252 编码,表名使用 application_{train|test}.csv。 共享入口只读取 application 定义,122 个原字段均有说明;相同重复定义合并, 冲突或缺少定义记录为未知。业务元数据保持 MARS 的四个公共字段;完整原定义与检查状态单独保存在准备摘要中。 外部来源分 1/2/3 只登记为公开说明中的归一化外部来源分,不猜测提供机构,也不称为本项目训练的模型。

DAYS_EMPLOYED=365243 在合并表中实际出现 64,648 次。原值保留, 在需要的分析中仅对该字段登记特殊值;官方字段说明未解释此值,不当作实际就业时长。 金额的单位使用原始公开金额单位,不推断人民币、损失或利润。

准备摘要保存三文件 SHA256、实际行列数、散列配置、切分边界、各组标签覆盖与字段范围, 不含真实 ID 或成员清单。原始 CSV 的指纹在准备前后复核,文件不修改。 有原始输入的本地复算验证完整计算链路;公开 CI 加载已提交快照,核对哈希、查询、状态与展示证据, 不下载 Kaggle 数据,也不把快照检查称为从 CSV 完整重算。