Projeto de análise exploratória de dados e modelagem preditiva para identificar clientes com risco de cancelamento na empresa TelecomX.
Desenvolver um pipeline completo de ciência de dados que permita à TelecomX:
- Compreender o perfil dos clientes que cancelam o serviço
- Identificar as variáveis com maior impacto na evasão
- Prever quais clientes têm maior risco de churn com modelos de machine learning
- Python 3.8+
- pip
pip install pandas numpy matplotlib seaborn scikit-learnpython analise_churn.pyOs gráficos serão salvos automaticamente na pasta outputs/.
O dataset está em formato JSON aninhado (com sub-objetos customer, phone, internet, account). O script realiza o flatten para um DataFrame tabular.
| Ação | Justificativa |
|---|---|
Remoção da coluna customerID |
Identificador único sem valor preditivo — pode causar overfitting |
Conversão de TotalCharges para numérico |
Estava como string no JSON |
Preenchimento de TotalCharges nulo com 0 |
Clientes com tenure=0 (sem cobrança acumulada) |
Remoção de linhas com Churn nulo |
Não é possível treinar sem o target definido |
- 73,4% dos clientes não evadiram
- 26,6% evadiram
O dataset é desbalanceado. Ambos os modelos utilizam class_weight='balanced' para compensar esse desequilíbrio, evitando que o modelo aprenda a prever apenas a classe majoritária.
15 variáveis categóricas foram transformadas em 26 colunas binárias via pd.get_dummies(), resultando em um DataFrame com 46 features no total. Essa técnica é necessária pois algoritmos de ML operam com valores numéricos.
As variáveis com maior correlação com Churn:
| Variável | Correlação |
|---|---|
Contract_Month-to-month |
+0.40 |
tenure |
-0.35 |
OnlineSecurity_No |
+0.34 |
TechSupport_No |
+0.34 |
InternetService_Fiber optic |
+0.31 |
Contract_Two year |
-0.30 |
PaymentMethod_Electronic check |
+0.30 |
Justificativa: Modelo linear interpretável, padrão para classificação binária. Permite analisar diretamente os coeficientes de cada variável para entender o impacto na probabilidade de evasão.
Normalização: ✅ Necessária (StandardScaler). A Regressão Logística otimiza por gradiente e é sensível à escala das features. Variáveis em escalas muito diferentes (ex: tenure em meses vs. TotalCharges em reais) distorcem os coeficientes sem normalização.
Resultados:
| Métrica | Não Evadiu | Evadiu |
|---|---|---|
| Precision | 0.91 | 0.51 |
| Recall | 0.73 | 0.80 |
| F1-Score | 0.81 | 0.62 |
| AUC-ROC | — | 0.8446 |
Variáveis mais relevantes (coeficientes):
tenure→ coeficiente negativo forte: mais tempo = menor risco de evasãoMonthlyCharges→ negativo após normalização (correlacionado com tenure)InternetService_Fiber optic→ coeficiente positivo: fibra aumenta riscoContract_Two year→ coeficiente negativo: contratos longos retêm clientes
Justificativa: Modelo de ensemble baseado em múltiplas árvores de decisão. Captura relações não-lineares, é robusto a outliers e fornece importância de features de forma nativa. Não requer normalização pois as divisões nas árvores são baseadas em limiares relativos, independentes da escala.
Normalização: ❌ Não necessária.
Resultados:
| Métrica | Não Evadiu | Evadiu |
|---|---|---|
| Precision | 0.88 | 0.56 |
| Recall | 0.80 | 0.70 |
| F1-Score | 0.84 | 0.62 |
| AUC-ROC | — | 0.8450 |
Variáveis mais importantes (feature importance):
tenure(13,1%) – tempo de contrato é o preditor mais poderosoContract_Month-to-month(11,3%) – contratos mensais elevam o riscoTotalCharges(10,4%) – total gasto acumuladoMonthlyCharges(7,8%) – valor mensal da faturaContract_Two year(5,9%) – contratos longos reduzem o risco
| Modelo | AUC-ROC | Normalização | Interpretabilidade |
|---|---|---|---|
| Regressão Logística | 0.8446 | Sim | Alta (coeficientes) |
| Random Forest | 0.8450 | Não | Média (feature importance) |
Ambos os modelos alcançam AUC-ROC ≈ 0.845, indicando boa capacidade discriminativa. O Random Forest tem leve vantagem em recall para a classe minoritária, enquanto a Regressão Logística é preferível quando a interpretabilidade é prioridade.
- Contrato mês a mês
- Serviço de fibra óptica sem add-ons de segurança/suporte
- Pagamento via cheque eletrônico
- Pouco tempo de contrato (tenure < 12 meses)
- Sem parceiro ou dependentes
- Incentivar contratos anuais/bianuais com descontos progressivos
- Ofertar pacotes de OnlineSecurity e TechSupport para clientes de fibra
- Programa de fidelização para clientes nos primeiros 12 meses
- Alertas automáticos para clientes com perfil de alto risco identificado pelo modelo
- Revisar a experiência de clientes com pagamento via cheque eletrônico
- Python 3.x
- Pandas – manipulação de dados
- NumPy – operações numéricas
- Matplotlib / Seaborn – visualizações
- Scikit-learn – modelos de machine learning e métricas