train_catboost
CatBoost-трек: признаки -> оценка по трём схемам -> финальная модель -> submission.csv.
Схемы валидации (данные — один день, 13 реальных ТС + 26 синтетических клонов в train):
proxy— как validate: K-fold по реальным точкам train+test блоками по времени; клоны и остальные точки остаются в обучении. Validate устроен так же (соседние моменты T тех же ТС), поэтому это лучший прокси скора платформы. Дополнительно печатается классический holdout train -> test.lovo— честная: откладываем реальное ТС вместе с клонами. Качество на новом ТС / другом дне.
Запуск:
python ml/src/train_catboost.py --dataset ./dataset --eval # оценка
python ml/src/train_catboost.py --dataset ./dataset --fit --out submission.csv
Functions
|
На сколько секунд расширить интервал [q10, q90], чтобы накрыть |
|
|
|
|
|
|
|
K-fold по реальным точкам блоками по времени (как validate: соседние T, клоны остаются в обучении). |
|
Holdout train -> test: покрытие интервала (сырое и после конформной калибровки), качество вероятностей. |
|
|
|
|
|
Квантильная модель (интервал 10–90%) на поправку к cur_dev_s + классификатор early/ontime/late. |
|
Признаки для train/test/validate (+ кеш в artifacts/cache). |
|
|
|
MAE по бинам горизонта прогноза (lead_s = сколько сек до целевого момента). |
|
MAE_TARGET по условию «бейзлайн cur_dev_s даёт score 0.40» (оценка на test). |
|
|
|
|
|
|
|
-> (квантили задержки N×3 в секундах, вероятности классов N×3 в порядке CLASSES). |
|
|
|
|
|
- train_catboost.conformal_margin(qs: numpy.ndarray, y: numpy.ndarray, coverage: float = 0.8) float[исходный код]
На сколько секунд расширить интервал [q10, q90], чтобы накрыть
coverageфактов (CQR).
- train_catboost.delay_class(y) numpy.ndarray[исходный код]
- train_catboost.eval_holdout(data: dict, feats: list[str], params: dict, w_syn: float = 1.0, seeds=(0,)) dict[исходный код]
- train_catboost.eval_lovo(data: dict, feats: list[str], params: dict, w_syn: float = 1.0) dict[исходный код]
- train_catboost.eval_proxy(data: dict, feats: list[str], params: dict, k: int = 5, block_min: int = 30, w_syn: float = 1.0, seeds=(0,)) dict[исходный код]
K-fold по реальным точкам блоками по времени (как validate: соседние T, клоны остаются в обучении).
- train_catboost.eval_uncertainty(data: dict, feats: list[str], params: dict) dict[исходный код]
Holdout train -> test: покрытие интервала (сырое и после конформной калибровки), качество вероятностей.
Калибровочный запас считается на test; честное покрытие проверяется перекрёстно на двух половинах test.
- train_catboost.fit(X: pd.DataFrame, y_resid: np.ndarray, feats: list[str], params: dict, seed: int = 0, weight: np.ndarray | None = None) CatBoostRegressor[исходный код]
- train_catboost.fit_final(data: dict, feats: list[str], params: dict, w_syn: float, seeds) list[catboost.CatBoostRegressor][исходный код]
- train_catboost.fit_uncertainty(X: pandas.DataFrame, M: pandas.DataFrame, feats: list[str], params: dict, seed: int = 0)[исходный код]
Квантильная модель (интервал 10–90%) на поправку к cur_dev_s + классификатор early/ontime/late.
- train_catboost.load_all(dataset: Path, cache: bool = True) dict[исходный код]
Признаки для train/test/validate (+ кеш в artifacts/cache).
- train_catboost.mae(y, p) float[исходный код]
- train_catboost.mae_by_lead(y: pandas.Series, p: pandas.Series, lead_s: pandas.Series) list[dict][исходный код]
MAE по бинам горизонта прогноза (lead_s = сколько сек до целевого момента).
Диспетчер должен понимать, где модель точнее, а где — фактически «предупреждает заранее». Обычно MAE растёт с горизонтом; это надо видеть, а не усреднять.
- train_catboost.mae_target_estimate(data: dict) float[исходный код]
MAE_TARGET по условию «бейзлайн cur_dev_s даёт score 0.40» (оценка на test).
- train_catboost.main() None[исходный код]
- train_catboost.pooled(data: dict) tuple[pandas.DataFrame, pandas.DataFrame][исходный код]
- train_catboost.predict(models: list[catboost.CatBoostRegressor], X: pandas.DataFrame, feats: list[str], cur_dev: numpy.ndarray) numpy.ndarray[исходный код]
- train_catboost.predict_uncertainty(q: catboost.CatBoostRegressor, clf: catboost.CatBoostClassifier, X: pandas.DataFrame, feats: list[str], cur_dev: numpy.ndarray) tuple[numpy.ndarray, numpy.ndarray][исходный код]
-> (квантили задержки N×3 в секундах, вероятности классов N×3 в порядке CLASSES).
- train_catboost.real_weight(meta: pandas.DataFrame, w_syn: float) numpy.ndarray[исходный код]
- train_catboost.score(y, p, mae_target: float) float[исходный код]
- train_catboost.write_submission(dataset: Path, ids: pandas.Index, pred: numpy.ndarray, out: Path) pandas.DataFrame[исходный код]