TGViewer
Data Science | Machinelearning [ru] Data Science | Machinelearning [ru] @devsp · 19.8K subscribers
Post #5760 1.56K
⁣Прогнозируем не только значение, но и его разброс: гетероскедастичная регрессия остатков для GBDT

Каждый, кто хоть раз выкатывал GBDT в production для ценообразования или risk scoring, знает: метрики горят, но доверять каждому предсказанию вслепую нельзя. Ошибка в 10% для дешёвого товара — копейки, для дорогого — минус маржа. Квантильная регрессия с CQR усложняет пайплайн и плохо калибруется. Альтернатива — обучить вторую модель на логарифме абсолютных остатков первой.

Сценарий простой: предсказываем среднее, а затем — дисперсию ошибки. На инференсе — два predict и один exp. Никакого сэмплирования или байесовских сеток.

Как это реализовать

Собираете остатки: residuals = |y_pred - y_true| + 1e-8. Затем на тех же признаках учите модель для log(residuals). На выходе получаете sigma = exp(model_var.predict(X)).

residuals = np.abs(y_train - model_mean.predict(X_train)) + 1e-8
model_var = LGBMRegressor(n_estimators=80)
model_var.fit(X_train, np.log(residuals))

def predict_with_uncertainty(X):
y = model_mean.predict(X)
sigma = np.exp(model_var.predict(X))
return y, sigma


Почему это затащило в production

Первое — интерпретируемость без SHAP. Модель остатков сразу показывает, где основная модель ошибается: "на товарах с высокой ценой разброс выше". Это даёт инженерный контекст для валидации.

Второе — простота деплоя. Два predict и один exp — всё. Никаких байесовских сеток или сложных loss-функций. Надёжно и быстро.

Третье — калибровка под данные. Модель остатков учится на реальных ошибках первой, а не на теоретическом распределении. Это даёт адекватные оценки uncertainty для конкретного датасета.

Типичные грабли и trade-offs

Вторая модель легко переобучается. Я режу num_leaves, увеличиваю min_data_in_leaf и обязательно валидирую отдельный холдаут. Если дисперсия меняется скачками, лучше предсказывать log((y - y_pred)^2), но тогда больше выбросов.

Метод не учитывает асимметрию распределения остатков. Если модель системно ошибается в одну сторону, sigma будет завышена. На малых выборках вторая модель может просто выучить шум — тут помогает кросс-валидация на уровне остатков.

Для медицины или финансов я бы добавил конформное предсказание поверх — как контрольный выстрел. Это повышает надёжность, но добавляет latency.

Вывод: Двухуровневая модель GBDT — простой кирпичик для production, который даёт не только answer, но и confidence, без байеса и лишней магии.
  • 👍 1
  • 🔥 1
More from @devsp
  1. Sep 26, 2026Post #5961
  2. Sep 25, 2026[Перевод] Jev за 25 строк на Python Про Jev галдят все, кому не лень. Jev там, Jev сям. Тв…
  3. Sep 25, 2026Что под капотом у рекомендаций Авито на главной Они решают две задачи: 1️⃣ Показывают поль…
  4. Sep 25, 2026🤣 «Смотря какой fabric, смотря какой details» 💥 xCode Journal
  5. Sep 24, 2026Post #5957
  6. Sep 24, 2026Как мы обучили детектор джейлбрейков для русскоязычных AI-агентов Привет, Хабр! На связи R…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →