https://github.com/mariiasam/service_churn
https://github.com/mariiasam/service_churn
gridsearchcv joblib numpy pandas python random-forest-classifier scikit-learn streamlit
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/mariiasam/service_churn
- Owner: MariiaSam
- Created: 2024-12-20T09:22:37.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-01-21T12:59:13.000Z (9 months ago)
- Last Synced: 2025-01-21T13:41:20.194Z (9 months ago)
- Topics: gridsearchcv, joblib, numpy, pandas, python, random-forest-classifier, scikit-learn, streamlit
- Language: Jupyter Notebook
- Homepage: https://servicechurn.streamlit.app/
- Size: 46.7 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Модель прогнозування відтоку клієнтів для телекомунікаційної компанії
Цей проєкт розроблено для передбачення ймовірності відтоку клієнтів у телекомунікаційній компанії. Інтерактивний інтерфейс створений на основі **Streamlit**([https://servicechurn.streamlit.app/]), що дозволяє легко взаємодіяти з моделлю та аналізувати результати.
## Опис
**Детальний опис проєкту:**
- використання реальних даних для аналізу поведінки клієнтів;
- визначення ключових факторів, які впливають на ймовірність відтоку;
- побудова моделі машинного навчання для точного прогнозування;
- інтерактивний інтерфейс для завантаження нових даних та аналізу.**Вимоги до проєкту:**
- опис аналізу та обробки даних;
- деталі моделі і обрані параметри;
- аналіз результатів, метрик;
- опис інтеграції та виведення результатів;
- процес контейнеризації та інструкції користування.## Технології
**Проєкт реалізовано з використанням таких технологій:**
- **Python**: основна мова програмування;
- **Docker Compose**: для спрощення процесу розгортання та управління проєктом у середовищі Docker.## Бібліотеки
- **Pandas**: для обробки даних;
- **Numpy**: для числових обчислень;
- **Scikit-learn**: для побудови та оцінки моделей машинного навчання;
- **Matplotlib** та **Seaborn**: для візуалізації даних;
- **Streamlit**: для створення інтерактивного інтерфейсу;
- **Joblib**: для ефективного серіалізування (збереження) та завантаження об'єктів Python.## Dataset
**Для цього проєкту використовувався набір даних із такими характеристиками:**
- **https://www.kaggle.com/datasets/mehmetsabrikunt/internet-service-churn;**
- формат: `.csv`;
- містить такі ключові стовпці: `churn`, `subscription_age`, `bill_avg`, `download_avg`, тощо.Датасет складається з 72275 рядків та 11 стовпців.
**id**: унікальний ідентифікатор абонента;
**is_tv_subscriber**: чи є у клієнта є підписка на телебачення?;
**is_movie_package_subscriber**: чи є підписка на кінопакети?;
**subscription_age**: скільки років клієнт користується нашими послугами?;
**bill_avg**: середній рахунок за останні 3 місяці;
**reamining_contract**: скільки років залишилося до закінчення контракту користувача.
Якщо **_null_** - клієнт не мав контракту. Клієнт, який має контрактний час, повинен користуватися послугою до кінця контракту. Якщо він відмовляється від послуги до закінчення контракту, він сплачує штрафний тариф. Є два способи, якими клієнт може користуватися послугами. Один - за допомогою контракту з обмеженим терміном дії, який коштує дешевше, а інший - за допомогою звичайної щомісячної підписки, яка, очевидно, коштує дорожче. Отже, навіть якщо людина не має контракту, вона все одно є користувачем, який сплачує щомісячні платежі;**service_failure_coun**: кількість звернень клієнтів до колл-центру через збій обслуговування за останні 3 місяці;
**download_avg**: використання Інтернету за останні 3 місяці (ГБ);
**upload_avg**: середнє завантаження за останні 3 місяці (ГБ);
**download_over_limit**: більшість клієнтів мають обмеження на завантаження. Якщо вони досягають цього ліміту, вони повинні заплатити за це. Ця колонка містить «перевищення ліміту» за останні 9 місяців;
**_churn: відтік клієнта. Це цільова колонка, якщо 1 - клієнт скасував свою послугу_**.
## Модель
- В проекті було випробувано такі моделі як: LogisticRegression, RandomForestClassifier та SVM.
- Для підбору найкращих гіперпараметрів використовувався: GridSearchCV.
- Найкращою моделлю виявилась модель RandomForestClassifier з результатом:
- precision для 0 - 0.92, для 1 - 0.96
- recall для 0 - 0.95, для 1 - 0.94
- f1-score для 0 - 0.93, для 1 - 0.95
- accuracy 0.94
- Найкращі параметри які підібрав GridSearchCV для RandomForestClassifier:
- 'class_weight': 'balanced'
- 'max_depth': None
- 'max_features': 'log2'
- 'min_samples_leaf': 1
- 'min_samples_split': 5
- 'n_estimators': 80## Запуск локально
1. **Клонування репозиторію:**
```
git clone https://github.com/MariiaSam/service_churn.git
cd service_chur
```2. **Налаштування середовища за допомогою Poetry:**
Встановіть залежності проєкту:
```
poetry install
```Для активації віртуального середовища необхідно виконати команду:
```
poetry shell
```Щоб додати до проекту залежність, необхідно виконати команду
```
poetry add <назва_пакету>
```Для підтягування існуючих залежностей:
```
poetry install
```# Використання
Запустіть Streamlit-додаток командою:
```
streamlit run app.py
```# Docker
Цей проєкт також підтримує Docker-контейнеризацію, що дозволяє легко запускати додаток без необхідності налаштовувати середовище вручну.
## Запуск за допомогою Docker:
1. **Запуск проекту за допомогою Docker Compose**
У кореневій директорії проекту виконайте команду:
```
docker compose up
```2. **Доступ до додатку:**
Після успішного запуску додаток буде доступний за адресою:
```
http://localhost:8501
```3. **Зупинка проекту:**
Щоб зупинити проект, виконайте:
```
docker compose down
```Ця команда зупинить усі сервіси та видалить створені контейнери.