{"id":23392960,"url":"https://github.com/mariiasam/service_churn","last_synced_at":"2026-02-16T11:03:05.063Z","repository":{"id":269018378,"uuid":"906153117","full_name":"MariiaSam/service_churn","owner":"MariiaSam","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-21T12:59:13.000Z","size":48928,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-21T13:41:20.194Z","etag":null,"topics":["gridsearchcv","joblib","numpy","pandas","python","random-forest-classifier","scikit-learn","streamlit"],"latest_commit_sha":null,"homepage":"https://servicechurn.streamlit.app/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MariiaSam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-20T09:22:37.000Z","updated_at":"2025-01-21T13:00:19.000Z","dependencies_parsed_at":"2025-01-03T23:36:13.124Z","dependency_job_id":null,"html_url":"https://github.com/MariiaSam/service_churn","commit_stats":null,"previous_names":["mariiasam/service_churn"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MariiaSam%2Fservice_churn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MariiaSam%2Fservice_churn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MariiaSam%2Fservice_churn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MariiaSam%2Fservice_churn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MariiaSam","download_url":"https://codeload.github.com/MariiaSam/service_churn/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238837899,"owners_count":19539079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gridsearchcv","joblib","numpy","pandas","python","random-forest-classifier","scikit-learn","streamlit"],"created_at":"2024-12-22T05:16:51.216Z","updated_at":"2025-10-29T14:30:56.133Z","avatar_url":"https://github.com/MariiaSam.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Модель прогнозування відтоку клієнтів для телекомунікаційної компанії\n\nЦей проєкт розроблено для передбачення ймовірності відтоку клієнтів у телекомунікаційній компанії. Інтерактивний інтерфейс створений на основі **Streamlit**([https://servicechurn.streamlit.app/]), що дозволяє легко взаємодіяти з моделлю та аналізувати результати.\n\n## Опис\n\n**Детальний опис проєкту:**\n\n- використання реальних даних для аналізу поведінки клієнтів;\n- визначення ключових факторів, які впливають на ймовірність відтоку;\n- побудова моделі машинного навчання для точного прогнозування;\n- інтерактивний інтерфейс для завантаження нових даних та аналізу.\n\n**Вимоги до проєкту:**\n\n- опис аналізу та обробки даних;\n- деталі моделі і обрані параметри;\n- аналіз результатів, метрик;\n- опис інтеграції та виведення результатів;\n- процес контейнеризації та інструкції користування.\n\n## Технології\n\n**Проєкт реалізовано з використанням таких технологій:**\n\n- **Python**: основна мова програмування;\n- **Docker Compose**: для спрощення процесу розгортання та управління проєктом у середовищі Docker.\n\n## Бібліотеки\n\n- **Pandas**: для обробки даних;\n- **Numpy**: для числових обчислень;\n- **Scikit-learn**: для побудови та оцінки моделей машинного навчання;\n- **Matplotlib** та **Seaborn**: для візуалізації даних;\n- **Streamlit**: для створення інтерактивного інтерфейсу;\n- **Joblib**: для ефективного серіалізування (збереження) та завантаження об'єктів Python.\n\n## Dataset\n\n**Для цього проєкту використовувався набір даних із такими характеристиками:**\n\n- **https://www.kaggle.com/datasets/mehmetsabrikunt/internet-service-churn;**\n- формат: `.csv`;\n- містить такі ключові стовпці: `churn`, `subscription_age`, `bill_avg`, `download_avg`, тощо.\n\nДатасет складається з 72275 рядків та 11 стовпців.\n\n**id**: унікальний ідентифікатор абонента;\n\n**is_tv_subscriber**: чи є у клієнта є підписка на телебачення?;\n\n**is_movie_package_subscriber**: чи є підписка на кінопакети?;\n\n**subscription_age**: скільки років клієнт користується нашими послугами?;\n\n**bill_avg**: середній рахунок за останні 3 місяці;\n\n**reamining_contract**: скільки років залишилося до закінчення контракту користувача.\nЯкщо **_null_** - клієнт не мав контракту. Клієнт, який має контрактний час, повинен користуватися послугою до кінця контракту. Якщо він відмовляється від послуги до закінчення контракту, він сплачує штрафний тариф. Є два способи, якими клієнт може користуватися послугами. Один - за допомогою контракту з обмеженим терміном дії, який коштує дешевше, а інший - за допомогою звичайної щомісячної підписки, яка, очевидно, коштує дорожче. Отже, навіть якщо людина не має контракту, вона все одно є користувачем, який сплачує щомісячні платежі;\n\n**service_failure_coun**: кількість звернень клієнтів до колл-центру через збій обслуговування за останні 3 місяці;\n\n**download_avg**: використання Інтернету за останні 3 місяці (ГБ);\n\n**upload_avg**: середнє завантаження за останні 3 місяці (ГБ);\n\n**download_over_limit**: більшість клієнтів мають обмеження на завантаження. Якщо вони досягають цього ліміту, вони повинні заплатити за це. Ця колонка містить «перевищення ліміту» за останні 9 місяців;\n\n**_churn: відтік клієнта. Це цільова колонка, якщо 1 - клієнт скасував свою послугу_**.\n\n## Модель\n\n- В проекті було випробувано такі моделі як: LogisticRegression, RandomForestClassifier та SVM.\n- Для підбору найкращих гіперпараметрів використовувався: GridSearchCV.\n- Найкращою моделлю виявилась модель RandomForestClassifier з результатом:\n  - precision для 0 - 0.92, для 1 - 0.96\n  - recall для 0 - 0.95, для 1 - 0.94\n  - f1-score для 0 - 0.93, для 1 - 0.95\n  - accuracy 0.94\n- Найкращі параметри які підібрав GridSearchCV для RandomForestClassifier:\n  - 'class_weight': 'balanced'\n  - 'max_depth': None\n  - 'max_features': 'log2'\n  - 'min_samples_leaf': 1\n  - 'min_samples_split': 5\n  - 'n_estimators': 80\n\n## Запуск локально\n\n1. **Клонування репозиторію:**\n\n```\ngit clone https://github.com/MariiaSam/service_churn.git\ncd service_chur\n```\n\n2. **Налаштування середовища за допомогою Poetry:**\n\nВстановіть залежності проєкту:\n\n```\npoetry install\n```\n\nДля активації віртуального середовища необхідно виконати команду:\n\n```\npoetry shell\n```\n\nЩоб додати до проекту залежність, необхідно виконати команду\n\n```\npoetry add \u003cназва_пакету\u003e\n```\n\nДля підтягування існуючих залежностей:\n\n```\npoetry install\n```\n\n# Використання\n\nЗапустіть Streamlit-додаток командою:\n\n```\nstreamlit run app.py\n```\n\n# Docker\n\nЦей проєкт також підтримує Docker-контейнеризацію, що дозволяє легко запускати додаток без необхідності налаштовувати середовище вручну.\n\n## Запуск за допомогою Docker:\n\n1. **Запуск проекту за допомогою Docker Compose**\n\nУ кореневій директорії проекту виконайте команду:\n\n```\ndocker compose up\n```\n\n2. **Доступ до додатку:**\n\nПісля успішного запуску додаток буде доступний за адресою:\n\n```\nhttp://localhost:8501\n```\n\n3. **Зупинка проекту:**\n\nЩоб зупинити проект, виконайте:\n\n```\ndocker compose down\n```\n\nЦя команда зупинить усі сервіси та видалить створені контейнери.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariiasam%2Fservice_churn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmariiasam%2Fservice_churn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariiasam%2Fservice_churn/lists"}