Skip to content

AlekseiBogachev/Titanic-Machine-Learning-from-Disaster

Repository files navigation

Titanic-Machine-Learning-from-Disaster

Статус проекта: планируются доработки

Титаник

Краткое описание

Решение для Titanic ML competition: анализ данных, модель, предсказания, результат на Kaggle.

Цель - сделать модель, которая, получив данные о пассажире Титаника, предскажет выжил пассажир в кораблекрушении или нет.

Решение в тетрадке.

Приёмы, которые демонстрирует проект

  1. Исследовательский анализ данных

  2. Тестирование статистических гипотез (гипотеза о равенстве средних - с помощью scipy.stats.ttest_ind)

  3. Заполнение пропусков

  4. Разработка новых признаков

  5. Манипуляции с данными средствами pandas

  6. Использование конвейеров (Pipeline) из sklearn

  7. Оценка информативности признаков

  8. Работа с моделями градиентных бустингов: XGBoost

  9. Оценка моделей

  10. Автоматизация оценки производительности моделей и вывода результатов (код собран в функции, устранены повторения кода)

  11. Настройка их гиперпараметров с Optuna

  12. Распараллеливание вычислений с помощью joblib

  13. Запуск проекта совместно с базой данных с помощью Docker Compose

  14. Оформление графиков с seaborn и matplotlib

    • График из исследовательского анализа:
    График из исследовательского анализа
    • Графики из раздела с про разработку признаков:
    Матрица корреляции Взаимная информация
    • Кривые ROC выбранных моделей после настройки гиперпараметров:
    ROC curve
  15. Логирование с помощью чат-бота в Телеграм.

логирование

Результат на Kaggle

К сожалению, результат не дотянул до медианного.
Результат на Kaggle

Во время работы над проектром было перепробовано несколько разных моделей, которые показывали на Kaggle целевую метрику в районе 0.77 - 0.78. Модель выбранная для оформления на GitHub неожиданно показала результат ниже. В дальнейшем она будет улучшена.

Возможные способы улучшения результата:

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

Запуск проекта

В проекте реализована оптимизация гиперпараметров с Optuna, распаралленная на несколько потоков ("воркеров"), при этом, чтобы сократить количество устанавливаемых библиотект, optuna-distributed не использовалась. Это решение накладывает ограничения на запуск: необходимо сохранять промежуточные результаты оптимизации в базе данных.

К Optuna для сохранения промежуточных результатов подключается база данных PostgreSQL в строке

optuna_storage = optuna.storages.RDBStorage(
    url='postgresql+psycopg2://optuna:password@localhost/optuna'
)

Пользователь должен самостоятельно установить и настроить базу данных и, если необходимо, изменть настройки подключения при инициализации RDBStorage. Также можно подключить к Optuna любое другое хранилище, способное работать с многопоточной оптимизацией (SQLite - не очень хорошее решение), либо убрать распараллеливание из проекта и, при необходимости, хранилище с промежуточными результатами оптимизации.

Для запуска проекта в установленном дистрибутиве Anaconda необходимо:

  • создать окружение из файла requirements.yml с помощью команды conda env create -f requirements.yml (предполагается, что коммандная строка запущена из каталога с requirements.yml), созданное окружение будет называться titanic;
  • активировать окружение с помощью команды conda activate titanic.
    После этого с проектом можно будет работать, например с помощью jupyter notebook;
  • в командной строек появится сылка на сервер jupyter, необходимо прейти по ней, чтобы попасть на сервер jupyter.

Логирование

В проекте сделано автоматическое логирование в телеграм с notifiers. Параметры notifier.notify, в частности, токен и ID чата должны быть размещены в папке с тетрадкой в файле notifier_params.pkl. Естественно, этот файл отсутствует в репозитории, поэтому для настройки логирования и запуска тетрадки в исходном виде необходимо создать файл notifier_params.pkl, содержащий словарь с параметрами для notifiers. Ниже пример словаря:

notifier_params = {
    'notifier': 'telegram',
    'token': '**********************************************',
    'chat_id': 0000000000
}

Также можно просто удалить все следы логирования и библиотеки notifiers.

Структура репозитория

  • datasets - набор данных и таблица с результатами, взятые на Kaggle
  • img - иллюстрации для README.md
  • sources
    • Titanic-Machine-Learning-from-Disaster.ipynb - Тетрадка с решением задачи
    • Titanic.jpg и scores_on_kaggle.PNG - иллюстрации для тетрадки
    • submission.csv - предсказания, отправленные на Kaggle
  • requirements.yml - окружение для запуска проекта
  • LICENSE - MIT License
  • README.md - файл с описанием проекта

About

Titanic dataset from Kaggle

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published