Skip to content

leostuchchi/binary_classification_model

Repository files navigation

binary_classification_model

Описание проекта - Анализ сайта «СберАвтоподписка»

example data on google_drive https://drive.google.com/file/d/1CynwssmDfnzzW4KqmM4GAIuNtYAv2NcQ/view?usp=drive_link

full project on google_drive https://drive.google.com/drive/folders/1YHltzTxAw6lSGW8B0NtAvy9NuJiXsKYu?usp=drive_link

Цель проекта:

  1. Научиться предсказывать совершение целевого действия (ориентировочное значение ROC-AUC ~ 0.65) — факт совершения пользователем целевого действия.

  2. Упаковать получившуюся модель в сервис, который будет брать на вход все атрибуты, типа utm_, device_, geo_*, и отдавать на выход 0/1 (1 — если пользователь совершит любое целевое действие).

Приложения к заданию:

  1. датасет GA Sessions
  2. датасет GA Hits

План работы:

  1. Исследование датасета GA Sessions на предмет: типов данных, пропущенных значений, взаимосвязей между переменными

  2. Исследование датасета GA Hits на предмет: типов данных, пропущенных значений, взаимосвязей между переменными

Пункты: 3. 4. 5. обрабатывались в PyCharm код написан для ознакомления

  1. Извлечение целевой переменной - event_value из GA Hits

  2. Объединение датасета GA Session и целевой переменной

  3. Удаление дубликатов

  4. Удаление неинформативных признаков, с пропусками в значениях более 45%

  5. Заполнение пропусков в категориальных переменных введением дополнительного значения, ввиду предположения, что пропуски в данных колонках обусловлены отсутствием события

  6. Изменение значений в скобках (not_set) и (none) в признаке utm_medium

  7. Удаление выбросов в числовых переменных, заменой значений выбросов, значением следующим за граничным значением квантиля, в данном случае==2

  8. Визуализация данных. Создание дополнительного датафрейма с преобразованием данных по типу '.astype('category').cat.codes', для предварительного просмотра корреляций признаков к целевой переменной

  9. Преобразование значений в категориальных признаках. Взяты первые 2-5 букв значения в признаках: utm_source, utm_campaign, utm_adcontent, с сохранением количества уникальных значений

  10. Объединение колонок содержащих дату и время и приведение к типу Datetime

  11. Преобразование Datetime - взят: месяц, день недели, час, события

  12. Приведение значений признака device_screen_resolution к типу float

  13. Приведение geo_city, geo_country к координатам, ОТ ИДЕИ ОТКАЗАЛСЯ

  14. Изменение признаков geo_city, geo_country. Сокращено количество значений и приведено к типу int. Создан новый признак geo, значения в котором: 0 - все страны кроме России, 1 - города России, 2 - Санкт-Петербург, 3 - Москва.

  15. Создание дополнительного признака utm_path из признаков: w_source, w_campaign, w_adcontent

  16. Создание дополнительного признака utm_organic класифицирующего тип трафика (платный или бесплатный)

  17. Удаление колонок 'session_id', 'client_id' (возможно колоку 'session_id' оставим, посмотрим на поведение модели)

  18. Создание дополнительного признака count для сохранения количества повторений данных при удалении дубликатов в последствии отказался

  19. Удаление дубликатов

  20. Преобразование данных, в отдельном датафрейме, для просмотра корреляций признаков к целевой переменной

  21. Просмотр корреляций и удаление слабокоррелируемых признаков. С корреляцией -0.01 - 0.01. От реализации ОТКАЗАЛСЯ

  22. Проведение экспериментов по балансировке классов. Использован метод Undersampling. Впоследствии от реализации отказался

! 25. Дальнейшая работа над проектом производилась в PyCharm !

  1. Преобразование числовых переменных в StandardScaler

  2. Преобразование категориальных переменных в OneHotEncoder

  3. Подготовка модуля в PyCharm - take_data для автоматического: получения целевой переменной, объединения датасетов и удаления дубликатов

  4. Подготовка pipeline в PyCharm

  5. Обучение модели

  6. Подготовка модуля для обращения к модели в Fastapi

  7. Подготовка модуля для AirFlow

Особенности проекта:

  1. На этапе исследования данных стало очевидно следующее:

данные слабокоррелированы к целевой переменной

в данных дисбаланс классов

  1. На этапе Feature engineering были созданы следующие фичи:

date_time - дата и время события

month_day_your - месяц, день недели и час события

geo - численная переменная указывающая на локацию (от перевода к координатам отказался ввиду значительного времени обработки)

utm_organic - переменная указывающая на тип трафика

utm_path - составная переменная состоящая из нескольких признаков типа utm

  1. Проводились эксперименты по балансировке классов методами Взвешивания классов и Undersampling. Впоследствии от идеи балансировки классов отказался. Поскольку результаты обучения моделей на подготовленных данных были стабильны и TruePositiveRate была достаточного уровня. Что позволило сохранить естественные данные и не допустить их искусственности.

  2. По итогам этапа Evaluation, для обучения модели были оставлены следующие признаки:

visit_date

visit_number

utm_path

utm_organic

device_screen_resolution

geo

count_duplicates

event_value - целевая переменная

  1. Вывод TruePositiveRate и ConfusionMatrix осуществляется в фукции true_positive_rate модуля predict

Структура проекта:

sber_auto/data: папка с данными

sber_auto/data: исходные данные

sber_auto/data/to_pipeline: данные для обучения модели

sber_auto/data/test: папка для json файлов для предсказаний

sber_auto/data/predictions: папка с файлами предсказанных моделью запросов

sber_auto/modules: модули с кодом PyCarm для работы проекта:

take_data - модуль подготовки датасета из исходных данных

pipeline - модуль конвейера для обработки данных и обучения модели

predict_api - модуль для работы модели по api

predict - модуль для работы серверного сервиса

result_out - модуль вывода предсказания при работе серверного сервиса (файл с предсказаниями записывается в корневую дирректорию компьютера)

sber_auto/dags: модуль для работы с AirFlow (необходимо скопировать в scheduler)

sber_auto/jupyter: jupyter_notebook с исследованиями и подготовкой данных

sber_auto/models: обученная модель проекта

Уточнения по проекту:

ПРОЕКТ ПОСТРОЕН ПО ПРИНЦИПУ: на каждом этапе, при получении новых данных, при обучении новой модели и получении новых предсказаний. Предыдущие данные УДАЛЯЮТСЯ! за исключением исходных данных.

Вывод файла предсказания из модуля result_out осуществляется в корневую директорию

Для корректной работы проекта необходимо папку с проектом поместить в корневую директорию, поскольку все пути проекта прописаны от корневой директории, либо изменить пути.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published