Skip to content
This repository was archived by the owner on Jan 2, 2023. It is now read-only.

j2cry/mega_telecom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание кейса

Пришел запрос из отдела продаж и маркетинга:
Необходимо разработать алгоритм определения вероятности подключения услуги абонентом для снижения расходов на взаимодействие с нецелевыми пользователями.

Данные

В качестве исходных данных доступна информация об отклике абонентов на предложение подключения услуг. Действие абонента отражено в бинарном виде (подключил/не подключил). Отдельным набором предоставлены нормализованные анонимизированные признаки, характеризующие профиль потребления абонента.

Зачача и метрики

  1. Предсказание вероятности подключения услуги.
  2. Формирование индивидуального предложения клиенту

Скоринг осуществляется с помощью невзвешенной метрики f1.

Описание модели

Параметры окружения

jupyter python version: 3.9.13
airflow version: 2.3.1 on python 3.9.13
необходимый кастомный пакет: package/dist/telecom_transformers-1.0.0-py3-none-any.whl

Данные

data_train.csv - набор тренировочных данных
data_test.csv - набор тестовых данных
features.csv - деперсонализированные профили пользователей

Анализ и визуализация

Здесь можно ознакомиться с анализом структуры спроса и предложения. Этот же дашборд лежит в figures/megafon.twbx. Программная часть анализа находися в ноутбуке eda.ipynb.

Описание ноутбуков

research/eda.ipynb - разведочный анализ данных (программная часть)
research/baseline.ipynb - базовое решение, использующее все тренировочные данные и все фичи. Сопоставление фичей по ближайшей дате
research/research.ipynb - исследование влияния PCA компрессии фичей
research/comparison.ipynb - исследование без распределенных вычислений, использующее тренировочные данные после 19 ноября и уже сжатые фичи. Изучение вариантов сопоставления фичей, сравнение моделей, GridSearch, random state stability
research/features.ipynb - изучение набора пользовательских профилей
research/FE.ipynb - разработка и проверка фичей
modeling/check.ipynb - проверка работоспособности сохраненной модели
modeling/threshold.ipynb - определение оптимального порога вероятности для построения рекомендаций

drafts/pyspark_pca.ipynb - черновик для сжатия фичей с помощью PySpark. Во всей работе используются фичи, сжатые именно этим способом

Структура модели

package/ - пакет с трансформерами для модели modeling/model.zip - архивированная модель, включающая весь цикл подготовки данных
modeling/predict.py - CLI приложение для получения прогноза
modeling/predict_data_test.csv - файл с прогнозами модели

data/parameters.conf - глобальная конфигурация модели (см.ниже)
data/fit_params.json - гиперпараметры, используемые для итогового обучения (обновляются при автоматическом подборе)
data/grid_params.json - сетка гиперпараметров для автоматического подбора

Параметры глобальной конфигурации (parameters.conf)

MODEL section
drop_features - пользовательские признаки, отбрасываемые до обработки
bound_date - дата разделения датасета; данные до этой даты не будут использоваться в обучении
n_folds - количество разбиений данных при кросс-валидации

FIT_PARAMS section
adaptive_class_balance - принудительно пересчитывать баланс классов, даже если он жестко указан в параметрах обучения
update_on_cv - обновить файл параметров обучения по итогам кросс-валидации

FIXED section
зафиксированные параметры модели (см. документацию используемого классификатора)

airflow

Сначала нужно запустить сам airflow. Сделать это можно по официальной инструкции.

При запуске в docker необходимо дополнительно расшарить папку для передачи данных в контейнер. Также, необходимо добавить default filesystem connection, установить java и расширение apache-airflow-providers-apache-spark.

Мой вариант сборки airflow здесь. Перед запуском необходимо подмонтировать нужные папки проекта, иначе airflow не увидит файлов и придется их копировать. Скрипт монтирования/размонтирования лежит в репозитории по ссылке выше.

Обратите внимание, что

  1. Содержимое папки dags должно быть доступно внутри airflow контейнера как минимум для чтения
  2. Путь к файлу dags/jobs/common.py должен быть именно таким, иначе airflow не сможет импортировать этот модуль внутри задач
  3. Файлы конфигурации модели в папке data должны быть доступны внутри airflow контейнера для чтения и записи
  4. Метрики и параметры модели дополнительно фиксируются в логах задач airflow

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors