newsmode
search
Меню
arrow_back Назад

The Metagame of Applying Machine Learning

auto_awesomeКраткое саммари

Юджин Янь сравнивает применение машинного обучения в индустрии с «метаигрой» — игрой вокруг самой игры, где побеждают за счёт внешних знаний и факторов (примеры: камень-ножницы-бумага, StarCraft и синдикаты, заработавшие $700 000 на лотерее Cash WinFall). Знать ML и применять его на работе — две разные вещи, и автор делится практическими советами. Главные идеи: начинать с проблемы, а не с технологии (метод «почему?» помог выявить, что задача доставки была не про ранжирование, а про прогнозирование); уделять больше внимания дизайну системы и обучающих данных, чем архитектуре модели, и предпочитать простые модульные решения. Важно чётко формулировать цели и метрики (конверсия против выручки, краткосрочные против долгосрочных), быстро итерировать через A/B-тесты и уважать существующие системы, продолжая учиться. Автор также подчёркивает роль коммуникации и доверия со стейкхолдерами, готовность к неудачам и постоянному экспериментированию. Наконец, он напоминает о чистой совести: однажды он отказался от проекта, когда страховщик захотел предсказывать тех, кто НЕ заболеет, чтобы продавать им больше страховок.

Метаигра применения машинного обучения

[ machinelearning career 🩷 ] · 12 мин чтения

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

Или в случае лотереи штата Массачусетс эксплуатация правил позволила синдикату заработать $700 000 за одну неделю. По правилам лотереи (Cash WinFall) игроки могут выиграть, угадав 2, 3, 4, 5 или 6 из шести вытянутых чисел. И когда джекпот достигает $2 млн и никто его не выигрывает, призовой фонд «спускается вниз» к меньшим призам (то есть за угадывание 2–5 из шести вытянутых чисел). Когда это происходит, угадывание 5 из 6 чисел может принести призовых в 10 раз больше, чем $4 000 в обычную неделю.

На протяжении шести лет три синдиката доили Cash WinFall в «недели спуска вниз». Они покупали огромное количество билетов (312 000 по словам одного из лидеров синдиката) и смещали статистику в свою пользу, что позволяло им выигрывать больше, чем проигрывать. В дерзком ходе один синдикат из MIT купил 700 000 билетов — за одну неделю — чтобы «протолкнуть» джекпот за отметку $2 млн раньше ожидаемого; они забрали почти весь джекпот и положили в карман $700 000 прибыли.

Как это связано с машинным обучением? Для прикладного исследователя машинное обучение — это игра, а его применение в индустрии — метаигра. Когда я только начинал, я обнаружил большой разрыв между знанием машинного обучения («вот как дерево решений делает разбиение») и его применением на работе («ранкер на дереве решений, который мы запустили, увеличил CTR и конверсию на x%»).

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

Начинайте с проблемы (а не с технологии)

Выбор правильной проблемы — это половина победы. Не решайте проблемы, которые не важны клиентам или бизнесу, какой бы захватывающей ни была технология. Что важно для бизнеса? Обычно это рост выручки или снижение издержек, либо возможности, которые позволяют бизнесу решать другие проблемы.

Выявление правильной проблемы иногда напоминает чистку луковицы. На прошлой работе кто-то из команды логистики обратился с такой просьбой: «Можем ли мы поднять в ранжировании товары, которые отгружаются через Lazada (FBL)?» Просьба имела бизнес-смысл — я думал, они хотят повысить ранг FBL-товаров, чтобы стимулировать продавцов использовать FBL. Тем не менее я спросил: «Зачем?»

«Потому что FBL-товары доставляются быстрее.» Теперь яснее, как это выгодно клиентам: они получают товары быстрее! Тем не менее я снова спросил «Зачем?».

«Потому что когда доставка быстрее, мы получаем меньше жалоб на задержки доставки.» Ага, теперь проявляется корневая проблема. Но задержки доставки были не проблемой ранжирования — это была проблема прогнозирования доставки (и логистики). Чтобы решить её, нам следовало снизить частоту недооценок в нашем алгоритме прогнозирования доставки.

То, как мы формулируем проблему, тоже важно. Чтобы выявить мошенничество, мы можем либо помечать мошеннические транзакции, либо одобрять безопасные. Чтобы обнаруживать злоупотребления в соцсетях, мы можем сформулировать это как задачу обучения с учителем или без учителя. Как задачу без учителя — мы можем применить обнаружение выбросов (например, isolation forests) или анализ сетей (например, графовую кластеризацию). Как задачу с учителем — нам понадобится сосредоточиться на сборе размеченных данных и наличии человека в контуре (human-in-the-loop). Правильная формулировка часто приводит к непропорционально большой отдаче.

Больше дизайна системы и обучающих данных, меньше дизайна модели

Я часто обнаруживал, что общий дизайн системы важнее архитектуры модели (большинство ссылается на рисунок 1 в этой заезженной статье). Кроме того, качество модели зависит не столько от самой модели, сколько от данных, которые мы в неё подаём. Помимо качества и количества данных, наибольшую разницу даёт то, как мы проектируем обучающие данные, чтобы обучать наши модели.

При проектировании систем меньше — значит больше. С тремя ключевыми компонентами (например, Spark, SageMaker, Airflow) и командой из трёх человек каждый может взять на себя один компонент и получить глубокое знание о нём. У них даже есть запас времени, чтобы подстраховывать друг друга. С шестью компонентами (например, добавив Kafka, Redis, Lambda) каждому становится сложнее изучать и эксплуатировать то, что ему поручено, и у вас точно не будет резервирования. К тому же простые конструкции быстрее запускаются и легче поддерживаются.

Feature store банка Monzo — отличный пример. У них была проблема с подачей фичей из аналитического хранилища в продакшен, и они спроектировали простейшее решение: они периодически выгружали фичи из аналитического хранилища (BigQuery) в продакшен-feature store (Cassandra). Никакой обработки фичей в реальном времени. Что-либо большее стало бы избыточной операционной нагрузкой, которая замедлила бы их в долгосрочной перспективе.

Я не хотел, чтобы feature store стал заменой тому, что уже существовало, или гигантом, которым владеет моя (небольшая) команда. Вместо этого я узнавал о том, что нам нужно, выискивая закономерности в моделях машинного обучения, которые мы запускали. — Neal Lathia, Monzo Bank

То, как мы проектируем обучающие данные, тоже может иметь значение. В обработке естественного языка (NLP) Word2Vec и self-attention привели к прорывам во многих задачах NLP. Чтобы извлечь из этого пользу, компании нашли изобретательные способы превращать данные о поведении пользователей в последовательности и вписывать их в NLP-парадигму. Это усилило нашу способность моделировать сущности (например, товары, клиентов, запросы) через эмбеддинги. И вдобавок это всё self-supervised!

Ключевая часть дизайна обучающих данных — создание негативных примеров; иногда это скорее искусство, чем наука. Для своей поисковой модели Facebook обнаружил, что использование «показанных, но не кликнутых» в качестве негативных примеров привело к recall на 55% ниже (относительно использования случайных примеров). Напротив, Amazon обнаружил, что использование показов без кликов и учёт этого в функции потерь привели к лучшим результатам. JD выяснил, что использование соотношения 1:1 случайных негативов и негативов из батча даёт оптимальные результаты. Очевидно, единого универсального подхода не существует.

При проектировании моделей несколько модульных моделей обычно работают лучше, чем единая модель «всё в одном». Когда модели «всё в одном» дают сбой, они дают сбой сильно и их почти невозможно отлаживать. Проще иметь несколько меньших моделей с отдельными целями и реализацией. Например, большинство промышленных рекомендательных систем используют двухэтапный подход: retrieval (отбор), который быстр, но груб и нацелен на recall, и ranking (ранжирование), который медленнее, но точнее и нацелен на precision. Это также позволяет нескольким командам работать независимо и параллельно.

Архитектура рекомендаций в реальном времени для Instagram (источник)

(Тем не менее, я заметил тренд: компании переходят от модульных моделей к моделям «всё в одном». Например, Baidu обнаружил, что отдельные этапы retrieval и ranking субоптимальны, и объединил их в единый этап. TenCent получил выигрыш, перейдя к многозадачности в своём видеорекомендере, обучая его одновременно оптимизировать события клика, просмотра и шеринга. При этом в большинстве случаев имеет смысл использовать модульные модели, если только вы не уверены, что выжали из них весь сок.)

Чётко определяйте свои цели и измерения

Не путайте меньшую потерю модели с лучшим продуктом. Как часто модель блистала на офлайн-валидации, но проваливалась в A/B-тесте? (Обратное не даёт мне спать по ночам — как часто я преждевременно убивал хорошие модели только потому, что у них не было лучшего результата офлайн?) Насколько мне известно, наличие пайплайна экспериментов, позволяющего быстро итерировать через A/B-тесты, — лучший способ оценивать модели.

Будь у меня час на построение модели, я бы потратил 55 минут на создание быстрой и однозначной процедуры оценки и 5 минут на пробу моделей. — Sean J. Taylor (@seanjtaylor) 10 апреля 2021

Иногда ваши цели могут быть ясны и конфликтовать, и вам приходится выступать посредником между стейкхолдерами.

В моём случае мы нашли две цели, которые хотели оптимизировать: конверсию и выручку. Однако, что удивительно, когда я сказал, что могу совместно оптимизировать обе и потенциально найти хороший оптимум между ними, я получил отпор, потому что некоторые стороны хотели отдавать приоритет конверсии над выручкой или наоборот! — Alex Egg

Оптимизация под конверсию может означать снижение цен товаров в рекомендациях и результатах поиска; оптимизация под выручку может делать обратное. Продукты дешевле и склонны конвертироваться чаще (например, еженедельно) по сравнению с мобильными телефонами (например, раз в 2–3 года). Более того, у разных категорий могут быть разные цели — электроника может фокусироваться на выручке, а FMCG — на удержании (например, среднем числе пользователей в неделю) и повторной конверсии.

Чётко определяйте период измерения — он краткосрочный (например, в рамках сессии), долгосрочный (например, оценка на 1 год) или что-то посередине? (Долгосрочные изменения можно оценивать такими подходами, как double machine learning.) Определённые персоны, такие как новые или будущие родители, — находка для долгосрочных метрик. Заставьте их начать пользоваться вашими подгузниками и детской смесью, и они, скорее всего, останутся вашими клиентами на следующие несколько лет — младенцы привередливы к своему молоку, а использование разных подгузников может вызвать сыпь. Аналогично, продукты обычно покупаются еженедельно и отлично работают на удержание и пожизненную ценность клиента.

Продолжайте учиться, но уважайте то, что было до вас

Игра под названием машинное обучение быстро эволюционирует. В NLP новые наборы дополнений выходят ежегодно: Word2Vec (2013), GloVe, GRU (2014), FastText (2016), Transformer, GPT (2017), ELMo, BERT (2018), T5 (2019) и т. д. Чтение статей позволяет нам оставаться в курсе, чтобы перенимать новые техники и строить лучшие модели. То же относится и к дизайну систем. Планируете построить feature store? Узнайте, как это делали другие, какими были их ключевые потребности и какие существуют паттерны, прежде чем проектировать свой.

Тем не менее помните, что мы строим не в вакууме. Если только мы не работаем в совершенно новом стартапе, у нас будут существующие системы, которые нужно интегрировать или обойти, — почти никогда нет возможности всё снести и начать с нуля с новейшим и лучшим. Уважайте существующие системы, которые исправно работают, и вложите усилия, чтобы понять, почему и как они решают текущие проблемы.

Вам нужно уметь рассказать о своей работе и завоевать доверие к ней

Ваша работа не может говорить сама за себя — вам нужно донести её ценность до нетехнической аудитории. Я обнаружил, что внутренние рассылки полезны для повышения осведомлённости о данных и о нашей команде. Мы делились результатами нашего сотрудничества с разными стейкхолдерами, и после каждой рассылки стейкхолдеры обращались: «Знаете ту штуку, что вы сделали для них? Можете сделать её для нас?» Открытые демо тоже хорошо работают.

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

До сих пор думаю об одном совете с моего последнего 1:1 с начальником: «Побеждает не лучшая идея и не лучший анализ, а лучшие отношения». Не в этом ли причина, по которой так много проектов #DataScience и #Analytics проваливаются? — Erika Pullum (Swartz) she/hers (@eswartz) 4 августа 2020

Ожидайте неудач, но сохраняйте спокойствие и экспериментируйте много

У меня было много провальных офлайн-экспериментов и A/B-тестов, но каждый неположительный результат всё равно трудно принять. Помогает смотреть на каждое поражение как на возможность научиться — прямо как в игре. Каждое из них — головоломка, которую нужно разгадать и из которой можно извлечь что-то ценное, хотя некоторые, возможно, так и не удастся раскусить. (Мне самому регулярно приходится напоминать себе об этом.)

Ты не сможешь решить каждую задачу, которую тебе подбрасывают, как бы сильно ни старался, и это нормально. Ты работаешь над ней по максимуму и довольствуешься тем, чего смог достичь. — Zach Mueller (@TheZachMueller) 6 февраля 2021

Также помогает всегда держать наготове эксперимент-другой. Это помогает мне смотреть в будущее и сосредотачиваться на возможностях, которые ждут впереди.

«Жизнь как езда на велосипеде. Чтобы сохранять равновесие, нужно двигаться.» — Albert Einstein

Держите свою совесть чистой

Наконец, если вы в этом надолго, держите совесть чистой. То, что вы создаёте, способно влиять на людей — к лучшему или к худшему. Раньше я построил модель, которая по истории медицинских событий человека могла предсказывать хронические заболевания (например, сердечно-сосудистые болезни, диабет) за 2–3 года вперёд. Мы хотели работать со страховщиками над превентивной медициной — они экономили бы на страховых выплатах, а мы улучшали бы здоровье людей.

У одного страховщика возникла неожиданная — и пугающая — идея. Они спросили, можем ли мы предсказывать, у кого не разовьётся хроническое заболевание, чтобы продавать таким людям больше страховок. С точки зрения бизнеса проще заработать больше денег сегодня, чем тратить деньги (на превентивную медицину), чтобы сэкономить завтра. Но сколько пройдёт времени, прежде чем это начнут использовать для дискриминации людей, которые больше всего нуждаются в медицинской страховке? Я не смог бы спать спокойно, зная, что приложил к этому руку. Излишне говорить, что я ушёл.

Не пренебрегайте метаигрой

Машинное обучение — увлекательная игра. Тем не менее вокруг его применения на работе и достижения результата существует целая метаигра. Не буду приводить статистику о том, что у x% компаний всё ещё есть трудности с развёртыванием и извлечением пользы из ML, но, по последним данным, которые я слышал, эта доля по-прежнему удручающе высока. Надеюсь, эти советы помогут повысить процент успеха.

Если вы играете в эту игру, знайте, что вам предстоит столкнуться с разочарованием и досадой. Но я считаю, что цели использовать данные и ML на благо людей того стоят. GLHF.

Как перейти от знания машинного обучения к его применению на работе:• Больше дизайна системы и данных, меньше дизайна модели• Чётко определяйте цели и измерения• Продолжайте учиться, но уважайте то, что было до вас• Держите совесть чистойДа пребудет с вами May the 4th. https://t.co/Tx6RBcvu35— Eugene Yan (@eugeneyan) 5 мая 2021

Спасибо Yang Xinyi за чтение черновиков.

Если этот материал оказался полезным, пожалуйста, цитируйте его так:

Yan, Ziyou. (May 2021). The Metagame of Applying Machine Learning. eugeneyan.com. https://eugeneyan.com/writing/machine-learning-metagame/.

или

@article{yan2021metagame, title = {The Metagame of Applying Machine Learning}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2021}, month = {May}, url = {https://eugeneyan.com/writing/machine-learning-metagame/} }



Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, RecSys, LLM и инженерии.