модуль 6 из 7 · Акт VI · ~35 мин · 7 решений

сцена

Разбор «прогноза, читающего газету следующего месяца», занимает субботу. Восстановленная картина преступления — на доске:

Модель предсказывает спрос на март. Среди её признаков — «официальная статистика региона за март»: занятость, доходы. В реальном марте этих чисел не существует — их опубликуют в апреле. Но в обучающей таблице они есть: таблица собиралась в июне запросом к хранилищу, и хранилище честно отдало мартовские значения. Модель научилась «предсказывать» спрос по данным, которые узнает через месяц после дедлайна. На бэктесте это выглядело как гениальность.

Аркадий
Аркадий

(мрачно) Look-ahead. Классика, у нас в фонде за это били по рукам линейкой. Но погодите, я же проверял: в признаках нет ничего позже даты прогноза, я фильтровал по дате наблюдения…

Иван
Иван

По дате наблюдения — фильтровал. А по дате публикации — нет. Мартовская занятость имеет дату наблюдения «март» и дату публикации «апрель». Твой фильтр пропустил её в мартовскую строку на законных основаниях.

Аркадий
Аркадий

…Две оси времени. Мы же строили винтажи ровно для этого — чтобы отчёты были воспроизводимы. А я собрал обучающую таблицу мимо них — прямым запросом к «текущему».

Соня
Соня

Значит, правило то же, что для отчётов: обучающая строка за март может видеть только винтаж на март. Вопрос — как сделать, чтобы это правило исполнялось всегда, а не когда Аркадий вспомнит. Потому что следующую таблицу соберёт не Аркадий, а стажёр. Или я. Или скрипт в три ночи.

Иван
Иван

И это только первая находка. Я сравнил его бэктест с тем, что модель делала в проде на этой неделе. Расхождение больше, чем объясняет утечка. Там есть что-то ещё.

← карта