Egor-Krivov / dvc_tutorial

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tutorial: Predict Mobile Device change

Прогноз смены мобильного девайса в течение месяца

Описание задачи

Задача:

  • бинарная классификация
  • таргет: событие смены девайса в течение месяца
  • целевые метрики - Lift, Precision@K, Recall@K

Данные:

Get dataset

  • Download data from storage
  • Put data to data/raw

Таргет: target.feather

— user_id - ID пользователя
— month - округление date до последнего дня месяца
— target - 1/0 (1 - пользователь сменил девайс, 0 - не было изменений)
- отчетные даты (month): '2020-04-30', '2020-05-31', '2020-06-30', '2020-07-31', '2020-08-31' 

Таблица признаков: user_features.feather

— user_id - ID пользователя
— month - месяц, за который собраны фичи
— feature_N - конкретная фича (всего 50 фичей, есть категориальные)
- отчетные даты (month): '2020-04-30', '2020-05-31', '2020-06-30', '2020-07-31', '2020-08-31' 

Данные для скоринга

Используются для симуляции использования модели в Production и мониторинга (не используем для обучения)

- scoring_user_features.feather - таблица признаков для скоринга
- scoring_target.feather - таблица целевых событий 
- отчетные даты (month): '2020-09-30'

Валидация:

  • модель должна показывать устойчивость на последних 4 месяцах
  • валидация с учетом временной структуры, т.е. 4 фолда (по месяцам)
  • выбираем лучшую модель по усредненным метрикам по фолдам - mean, std, min, max

Целевые метрики

Для текущей задачи предполагается, что вся выборка (база клиентов) может быть большой, сотни тысяч или миллионы. Поэтому, с точки зрения бизнеса целесообразно выбрать top-K клиентов с максимальной вероятностью целевого события. Соответственно, нам интересно, чтобы модель максимально хорошо работала для такой выборки из top-K клиентов.

Для расчета метрик для top-K (или @k) полученные прогнозы сначала сортируют по predict_proba (по убыванию) и потом считают нужную метрику для этих @k объектов

  • Precision@K
  • Recall@K
  • Lift@K - показывает насколько модель лучше работает по сравнению с random выборкой

Для тьюториала значение К = 5 % от базы клиентов

How to Run

1. Fork / Clone repo

  • fork to your personal repo
  • clone to you local machine

2. Use a virtual environment

Сreate and activate virtual environment

python3 -m venv venv
echo "export PYTHONPATH=$PWD" >> venv/bin/activate
source venv/bin/activate

Install dependencies

pip install -r venv_requirements.txt

Add virtual environment to Jupyter Notebook

python -m ipykernel install --user --name=venv

Run Jupyter Notebook

jupyter notebook

To deactivate virtual environment:

deactivate 

3. Or run with Docker

Create config/.env

GIT_CONFIG_USER_NAME=<git user>
GIT_CONFIG_EMAIL=<git email>

example:

GIT_CONFIG_USER_NAME=mnrozhkov
GIT_CONFIG_EMAIL=mnrozhkov@gmail.com

Build

ln -sf config/.env 
docker-compose build

or

docker-compose  --env-file ./config/.env build

Run

docker-compose up

Open tutorial notebook:

4. Run pipelines

  • все команды запускаются в терминале, из корня репозитория проекта

To run data_load pipeline:

python src/pipelines/data_laod.py --config=params.yaml

To run featurize pipeline:

python src/pipelines/featurize.py --config=params.yaml

To run train pipeline:

python src/pipelines/train.py --config=params.yaml

About


Languages

Language:Python 94.9%Language:Dockerfile 5.1%