Началось всё с того, что я открыл для себя Kaggle. В частности, я принимаю участие в публичном соревновании Spaceship Titanic. Это более "молодая" версия классического Титаника. На момент написания этой статьи в соревновании принимают участие 2737 человек (команд). Код, продемонстированный в этой статье, позволил мне занять 697-е место в публичном рейтинге со второго сабмита. Я знаю, что он не идеален и работаю над этим. Тренировочный датасет доступен по ссылке. Для того, чтобы его скачать, нужно стать участником соревнования. Кроме тренировочного датасета доступен тестовый датасет. По понятным причинам в нём отсутствует колонка с таргетом. Также присутствует пример выгрузки для сабмита (sample submission). Для анализа данных я использую Pandas Profiling и SweetWiz. Это очень мощные библиотеки, экономят массу времени.  Пример формирования отчёта с помощью Pandas Profiling Пример формирования отчёта с помощью SweetWiz Тренировочные данные сбалансированы по таргету, без дубликатов, присутствует определённое количество нулевых значений (я их не удаляю), также наблюдается корелляция по числовым признакам. Поле с номером каюты само по себе никакой полезной нагрузки не несёт. Но если из него выделить номер палубы и номер стороны, то получаю два дополнительных синтетических признака для модели. После этого удаляю из тренировочного датасета все поля, не являющиеся полезными для обучения модели и разделяю числовые и категориальные признаки   Pipelines - это один из самых мощных современных инструментов, используемых в проектах машинного обучения. Они значительно облегчают процесс подготовки данных и экономят кучу времени. Да, нужно приложить определённые усилия для того, чтобы понять, как они настраиваются и работают, изучить документацию. Но потраченное время непременно принесёт профит. Кроме того, в сети есть очень много полезных статей (кукбуков) по настройке пайплайнов. Мне, например, очень сильно помогла вот эта статья.  Я создал отдельно Pipeline для числовых признаков и Pipeline для категориальных признаков Для числовых признаков использовал SimpleImputer, заполняющий пропуски медианными значениями, для категориальных признаков пропуски заполняются наиболее часто втречающимися значениями. Кроме того, применил StandardScaler и OneHotEncoder. Кстати, в официальной документации scikit-learn есть прекрасная статья, в которой предоставлен сравнительный анализ многих скейлеров.  На основе полученных пайплайнов собираю ColumnTransformer. Optuna - это очень мощный фреймворк, позволяющий автоматизировать подбор гиперпараметров для модели в процессе машинного обучения. Для того, чтобы нормально настроить и начать использовать в проекте, нужно потратить определённое время. Благо, на официальном сайте разработчиков есть обширная документация и видео, облегчающие процесс обучения. Ниже код, который я использую в своём проекте. В переменную estimator можно сохранять любую ML модель. Я экспериментировал с DecisionTreeClassifier,  RandomForestClassifier, LogisticRegression, но более-менее существенных результатов в соревнованиях смог добиться после того, как начал использовать модели градиентного бустинга. Разобраться в материале мне очень помогла вот эта статья. Я экспериментировал с LGBMClassifier, XGBClassifier, CatBoostClassifier. В прилагаемом примере использован CatBoostClassifier. Код, который у меня получился на текущий момент, доступен на GitHub. Он не идеален. Я продолжаю его совершенствовать (также как и свои навыки). Например,  он довольно медленный. Процесс перебора может длиться от 2 до 5 часов; хочу ещё отработать несколько идей, связанных с генерацией синтетических признаков. Руководитель команды разработчиков