Forwarded from тревожный эйчар
Media is too big
VIEW IN TELEGRAM
💌 Запись эфира «Как увлечь работой себя и свою команду»
Что успели обсудить за час:
— почему можно не искать work-life balance и все равно пребывать в гармонии;
— как позволить себе быть собой на работе и что это меняет в жизни;
— о чем важно не забывать в атмосфере кризиса, чтобы не угнетать себя;
— и многое другое.
Спасибо Александре и Максиму за насыщенный и яркий эфир 🤍
Пожалуйста, оставьте обратную связь про эфир под этим постом. Как вам разговор и о чем еще вы хотели бы послушать?
Что успели обсудить за час:
— почему можно не искать work-life balance и все равно пребывать в гармонии;
— как позволить себе быть собой на работе и что это меняет в жизни;
— о чем важно не забывать в атмосфере кризиса, чтобы не угнетать себя;
— и многое другое.
Спасибо Александре и Максиму за насыщенный и яркий эфир 🤍
Пожалуйста, оставьте обратную связь про эфир под этим постом. Как вам разговор и о чем еще вы хотели бы послушать?
Forwarded from Борис опять
Как проходить ML system design.
Если литкод собеседование устроено по очень строгим и понятным правилам, то system design сложнее. Здесь главное показать, что вы можете разложить проблему на составляющие и наметить решение.
Как правило вам задают открытый вопрос вида: "Как бы вы сделали систему прогнозирования спроса в супермаркете?" От вас не ждут, что вы эксперт в прогнозировании спроса, хотя если у вас есть релевантные знания это плюс. Просто представьте, что вы уже на работе и вам задают такой вопрос.
Главная ошибка, которую здесь совершают: пытаются натянуть свой прошлый опыт на проблему и закапываются в детали. Надо спрогнозировать спрос, а человек начинает рассказывать, как он бы тюнил градиентный бустинг. Это собеседование не про ваш опыт, а про совместное решение кейса.
Моя личная структура решения таких кейсов:
* В-о-п-р-о-с-ы. Первым делом надо было задавать как можно больше вопросов. Какие есть данные? Сколько данных? Какое качество модели нас устроит? Какое время на предсказания? Какие ошибки для нас страшнее: false positive или false negative?
* Обозначить план работ. Не надо сразу закапываться в какие-то детали. Как правило порядок примерно такой: изучение проблемы -> сбор данных -> бейзлайн -> деплой -> A/B тест -> следующая итерация с более умным решением.
* Придумываем откуда взять данные. Например, если мы в кейсе делаем блок рекомендаций на сайте, то запускаем блок со случайными рекомендациями, смотрим на что кликают и получаем шумные лейблы. Потом делаем умнее: показываем в блоке половину популярных товаров и половину случайных.
* Изучаем данные. Обозначаем интервьюеру, что мы ищем. На этом этапе интервьюер даст еще дополнительных вводных, связанных с доменной информацией. Например, насколько в спросе на типичные товары много сезонности? Можем ли мы отделить покупки товаров со скидками от покупок товаров без скидок, чтобы это не вносило шум в датасет?
* Делаем глупое бейзлайн решение. Помню байку, что Avito нужно было сделать алгоритм, который выберет лучшее фото для объявления. Никто не смог побить бейзлайн "выбрать самое квадратное фото."
* Деплоим глупое решение, запускаем A/B тест, придумываем, как оценивать было улучшение или нет. На этом этапе мы отрабатываем весь пайплайн, чтобы потом встраивать в него более хорошие решения. Здесь можно уже говорить про архитектуру: будем делать предсказания в батч режиме (периодической крон джобой) или онлайн?
* Переходим к ML. Здесь надо первым делом сформулировать задачу в терминах оптимизации. Что на входе, что на выходе. Это классификация, регрессия, ранжирование или что-то еще? Что мы будем минимизировать/максимизировать?
* Выбираем оффлайн метрики для оценки моделей. Например, задачу ранжирования можно свести к классификации. Но выбирать F1 score не стоит, потому что эта метрика не учитывает положение примера в выдаче. Метрика должна быть тем больше, чем выше релевантный элемент и ниже нерелевантный. Например MAP@R. Но знать ее не обязательно, важнее обозначить ее необходимость интервьюеру.
* Описываем как будем принимать решение, достаточно ли новая модель хороша, чтобы ее деплоить. Здесь чаще всего разговор про кросс-валидацию и про то, как связаны наши ML метрики с бизнесовыми.
* Делаем первую простейшую ML модель. Не сложнее логистической регрессии. Деплоим.
* Делаем модель посложнее и итерируемся.
(UPD: как сказали в комментариях, очень хорошая идея поговорить про мониторинг, дообучение и в целом поддержку решения)
Не претендую на универсальность этого подхода, но я пока не получил ни одного отказа после System Design собеседования, так что такая структура явно лучше, чем ничего.
Если литкод собеседование устроено по очень строгим и понятным правилам, то system design сложнее. Здесь главное показать, что вы можете разложить проблему на составляющие и наметить решение.
Как правило вам задают открытый вопрос вида: "Как бы вы сделали систему прогнозирования спроса в супермаркете?" От вас не ждут, что вы эксперт в прогнозировании спроса, хотя если у вас есть релевантные знания это плюс. Просто представьте, что вы уже на работе и вам задают такой вопрос.
Главная ошибка, которую здесь совершают: пытаются натянуть свой прошлый опыт на проблему и закапываются в детали. Надо спрогнозировать спрос, а человек начинает рассказывать, как он бы тюнил градиентный бустинг. Это собеседование не про ваш опыт, а про совместное решение кейса.
Моя личная структура решения таких кейсов:
* В-о-п-р-о-с-ы. Первым делом надо было задавать как можно больше вопросов. Какие есть данные? Сколько данных? Какое качество модели нас устроит? Какое время на предсказания? Какие ошибки для нас страшнее: false positive или false negative?
* Обозначить план работ. Не надо сразу закапываться в какие-то детали. Как правило порядок примерно такой: изучение проблемы -> сбор данных -> бейзлайн -> деплой -> A/B тест -> следующая итерация с более умным решением.
* Придумываем откуда взять данные. Например, если мы в кейсе делаем блок рекомендаций на сайте, то запускаем блок со случайными рекомендациями, смотрим на что кликают и получаем шумные лейблы. Потом делаем умнее: показываем в блоке половину популярных товаров и половину случайных.
* Изучаем данные. Обозначаем интервьюеру, что мы ищем. На этом этапе интервьюер даст еще дополнительных вводных, связанных с доменной информацией. Например, насколько в спросе на типичные товары много сезонности? Можем ли мы отделить покупки товаров со скидками от покупок товаров без скидок, чтобы это не вносило шум в датасет?
* Делаем глупое бейзлайн решение. Помню байку, что Avito нужно было сделать алгоритм, который выберет лучшее фото для объявления. Никто не смог побить бейзлайн "выбрать самое квадратное фото."
* Деплоим глупое решение, запускаем A/B тест, придумываем, как оценивать было улучшение или нет. На этом этапе мы отрабатываем весь пайплайн, чтобы потом встраивать в него более хорошие решения. Здесь можно уже говорить про архитектуру: будем делать предсказания в батч режиме (периодической крон джобой) или онлайн?
* Переходим к ML. Здесь надо первым делом сформулировать задачу в терминах оптимизации. Что на входе, что на выходе. Это классификация, регрессия, ранжирование или что-то еще? Что мы будем минимизировать/максимизировать?
* Выбираем оффлайн метрики для оценки моделей. Например, задачу ранжирования можно свести к классификации. Но выбирать F1 score не стоит, потому что эта метрика не учитывает положение примера в выдаче. Метрика должна быть тем больше, чем выше релевантный элемент и ниже нерелевантный. Например MAP@R. Но знать ее не обязательно, важнее обозначить ее необходимость интервьюеру.
* Описываем как будем принимать решение, достаточно ли новая модель хороша, чтобы ее деплоить. Здесь чаще всего разговор про кросс-валидацию и про то, как связаны наши ML метрики с бизнесовыми.
* Делаем первую простейшую ML модель. Не сложнее логистической регрессии. Деплоим.
* Делаем модель посложнее и итерируемся.
(UPD: как сказали в комментариях, очень хорошая идея поговорить про мониторинг, дообучение и в целом поддержку решения)
Не претендую на универсальность этого подхода, но я пока не получил ни одного отказа после System Design собеседования, так что такая структура явно лучше, чем ничего.
Forwarded from commit history
Этап собеседования Machine Learning System Design.
Этот этап попадался в 9 из 10 компаний. Задача - полностью спроектировать ML решение. От определения задачи и метрик, заканчивая деплоем и оптимизацией.
Здесь важный момент. Время собеседования ограничено. Поэтому с одной стороны важно не растекаться по дереву, с другой стороны важно покрыть все этапы решения ML задачи, а в некоторые даже погрузиться вглубь, чтобы показать что шарите.
В этом помогает четкая структура ответа:
1. Problem definition and requirement clarification. Определение задачи и оценка требований.
2. Data. Источники данных, какая разметка, как выглядит сэмпл.
3. Evaluation. Какие метрики, сравнение с бейзлайном.
4. Features and model. Препроцессинг, варианты моделей.
5. Online eval, deploy. Выкатка + АБ.
6. Further actions. Как дебажить/обновлять/улучшать/ускорять/итд модель.
Каждый из этапов более подробно разобран в репе ML design primer.
Порядок подготовки.
+ Посмотреть видео fb, яндекса, полистать гитхаб ml design primer.
+ Сделать себе пробный собес попробовать задизайнить систему из списка.
+ Почитать пару разборов из технических блогов компаний или инженеров. Например, тут или тут
+ Делать моки (mock-interview). Это когда вы созваниваетесь и устраиваете друг-другу пробный собес. Моки можно искать в этом чате.
+ Получаете фидбек с мока и идете качать слабые места, читаете еще статьи или главы из 329s.
Этот этап попадался в 9 из 10 компаний. Задача - полностью спроектировать ML решение. От определения задачи и метрик, заканчивая деплоем и оптимизацией.
Здесь важный момент. Время собеседования ограничено. Поэтому с одной стороны важно не растекаться по дереву, с другой стороны важно покрыть все этапы решения ML задачи, а в некоторые даже погрузиться вглубь, чтобы показать что шарите.
В этом помогает четкая структура ответа:
1. Problem definition and requirement clarification. Определение задачи и оценка требований.
2. Data. Источники данных, какая разметка, как выглядит сэмпл.
3. Evaluation. Какие метрики, сравнение с бейзлайном.
4. Features and model. Препроцессинг, варианты моделей.
5. Online eval, deploy. Выкатка + АБ.
6. Further actions. Как дебажить/обновлять/улучшать/ускорять/итд модель.
Каждый из этапов более подробно разобран в репе ML design primer.
Порядок подготовки.
+ Посмотреть видео fb, яндекса, полистать гитхаб ml design primer.
+ Сделать себе пробный собес попробовать задизайнить систему из списка.
+ Почитать пару разборов из технических блогов компаний или инженеров. Например, тут или тут
+ Делать моки (mock-interview). Это когда вы созваниваетесь и устраиваете друг-другу пробный собес. Моки можно искать в этом чате.
+ Получаете фидбек с мока и идете качать слабые места, читаете еще статьи или главы из 329s.
Forwarded from commit history
Как сформулировать ML задачу?
Каждый этап разбирать не буду, но о первым расскажу на примере. Допустим, дали задачу сделать фид для контента. Цель: хотим сделать рекомендации контента(текстовые посты, картинки, видео). Текущая лента обратная хронологическая, хочется сделать персонализированной.
Первый вопрос: зачем? Кажется, что с персональной лентой пользователи будут чаще заходить, залипать в ленте, шерить продукт друзьям. Но, это только предположение, которое нуждается в проверке. Поэтому на старте определимся, как будем оценивать успех или неуспех в количественных показателях.
Продуктовые метрики в рамках собеседования я для себя разделил на три уровня:
1. Деньги 💰– revenue, arpu, конверсии в покупку.
2. Счастье юзера 😍 – like/view rate, avg session time, views count, etc
3. Технические метрики 🎯– recall@k, diversity of items, etc. Соответственно цель наша больше денег, а гипотеза в том, что повысив технические метрики –> повысим счастье юзера –> заработаем больше деньги. В жизни, к сожалению, зависимость не всегда прямая. Но для задачи этот момент опустим.
В cs329s этот этап разбит на 4 шага.
1. Framing. Какая ML проблема? Регрессия, Классификация - multiclass, multilabel.
2. Objectives. На какие подзадачи можно разделить? Например, Прокачать engagement ленты, но при этом не уронить качество постов, не форсить спам и кликбейты.
3. Constraints. Ограничения ресурсов, приватность данных, требования регуляторов.
4. Phases. Как будете внедрять решение: эвристика -> простая модель -> оптимизация простой модели -> сложная модель.
По данному пункту советую полистать лекцию 2 в cs329s и если что-то непонятно посмотреть в Lecture Note.
Еще один важный момент: на этом этапе задавать уточняющие вопросы, чтобы понять контекст задачи: как решается задача сейчас, число пользователей, доступные ресурсы итп.
Каждый этап разбирать не буду, но о первым расскажу на примере. Допустим, дали задачу сделать фид для контента. Цель: хотим сделать рекомендации контента(текстовые посты, картинки, видео). Текущая лента обратная хронологическая, хочется сделать персонализированной.
Первый вопрос: зачем? Кажется, что с персональной лентой пользователи будут чаще заходить, залипать в ленте, шерить продукт друзьям. Но, это только предположение, которое нуждается в проверке. Поэтому на старте определимся, как будем оценивать успех или неуспех в количественных показателях.
Продуктовые метрики в рамках собеседования я для себя разделил на три уровня:
1. Деньги 💰– revenue, arpu, конверсии в покупку.
2. Счастье юзера 😍 – like/view rate, avg session time, views count, etc
3. Технические метрики 🎯– recall@k, diversity of items, etc. Соответственно цель наша больше денег, а гипотеза в том, что повысив технические метрики –> повысим счастье юзера –> заработаем больше деньги. В жизни, к сожалению, зависимость не всегда прямая. Но для задачи этот момент опустим.
В cs329s этот этап разбит на 4 шага.
1. Framing. Какая ML проблема? Регрессия, Классификация - multiclass, multilabel.
2. Objectives. На какие подзадачи можно разделить? Например, Прокачать engagement ленты, но при этом не уронить качество постов, не форсить спам и кликбейты.
3. Constraints. Ограничения ресурсов, приватность данных, требования регуляторов.
4. Phases. Как будете внедрять решение: эвристика -> простая модель -> оптимизация простой модели -> сложная модель.
По данному пункту советую полистать лекцию 2 в cs329s и если что-то непонятно посмотреть в Lecture Note.
Еще один важный момент: на этом этапе задавать уточняющие вопросы, чтобы понять контекст задачи: как решается задача сейчас, число пользователей, доступные ресурсы итп.
Google Docs
cs329s_2022_02_slides_mlsd
Machine Learning Systems Design Lecture 2: ML and Data Systems Fundamentals Reply in Zoom chat: What MLOps tools would you want tutorials on? CS 329S (Chip Huyen, 2022) | cs329s.stanford.edu
Forwarded from Anton Plaksin
Увы этого в курсе освещено не будет. Этот курс про самые основы. Чтобы иметь более широкое представление о том, что сейчас происходит в RL могу порекомендовать этот цикл докладов. Ну и конечно читать статьи https://www.youtube.com/playlist?list=PLt1IfGj6-_-eXjZDFBfnAhAJmCyX227ir
YouTube
Advanced Topics in Reinforcement Learning
The idea of this course is to concentrate on modern research in the RL and to analyze significant articles over the past few years. https://deeppavlov.ai/rl_...
Forwarded from Love. Death. Transformers.
Stable diffusion официально можно выкидывать - вышел KANDINSKY 2.0
Что внутри:
НОРМАЛЬНАЯ лицензия позволяющая генерить и продавать файнтюны с любым содержимым
Скоро выйдут ноутбуки для finetune и dreamboth, stay tuned
🖥github
🤗 Hf
Habr
Сайт чтобы играться с inpainting и это всё
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ИЦ "ГЕВИССТА"
PyBoost
PyBoost https://github.com/sb-ai-lab/Py-Boost предназначен для многоклассовой/multilabel классификации, когда у вас десятки/сотни/тысячи классов. Недавно закончилось соревнование https://www.kaggle.com/competitions/open-problems-multimodal/overview. В двадцатке победителей у четверых решение с использованием PyBoost. В наших задачах (40-80 классов) PyBoost показывает лучшие результаты, чем CatBoost. Если классов больше 10, точно стоит попробовать PyBoost. Статья https://openreview.net/forum?id=WSxarC8t-T
PyBoost https://github.com/sb-ai-lab/Py-Boost предназначен для многоклассовой/multilabel классификации, когда у вас десятки/сотни/тысячи классов. Недавно закончилось соревнование https://www.kaggle.com/competitions/open-problems-multimodal/overview. В двадцатке победителей у четверых решение с использованием PyBoost. В наших задачах (40-80 классов) PyBoost показывает лучшие результаты, чем CatBoost. Если классов больше 10, точно стоит попробовать PyBoost. Статья https://openreview.net/forum?id=WSxarC8t-T
GitHub
GitHub - sb-ai-lab/Py-Boost: Python based GBDT implementation on GPU. Efficient multioutput (multiclass/multilabel/multitask) training
Python based GBDT implementation on GPU. Efficient multioutput (multiclass/multilabel/multitask) training - sb-ai-lab/Py-Boost
Forwarded from Тимлид Очевидность | Евгений Антонов
Улучшая можно и ухудшить
Сегодня хочется поговорить про несколько контринтуитивную штуку. В некоторых случаях желание где-то что-то оптимизировать приводит не только к улучшению, но и к ухудшению.
Надо оптимизировать, от этого становится лучше
Совершенно логичная и понятная мысль: надо искать то, что можно улучшить и улучшать это.
Есть у вас какой-то ручной труд, вдобавок сопровождаемый человеческими ошибками? Вот кандидат на автоматизацию. Станет быстрее и качественнее.
Есть неэффективный инструмент, с которым и работа медленно идет, и людей на рынке труда мало? Вот еще кандидат на оптимизацию, замену, стандартизацию.
Конечно, надо искать в процессах, инструментах, командах, управлении места для улучшения и работать над ними.
Не надо оптимизировать, от этого становится хуже
Но ведь бывают и другие случаи, когда оптимизации во вред могут пойти.
Вот допустим, есть у вас команда, где есть менеджер, который вам требования генерит, разработчики и тестировщики.
Вы придумали, как ускорить работу менеджера. Менеджер стал генерить кучу каких-то полезных идей и гипотез, начал наваливать это на разработчиков. Разработчики стали тонуть в потоке задач, пытаясь за всё сразу взяться и поскорее сделать. В итоге везде пооткусывали, внимание распылили, качество в спешке ухудшили, а довозить что-то работающее до продакшена стали еще медленнее, чем раньше.
Или ускорили разработчиков, они море тасочек на тестировщиков вылили, а те либо не глядя выпускают в прод (что ухудшает качество), либо добросовестно тестируют, и не быстрее, чем раньше (ведь их пропускная способность осталась такая же), подливают это дело на прод. В итоге либо ничего не изменилось, либо качество ухудшили.
Что именно надо оптимизировать?
Примеры выше – классические примеры локальных оптимизаций. Эта проблема идет из того, что при улучшении мы смотрим на какую-то конкретную часть, забывая о том, что конечный продукт выпускает вся система. Следовательно, улучшения нам нужны такие, которые будут влиять на всю эту систему в положительном ключе.
Оптимизировать нам в первую очередь нужно не то, что легче оптимизировать, а то, что во всей цепочке производства продукта является самым слабым звеном, узким бутылочным горлышком. Тогда можно существенно увеличить пропускную систему целиком, потому что вся система работает со скоростью самого медленного звена.
Т.е. в примере выше нам надо было проанализировать данную команду и не решать, где можно сейчас улучшить, а понять сначала, чье направление медленнее всех работу выполняет. И потом уже улучшения придумывать для него конкретно.
Итог
Могу порекомендовать почитать пару книг, которые затрагивают теорию ограничений систем, и прикинуть это на свои дела, компанию, проекты.
Элияху Голдратт «Цель. Процесс непрерывного совершенствования»
Джин Ким, Джордж Спаффорд, Кевин Бер «Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему»
Старайтесь оптимизировать в первую очередь самые слабые звенья, а не то, что проще всего оптимизировать. Иначе и пользы особой не принесете, и даже вред можно причинить.
Сегодня хочется поговорить про несколько контринтуитивную штуку. В некоторых случаях желание где-то что-то оптимизировать приводит не только к улучшению, но и к ухудшению.
Надо оптимизировать, от этого становится лучше
Совершенно логичная и понятная мысль: надо искать то, что можно улучшить и улучшать это.
Есть у вас какой-то ручной труд, вдобавок сопровождаемый человеческими ошибками? Вот кандидат на автоматизацию. Станет быстрее и качественнее.
Есть неэффективный инструмент, с которым и работа медленно идет, и людей на рынке труда мало? Вот еще кандидат на оптимизацию, замену, стандартизацию.
Конечно, надо искать в процессах, инструментах, командах, управлении места для улучшения и работать над ними.
Не надо оптимизировать, от этого становится хуже
Но ведь бывают и другие случаи, когда оптимизации во вред могут пойти.
Вот допустим, есть у вас команда, где есть менеджер, который вам требования генерит, разработчики и тестировщики.
Вы придумали, как ускорить работу менеджера. Менеджер стал генерить кучу каких-то полезных идей и гипотез, начал наваливать это на разработчиков. Разработчики стали тонуть в потоке задач, пытаясь за всё сразу взяться и поскорее сделать. В итоге везде пооткусывали, внимание распылили, качество в спешке ухудшили, а довозить что-то работающее до продакшена стали еще медленнее, чем раньше.
Или ускорили разработчиков, они море тасочек на тестировщиков вылили, а те либо не глядя выпускают в прод (что ухудшает качество), либо добросовестно тестируют, и не быстрее, чем раньше (ведь их пропускная способность осталась такая же), подливают это дело на прод. В итоге либо ничего не изменилось, либо качество ухудшили.
Что именно надо оптимизировать?
Примеры выше – классические примеры локальных оптимизаций. Эта проблема идет из того, что при улучшении мы смотрим на какую-то конкретную часть, забывая о том, что конечный продукт выпускает вся система. Следовательно, улучшения нам нужны такие, которые будут влиять на всю эту систему в положительном ключе.
Оптимизировать нам в первую очередь нужно не то, что легче оптимизировать, а то, что во всей цепочке производства продукта является самым слабым звеном, узким бутылочным горлышком. Тогда можно существенно увеличить пропускную систему целиком, потому что вся система работает со скоростью самого медленного звена.
Т.е. в примере выше нам надо было проанализировать данную команду и не решать, где можно сейчас улучшить, а понять сначала, чье направление медленнее всех работу выполняет. И потом уже улучшения придумывать для него конкретно.
Итог
Могу порекомендовать почитать пару книг, которые затрагивают теорию ограничений систем, и прикинуть это на свои дела, компанию, проекты.
Элияху Голдратт «Цель. Процесс непрерывного совершенствования»
Джин Ким, Джордж Спаффорд, Кевин Бер «Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему»
Старайтесь оптимизировать в первую очередь самые слабые звенья, а не то, что проще всего оптимизировать. Иначе и пользы особой не принесете, и даже вред можно причинить.
Forwarded from ИЦ "ГЕВИССТА"
Обучение базовой модели LightGBM.ipynb
2 MB
Ранняя остановка, собственная функция потерь, важности в LightGBM
В этой тетрадке найдете реализацию ранней остановки для нативного и sklearn-интерфейса, ну и, конечно, реализация ранней остановки с помощью callback-функции.
В этой тетрадке найдете реализацию ранней остановки для нативного и sklearn-интерфейса, ну и, конечно, реализация ранней остановки с помощью callback-функции.
Forwarded from ИЦ "ГЕВИССТА"
Существует несколько правил для определения количества итераций ранней остановки. Для градиентного бустинга с количеством итераций меньше 1000 количество итераций ранней остановки должно составлять не больше 10%, т.е. не больше 100 итераций. Для градиентного бустинга с количеством итераций больше 1000 количество итераций ранней остановки должно составлять не больше 5%, т.е. не больше 50 итераций. Чем меньше темп, тем быстрее должно происходить восстановление монотонного снижения. Поэтому для низкого темпа обучения (меньше 0,01) количество итераций ранней остановки берут еще меньше. Чем больше итераций требуется для восстановления монотонного снижения функции потерь или метрики качества на проверочной выборке и чем больше гэп между кривой обучения и кривой валидации, тем сильнее переобучение.
Forwarded from ИЦ "ГЕВИССТА"
В общем, не надо использовать переобученные деревья, подведут. Обнаружили точку переобучения, монотонное уменьшение функции потерь/метрики на валидационном датасете сломалось, функция/метрика пошла танцевать, деревья после этой точки отсекаете. Но когда будете переобучать бустинг на всем наборе, количество деревьев добавляем, потому что обучаете на большем по размеру наборе. И это не какой-то там трюк с Kaggle. Это реальная практика, применяющаяся в промышленном подходе. Бустинг чувствителен к размеру набора данных, во временных рядах, где используется проверка расширяющимся окном (когда размер обучающего набора растет), это вылилось вообще в отдельную проблему, в Walmart придумали схему с динамической корректировкой гиперпараметров, которую потом переносят на прод. Обычно для расчета требуемого количества деревьев используют множитель, зависящий от количества блоков перекрестной проверки, которая использовалась при подборе гиперпараметров (1,2 – для 5-блочной перекрестной проверки).
Там же в тетрадке найдете пример, как писать пользовательскую функцию потерь, например, логистическую с понижающей корректировкой гессиана, ну это прям в лоб как пример, а вот циклическая корректировка с затуханием будет гораздо эффективнее (будет время, напишу про нее подробнее). Что это дает? Лучшее качество на меньшем количестве деревьев.
Еще в тетрадке описаны способы вычисления различных важностей в нативном и sklearn-интерфейсов. Про важности бустинги помним один момент, про который я, как попугай, говорю своим ученикам по несколько раз: точечные оценки важности шумные, используйте кроссвалидацию и ориентируйтесь на усредненные метрики важностей, наиболее реалевантные из предложенных – важности на основе выигрыша (gain), на самом деле есть важности получше – на основе усредненной минимальной глубины использования и количество деревьев, корень которых разбивается по данному признаку. Но это нужно самому реализовывать, в целом ничего сложного. Обратите внимание, обе эти метрики ориентированы на поиск фичей, которые используются в верхних уровнях деревьев. И это лучше, чем просто количество разбиений считать или складывать уменьшения функции потерь. Если набор до 300-500 тыс наблюдений, 5-блочной перекрестной проверки хватит, если больше – используйте повторную 5-блочную перекрестную проверку.
Там же в тетрадке найдете пример, как писать пользовательскую функцию потерь, например, логистическую с понижающей корректировкой гессиана, ну это прям в лоб как пример, а вот циклическая корректировка с затуханием будет гораздо эффективнее (будет время, напишу про нее подробнее). Что это дает? Лучшее качество на меньшем количестве деревьев.
Еще в тетрадке описаны способы вычисления различных важностей в нативном и sklearn-интерфейсов. Про важности бустинги помним один момент, про который я, как попугай, говорю своим ученикам по несколько раз: точечные оценки важности шумные, используйте кроссвалидацию и ориентируйтесь на усредненные метрики важностей, наиболее реалевантные из предложенных – важности на основе выигрыша (gain), на самом деле есть важности получше – на основе усредненной минимальной глубины использования и количество деревьев, корень которых разбивается по данному признаку. Но это нужно самому реализовывать, в целом ничего сложного. Обратите внимание, обе эти метрики ориентированы на поиск фичей, которые используются в верхних уровнях деревьев. И это лучше, чем просто количество разбиений считать или складывать уменьшения функции потерь. Если набор до 300-500 тыс наблюдений, 5-блочной перекрестной проверки хватит, если больше – используйте повторную 5-блочную перекрестную проверку.
Forwarded from Это разве аналитика?
Мега шпаргалки по matplotlib
https://github.com/matplotlib/cheatsheets
Даже и не думал, что так много графиков и тонкостей настройки
https://github.com/matplotlib/cheatsheets
Даже и не думал, что так много графиков и тонкостей настройки