# Как решать задачи Kaggle: пошаговый гайд от freeCodeCamp.org

Источник: https://www.youtube.com/watch?v=BV03sQ0srcU
Канал: freeCodeCamp.org
Опубликовано: 30.09.2024

---

В мире анализа данных Kaggle считается эталоном для проверки навыков машинного обучения. Это платформа, где теоретические знания сталкиваются с реальными сырыми данными. Рохан Кумар, автор канала SMDS, в рамках курса на freeCodeCamp.org представил подробное руководство по решению трех классических задач Kaggle на Python, пройдя путь от первичного анализа данных (EDA) до отправки финального файла на сервер.

## 🏠 Прогнозирование цен на жилье: продвинутая регрессия
[[JUMP:01:03]]

Первый проект посвящен задаче регрессии — предсказанию стоимости недвижимости (Sale Price) на основе 79 объяснительных переменных [01:28]. Кумар подчеркивает, что секрет успеха в таких соревнованиях кроется не столько в выборе алгоритма, сколько в тщательном проектировании признаков (Feature Engineering).

### Стратегия объединения данных
Одной из ключевых рекомендаций автора является объединение тренировочного (train) и тестового (test) наборов данных в единый домен перед началом обработки [04:36]. Это необходимо для того, чтобы манипуляции с данными (например, заполнение пропусков или кодирование) применялись единообразно. 

*   **Инструмент:** функция `pd.concat` со значением `axis=0` для вертикального стекинга [05:15].
*   **Совет:** чтобы не потерять границы наборов, стоит добавить временный столбец-метку или использовать длину исходного тренировочного датасета для последующего разделения [04:49].

### Обработка пропущенных значений (NaN)
Кумар демонстрирует визуальный подход к очистке данных:

1.  **Тепловая карта (Heatmap):** использование библиотеки Seaborn для выявления колонок с критическим количеством пропусков [07:38]. 
2.  **Удаление:** колонки, в которых более 1100 значений отсутствуют (например, информация о бассейнах или аллеях), удаляются, так как они не несут статистической значимости [09:14].
3.  **Заполнение категорий:** пропуски в строковых данных заполняются значением 'None', которое в дальнейшем становится отдельной категорией при One-Hot Encoding [10:32].
4.  **Числовые данные:** для заполнения используются мода (наиболее частое значение) или среднее арифметическое, в зависимости от контекста переменной [14:57].

### Выбор модели и обучение
Для решения задачи были протестированы три алгоритма:

*   **Linear Regression:** базовая модель, показавшая высокую среднеквадратичную ошибку (MSE) [21:29].
*   **Random Forest Regressor:** ансамблевый метод, значительно улучшивший результат [22:50].
*   **XGBoost (XGBRegressor):** фаворит автора. При использовании гиперпараметров `n_estimators` и `learning_rate` эта модель показала наименьшую ошибку [24:23].

При итоговой отправке файла (`output.csv`) важно отключать индекс (`index=False`), чтобы формат соответствовал требованиям Kaggle [25:55]. Результат автора на лидерборде составил 1458-е место, что является отличным стартом для базовой модели [26:50].

## 🛸 Spaceship Titanic: задача классификации
[[JUMP:27:31]]

Вторая задача переносит нас в 2912 год. Космический корабль «Титаник» столкнулся с пространственной аномалией, и часть пассажиров была «транспортирована» в другое измерение. Задача: предсказать, кто именно исчез.

### Алгоритм KNN Imputer
В отличие от первого проекта, где пропуски заполнялись вручную, здесь Кумар применяет более продвинутый инструмент — **KNN Imputer** [32:05]. 

*   **Принцип работы:** алгоритм заполняет отсутствующее значение, глядя на $k$ ближайших соседей (по умолчанию 5), основываясь на схожести других признаков человека [39:14].
*   **Ограничение:** KNN Imputer работает только с числовыми данными, поэтому категориальные признаки (планета, пункт назначения) необходимо предварительно преобразовать [37:54].

### Инженерный подход к признакам
Автор разделяет колонку `Cabin` (формат `Deck/Number/Side`) на три независимых столбца с помощью регулярных выражений [32:30]. Далее проводится анализ корреляции:

*   **Высокая корреляция:** выяснилось, что нахождение в состоянии криосна (`CryoSleep`) дает 32% вероятности успешной «транспортировки» [48:17].
*   **Отрицательная корреляция:** затраты на обслуживание номеров (`RoomService`) указывают на то, что пассажир, скорее всего, остался в нашем измерении [48:44].

Для обучения использовался ансамбль из пяти моделей, включая **LightGBM**, который автор выделил как наиболее эффективный для данной задачи, достигнув точности около 80% [55:46].

## 🚢 Классический Titanic: основы выживания
[[JUMP:58:35]]

Финальная часть курса посвящена самому известному соревнованию для новичков — гибели оригинального «Титаника».

### Очистка «шумных» данных
Рохан Кумар утверждает, что такие столбцы, как `Name` (имя) и `Ticket` (номер билета), чаще всего бесполезны для модели, так как содержат слишком много уникальных значений и вносят «шум» [1:00:21]. Однако он предлагает извлечь пользу из колонки `Cabin`, разделив её на букву палубы и номер каюты [1:08:56].

### Создание синтетических признаков
Чтобы помочь модели, автор создает новые переменные на стыке существующих:

*   **Отношение стоимости к классу:** деление стоимости билета (`Fare`) на номер класса (`Pclass`) [1:27:21].
*   **Гендерный фактор:** Кумар отмечает, что женщины имели колоссальное преимущество при спасении (корреляция 54%), и учитывает это в логике модели [1:28:14].

### Спор о 100% точности
Обсуждая лидерборд Titanic, Кумар выражает скепсис по поводу участников с точностью 100% [1:33:31]. По его мнению, достичь идеального результата в этой задаче без «подглядывания» в реальные списки погибших невозможно, так как в данных всегда присутствует элемент случайности. Реалистичным хорошим результатом считается точность в диапазоне 79–82% [1:33:45].