ML for Value / Ваня Максимов – Telegram
ML for Value / Ваня Максимов
5.59K subscribers
191 photos
1 video
1 file
119 links
Путь от ML-модели до Value для компании | RecSys, Search, LLM, Pricing и CLTV

Ваня Максимов, @Ivan_maksimov
Head of AI | Recsys, search, llm @Y.Market, ex-WB, ex-Delivery Club

Консультирую компании, Веду курсы
Публикую релевантную рекламу
Download Telegram
ML for Value / Ваня Максимов
Что спросить у кандидата про бустинг? Пока в мире хайпуют нейронки вроде ChatGPT, в табличных данных все еще царят бустинги. Спрашивать у кандидатов классические вопросы уже не комильфо: их все выучили - "Почему бустинг градиентный? При чем тут вообще градиент"…
"Мы прогнозируем бустингом сразу много временных рядов: продажи каждого из 10_000 товаров. В приличной доли из них бустинг делает очень странный прогноз - он стабильно выше/ниже среднего значения продаж конкретного товара в 2-3 раза. Почему так может быть?"


В комментариях верно подметили глобально одну большую проблема - Underfitting модели. Она может выражаться в:

1. Бустинг с rmse лоссом неустойчив к “выбросам”
Он может учитывать выбросы вверх (праздники, промо) и вниз (кончился товар, продажи = 0) и за счёт этого может "выглядеть на графике", что в среднем прогноз выше/ниже большинства продаж. Хотя с учётом выбросов он равен среднему. Лечится учетом фичей праздников - без них underfit

2. Бустинг плохо ловит тренды
Бустинги плохо учат тренды в данных, поэтому на трейне все модели быть ОК, а вот растущий тренд в тесте бустинг не поймает. Тоже некоторого рода underfit или ограничение деревьев, смотря как на это посмотреть 🙃

3. Не учет timeseries_id (то бишь id товаров)
Да, некоторые товары могут продаваться в тысячах штук, а другие в единицах. Поэтому бустинг может в среднем прогнозировать правильно (сотни), но по конкретным товарам сильно ошибаться:) Это скорее under-fitting


От себя добавлю:
4. Лосс имеет значение
Часто мы не хотим, чтобы выбросы влияли на обучение и берём MAE как лосс. Но помните, что MAE даёт прогноз = медиане, а медиана может очень сильно отличаться от среднего

5. Веса товаров в лоссе имеют значение
Если у вас редко-продающиеся товары имеют меньший вес в лоссе, чем часто-продающиеся в сотни раз, то очевидно редкопродающиеся товары вы будете плохо прогнозировать). Например, в RMSE loss в 10 раз меньше продающийся товар имеет по факту в 100 (!) раз меньший вес

Можно лечить аккуратным установлением весов, скажем, через multi-RMSE loss


Если резюмировать
- Не забывайте важные фичи во временных рядах (праздники, промо, сезоннности, тренды, среднее значение каждого ряда)
- Думайте ооочень внимательно над лоссом 📈

Иначе можно получить очень неприятные артефакты:)
👍34🔥83
This media is not supported in your browser
VIEW IN TELEGRAM
На выходных записали видео с Александром Миленькиным (автор Data Feeling) про наш путь в DS, текущие задачи, найм, удаленку и не только

Пока все монтируется - вот вам небольшое превью кусочка истории о "Очень синьерном миддле". Или почему так сложно бывает расти из миддла в синьера 🚀
👎35👍12🔥4🥴3
Корреляция и время

Фраза “Корреляция не означает причинно-следственную связь” стала уже максимально избитой. Но уже в который раз вижу, что эту фразу в контексте временных рядов понимают неверно. А с учеом того, что 90% табличных данных - по факту временные ряды (цены, продажи, фин показатели и тп) - неверно понимается почти всегда 😱

На каждом втором средненьком курсе по статистике вам расскажут пример ложной корреляции (те которая не означает причинно-следственную связь) между:
- потреблением мороженого и числом убийств
- обьемом потребления пищи и уровнем аутизма
- потреблением сыра и смертностью от запутывания в одеяле кровати

Их все обьединяет то, что у двух показателей есть тренд во времени. И мы видим корреляцию на самом деле двух трендов, а не самих показателей

Проблема в том, что во временных рядах корреляцию и причинно-следственную связь ищут совсем не так:

*Упрощенно* алгоритм такой:
- Удалить трендовую и сезонную составляющую: e = y - trend - seasonal
- Если временной ряд не один, а много (1 показатель за 10 лет у разных стран, например), то нужно еще вычесть среднее значение каждой страны: e = y - trend - seasonal - group_mean
- После этого считать корреляцию остатков (e) у 2-ух переменных

Тогда никакой ложной корреляции, как в примерах выше, вы не увидите 👌

Ну и в целом, когда ничинаете работать с временными рядами, то очень много из классической статистики работает совсем не так: корреляция, стат значимоть коэффициентов регрессии, what-if анализ на изменение 1 фичи и тп. Тк что будьте крайне аккуратны: ведь временные ряды есть везде 😈


P.S. Хороший пример ложной корреляции - это когда есть 2 переменные, измеренные в 1 момент времени

Например, если вы за 1 день измерите размер стопы и длину волос у 10_000 людей, то найдете отрицательную значимую, но ложную корреляцию между этими показателями
👍25🔥95🥴2
Attention, tabular data!
TabR is coming

Что ж, вот наконец модели на базе attention стали показывать годные результаты на табличных данных!) Если хотите детальнее посмотреть, как, то есть прекрасный обзор новой архитектуры TabR
от Андрея Лукьяненко

Метод выглядит многообещающим, но я бы пока к нему пригляделся в реальных приложениях. Как я понял из статьи (поправьте, если не так), для бустингов и TabR не делали почти никакого feature engineering. Но это очень сильно бустит перформанс бустингов в реальных задачах

Так что будет очень интересно сравнить эти 2 модели, когда в обеих будут мощные фичи 🔥
🔥15👍61
Confidence - АВ платформа Spotify скоро будет продаваться всем желающим

Довольно занятная история произошла на прошлой неделе: Команда spotify анонсировала запуск своей внутренней АВ-платформы Confidence для всех. Видимо, пробуют занять нишу ушедшего Google Optimize

Судя по тех статьям от самих инженеров spotify, под капотом есть вся классика АВ:
- Разведение экспериментов по слоям с двойным солированием
- Календарь экспериментов для разведения тестов по времени
- Проверка сплитования АА-тестами и определение MDE
- Калькулятор размера выборки

Из несколько необычных killer-фич:
- Sequential testing. Можно закончить эксп по достижению стат значимости. Но сами же инженеры Spotify не рекомендуют его использовать 🙃Ведь есть эффект “дня недели” - если в тесте понедельников больше чем суббот, то можно получить смещение
- Явно на уровне UI разделяют целевые и вспомогательные метрики - ну наконец-то! Больше нельзя будет продакту поставить 20 целевых метрик в эксперименте и катить, если прокрасилась хоть одна:)

Остальные детали откопать пока не удалось. Так что ждем официальной раскатки с документацией - будем ее препарировать 😈
🔥24👍10
Если вы не знаете, чем занять себя 7 сентября - приходите на Practical ML Conf

Я буду там одним из спикеров: расскажу, как строить с нуля модель прогноза спроса на примере Яндекс.Лавки 💙
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18
Forwarded from Yandex for ML
⚡️ Рассказываем о первых спикерах Practical ML Conf — большой конференции Яндекса про Machine Learning

Прямо сейчас мы готовим для вас большую хардовую программу с ключевыми инженерами индустрии. И мы уже готовы представить первых спикеров конференции — специалистов из Яндекса, Сбера, Авито, ВТБ, X5 Tech, Дзена и Third Opinion, которые расскажут о реальных кейсах использования ML.

Собрали для вас в карточки всё про первые доклады на Practical ML Conf, которые можно будет услышать уже 7 сентября. И это только часть нашей программы — другие доклады можно посмотреть на сайте конференции.

👉 И если вы ещё не успели зарегистрироваться на Practical ML Conf — то сейчас самое время.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍91
Сегодня была Practical ML Conference: смотрел много докладов, да еще и сам рассказывал про прогноз спроса!)

Очень много прям топ выступлений 🔥

Что понравилось лично мне:

1. Item2Item рекомендации в Дзене
Рекомендации в целом я обожаю, но тут еще и про довольно элегантные вещи с отбором кандидатов и легким ранжированием рассказали

2. CPA аукцион в Маркете
Довольно занятно, что рекламные продукты в маркетплейсах активно развиваются в последние года 2-3, и уже сделали очень мощные архитектуры в проде

3. Рассказ про Kandinsky 2.X
Я про диффузионки знаю только в теории, но доклад так хорошо рассказали, что я понял вообще все:)

4. Мой доклад про прогноз спроса конечно 😅
Рассказывал, как объединить оочень простой бейзлайн с бустингом и получить много профита от этого
👍29🔥191
Почему бустинг плохо понимает линейные зависимости?

Я подумал-подумал и решил прямо в канале отвечать на хорошие вопросы из комментариев) Начнем с вопроса про линейные зависимости в градиентном бустинге над деревьями

Условному LightGBM непросто выучить зависимость y = x по 2 причинам:

1. Нужно довольно много сплитов дерева (большая глубина / мнго деревьев), чтобы это выучить
if x < 10 then y = 9
if x > 10 then y = 11
if x > 12 then y = 13
…. (N раз)
if x > 1000 then y = 1001

2. Сложно прогнозировать out-of-distribution
Вторая проблема хорошо видна из “крайних” условий на х:
if x <10 then y = 9
if x > 1000 then y = 1001

Бустинг довольно плох для значений Х, которых не было в трейне (out-of-distribution). И если у вас, например, продажи с растущим трендом, то прогнозировать больше, чем было раньше - очень проблемно

Можно конечно для продаж прогнозировать не сами продажи, а их прирост. Но и это не всегда решает проблему: представьте, что на товар была скидка не более 10%, а сейчас стала 30%. Можно неаккуратно переобучиться на историю скидок именно этого товара и не прогнозировать бОльший рост, даже если на всех товарах (где бывают любые скидки) есть около-линейная зависимость от скидки

Рубрика “Ответы на вопросы из комментариев” #answers
🔥47👍17🗿21
Неклассические бустинги над деревьями (hybrid regression tree boosting)

У бустингов над деревьями есть некоторые проблемы с линейными зависимостями. Почему бы тогда не совместить бустинг, деревья и линейную регрессию?

Идея такая: в классическом дереве для задачи регрессии для прогноза в каждом листе берется среднее таргетов (для rmse loss). Что если вместо простого среднего строить в листе линейную регрессию? И в качестве прогноза брать прогноз линейной регрессии

Так и возник подход hybrid regression tree (HRT) - это дерево, в каждом листе которого есть линейная регрессия. Пример работы можно посмотреть на картинке к посту. Ну и конечно это можно обобщить до бустинга

Штука прикольная, и как-то в универе мы с ребятами даже запилили код hybrid regression tree. Ни о какой оптимизации по скорости и памяти в студенческом проекте речи конечно нет, но поиграться можно

И внезапно наша репа до сих пор топ-1 по запросу ”hybryd regression tree” в гугле аж с 2 звездочками 😅

Это говорит скорее о непопулярности подхода - по метрикам чуть лучше классического lightGBM / CatBoost, но сииииильно медленнее: может работать только на небольших наборах данных до 10-100к строк. Можете, кстати, посчитать сложность алгоритма в комментариях - удивитесь 😄

UPD: В комментариях подсказали, что этот алгоритм завезли в lightGBM. Что ж, очень радует!)


#answers - ответы на вопросы из комментариев
🔥33👍106😁1🗿1
Channel name was changed to «ML for Value / Ваня Максимов»
SUKI в А/В тестах

Сразу оговорюсь - это не то, о чем вы подумали))

в АВ есть фундаментальное предположение SUTVA - Stable Unit Treatment Value Assumption. И обычно обьяснение SUTVA никому не заходит. Поэтому все его успешно игнорируют 😀

У меня есть альтернатива:

SUKI assumption:
S - Student’ t-test
U - Units
K - Key metrics
I - Independence


“Student t-test for Units over Key metrics under Independence assumption”

Это покрывает все необходимые советы для успешного АВ:

S - Student’ t-test
Имхо, если вы не провели сотни АВ или не имеете Masters по статистике, даже не пытайтесь использовать что-то кроме теста Стьюдента. Без стратификации, cuped и прочего - обычный тест Стьюдента. Если его (и другие предположения SUKI) выполнить, то вы получите сильно более корректные выводы, чем с модными методами

U - units
Один Unit (юзер, магазин) может генерировать кучу событий (кликов, покупок). Мы проводим тесты на Unit-ами. То есть в поюзерном тесте метрика должна быть по юзерам (1 юзер = 1 число), а не по сессиям, заказам или юзеро-дням. Иначе наблюдения становятся зависимыми = вся логика АВ ломается

K - Key metrics
Не стоит выбирать 20 метрик и смотерть, какая прокрасится! Ни в одном из тысяч (когда я руководил разработкой АВ платформы, через меня прошло больше 2к тестов) не понадобилось более 2ух целевых метрик. Бывают еще барьерные и контрольные метрики, но это уже совсем другая история:)

I - independence
Ваши наблюдения в тесте должны быть независимы. Как я уже писал, 1 наблюдение = юзер, а не юзер-день или юзер-сессия. В соц сетях и юзеры могут быть зависимыми - стоит подумать, как обьединить их в кластеры, и проводить тесты по кластерам юзеров


В общем, когда в следующий раз вы крикните “какие SUKI сломали мой А/В ?!” - вы знаете ответ 😅
🔥47😁175👍3💩2
В телеге появилась возможность постить сторис от имени канала, но для этого нужно набрать голоса (бусты) от премиум-пользователей 🚀

Если хотите видеть еще и сторис от ml4value, то можете обновить телеграмм (бусты есть только в последней версии) и пробустить канал по ссылочке:

https://news.1rj.ru/str/ml4value?boost

Upd: господа и дамы, лайки - это хорошо, но бусты - еще лучше 😄
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14😁621🤮1
Рост в ML: Junior —> Middle

Астрологи скоро объявят неделю ревью - пора разобраться, как растить свой грейд

Я не буду писать про классические “делай задачи на следующий грейд” или “помимо раскачки хардов не забывай про софты”. Сосредоточимся на деталях, quick wins и грязных трюках 😇

Для роста из Junior в Middle я бы посоветовал собрать 3 ачивки:


1. Самостоятельно затащить (небольшой) проект с эффектом на деньги
Вы можете зарешать весь литкод, лучше всех знать трансформеры, но ничто так не растит в миддла как возможность доверять человеку задачи end-to-end. Хорошо бы это показать тим лиду на реальном примере

Лайфхак: если вы не знаете, где найти такую задачу - сделайте простую систему алертов на метрики ML/бизнеса в телеграм. Для этого не нужны SOTA навыки, но придется пообщаться со многими людьми и убедиться в полезности алертов. Убиваете сразу 3 зайцев: Показываете самостоятельность, приносите пользу, становитесь заметны вне своей команды


2. Разобраться во всех кусках ML продукта, над которым работает ваша команда
Не только посмотреть код ML-модели, но и понять, почему были приняты все основные решени в архитектуре. Уметь в Aiflow / Docker / что угодно еще для поддержки модели. Понимать как именно модель приносит пользу бизнесу

Лайфхак: Не пытайтесь выглядеть всезнающим. Чтобы реально разобраться в деталях придется задать 1000 и 1 глупый вопрос. Со временем ваши глупые вопросы станут умными, а умные вопросы - имхо, один из главных показателей middle / senior DS


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


Другие советы я выложу в сторис, когда мы с вами добьем пару бустов каналу 💪

Если у вас есть еще годные советы Junuior-ам, пишите в комменты - обсудим ⬇️
👍49🔥75💩1🦄1
Рост в ML: Junior —> Middle
Грязные трюки edition
😈


1. Умножай сроки х2
Почти наверняка, чтобы что-то сделать хорошо (или хотя бы просто сделать!), понадобится сильно больше времени, чем ты думаешь. Джуниоры часто не знают, что надо заложить время на тестирование, исправление ошибок, изменение изначальных требований и многое другое

Так что умножай сроки х2 - не прогадаешь. Актуально и для начинающих тим лидов:)

2. 30% времени - на курсы
До роста в синьора твоя кривая обучения стремится в космос, особенно на позиции джуниора. Каждый потраченный час на хороший курс или статью существенно улучшает знания и навыки. Пользуйся этим! Да, это инвестиция в будущее: если ты останешься в той же компании, то это ей окупится. Ну а если не останешься… то плохая программа роста там 😅

3. Скажи всем, что хочешь стать миддлом
Как ни странно, тим лиды и тиммейты не экстарсенсы. Хочешь стать миддлом / + 20% к зп / удаленку - хотя бы скажи про это. Лучше не прям перед ревью, а в начале полугода. И повторяй почаще) Так у тебя с тимлидом есть шанс придумать план, как стать миддлом, и есть шанс его воплотить, поправляя косяки по ходу дела. Если же об этом не говорить, может задач на ”показать себя” и не появится

P.S. Долго думал над форматом сторис - пока продолжаю его искать. Если у вас есть идеи - пишите в комменты, все учту)
👍55🔥9💩2