Правильный ответ приходит через месяц: как следить за моделью до меток
Модель оценивает риск возврата заказа сегодня, а окончательный статус появляется через 30 дней. Через неделю после релиза команда открывает дашборд: на новом трафике меток мало, среди них непропорционально много быстрых возвратов. Если посчитать precision по имеющимся ответам, качество кажется катастрофическим. Но выборка размеченных объектов ещё не представляет всю когорту заказов: «не вернулся пока» не означает «не вернётся».
Для качества нужна зрелая когорта
Храните время прогноза, id события, версию модели и прогноз. Метку присоединяйте по тому же id, когда она сформирована по заранее принятому правилу. Если исход задачи определяется через 30 дней, оценивайте качество только для прогнозов, у которых прошёл этот срок и выполнены правила полноты данных. Для свежих когорт показывайте долю ещё неизвестных исходов; нулём их заполнять нельзя.
В миниатюрном примере есть заказы двух дней. На дату отчёта 26 октября только когорта 1 сентября достигла 30-дневного окна. Код намеренно исключает более свежие строки, даже если для одного заказа метка уже пришла. Так оценка не становится смесью «быстрых» и «обычных» исходов.
from datetime import date, timedelta
today = date(2026, 10, 26)
events = [
{"id": "a", "predicted_at": date(2026, 9, 1), "score": .9, "label": 1},
{"id": "b", "predicted_at": date(2026, 9, 1), "score": .2, "label": 0},
{"id": "c", "predicted_at": date(2026, 10, 10), "score": .8, "label": 1},
{"id": "d", "predicted_at": date(2026, 10, 10), "score": .1, "label": None},
]
window = timedelta(days=30)
mature = [e for e in events if e["predicted_at"] + window <= today]
evaluated = [e for e in mature if e["label"] is not None]
accuracy = sum((e["score"] >= .5) == bool(e["label"]) for e in evaluated) / len(evaluated)
print("зрелых:", len(mature), "с меткой:", len(evaluated), "accuracy:", accuracy)
assert {e["id"] for e in evaluated} == {"a", "b"}
assert accuracy == 1.0Проверены только два зрелых заказа; оба классифицированы верно. Это не оценка рабочей модели по двум объектам, а проверка правила отбора. Для настоящего отчёта задайте минимальный объём и интервалы неопределённости, считайте метрику по времени прогноза и версии модели. Если в зрелой когорте часть меток всё равно отсутствует, покажите их долю отдельно: даже после 30 дней пропуски могут зависеть от исхода.
Сегменты созревают с разной скоростью. Для возвратов одежды и мебели логистика и сроки решения могут отличаться; общий отчёт через 30 дней будет систематически недосчитывать один сегмент. Проверьте распределение времени до появления исхода по прошлым когортам и выберите правило зрелости для задачи, а не по удобной круглой дате. Если часть исходов никогда не наблюдается, обозначьте эту неизвестность отдельно: «нет записи о возврате» не всегда равно подтверждённой доставке без возврата.
Что видно до появления истины
Оперативно можно наблюдать доступность API, долю ошибочных запросов, распределение входных признаков и скорингов, долю решений по порогу. Эти сигналы помогают найти сбой данных или сервиса, но не заменяют accuracy или recall. Если появляется метка из ручной проверки, учитывайте, как выбирались объекты для проверки: чаще проверяют подозрительные случаи, и простое среднее по ним смещено.
Связывайте свежие технические сигналы с последующим отчётом качества: тревога по признаку в октябре должна проверяться на октябрьской когорте, когда её исходы созреют. Тогда мониторинг не заканчивается графиком дрейфа, а отвечает на вопрос, повредил ли сдвиг решение.
Задержка метки не всегда фиксирована. Возврат товара может произойти на 3-й или 29-й день, а информация о нём попасть в хранилище позже. Поэтому срок зрелости задают по определению таргета и задержке доставки данных. Проверяйте отдельно долю событий с появившимся исходом и долю событий, для которых окно наблюдения завершилось. Если бизнес меняет политику возврата, сравнение сентябрьской и октябрьской когорт требует пометки этой смены, иначе её легко принять за изменение качества модели.
В курсе «Data Scientist: от данных до деплоя моделей» рассматриваются мониторинг data и prediction drift, метрики качества и сопровождение модели после релиза. Откройте программу курса, чтобы собрать проверяемый цикл от прогноза до поздней обратной связи.
Продолжить на практике
- Data Scientist: от данных до деплоя моделей ↗
Практический курс по Data Science: от постановки ML-задачи и работы с данными до inference API, CI/CD и мониторинга моделей в продакшне. Вы пройдёте EDA, feature engineering, обучение и оценку моделей, experiment tracking, error analysis и deployment — чтобы собирать полноценный рабочий контур вокруг ML-решения.
