Skip to content

Latest commit

 

History

History
128 lines (76 loc) · 18.5 KB

project_rules.md

File metadata and controls

128 lines (76 loc) · 18.5 KB

Правила сдачи и оформления проекта

Ладно! И так сойдёт! (Студент ФЭН перед получением неуда за проект)

На этой страничке подробно описаны правила сдачи проекта и его этапы. За проект мы можете получить $100$ баллов.

Проект — групповой

Проект делается в группах, состоящих не более, чем из трёх человек. Можно делать проект одному, вдвоём либо втроём. Вчетвером нельзя. Придётся разбиться на две группы по двое.

Если вас в группе трое, это не означает, что два студента из трёх могут валять дурака. В конце проекта мы вызовем одного рандомного человека из команды защитить его. Если он не справится, вся группа получит ноль баллов. Все члены команды должны разбираться в каждой строчке кода проекта. Более подробная информация про защиты будет позже.

Проект — многошаговый

По проекту будет несколько дедлайнов. Для каждого шага и дедлайна по нему, ниже будет описание. Если у вас есть идеи, как сделать своё исследование, вы можете согласовать свою идею с семинаристом. Хочется, чтобы оно было сопоставимо по объёму работы и проверяемым навыкам с тем, что написано ниже.

На каждом шаге проекта вы можете советоваться с учебными ассистентами и семинаристами.

Дедлайны

В проекте будет три дедлайна:

  1. Дедлайн выбора темы и датасета – 12 апреля
  2. Промежуточный чекпойнт – 10 мая
  3. Итоговый дедлайн – 31 мая

К промежуточному чекпойнту вы должны сделать хотябы часть проекта: собрать данные, сделать их EDA и хотябы часть визуализаций. Вы должны до чекпойнта определиться какие примерно гипотезы вы будете дальше проверять и какое машинное обучение делать. Если к чекпойнту у вас это не сделано, вы получаете штраф. Из вашей итоговой оценки будет вычтено 30 баллов. К итоговому дедлайну должен быть доделан весь проект.

Правила сдачи проекта

Промежуточный результат и итоговый результат необходимо загрузить в свой репозиторий на github (придётся создать аккаунт). Финальный результат вашей работы включает следующие файлы:

  1. Блокнот jupyter notebook с подробным описанием иследования, выводом, кодом и картинками
  2. Файлы с данными, которые вы использовали (если они весят больше 100 MB, не надо грузить их на github, загрузите их на свой гугл/яндекс-диск или дропбокс и приложите ссылку на них.
  3. Вспомогательные модули. Чтобы не загромождать основной блокнот кодом, вы можете выносить его в модули (отдельные файлы). Их тоже надо прикрепить к репозиторию.

Бонусы и штрафы за код и репозиторий:

  • Весь код нужно писать аккуратно. За плохой, грязный, неоптимальный код, мы будем штрафовать вас. Постарайтесь придерживаться PEP-8. Такой штраф может составить до 20 баллов.
  • Если вы будете аккуратно работать с кодом, выносить его большие страшные куски в модули, вы сможете получить за это дополнительные баллы.
  • Если вы будете аккуратно работать с репозиторием и научитесь делать в него пулл-реквесты с ревью, вы можете получить за это дополнительные баллы. В истории репозитория должны остаться признаки групповой совместной работы.
  • Всего за аккуратную работу, по аналогии, можно получить до 20 бонусных баллов.

Шаг 1: выбор темы

Подумайте, с какими данными вам было бы интереснее всего поработать. Подумайте, что бы вы с ними хотели сделать. Например, возможно, вы сейчас пишете курсовую и вы могли бы для неё спарсить какие-нибудь данные и проанализировать их. За этот этап вы не получаете никакой оценки, но данные надо согласовать у семинариста/ассистента.

Шаг 2: сбор данных (максимум 20)

Данные надо откуда-то взять.

  • За парсинг датасета из любого источника на ваш вкус вы получаете 20 баллов
  • За сбор датасета из разных источников (несколько готовых датасетов, но собранных из разных источников и объединенные общей логикой) вы получаете 10 баллов
  • За просто готовый датасет – 5 баллов

Если вы взяли готовый датасет и обогатили его, спарсив что-то, вы получаете 20 баллов. Тут важно спарсить что-то полезное, обогащающее датасет. За парсинг book to scrape ради галочки, вы баллов не получите. Не забудьте вставить ссылки на всё, что используете в итоговый блокнот и подробно описать свои действия.

Рекомендация к парсингу: Данное условие не является строгим и обязательным, а скорее рекомендация для вас. Если вы решили парсить данные, рекомендуем убедиться, что вы сможете собрать хотя бы 4-5 числовых признаков и несколько категориальных для вашей модели (если вы собираетесь что-то предсказывать). При этом также рекомендуем собрать хотя бы 1000 наблюдений для модели.

Несколько идей, откуда можно брать наборы данных:

Это все лишь идеи! Можете брать любой источник, но обязательно укажите его и опишите Ваши действия.

Шаг 3: Предварительныя обработка (максимум 10 баллов)

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

Шаг 4. Визуализация (максимум 20 баллов)

Сделайте для своих данных разведочный анализ данных, Exploratory Data Analysis (EDA). Выясните, какие в данных есть особенности, визуализируйте их. Ваша задача — откопать в данных интересные закономерности и построить для них красивые, понятные визуализации, на основе которых можно выдвинуть гипотезы и создать для датасета новые переменные.

Оценка за этот пункт зависит от сложности графиков и интересных идей, которые можно из них заметить.

Шаг 5. Создание новых признаков (максимум 10 баллов)

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

Шаг 6. Гипотезы (максимум 20 баллов)

При визуализации у вас возникли гипотезы о закономерностях, которые есть в ваших данных. Проверьте эти гипотезы с помощью математической статистики. Итоговый балл зависит от того, насколько интересные находки вы сделаете и насколько корректно вы подберёте для проверки критерий/процедуру. Это может быть что угодно от непараметрических тестов и z-статистики до бутстрапа и теста отношения правдоподобий.

Шаг 7. Машинное обучение (максимум 20 баллов)

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

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

Полезные советы, чтобы не потерять баллы:

1. Структура репозитория. Сделайте нормальную структуру репозитория. Сейчас я открываю многие репы и не понимаю, что вообще происходит, так как там лежит один файл с кринж-названием иииии все.

  • В README должна быть нормально описана структура проекта, где что искать и что вы делаете
  • Все файлы должны быть с неймингом на латинице, не должно быть стрёмных файлов с двойными расширениями, например filename.ipynb.json или архивов. Всё должно лежать красиво.
  • Не должно быть мусора вроде файлов .DS_Store и временных файлов. Почитайте как работает .gitignore и добавьте его в свои репозитории, если хотите баллы за аккуратность. Если не хотите потерять баллы за безалаберность, достаточно просто удалить все мусорные файлы вручную.
  • Все собранные данные весом меньше 100 MB лежат в репе, если они весят больше, они лежат на диске, и в README на них есть ссылка для скачки.
  • Парсинг и анализ данных лучше разнести в разные файлы.

2. Оформление тетрадок и модулей.

  • Тетрадка, залитая в репозиторий, должна быть полностью прогнана. В ней не должно быть кода, упавшего с ошибками.
  • В тетрадке должно быть нормальное текстовое описание того, что происходит. Не должно быть непрерывного кода без комментов, асист при проверке не должен разбираться в каждой строке вашего кода и как его интерпретировать. Пишите комменты текстом по аналогии с тем, как это выглядит в семах.
  • Если вы пишите функции, пишите в докстринге что они делают, чтобы не надо было до этого догадываться. Если вы вынесли часть кода в отдельный модуль, делайте описание для этого модуля хотябы в README.
  • Если вы устанавливаете библиотеки, не надо кидать в середине кода ячейку !pip install packet. Поставьте пакет и удалите эту строку. Если вы хотите прописать в явном виде зависимости и получить бонусы за красивое оформление репозитория, вынесите все зависимости в файлик requirements.txt. Подробнее про такой файл читайте тут. Добавлять его необязательно, но код почистить от установок надо.
  • Дробите код на логические куски. Делайте для них заголовки прямо текстом, чтобы было понять что будет в этом разделе. Подгрузка всех библиотек и модулей идёт в самом начале тетрадки/раздела, где они важны, а не в середине кода.
  • Мемы в тему рисёрча приветствуются, не забывайте подгружать картинку в репозиторий и нормально вставлять её в текст тетрадки.

3. Визуализация

  • От визуализаций и EDA мы хотим осмысленности. Не надо рисовать картинку ради того, чтобы была нарисована картинка. За это не будет полного балла. Рисуйте картинку, чтобы лучше понять природу данных, накидать идей для фичей для модели, сформулировать гипотезы и тп.
  • Визуализация должна делаться не просто так, а для того, чтобы прочувствовать данные и наметить дальнейшие шаги для рисёрча. По визуализациям должны быть написаны выводы. Прямо текстом. Все картинки должны быть понятными, оси должны быть подписаны.
  • Если вы строите визуал в plotly, оставляйте в тетрадке загруженной на гит замороженную версию своего визуала. Вроде бы, это можно сделать таким кодом:
import plotly.io as pio
pio.renderers.default = 'notebook'