Время Валеры – Telegram
Время Валеры
28.8K subscribers
189 photos
6 videos
1 file
397 links
Мне платят за то, что я говорю другим людям что им делать.
Автор книги https://www.manning.com/books/machine-learning-system-design
https://venheads.io
https://www.linkedin.com/in/venheads
Download Telegram
В среду в ФизТехе веду семинар у магистрантов Кафедры Промышленного Анализа Данных Х5 по ML System Design

Я подготовил две сложных темы, поэтому и отвечать на них будут преподаватели:
Principal Engineer из OLX, Berlin
Руководитель Направления Машинного Обучения из Х5, Москва

Думаю получится интересно
👍5
Начнем по порядку. Е3 - иначе именуемый джуниором.
Примерная компенсация (берем США за точку отсчета)

Базовая зарплата - 110 - 140 тысяч долларов в год
Бонус - 5% от этого в год
Initial grant ±150 тысяч долларов
Refresher ~ 30 тысяч долларов в год
Может быть бонус за подписание от 30 до 100 тысяч долларов
Total Comp порядка 170-200 тысяч долларов в год, без учета бонуса за подписание

Что ожидается от E3?

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

Способность решать все более сложные задачи. Желание и готовность искать новую работы, если текущие задачи решены. Желание принимать больше отвественности со временем

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

Большая часть работы выполняется вовремя. Плотное сотрудничество с техлидом/менеджером, чтобы они помогли развить навык эстимации (оценки времени)

Принятие критики и работа над собой после получения конструктивной обратной связи.

Понимание и следование стандартам в фб в области дизайна, разработки, документации, ревью, тестов, анализа и деплоя кода. Демонстрация умений в анализе данных, программировании и SWE. На выходе должен получаться код высокого уровня, покрытый тестами, абстракции и Фреймворки используются когда необходимо

У Е3 есть 24 месяца чтобы стать Е4
- иначе на выход
#BigTechLevelsCompensation
👍213
Brexit вносит свои корректировки. Теперь, чтобы привезти сотрудника из Греции или Италии, необходимо делать ему рабочую визу.

Сегодня решили что нанимаем стажера из Италии на 6 месяцев, но он не может работать из Лондона, потому что рабочую визу мы делаем только для Full-time employee.

Впрочем, думаю с полутора медианными зарплатами среднего итальянца он не будет долго горевать, а затем мы его увезем за море

#CoolStory
👍5
У трех сотрудников Ковид, один в Аргентине, второй в Лондоне, Третий в Бостоне. У одного вообще нет симптомов, у второго легкие, у третьего средней степени недомогание. Можно через свою команду следить за распространением эпидемии
Недавно я рассказывал про статью 2021 года, Using Synthetic Controls: Feasibility, Data Requirements, and Methodological Aspects

Если задуматься, эта статья тесно связана с методами матчинга , только вместо поиска подходящего матча, мы его создаем
Возникает вопрос, как же подобрать матч? Раньше в моей голове в эти моменты всплывал propensity score

К счастью, недавно я наткнулся на статьи и выступления Gary King, который сейчас директорствует в Гарварде в the Institute for Quantitative Social Science.

Советую ознакомиться с его выступлением Gary King, "Why Propensity Scores Should Not Be Used for Matching"
https://www.youtube.com/watch?v=rBv39pK1iEs&t=3103s
В этом выступлении есть очень интересный слайд, в котором утверждается что если мы проводим Fully Blocked А/В эксперимент, то это снижает стандартную ошибку оценки эффекта на 600%

Что в целом начинает напоминать чем-то стратификацию через множество ковариат

#ArticleReview
👍3
Е4 - иначе именуемый мидлом.
Примерная компенсация (берем США за точку отсчета)

Базовая зарплата - 140 - 170 тысяч долларов в год
Бонус - 10% от этого в год
Initial grant ±300 тысяч долларов
Refresher ~ 60 тысяч долларов в год
Может быть бонус за подписание от 50 до 100 тысяч долларов
Total Comp порядка 250-300 тысяч долларов в год, без учета бонуса за подписание

Что ожидается от E4?

Все тоже, что требуется от Е3 плюс:

Способность деливерить средние и большие фичи, включающие множество задач, самостоятельно

Умение поддерживать собственную продуктивность

Демонстрация strong software engineering skills. Проектирование и написание хорошо структурированного кода. Способность идентифицировать код, требующий улучшений. Если трогаешь какой то кусок кода, после тебя он лучше, чем до тебя, включая миграцию на новые фреймворки и доп тесты

Умение доводить проекты до конца работая, с другими командами ( продакты, дизайн, продакшн инженеры) и понимание как организовывать вещи для запуска различных релизов

У Е4 есть 33 месяца чтобы стать Е5 - иначе на выход
#BigTechLevelsCompensation
👍193
Сегодня я начну цикл из трех историй про собеседования в Яндекс трех разных людей. Двое из троих получили офер, но никого из них это не обрадовало.
Для меня очень обидно было слышать эти истории, ведь на протяжении четырех лет я был Яндексоидом, испытываю максимально теплые чувства к этой компании и зачастую ставил процессы в Яндексе в пример другим

Все события произошли во второй половине 2021 года

Начнем мы с истории некоего В.

Итак, В. написал его давний приятель, который на тот момент был Yandex Fellow. Он спросил В., собирается ли тот возвращаться в Россию, ведь у него есть интересное предложение в крупную структуру внутри Яндекса, возглавить ее команду аналитики и ML. В. был непрочь пообщаться с Яндексом, позиция была довольно интересной и привлекательной.
В. назначили встречу с потенциальным руководителем, а затем с рядом других людей. Все это были люди внутри Яндекса весьма известные, а один из этих людей даже находился на этой странице https://yandex.ru/company/people

По субъективной оценке В., он довольно неплохо прошел все этапы, но в реальности из всех этапов только один был заполнен во внутренней системе Яндекса, Фемиде и тот бы отмечен успешно.
Затем В. предложили порешать гномиков, то есть пройти техническое собеседование. Для Разработчиков это называется АА секция, для аналитиков совсем недавно ввели ААА секцию.

В. стоически прошел и через этот этап, ведь навык решения гномиков - первейший при управлении командой в 100+ человек. Впереди маячила секция по статам, но ее отменили из-за отпуска собеседующего, новую не назначили. В. Написал потенциальному руководителю, как так? Тот ответил:
- Секцию по статам отменили т.к. мы решили, что у нас и без неё будет достаточно информации про твои hard skills (которые на хорошем уровне).
- В целом мы провели достаточно секций. Больше, думаю, не потребуется. Нам будет нужно некоторое время чтобы внутри себя понять что и когда мы хотим предложить.

Спустя какое-то время к В. действительно пришли и сообщили:
- Простите, что давно не возвращалась к вам:
- Вы, возможно, уже знаете, что роль аналитика, на которую мы вас рассматривали, отменилась. Ребята поняли, что им не нужен фултайм-сотрудник на эту роль.

В. Не знал этого, ровно как и не знал того, что это была роль аналитик, все это время он думал что это руководитель аналитики. Но тут его успокоили и сказали что аналитик это для простоты, как кодовое название

Через пару дней В. cнова написали
- Будете ли вы открыты поговорить со мной и моей старшей коллегой в зум? Мы поняли, что из-за спешки мы в начале знакомства не поговорили обстоятельно про ваши ожидания и пожелания

Если бы не история, которая произошла в Яндексе с двумя другими людьми до этого, В. бы удивился, но В. знал эти истории и не удивился
В. поговорил и ему сказали что сейчас пройдет ревью и будет конкретика, к нему вернутся, а предыдущую роль разорвали на много маленьких кусочков, примерно то чего боялся медведь Балу в Маугли.

Через несколько недель В. с удивлением заметил, что его потенциальный руководитель покинул Яндекс. Тут то он все и смекнул

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

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

На что В. cпросил, смотрели ли его Фемиду до встречи, на что ему сказали что не смотрели. В. Удивился и попросил собрать все с Фемиды и затем обсудить детали. Надо ли говорить что к В. не вернулись, а на Фемиде ничего не обновилось?
В. не до конца понял что произошло, в чем же проблема? В нем, в секциях, в вакансии, в Яндексе? Вроде бы и рекрутер вернулся с чем-то положительным и его начальник, и причины понятны, почему эта вакансия пропала. Но все это оставило странное послевкусие
👍222
Так и остался В. на чужбине, написав удивленное сообщение своему товарищу

#JobInterviewStory
👍6
В качалках Лондона вес на блоке обычно заканчивается на отметке в 200 фунтов

В Москве, в пацанской качалке на районе был найден правильный блок с правильным весом в 310 фунтов

Я не мог не воспользоваться возможностью полетать на нем. Полет приложу в комменте
👍7
Сколько себя помню, каждый раз когда я пересекался с маркетологами дольше получаса, постоянно поднималась проблема аллокации маркетингового бюджета и вопрос про инкремент.

Например, почти два года назад во время ужина, тогдашний и нынешний маркетинговый директор Е-Аптеки, Наталья, задавала мне этот вопрос, надеясь что я смогу ей как то помочь. Я ей что-то напредлагал через causal impact, но особо мы ничего не сделали. Проблема аллокации настолько классическая, что есть даже избитая цитата: Half the money I spend on advertising is wasted; the trouble is I don’t know which half.
К слову, раньше ужины с Натальей мне нравились гораздо больше, ведь она была директором по маркетингу Тануки с 50% скидочной картой

Как альтернатива решения этой задачи в моей голове всегда лежала статья 2019 от чуваков из Alibaba - A Unified Framework for Marketing Budget Allocation

Недавно я наткнулся на гораздо более многообещающую и в тоже время простую штуку, которая называется MMM Robyn, выпущенная компанией Meta (aka Facebook)
https://facebookexperimental.github.io/Robyn/
К сожалению МММ означает всего лишь Marketing Mix Modeling

Попробуем разобраться что же под капотом из зачем нужен Robyn
Если взять максимальный уровень абстракции сверху - загоняем в модель данные на какой канал сколько денег потратили, сколько с него пришло пользователей и сопутствующую информацию, умная машина говорит нам что делать

Попробуем пойти чуть глубже и начнем с данных
Зависимая переменная - метрика которая нас интересует, KPI - например продажи или GMV
Независимые переменные - признаки, которые влияют на зависимую переменную: медиа маркетинг, Non-media marketing(промо, скидки), сезонность (выходные, праздники, погода и тп.), макроэкономические факторы и многое многое другое

Подробнее о данных
Медиа активность:
Цифровые каналы - идеально количество impressions, не клики, так как показы имеют накопительный эффект и тоже могут привести к конверсиям без клика
Для Радио и ТВ Gross Rating Points (GRPs) или Target Audience Rating Points (TARPs).
Для печати - количество подписчиков/проданных единиц
Учитывать ли органику? Обычно советует включать только платный трафик, теоретически можно включить и органику

Non-media marketing:
Бинарный флаг, означающий наличие или отсутствие определенного типа промо - стоит подумать над регулярностью и какие промо заслуживают своего собственного флага
Временной ряд стоимости товаров/услуг

Сезонность и праздники:
Robyn предлагает использовать для выделения этих компонент встроенный prophet
Либо считать самостоятельно и указывать дополнительными бинарными флагами различные праздники, также можно использовать температуру для явного разделения сезонов (лето/зима)

Макроэкономика:
ВВП, безработица, инфляция, в наших реалиях, наверняка курс валюты

#ArticleReview Robyn 1/8
👍176
Сколько данных нужно? Минимум два года при недельной гранулярности. Лучше иметь дневную гранулярность
Кроме гранулярности во времени, мы бы хотели иметь гранулярность по переменным, как пример приводится следующая картинка

#ArticleReview Robyn 2/8
👍1
Какая же библиотека от Фейсбука, без другой библиотеки от Фейсбука, поэтому немного про то, какой функционал добавляет Prophet
Prophet выделяет тренд, сезон, выходные и праздники/спец события

Robyn позволяет использовать окна моделирования разной длины для MMM и для выделения тренда/сезона и прочего через Prophet.
Возникает вопрос, окно какой длины выбирать?
Зависит от многих параметров - например скорость изменения рынка и маркетинговых практик. Скорее всего нет смысл смотреть что было десять лет назад. Что насчет пяти? Двух?

Количество наблюдений на уникальное значение переменной должно бы не менее 10

#ArticleReview Robyn 3/8
В качестве модели выступает регрессия с L2 регуляризацией(Ridge Regression) на зависимую переменную, с рядом ограничений и задачей минимизировать две, а в некоторых случаях три функции потери
Мы можем задать ограничения (constraints) на знак коэффициентов в модели: положительный, отрицательный, никаких ограничений
Независимые переменные делим на три категории и отправляем в модель:
paid_media_vars - собственно реклама, за которую мы платили, к этим переменным еще будут применены различные трансформации, о которых дальше, чтобы оценить эффект насыщения (saturation) и накопления (adstock)
organic_vars - пуши, посты, емейлы. На эти переменные тоже можно наложить трансформации для оценки эффекта насыщения и накопления
context_vars все остальное, активность конкурентов, цены, промо, макроэкономические факторы и тп

Теперь по поводу оценки adstock и saturation
Adstock
- скорее всего в реальной жизни реклама имеет не мгновенный, но накопительный эффект, сколько лет прошло, а две мясные котлеты гриль засели в памяти до сих пор
Saturation - каждая следующая единица рекламы начинает приносить меньший эффект, после достижения определенной точки

Для учета Adstock в Робине есть две опции Geometric transformation и Weibull transformation
Первое попроще, использует всего один параметр Тета, но аппроксимирует хуже, второе посложнее и тяжелее объяснить его для нетехнарей, но аппроксимирует лучше. Используется The Weibull survival function
Weibull, как более сложная трансформация требует больше итераций для оптимизации через NeverGrad(о нем позже)

Для Saturation и построения S-curve используют двухпараметрическую функцию Хила (Биохимия входит в нашу жизнь)

#ArticleReview Robyn 4/8
👍2
В модели это выглядит следующим образом

#ArticleReview Robyn 5/8
👍2
Модель обучается на регрессию целевой переменной. Признаки и их трансформации нам известны, что насчет функции потерь? Их будет как минимум две:
NRMSE-> normalized root-mean-square error - минимизируем
DECOMP.RSSD, decomposition root-sum-square distance - гениальная вещь, в описании значится как Business fit

Есть целая серия Твитов описывающих почему это круто https://twitter.com/hammer_mt/status/1460584503043362820
Допустим вы потратили 80% бюджета на продвижение в моем Телеграм канале, а модель говорит что 80% конверсий/лидов пришло из Инстаграм
Очевидно что доверять нужно моему каналу, а не какой-то там модели.

Возникает вопрос, но разве мы не строим модель для того, чтобы понять где мы делаем неправильно?
Да, но есть два допущения.
1. Мы считаем что бюджет был распределен не совсем случайно и текущая аллокация это неплохой приор от которого можно отталкиваться и итеративно идти в сторону оптимального решения, нечто вроде EM algorithm
2. Если придти к менеджменту и сказать меняем аллокацию всего бюджета в 5 млрд рублей, они могут удивиться и воспротивиться. С другой стороны, если предложить передвинуть его в рамках 3-5% - проблем обычно не возникает

Минимум две функции потерь. Значит мы можем получить бесконечное количество моделей, как же быть? Оптимизация идет посредством пакета Nevergrad, на протяжении большого числа итераций (тысячи - десятки тысяч), отображая итоговые результаты на двумерном графике.

Постафактум можно наблюдать что чем больше итераций произведено, тем ближе к нижнему левому углу находится этот вариант модели. Линией будет отмечен Pareto-front (нельзя что то улучшить, не ухудшив другое)
Финальная модель выбирается пользователем, обычно учитывают следующие параметры:
1. Экспериментальная калибровка -> имеет смысл интегрировать результаты экспериментов, где есть выводы о причинно-следственных связях
2. Бизнес инсайты -> есть уже есть надежный приор по ROI, adstock и тп или бенчмарк - следует сравнить с ними
3. Оценка распределение ROI для платных каналов -> ROAS, чем распределение уже и выше, тем больше наша уверенность в результатах

При калибровке мы добавляем еще одну функцию потерь, Mape -> Mean absolute percentage error, оцениваем разницу между фактом и прогнозом MMM
Калибровку с вливанием в модель данных от экспериментов стоит проводить на регулярной основе
Результаты от экспериментов для калибровки должны быть на том же уровне гранулярности что и МММ, с высокой уверенностью (Robyn на текущий момент на вход принимает только точечные оценки)

#ArticleReview Robyn 6/8
👍12
График для оценки итоговой модели
Пример распределений ROAS
Калибровка

#ArticleReview Robyn 7/8