TGViewer
Knowledge Accumulator Knowledge Accumulator @knowledge_accumulator · 5.69K subscribers
Post #354 1.95K
Предсказать среднее могут не только лишь все

Классическая задача машинного обучения - тренировочный и тестовый датасет, бинарная классификация.

Если ваша модель без глаз и ушей, т.е. не получает фичи на вход, то она посчитает avg(y) на тренировке и предскажет это для каждого тестового образца.

Когда мы выкатываем модель в прод, то одним из критериев её самочувствия является так называемая калибровка - sum(p(y)) / sum(y). Даже выше упомянутая слепоглухая модель будет "откабирована". т.е. измерение будет равно примерно 1. Казалось бы - планка-то не очень высокая. Если калибровка в проде не 1, то с моделью что-то сильно не так.

Мы выложили модель в открытый доступ, так что не секрет, что наш ранкер - это простой трансформер с ранним связыванием, применяемый над историей пользователя и представлением кандидата. Все посты представлены в виде id автора, id поста, и ещё там есть пачка банальных контекстных фичей.

Вся эта фигня тренируется в реальном времени на всех поступающих данных. Свежие чекпоинты постоянно отгружаются в инференс и в прод. Так вот, от нашего ранкера не так уж и просто добиться откалиброванности. Это очень капризная дама.

Если тренировка падает на час и в проде продолжает применяться замороженный чекпоинт - прощай, откалиброванность. Предсказания по не до конца ясной причине начинают плавно расти со временем. Через несколько часов они вырастают в 5-10 раз. Любое малейшее расхождение фичей на тренировке и применении - калибровка летит в жопу. Причём обычно именно в большую сторону, непропорционально падению CTR.

На днях дебажил проблему. У нас есть конверсионная модель, предсказывающая вероятность p(purchase | click). Покупка лишь изредка происходит сразу после клика, поэтому реальную метку надо ждать какое-то время. Я работал над моделью с 24-часовой задержкой. То есть каждый обучающий образец - это клик на рекламу, случившийся ~сутки назад, и метка покупки.

На тренировке всё выглядело нормально, а как выкатываю в прод - калибровка >2 - модель начинает выдавать в 2 раза большие скоры, в том числе на теневом трафике прода - то есть без учёта selection bias.

Я беру эти образцы. Думаю - может из-за расхождения в историях - модель могла не обучаться на свежих постах и в эмбеддингах там мусор. Создаю исскусственную задержку - такое же говно. Думаю - ну может распределение кандидатов меняется? Пробую подставлять старых кандидатов - такое же говно.

Нежно приложив пистолет к виску моего агента, я сказал ему копать - перебирай все фичи, пока не найдёшь, из-за чего эта херня возникает.

И что вы думаете? Сраный день недели. В представлении кандидата есть эмбеддинг текущего дня недели. У тренировочных данных, на которых тренируется модель, эта фича всегда равна предыдущему дню недели. А в проде она равна текущему дню. Если в проде подменить фичу дня недели на вчерашний, модель резко выздоравливает и предсказание превращаются в норму.

Какого чёрта оно так себя ведёт? Не знаю, и знать не хочу. Обожаю машинное обучение.

@knowledge_accumulator
  • 👍 25
  • 😁 9
  • ❤ 6
  • 🤨 5
  • 🔥 1
More from @knowledge_accumulator
  1. Sep 20, 2026Почувствуйте AGI Все эти годы я писал о том, что не верю в потенциал LLM превратиться в су…
  2. Aug 17, 2026Долина vs Нью-Йорк Если что-то находится далеко от нас, нам свойственно излишне обобщать с…
  3. Jul 30, 2026Кто виноват в сливе рекламного бюджета? При создании рекламного line item рекламодатель ус…
  4. Jul 13, 2026Покатался на яхте в Американской глубинке После переезда в Калифорнию произошло неожиданно…
  5. Jun 30, 2026Да кто такие эти ваши producer-side A/B-тесты? В своей яндексовской эре работы над рекомен…
  6. Jun 15, 2026Зачем американцы инвестируют в недвижимость? Довольно давно я делал пост о том, что не нуж…
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 →