Пошаговое руководство о том, как структурировать свои первые проекты Data Science на Kaggle

Если вы только начинаете свой путь в области науки о данных и машинного обучения, возможно, вы слышали о Kaggle, крупнейшем в мире сообществе специалистов по науке о данных. Из-за множества курсов, книг и руководств, посвященных этому предмету в Интернете, совершенно нормально чувствовать себя подавленным, не зная, с чего начать.
Хотя нет единого мнения о том, какой подход лучше всего использовать, когда вы начинаете изучать навык, начать работу с Kaggle с самого начала вашего пути в области науки о данных - это твердый совет.
Это прекрасное место, чтобы учиться и делиться своим опытом, а специалисты по обработке данных всех уровней могут извлечь выгоду из сотрудничества и взаимодействия с другими пользователями. Более опытные пользователи могут быть в курсе новых тенденций и технологий, а новички найдут отличную среду для начала работы в этой области.
В Kaggle есть несколько ускоренных курсов, которые помогают новичкам тренировать свои навыки. Есть курсы по питону, пандам, машинному обучению, глубокому обучению и многое другое. Когда вы приобретете больше уверенности, вы сможете участвовать в соревнованиях, чтобы проверить свои навыки. Фактически, после нескольких курсов вам будет предложено присоединиться к вашему первому соревнованию.
В этой статье я покажу вам несколько советов о том, как структурировать свой первый проект. Я буду работать над Конкурсом цен на жилье, одним из лучших практических проектов для Kaggle.
1. Изучите данные
Первый шаг, когда вы сталкиваетесь с новым набором данных, - это потратить некоторое время на то, чтобы узнать данные. В соревнованиях Kaggle вы встретите что-то вроде примера, приведенного ниже.

На странице конкурса вы можете проверить описание проекта в разделе Обзор, а полезную информацию о данных, установленных на вкладке Данные. В соревнованиях Kaggle наборы для тренировок и тестов обычно размещаются в отдельных файлах. На этой же вкладке обычно содержится сводка функций, с которыми вы будете работать, и некоторая базовая статистика. Крайне важно понимать, какую проблему необходимо решить и какой набор данных у нас есть.
Вы можете использовать записные книжки Kaggle для выполнения своих проектов, так как они похожи на записные книжки Jupyter.
2. Импортируйте необходимые библиотеки и набор данных.
2.1. Библиотеки
В этом проекте используются следующие библиотеки.
2.2. Набор данных
Следующим шагом является считывание набора данных в фрейм данных pandas и получение целевого вектора y, который будет столбцом SalePrice, и предикторов X, которые на данный момент будут быть оставшимися столбцами.
Чтобы получить обзор данных, давайте проверим первые строки и размер набора данных.


У нас 1460 строк и 79 столбцов. Позже мы проверим эти столбцы, чтобы проверить, какие из них будут иметь значение для модели.
На следующем этапе мы разделим данные на наборы для обучения и проверки.
3. Данные обучения и проверки
Крайне важно разбить наши данные на набор для обучения модели и еще на один для проверки результатов. Стоит отметить, что мы никогда не должны использовать здесь тестовые данные. Наш тестовый набор остается нетронутым, пока мы не будем удовлетворены производительностью нашей модели.
Мы собираемся взять предикторы X и целевой вектор y и разбить их на наборы для обучения и проверки. Для этого мы будем использовать train_test_split из scikit-learn.
4. Проанализируйте и подготовьте данные.
Теперь мы начинаем анализировать данные, проверяя некоторую информацию о функциях.

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

У некоторых функций отсутствуют значения, которые учитываются в большинстве записей. Проверяя страницу конкурса, мы находим более подробную информацию о значениях для каждой функции, что поможет нам обработать недостающие данные.
Например, в столбцах PoolQC, MiscFeature, Alley, Fence и FireplaceQu отсутствующие значения означают, что дом не учитывается с этой конкретной функцией, поэтому мы заполним отсутствующие значения "NA". Все нулевые значения в столбцах, начинающиеся с Garage и Bsmt, относятся к домам, у которых нет гаража или подвала соответственно. Мы заполним эти и оставшиеся нулевые значения «NA» или средним значением, учитывая, являются ли характеристики категориальными или числовыми.
4.2. Предварительная обработка категориальных переменных
Большинство моделей машинного обучения работают только с числовыми переменными. Следовательно, если мы введем в модель категориальные переменные без предварительной их обработки, мы получим ошибку.
Есть несколько способов справиться с категориальными ценностями. Здесь мы будем использовать One-Hot Encoding, который создаст новые столбцы, указывающие наличие или отсутствие каждого значения в исходных данных.
Одна из проблем One-Hot Encoding связана с переменными с множеством уникальных категорий, поскольку она создает новый столбец для каждой уникальной категории. Таким образом, этот проект будет включать только категориальные переменные с не более чем 15 уникальными значениями.
4.3. Создать конвейер
Конвейеры - отличный способ сделать моделирование и предварительную обработку данных более организованными и понятными. Создавая конвейер, мы обработаем пропущенные значения и предварительную обработку, описанную в предыдущих двух шагах.
Как определено выше, числовые пропущенные записи будут заполнены средним значением, а пропущенные категориальные переменные будут заполнены «NA». Кроме того, категориальные столбцы также будут предварительно обработаны с помощью One-Hot Encoding.
Мы используем SimpleImputer для заполнения отсутствующих значений, а ColumnTransformer поможет нам применить числовые и категориальные препроцессоры в одном преобразователе.
5. Определите модель.
Теперь, когда мы объединили наши препроцессоры в конвейер, мы можем определить модель. В этой статье мы работаем с XGBoost, одним из самых эффективных алгоритмов машинного обучения, который показывает отличные результаты во многих соревнованиях Kaggle. В качестве показателя оценки мы используем среднюю абсолютную ошибку.

6. Перекрестная проверка
Использование перекрестной проверки может дать лучшие результаты. Вместо того, чтобы просто использовать наборы для обучения и тестирования, перекрестная проверка будет запускать нашу модель на разных подмножествах данных, чтобы получить несколько показателей качества модели.
Мы будем использовать кросс-валидатор KFold в его настройках по умолчанию, чтобы разделить данные обучения на 5 частей. Затем каждая свертка будет использоваться один раз в качестве проверки, а оставшиеся свертки сформируют обучающий набор. После этого cross-validate оценит метрики. В этом случае мы используем среднюю абсолютную ошибку.

С помощью перекрестной проверки мы могли бы улучшить наш результат, уменьшив ошибку. На следующем этапе мы постараемся улучшить модель, оптимизируя некоторые гиперпараметры.
7. Настройка гиперпараметров
XGBoost в настройках по умолчанию обычно дает отличные результаты, но он также имеет множество гиперпараметров, которые можно оптимизировать для улучшения модели. Здесь мы будем использовать метод под названием GridSearchCV, который будет искать по указанным значениям параметров и возвращать лучшие из них. И снова мы будем использовать конвейер и кросс-валидатор KFold, определенные выше.
GridSearchCV выполнит исчерпывающий поиск по параметрам, что может потребовать больших вычислительных мощностей и времени для завершения. Мы можем немного ускорить процесс, установив для параметра n_jobs значение -1, что означает, что машина будет использовать все процессоры в задаче.
Оптимальные значения параметров составили:
- n_estimators: 400
- max_depth: 3
- min_child_weight: 0,0001
- скорость_обучения: 0,1
8. Сгенерируйте тестовые прогнозы.
После настройки некоторых гиперпараметров пора снова пройти процесс моделирования, чтобы сделать прогнозы на тестовом наборе. Мы определим нашу окончательную модель на основе оптимизированных значений, предоставленных GridSearchCV.
9. Отправьте результаты
Мы почти там! Моделирование машинного обучения выполнено, но нам все еще нужно отправить наши результаты, чтобы записать нашу оценку.
Этот шаг довольно прост. Нам нужно создать .csv файл, содержащий прогнозы. Этот файл состоит из DataFrame с двумя столбцами. В этом случае один столбец для «Id», а другой - для тестовых прогнозов целевой функции.
10. Присоединяйтесь к конкурсу
Наконец, нам просто нужно присоединиться к конкурсу. Следуйте инструкциям ниже, следуя инструкциям Kaggle.
- Начните с перехода на страницу конкурса и нажмите Присоединиться к конкурсу.
- В записной книжке Kaggle нажмите синюю кнопку «Сохранить версию» в правом верхнем углу окна.
- Появится всплывающее окно. Выберите вариант Сохранить и запустить все, а затем нажмите синюю кнопку «Сохранить».
- Во время работы ноутбука в левом нижнем углу появляется новое всплывающее окно. Когда он перестанет работать, нажмите на число справа от кнопки Сохранить версию. Вы должны нажать на многоточие (…) справа от последней версии записной книжки и выбрать Открыть в средстве просмотра. Это приведет вас в режим просмотра той же страницы.
- Теперь нажмите вкладку Вывод в правой части экрана. Затем нажмите синюю кнопку Отправить, чтобы отправить результаты в таблицу лидеров.
После отправки вы можете проверить свой счет и позицию в таблице лидеров.

Заключение
Эта статья была поучительной и помогала новичкам в области науки о данных структурировать свои первые проекты на Kaggle в простые шаги. Благодаря этому прямому подходу я получил 14 778,87, что поместило этот проект в 7% лучших.
После дальнейшего изучения вы можете вернуться к прошлым проектам и попытаться повысить их эффективность, используя новые приобретенные навыки. Чтобы улучшить этот проект, мы могли бы более тщательно изучить и обработать выбросы, применить другой подход к отсутствующим значениям или, например, выполнить некоторую разработку функций.
Мой совет новичкам - сначала не усложняйте задачу. Вместо того, чтобы стремиться к «идеальной» модели, сосредоточьтесь на завершении проекта, правильном применении своих навыков и извлечении уроков из своих ошибок, понимая, где и почему вы все испортили. Сообщество специалистов по анализу данных постоянно расширяется, и на таких сайтах, как Kaggle или Stack Overflow, появляется множество более опытных людей, готовых помочь. Постарайтесь также извлечь уроки из их прошлых ошибок! С практикой и дисциплиной это лишь вопрос времени, чтобы начать создавать более сложные проекты и подняться в рейтинге соревнований Kaggle.