# Введение в соревновательный анализ данных <!-- [v2] --> Гущин Александр, DMIA, осень 2019 [TOC] --- Соревнования 1. Зачем проводят и участвуют 2. Какие бывают 3. Какое отличие от задач DS на работе 4. Что нужно для участия 5. Как решать 6. Как решать, чтобы потом повторить 7. Как решать в команде 8. Как писать код, чтобы не страдать <!-- --- 1. Место соревнований в жизни DS, организаторов и коммьюнити 2. 3. Как решать 🗒 4. Как побеждать 5. Воспроизводимость решений 🔄 6. Работа в команде 👩🏼‍💻😸🤖 7. Код 💻 --> --- ## Зачем нужны соревнования по анализу данных? [Красивая презентация](https://disk.yandex.ru/d/qFNYL_HoLHLtQw) <!-- --- # Зачем нужны соревнования по анализу данных? Лучше тезисно сюда # Какие соревнования бывают? Частично есть в презентации выше, было бы здорово докинуть ещё примеров --> --- Соревнования бывают - По типу сабмита: csv файл или докер образ - По "игрушечности": Kaggle (баллы, медальки, призы) или Kaggle Inclass - По времени: соревнование (~неделя и больше) или хакатон (обычно до недели) --- Обычный формат соревнования Даны: x_train, y_train Найти: y_test - Сабмитим csv файл: x_test можно пощупать - Сабмитим docker-образ: x_test не пощупать --- ## Работа DS в индустрии <!-- В чем отличие от тех задач, которыми обычно занимаются DS на своей работе? --> ![](https://www.jeremyjordan.me/content/images/2019/09/ml-development-cycle.png) https://www.jeremyjordan.me/ml-projects-guide <!-- --- Пояснить предыдущий слайд --> --- ## Что нужно для участия 1. Время! 2. Умение программировать (желание научиться) 3. Машинка (можно арендовать) --- ### Время - Особенно тогда, когда есть цель занять достойное (для вашего уровня) место на лидерборде. - Вопрос: сколько времени у DS уходит на решение задачи в индустрии или на проведение ресерча и написание статьи? --- ### Умение или желание программировать - Bash для некоторых библиотек и работы с машинкой - Python, R, Matlab, другие языки - Для Python: ipython, jupyter notebook, numpy, pandas, matplotlib, scikit-learn, lightgbm, многие другие --- ### Машинка - Удобно решать с ноутбука с 16+ гб RAM, core i5+, SSD - Можно арендовать сервер на aws, google cloud, microsoft azure, selectel, многие другие --- - Больше датасеты => требуется больше CPU, RAM и/или SSD - Больше интенсивных вычислений (фичи и модели) => CPU - Соревнования с картинками/текстами => нужны GPU и SSD --- ## Как решать 1. Оглядываться на предыдущие этапы :) 2. Изучить задачу и метрику 3. Отправить константный бейзлайн 4. Написать фреймворк 5. Генерировать фичи 6. Тюнить модели 7. Объединять решения Это - основные темы нашего направления <!-- - И курса `How to Win DS Competitions` на курсере --> <!-- https://www.coursera.org/learn/competitive-data-science --> <!-- Когда-нибудь тут будет ссылка на онлайн DMIA --> --- Эмпирические советы: 1. Как можно раньше проверьте, что ваша валидация корректна 2. Выписывайте свои идеи 3. Читайте форум 4. Изучайте код других участников --- ## Воспроизводимость решений Как решать, чтобы потом можно было повторить 1. random_state 2. git 3. submission files --- ### Режимы работы Сделайте два режима работы своего ноутбука/скрипта: validation и test Например ```python X = pd.read_csv('data/train.csv') y = pd.read_csv('data/y_train.csv') MODE = 'validation' if MODE == 'validation': x_train, x_test, y_train, y_test = train_test_split(X, y, ...) elif MODE == 'test': x_train = X y_train = y x_test = pd.read_csv('data/test.csv') ``` --- ### Random_state 1. `train_test_split(random_state=0)` 2. `RandomForestClassifier(random_state=0)` 3. ```np.random.seed(0); np.random.choice(...)``` --- ### Git Git - инструмент для версионирования изменений кода. https://git-scm.com/downloads ![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Git-logo.svg/1024px-Git-logo.svg.png =250x) Сайты, реализующие возможность работы над кодом с помощью утилиты git ![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Font_Awesome_5_brands_github-square.svg/1024px-Font_Awesome_5_brands_github-square.svg.png =100x) ![](https://upload.wikimedia.org/wikipedia/commons/c/c6/GitLab_logo.png =250x) ![](https://upload.wikimedia.org/wikipedia/commons/3/32/Atlassian_Bitbucket_Logo.png =250x) --- #### Основы Git ```bash git clone github.com/username/reponame.git git add README.md git commit -m 'initial commit' git push # подтянуть изменения, которых нет в локальной папке git pull ``` https://git-scm.com/book/ru/v2 https://try.github.io/ --- ### Submissions 1. Организаторы могут попросить воспроизвести финальный сабмит 2. Вам может понадобиться воспроизвести какой-то свой сабмит 3. Вы можете захотеть смешать сделанные вами сабмиты --- #### Эвристики 1. Удобно хранить код всех сабмитов (git) 2. Удобно хранить файлики с сабмитами (filesystem, git lfs, cloud storage...) --- #### Git lfs Git Large File Storage https://git-lfs.github.com ![](https://wac-cdn.atlassian.com/dam/jcr:7e70a242-db91-4093-b178-c1281fe3ddbb/03.2017-12-12-00-28-43.svg =600x) --- ## Работа в команде Плюсы: - Быстрее всего учиться новому у других или вместе с другими - Больше людей => больше шансов выиграть Минусы: - Члены команды могут перестать что-то делать - Могут возникнуть другие разногласия Note: Удалять участников из команды на kaggle нельзя --- Что нужно для успешной работы в команде 1. Планировать работу 2. Обмениваться идеями 3. Обмениваться кодом (git) 4. Обмениваться сабмитами (git lfs / cloud storage) и смешивать ваши решения --- Как обычно идет работа в команде 1. Формируется общая валидационная выборка 2. Все готовят свои решения: по-своему обрабатывают данные, генерят фичи и учат модели 3. Решения участников регулярно смешиваются --- ### Планирование работы и обмен идеями 1. Планировать заранее - правильно 2. Нужно регулярно синхронизироваться 3. Созвоны - для синков, чат - для обсуждений 5. Нужно быть готовым объединять ваши решения 6. Кто-то должен (нести ответственность за работу команды) --- ### Обмен кодом 1. Заведите приватный репозиторий и дайте доступы 2. Комитьте туда код регулярно --- ### Регулярные коммиты В конце вашего ноутбука... ```python COMPETITION = 'kaggle.com/...' ``` ```python FILE = 'submissions/_LGBM_NN.csv' MESSAGE = 'LGBM-super-stacked + NN averaged 10 fold' submit.to_csv(FILE) ``` ```bash %%bash git pull git add StackingLGBM.ipynb git commit -m '{MESSAGE}' git push kaggle competitions submit \ -c {COMPETITION} -f {FILE} -m {MESSAGE} ``` https://www.kaggle.com/docs/api --- ### Смешивание решений 1. Выделите валидационную выборку вначале! (и перепроверьте) 2. Напишите скрипт/ноутбук, который будет смешивать предсказания 3. Делайте это регулярно, чтобы понимать ваш прогресс --- #### Проверка валидационной выборки День 1: ``` A: сделал валидацию, train_test_split(test_size=0.2, random_state=1) B: отлично, го ``` День 31: ``` А: Перепроверь, у тебя test_ids [5821, 2440, 2143, ...]? Б: [1734, 2314, 4325, ...] А: :'( ``` Частые причины: 1. Разные версии python и библиотек 2. Разный порядок строк в разбиваемом датафрейме --- #### Смешивание решений - Напишите скрипт/ноутбук, который может подобрать по валидационной выборке способ смешивания ваших моделей. - Чтобы смешивать не об лидерборд, вам нужно сохранять прогнозы для (1) валидации, (2) - Внизу ноутбука - тот код, который делает коммит и сабмит. --- Шаги по усложнению: 1. Усреднение 2. Усреднение с весами (== блендинг линейной моделью) 3. Стекинг Делайте смешивание регулярно 1. Чтобы понимать, есть ли от этого толк 2. Чтобы тратить время более перспективно --- ## Пишем код Соревнования - это не про продакшн код. Но про корректный и понятный. --- ### Six steps to more professional data science code 📦 Modular ✔️ Correct 📖 Readable 💅 Stylish 🛠️ Versatile 💡 Creative https://www.kaggle.com/rtatman/six-steps-to-more-professional-data-science-code --- 📦 Modular: Code is broken into small, independent parts (like functions) that each do one thing. Code you’re reusing lives in a single central place. --- ✔️ Correct: Your code does what you say/think it does. --- 📖 Readable: It’s easy to read the code and understand what it does. Variable names are informative and code has up-to-date comments and docstrings. --- 💅 Stylish: Code follows a single, consistent style (e.g. the Tidyverse style guide for R, PEP 8 for Python code) --- 🛠️ Versatile: Solves a problem that will happen more than once and anticipates variation in the data. --- 💡 Creative: Solves a problem that hasn’t already been solved or is a clear improvement over an existing solution. --- Соревнования 1. Зачем проводят и участвуют 2. Какие бывают 3. Какое отличие от задач DS на работе 4. Что нужно для участия 5. Как решать 6. Как решать, чтобы потом повторить 7. Как решать в команде 8. Как писать код, чтобы не страдать --- Соревнования не только про ML. Ещё про то, как 1. Заставить код работать 2. Распарсить данные в непонятных форматах 3. Работать с датасетом, который не влезает в память 4. Найти в данных баг, который пропустили организаторы --- 6. Использовать алгоритмы, которые вы не понимаете 7. Как ускорить ваши вычисления 8. Просмотреть глазками большое количество данных Но и реальная жизнь тоже! --- <!-- .slide: data-background="https://cdn.pixabay.com/photo/2018/10/03/08/47/competition-3720732_1280.jpg" --> <div style="color: #ddd;"> 1. Dont cheat 2. Apply yourself 3. Have fun! </div> . . . . <!-- В конце концов, опыт важнее денег --> <!-- ![](https://cdn.pixabay.com/photo/2018/10/03/08/47/competition-3720732_1280.jpg =700x) --> <!-- ![](https://www.maxpixel.net/static/photo/640/Summer-Animal-Cat-Kitten-Tree-Domestic-Green-1647775.jpg) ![](https://www.maxpixel.net/static/photo/1x/Cute-Adorable-Domestic-Canine-Animal-Excited-Dog-1849992.jpg) -->
{"metaMigratedAt":"2023-06-15T00:33:02.696Z","metaMigratedFrom":"YAML","title":"Введение в соревновательный анализ данных","breaks":true,"slideOptions":"{\"theme\":\"white\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"e0bc91de-98f7-46f8-a3a9-852912833a93\",\"add\":10887,\"del\":946}]"}
    995 views