Статус проекта: планируются доработки
Решение для Titanic ML competition: анализ данных, модель, предсказания, результат на Kaggle.
Цель - сделать модель, которая, получив данные о пассажире Титаника, предскажет выжил пассажир в кораблекрушении или нет.
Решение в тетрадке.
-
Исследовательский анализ данных
-
Тестирование статистических гипотез (гипотеза о равенстве средних - с помощью scipy.stats.ttest_ind)
-
Заполнение пропусков
-
Разработка новых признаков
-
Манипуляции с данными средствами pandas
-
Использование конвейеров (Pipeline) из sklearn
-
Оценка информативности признаков
-
Работа с моделями градиентных бустингов: XGBoost
-
Оценка моделей
-
Автоматизация оценки производительности моделей и вывода результатов (код собран в функции, устранены повторения кода)
-
Настройка их гиперпараметров с Optuna
-
Распараллеливание вычислений с помощью joblib
-
Запуск проекта совместно с базой данных с помощью Docker Compose
-
Оформление графиков с seaborn и matplotlib
- График из исследовательского анализа:
- Графики из раздела с про разработку признаков:
- Кривые ROC выбранных моделей после настройки гиперпараметров:
-
Логирование с помощью чат-бота в Телеграм.
К сожалению, результат не дотянул до медианного.
Во время работы над проектром было перепробовано несколько разных моделей, которые показывали на 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 - файл с описанием проекта