Skip to content

VectorPeak/kaggle-tabular-forge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kaggle-tabular-forge | Kaggle 表格炼金工坊

Evidence-first Kaggle Tabular Competition Forge

python uv Codex Skill workflow quality

简体中文 · English

kaggle-tabular-forge 是一个面向 Kaggle 表格赛的可复用实验框架。它的核心不是黑箱 AutoML,而是:用严格的 CV/OOF 证据、可追踪 artifact、实验 registry 和安全 gate,把特征、模型、ensemble 假设一步步锻造成可信结果。

项目受到 NVIDIA/KGMON S6E3 这类高吞吐竞赛系统启发:人类制定策略,LLM 辅助提出假设,所有结论都必须经过 OOF 和 artifact 证明。

当前阶段

项目已经完成从 P0 到 P4 的最小闭环:从规则基座、OOF 证据流水线、配置驱动实验,到候选池、轻量 ensemble 和 matrix-driven candidate factory 都已经有可运行 MVP。当前 README 以“如何理解和复用这个框架”为主,而不是只描述早期 P1/P2 原型。

阶段边界如下:

  • P0:项目基座、规则和验收标准,回答“Agent 与实验边界是否清楚?”
  • P1:实验证据流水线,回答“能否跑出可审计的 OOF、submission 和 registry?”
  • P2:配置驱动实验工作台,回答“能否批量运行、比较和追踪多个实验?”
  • P3:候选池与轻量 ensemble,回答“能否从可信候选中安全构造融合结果?”当前 MVP 已实现。
  • P4:候选实验工厂,回答“能否从 matrix 配置批量生产可信 P2 候选?”当前 MVP 已实现。

当前仓库已经具备:

  • uv / pyproject.toml 管理的 Python 3.11+ 项目环境。
  • ktab CLI:validate-configsmokeruncompareensemblefactory
  • 配置 schema 校验与 config snapshot / config hash。
  • tiny fixture 驱动的 smoke / unit / integration 测试。
  • StratifiedKFold OOF baseline 与 Logistic Regression baseline。
  • 可选 LightGBM / XGBoost / CatBoost 依赖入口。
  • OOF、submission、metrics、manifest、registry 等 artifact 写入。
  • P3 OOF-backed ensemble 与 P4 matrix-driven candidate factory。
  • pytest 与 ruff 作为基础质量门槛。

执行流程

项目执行流程遵循 Goal → Config → Evidence → Registry → Review 的闭环:先由人类给出目标,再由配置驱动实验,最后用 OOF、artifact 和 registry 判断结果是否可信。

flowchart LR
    A["输入 /goal<br/>明确 competition、objective、budget"] --> B["自动发现上下文<br/>configs / registry / artifacts"]
    B --> C["校验配置<br/>schema + path + target + metric"]
    C --> D{"配置是否可运行?"}
    D -- "否" --> E["补齐缺失信息<br/>停止执行,等待确认"]
    D -- "是" --> F["运行实验<br/>ktab run / smoke / factory"]
    F --> G["生成证据<br/>OOF、metrics、manifest、submission"]
    G --> H["写入 registry<br/>config hash + score + artifact path"]
    H --> I["比较候选<br/>ktab compare / ensemble"]
    I --> J{"是否通过 gate?"}
    J -- "否" --> K["记录 hypothesis<br/>调整配置后重跑"]
    J -- "是" --> L["沉淀可信候选<br/>进入候选池或融合流程"]
    K --> B
Loading

快速开始

安装依赖并运行基础校验:

cd E:\Github\kaggle-tabular-forge
uv sync --group dev
uv run pytest
uv run ruff check .

查看 CLI:

uv run ktab --help

校验配置:

uv run ktab validate-config `
  --config configs\competition.example.yaml `
  --schema configs\schemas\competition.schema.json

运行 P1 tiny smoke。这个命令只使用仓库内 fixture,不依赖真实 Kaggle 数据:

uv run ktab smoke `
  --data-dir tests\fixtures\data\churn_tiny `
  --artifact-root artifacts `
  --competition churn_tiny `
  --experiment-id p1-local-smoke `
  --target Churn `
  --id-column id `
  --n-splits 3 `
  --seed 42

运行 P2 配置驱动实验:

uv run ktab run --config configs\experiments\p02_churn_logistic_basic.example.yaml

运行 LightGBM 示例前,先安装可选依赖:

uv sync --group dev --extra lgbm
uv run ktab run --config configs\experiments\p02_churn_lgbm_basic.example.yaml

比较某个 competition 下已经完成且具备 OOF 证据的实验。<competition_slug> 应与运行实验时写入 registry 的 competition 名称一致:

uv run ktab compare --artifact-root artifacts --competition <competition_slug> --top-n 10

运行 P3 ensemble。注意:示例配置会读取 registry 中已完成的 parent experiments;如果 parent artifact 不存在,需要先运行对应实验或修改配置中的 parent:

uv run ktab ensemble --config configs\ensembles\p03_candidate_ensemble.example.yaml

运行 P4 candidate factory。建议先 dry-run,确认将要展开的 experiment_id 与 artifact 路径,再去掉 --dry-run 执行真实批量实验:

uv run ktab factory --config configs\matrices\p04_churn_candidate_factory.example.yaml --dry-run
uv run ktab factory --config configs\matrices\p04_churn_candidate_factory.example.yaml --max-runs 3

生成的本地 artifact 会写入:

artifacts/
├── experiments/<competition>/<experiment_id>/      # metrics、manifest、fold metrics、review
├── oof/<competition>/<experiment_id>/              # oof.parquet
├── submissions/<competition>/<experiment_id>/      # submission.csv
└── registry/<competition>/                         # experiment_registry.csv

artifacts/ 和真实 data/ 默认不提交到 git。

/goal 约定

/goal 是给人类和 Agent 使用的高层意图格式:人类只描述目标、比赛和预算,系统再从 configs、registry 与已有 artifact 中发现 metric、target、路径、CV 默认值、当前最佳实验和可复用证据。

推荐格式:

/goal objective=<objective> competition=<competition_slug> request="<intent>" budget=<budget>

示例:

/goal objective=build_baseline competition=<competition_slug> request="build first honest baseline with OOF artifacts" budget=single_fold

约定上,competition 不应绑定 README 中的某个固定 Kaggle 项目名称;它只是 registry、artifact 和本地数据路径使用的 slug。完整契约见 docs/goal_contract.md

测试数据

项目把测试数据分成两层:仓库内 fixture本地真实比赛数据。前者用于验证代码路径是否可靠,后者用于真实建模与提交文件生成。两者职责不同,不能混用。

仓库内 fixture

默认测试只使用仓库内的 tiny fixture,不依赖任何外部下载、Kaggle 凭据或私有数据。它的作用是做 smoke test:确认 CLI、配置解析、CV/OOF、artifact 写入和 registry 更新这些基础链路能跑通。

tests/fixtures/data/<fixture_name>/
├── train.csv                 # 小型训练集,包含 target 与 id column
├── test.csv                  # 小型测试集,不包含 target
└── sample_submission.csv     # 提交文件模板,列结构与测试集 id 对齐

当前仓库提供的 fixture 示例:

tests/fixtures/data/churn_tiny/
├── train.csv
├── test.csv
└── sample_submission.csv

fixture 只服务于自动化测试和最小链路验证,不代表真实比赛的数据规模、特征分布、缺失模式或目标难度。

本地比赛数据

真实 Kaggle 数据不进入 git,统一放在本地 data/ 目录下,并通过配置文件显式指向。推荐使用与具体赛题解耦的目录约定:

data/<competition_slug>/raw/
├── train.csv
├── test.csv
└── sample_submission.csv

例如,任意一个表格赛题都可以映射到自己的 competition_slug

data/<competition_slug>/raw/train.csv
data/<competition_slug>/raw/test.csv
data/<competition_slug>/raw/sample_submission.csv

数据接入约定

  • train.csv 应包含目标列和样本 ID 列;目标列名、ID 列名和评价指标由 config 指定。
  • test.csv 应包含与训练集兼容的特征列和样本 ID 列,但不应包含目标列。
  • sample_submission.csv 用于校验提交文件的 ID 顺序、列名和行数,不应被模型逻辑当作训练信号。
  • 不同 Kaggle 赛题只需要新增对应的 competition_slug 和 config,不应改动测试 fixture 或核心代码。
  • 如果某个赛题有额外文件、分组列、时间列或多目标标签,应在该赛题的 config / docs 中说明,而不是写死到 README 的通用路径里。

证据规则

一个实验只有具备对应证据时才算可信:

  • config
  • command
  • CV protocol
  • OOF predictions
  • fold metrics
  • test predictions 或 submission
  • feature/model manifests
  • leakage review
  • reproducibility metadata
  • experiment registry record

没有 OOF/CV 证据、日志和可复现命令时,任何结论都只能算 hypothesis。

文档索引

入口文档:

  • AGENTS.md:Agent 不可违反的规则与任务路由。
  • README.md:人类入口、项目定位、执行流程、快速命令、数据契约与 FAQ。
  • configs/README.md:配置示例、阶段入口与重复运行注意事项。

核心契约:

阶段路线图:

方法论与系统设计:

实验记录与补充材料:

目录结构

当前仓库是一个面向 Kaggle 表格赛的 evidence-first 实验框架,核心内容分为 configs/src/ktabforge/tests/docs/ 四层:配置描述“要跑什么”,源码负责“怎么跑”,测试验证“能否稳定跑”,文档沉淀“为什么这样跑”。

kaggle-tabular-forge/
├── AGENTS.md                         # Agent 协作规则、任务边界与安全约束
├── README.md                         # 中文项目入口:定位、流程、数据契约、FAQ
├── README.en.md                      # 英文 README,与中文 README 保持结构对齐
├── pyproject.toml                    # uv / Python 项目配置、依赖分组、CLI 入口
├── uv.lock                           # uv 锁定文件,保证依赖可复现
├── .gitignore                        # 忽略 artifacts、data、缓存和本地临时文件
│
├── configs/                          # 人类可编辑配置层:比赛、实验、模型、路径、矩阵
│   ├── README.md                     # 配置目录说明
│   ├── competition.example.yaml      # 比赛级配置:target、id、metric、路径等
│   ├── experiment.example.yaml       # 单实验配置模板
│   ├── feature_catalog.example.yaml  # 特征目录模板
│   ├── model_zoo.example.yaml        # 模型族与依赖分组模板
│   ├── paths.example.yaml            # 本地路径约定模板
│   ├── stacking.example.yaml         # stacking / ensemble 配置模板
│   ├── agents.example.yaml           # Agent 协作配置模板
│   ├── goal.example.yaml             # /goal 契约配置模板
│   ├── experiments/                  # 可直接运行的 P2 实验配置
│   │   ├── p02_churn_logistic_basic.example.yaml
│   │   └── p02_churn_lgbm_basic.example.yaml
│   ├── ensembles/                    # P3 候选融合配置
│   │   └── p03_candidate_ensemble.example.yaml
│   ├── matrices/                     # P4 批量候选实验矩阵
│   │   └── p04_churn_candidate_factory.example.yaml
│   ├── goals/                        # 阶段性 goal 示例
│   │   ├── p03_candidate_ensemble.goal.yaml
│   │   └── p04_candidate_factory.goal.yaml
│   └── schemas/                      # JSON Schema:配置校验边界
│       ├── competition.schema.json
│       ├── experiment.schema.json
│       ├── feature_catalog.schema.json
│       ├── goal.schema.json
│       ├── matrix.schema.json
│       ├── model_zoo.schema.json
│       ├── paths.schema.json
│       └── stacking.schema.json
│
├── src/ktabforge/                    # Python 包源码:ktab CLI 与实验流水线
│   ├── __init__.py
│   ├── __main__.py                   # python -m ktabforge 入口
│   ├── cli.py                        # `ktab` 命令行入口
│   ├── config/                       # 配置加载、schema 校验、实验矩阵解析
│   ├── data/                         # train/test/submission 读取与数据 schema
│   ├── cv/                           # CV protocol 与 splitters
│   ├── features/                     # 基础特征与特征集合定义
│   ├── models/                       # baseline、logistic、LightGBM、XGBoost 与模型注册
│   ├── metrics/                      # 统一 scoring 与指标适配
│   ├── pipeline/                     # evidence-first 实验主流程与 run context
│   ├── artifacts/                    # OOF、submission、manifest、checksum、layout 写入
│   ├── registry/                     # experiment registry 读写与比较基础
│   ├── candidates/                   # 候选池与候选对齐检查
│   ├── ensembles/                    # averaging / ensemble runner
│   ├── factory/                      # candidate factory:矩阵展开、运行、结果汇总
│   ├── reports/                      # compare 报告与实验对比输出
│   ├── safety/                       # leakage review、gate 与安全检查
│   └── utils/                        # env、git、hashing、logging、time 等通用工具
│
├── tests/                            # 自动化测试:从导入 smoke 到端到端实验链路
│   ├── fixtures/data/churn_tiny/     # 仓库内 tiny fixture,不绑定真实 Kaggle 赛题
│   │   ├── train.csv
│   │   ├── test.csv
│   │   └── sample_submission.csv
│   ├── smoke/                        # 最小导入与项目可用性测试
│   ├── unit/                         # 配置、CV、矩阵等单元测试
│   └── integration/                  # CLI、P2/P3/P4 实验链路集成测试
│
└── docs/                             # 设计文档、阶段路线图、实验复盘与方法论
    ├── README.md                     # 文档索引
    ├── goal_contract.md              # /goal 输入与验收契约
    ├── artifact_contract.md          # artifact 布局、OOF 对齐与可追踪性
    ├── leakage_rules.md              # 泄漏与 public leaderboard 使用边界
    ├── testing_strategy.md           # 测试层级与 fixture 策略
    ├── p00_project_foundation.md     # P0 项目基座
    ├── p01_evidence_pipeline.md      # P1 证据流水线
    ├── p02_experiment_workbench.md   # P2 实验工作台
    ├── p03_candidate_ensemble.md     # P3 候选融合
    ├── p04_candidate_factory.md      # P4 候选工厂
    ├── experiments/                  # 实验记录、验证笔记、建模复盘
    ├── evaluation/                   # baseline checklist 与评估材料
    ├── config/                       # 环境与配置笔记
    └── testing/                      # smoke test plan 等测试材料

推荐阅读顺序:

  1. 先看 README.md,理解项目定位、执行流程和数据契约。
  2. 再看 configs/README.mdconfigs/*.example.yaml,理解如何声明比赛、实验和路径。
  3. 需要跑实验时,从 configs/experiments/configs/matrices/ 选择模板,再用 ktab run / ktab factory 执行。
  4. 需要理解结果可信度时,优先看 docs/artifact_contract.mddocs/leakage_rules.md 和生成的 registry / manifest。
  5. 需要改源码时,从 src/ktabforge/cli.py 进入,再顺着 pipeline/artifacts/registry/ 查执行链路。

注意事项

  • 只以本地 uv run pytestuv run ruff check . 和完整 artifact 作为最低验收,不能只看 public leaderboard 或单次提交结果。
  • 任何模型改进都必须保留对应的 config、command、OOF、fold metrics、manifest、leakage review 和 registry record。
  • 默认不提交 artifacts/、真实 data/、Kaggle token、API key 或包含私有路径的临时文件。
  • 不把 public leaderboard 当作调参目标;它只能作为赛后校准或异常排查信号。
  • 不默认使用 reset --hard、删除 registry 或覆盖 OOF 证据;需要回滚时优先保留历史实验记录。
  • 如果本地仓库已有 dirty worktree,先确认变更归属,再决定继续、stash 或隔离 clone。

FAQ

为什么这个项目强调 OOF-first?

Kaggle 表格赛的核心风险不是“模型不够复杂”,而是离线验证不可信。OOF 是 out-of-fold 预测:每个训练样本都只由没见过它的 fold 模型预测,因此它更接近真实泛化误差。没有 OOF 的分数提升,更像未经审计的 hypothesis。

为什么不直接做 AutoML?

本项目追求的是可复用、可解释、可复盘的实验系统,而不是一次性的黑箱搜索。AutoML 可以作为候选生成器,但每个候选仍必须通过统一的 CV、artifact、registry 和 leakage gate,才能进入可信候选池。

为什么 artifacts 默认不提交到 git?

artifacts/ 通常包含 OOF、submission、metrics、manifest 和 registry,体积会快速膨胀,也可能带有本地路径或比赛数据痕迹。默认策略是代码和契约入库,大型实验产物留在本地或外部存储,并通过 manifest/registry 保持可追踪。

为什么 public leaderboard 不能作为唯一依据?

Public LB 只覆盖测试集的一部分,且容易被反复提交过拟合。更稳健的流程是先信任本地 CV/OOF,再用 Public LB 做 sanity check;如果两者背离,应优先排查泄漏、分布漂移、split 设计和 submission 对齐。

为什么每个实验都需要 config hash 和 registry?

config hash 相当于实验“指纹”,registry 相当于实验“账本”。前者用于确认某个结果到底由哪组参数产生,后者用于横向比较和回溯,避免后续只记得分数、忘记过程。

About

Goal-driven Kaggle tabular experiment factory: synthetic fingerprint mining, OOF discipline, deep stacking, and AI council workflows.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages