Dataset da IBM com dados fictícios de uma companhia telefônica chamada Telco.
O case envolve seguir as etapas do processo CRISP-DM de mineração de dados para construir o modelo preditivo. Em seguida, o modelo será disponibilizado em um aplicativo Streamlit para prever novos clientes.
As etapas propostas para resolução do case são:
- Criar um arquivo requirements.txt com as bibliotecas Python necessárias
- Criar um ambiente virtual para isolamento das dependências
- Desenvolver o modelo seguindo as etapas do CRISP-DM
- Criar um app Streamlit para prever novos clientes
Nesta etapa vamos seguir o processo CRISP-DM para desenvolver nosso modelo preditivo de churn.
Primeiro, precisamos entender bem o problema de negócio que estamos tentando resolver. Neste caso, o objetivo é identificar clientes com maior probabilidade de cancelar o serviço, para que a companhia telefônica possa oferecer promoções e reter essas pessoas.
Isso pode gerar grande economia de custos para a empresa. Portanto, nosso modelo precisa ser preciso o suficiente para trazer valor real ao negócio.
O conjunto de dados fornecido contém 7043 linhas (clientes) e 21 colunas (variáveis ou atributos) sobre cada cliente.
As variáveis incluem informações demográficas (gênero, idade, região, etc), serviços utilizados (internet, segurança online, backups), dados de pagamentos e suporte.
A variável-alvo que queremos prever é a coluna “Churn”, que indica se o cliente cancelou (1) ou não (0) o serviço.
Previamente realizamos algumas transformações nos dados para prepará-los para o modelo de machine learning:
- Converter valores ausentes para NaN
- Substituir NaN por média, mediana ou valor mais frequente
- Codificar variáveis categóricas como valores numéricos
- Normalizar os dados para uma escala comum
- Dividir o conjunto entre treino (70%) e teste (30%)
Esse pré-processamento é essencial para garantir a qualidade dos dados que alimentam o modelo.
Testamos vários algoritmos de classificação, utilizando validação cruzada para avaliar o desempenho dentro do conjunto de treino:
- Regressão Logística (Logistic Regression)
- Árvores de Decisão (Decision Tree Classifier)
- Florestas Aleatórias (Random Forest)
- GradientBoosting *(XGBoost e LightGBM)
- DummyClassifier
O melhor modelo foi uma Regressão Logística.
Finalmente, avaliamos o desempenho do modelo escolhido no conjunto de teste, obtendo 75,45% de acurácia. Isso indica que o modelo generaliza bem para dados totalmente novos.
Também analisamos a acurácia balanceada, curva ROC, precisão, recall, f1 score e outras métricas relevantes para o negócio.
O modelo final está pronto para ser utilizado em produção.
Para disponibilizar as previsões, desenvolvemos um aplicativo web usando a biblioteca Streamlit.
A interface permite que o usuário envie novos dados de clientes e receba como resposta a probabilidade estimada de churn para cada um.
O app lê o arquivo com o modelo treinado, faz o preprocessamento dos dados de entrada da mesma forma que nos dados de treino, utiliza o modelo para gerar as previsões e exibe uma tabela com as probabilidades.
O código também permite enviar um arquivo inteiro com múltiplos clientes e obter as previsões em lote, o que é mais eficiente.
Assim, o aplicativo web disponibiliza de forma muito simples e rápida as previsões do nosso modelo de machine learning treinado no Python.
python -m venv customer_churn
source customer_churn/bin/activate # para MmacOS e linux
nome_do_ambiente\Scripts\activate # no windows
pip install -r requirements.txtconda create -n customer_churn python==3.12.4
conda activate customer_churn
pip install -r requirements.txt