TGViewer
Data Science | Machinelearning [ru] Data Science | Machinelearning [ru] @devsp · 19.8K subscribers
Post #5667 1.7K
Конформные интервалы в production ML при covariate shift: как держать coverage без бесполезно широких предсказаний

Split conformal хорошо работает при exchangeability: train, calibration и test приходят из одного распределения. В production это часто ломается из-за гео, девайсов, каналов, сезонности или смены acquisition mix, а типичная ошибка - просто расширить интервалы “с запасом”.

Что именно ломается

При covariate shift имеем:

p_prod(x) != p_cal(x)

но предполагаем, что p(y|x) примерно сохраняется. Если считать обычный conformal quantile на старом calibration set, coverage на текущем трафике может просесть.

Наивное решение - увеличить correction глобально. Coverage частично вернется, но price prediction interval, ETA interval или forecast band станут настолько широкими, что downstream-система перестанет им доверять.

Базовый production-рецепт

1. Учим quantile-модель:
q_low(x), q_high(x)

2. На calibration set считаем nonconformity scores:
s_i = max(q_low(x_i)-y_i, y_i-q_high(x_i), 0)

3. Оцениваем importance weights:
w_i ~= p_prod(x_i) / p_cal(x_i)

4. Берем не обычный, а weighted quantile score'ов.

5. Для нового объекта строим:
C(x) = [q_low(x)-tau, q_high(x)+tau]

Минимальный скелет:

import numpy as np

def weighted_quantile(values, weights, q):
order = np.argsort(values)
v = np.asarray(values)[order]
w = np.asarray(weights)[order]
cw = np.cumsum(w)
return v[np.searchsorted(cw, q * cw[-1])]

alpha = 0.1

scores = np.maximum(q_low_cal - y_cal,
y_cal - q_high_cal,
0)

weights = ratio_model.predict_weight(X_cal)
tau = weighted_quantile(scores, weights, 1 - alpha)

low = q_low_prod - tau
high = q_high_prod + tau


Так calibration distribution становится ближе к production distribution без грубого раздувания всех интервалов.

Как не получить слишком широкие интервалы

Один глобальный tau часто переоценивает неопределенность, если ошибка модели сильно зависит от x.

Практически помогают:

- CQR вместо point prediction: Conformalized Quantile Regression уже моделирует heteroscedastic uncertainty, поэтому conformal correction обычно меньше.
- Нормализованный score: например s_i = |y_i - y_hat_i| / sigma_hat(x_i), а интервал строится как y_hat(x) +- tau * sigma_hat(x).
- Локальная калибровка: отдельный tau по geo, device, channel, price bucket или risk bucket. Это близко к Mondrian conformal, но требует достаточного числа calibration examples в каждом сегменте.
- Rolling calibration buffer: для рекомендаций, скоринга и forecasting старый calibration set быстро перестает описывать текущий traffic mix.

Главный риск - плохие веса

Density ratio model может быть шумной. Несколько объектов с огромными весами фактически “заменят” весь calibration set.

Контролируйте:

ESS = (sum w)^2 / sum(w^2)

Если ESS низкий, weighted quantile нестабилен, а интервалы начинают прыгать от релиза к релизу.

Практичные меры:

- clip weights и мониторить долю clipped weights;
- сглаживать density ratio;
- объединять редкие сегменты;
- не калибровать сегмент, где мало свежих labels;
- запускать перекалибровку при падении ESS или drift по X.

Production-чеклист

- отдельный calibration set, не смешанный с training;
- drift detection по feature distribution;
- density ratio model между prod traffic и calibration traffic;
- weighted conformal calibration;
- мониторинг coverage, average width, coverage по slices, ESS и latency;
- алерты на рост ширины интервалов без роста ошибки;
- A/B validation, если интервалы влияют на routing, fallback или human review.

Важно не путать marginal и conditional coverage. Conformal может держать 90% coverage на потоке в среднем, но проваливаться в отдельных микросегментах. В production это надо проверять явно.

Вывод:
При covariate shift цель не в том, чтобы слепо расширить интервалы, а в том, чтобы калибровать их под текущую смесь production-объектов и контролировать надежность этой калибровки.
  • 🔥 4
  • 👎 2
More from @devsp
  1. Sep 27, 2026Нейронка живёт у тебя дома — а дотянуться до неё можно откуда угодно Поднимаешь личный LLM…
  2. Sep 27, 2026Нейрочип НТЦ «Модуль»: единственный серийный в стране Разбор единственного серийного нейро…
  3. Sep 27, 2026[Перевод] Промпт-инжиниринг: как лучше общаться с ИИ Что тебе ответит генеративная модель…
  4. Sep 26, 2026Тем, кто только лезет в ML Начинаешь щупать машинное обучение и хочешь нормально въехать в…
  5. Sep 26, 2026NVIDIA тоже подтянулась к тренду: LeetCode-собесы — на выход И весь замес — вокруг трёх те…
  6. Sep 26, 2026От готовых реплик до памяти о контексте: как AI-чаты дошли до нынешнего уровня В первой ча…
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 →