Pular para o conteúdo
Voltar para projetos
Machine LearningData AnalyticsPython

Telco Churn & Pricing: quem vale a pena contatar para reter

Previsão de cancelamento em uma operadora (7.043 clientes) transformada em decisão: probabilidades calibradas, regra de ganho esperado para escolher quem contatar e fila de retenção com os motivos de cada cliente.

Contexto

Dataset público Telco Customer Churn (IBM Sample Data Sets), com 7.043 clientes, 21 colunas e 26,5% de cancelamentos. As premissas de custo e de sucesso da ação são ilustrativas, não vêm de uma operação real.

Problema

Saber a probabilidade de churn não diz quem vale a pena contatar: cada ação de retenção custa dinheiro, e o XGBoost com scale_pos_weight superestima as probabilidades, o que distorce qualquer conta de retorno.

Objetivo

Ir além da métrica do modelo: definir quem receber a ação de retenção pelo retorno esperado e mostrar o quanto essa conclusão depende das premissas.

Arquitetura da solução

Código modular em src/ (dados, features, regressão, classificação, interpretabilidade, avaliação e negócio), scripts de treino, notebook de EDA, testes automatizados e integração contínua no GitHub Actions. O calibrador é ajustado em previsões out-of-fold do treino e o teste é usado uma única vez, para medir.

Pipeline

  1. 1Dados brutos (CSV)
  2. 2Limpeza e EDA
  3. 3Pré-processamento (One-Hot, escala)
  4. 4XGBoost + baseline logístico
  5. 5Calibração (out-of-fold)
  6. 6Ganho esperado e fila de retenção

Processo técnico

  • Análise exploratória do churn por contrato, tempo de casa, internet e pagamento
  • Pré-processamento dentro de Pipeline do scikit-learn, sem vazamento entre treino e teste
  • Baseline com Regressão Logística para comparar com o XGBoost
  • Calibração Platt com previsões out-of-fold do treino e comparação de 6 estratégias de retenção no teste
  • Análise de sensibilidade ao custo da ação e à taxa de sucesso
  • 29 testes automatizados (incluindo contas de ganho conferidas à mão) e lint com Ruff rodando em CI (Python 3.10 e 3.12)

Insights

  • O tipo de contrato é a principal alavanca de retenção: churn de 42,7% no plano mensal, 11,3% no anual e 2,8% no bienal
  • O risco se concentra no primeiro ano: 47,4% de churn entre 0 e 12 meses de casa contra 9,5% após 49 meses
  • Fibra ótica (41,9%) e cheque eletrônico (45,3%) merecem investigação de qualidade, suporte e atrito de pagamento
  • A probabilidade bruta do XGBoost é inflada (média de 40,1% contra 26,5% de churn real); sem calibrar, a conta de retorno da campanha fica distorcida
  • Com ação barata (US$ 5), contatar todos empata com o modelo; quanto mais cara a ação, maior a vantagem de escolher quem contatar

Resultados

Com premissas ilustrativas, a decisão por ganho esperado rende cerca de 15% a mais que o corte de 0,5 e cerca de 10% a mais que contatar todos os clientes (US$ 54,7 mil contra 47,7 mil e 49,5 mil por 1.000 clientes). A calibração leva a probabilidade média de 40,1% para 26,7%, perto do churn real de 26,5%.

  • Classificação: XGBoost com AUC-ROC de 0,845 no teste (0,846 ± 0,011 em CV), recall de 0,79 e precision de 0,52 no corte de 0,5
  • Benefício por 1.000 clientes: US$ 54,7 mil (XGBoost calibrado), 47,7 mil (corte de 0,5), 49,5 mil (contatar todos) e 64,2 mil no limite teórico
  • Com ação de US$ 200, a regra antiga dá prejuízo (−US$ 25,5 mil) e o modelo calibrado ainda fica positivo (US$ 2,6 mil)
  • Leitura honesta: a Regressão Logística calibrada rende praticamente o mesmo (US$ 54,6 mil); o XGBoost empata com ela neste dataset
  • Regressão de MonthlyCharges com R² de 0,999 redescobre a tabela de preços; o maior desvio é de US$ 4,84, então a lista de auditoria é fraca como detector de erro

Limitações

  • Associação não é causalidade: confirmar o efeito de um desconto em contrato exigiria teste A/B
  • O R² próximo de 1 reflete a precificação aditiva do dataset, não um problema difícil resolvido por ML
  • Sem dados comportamentais, o teto de AUC do dataset fica perto de 0,85
  • Custo da ação, taxa de sucesso (30%) e horizonte (12 meses) são premissas ilustrativas, e a receita em risco ignora margem e desconto

Visualizações

Benefício da campanha de retenção variando custo da ação e taxa de sucesso
Sensibilidade do benefício às premissas de negócio
Curva de calibração das probabilidades do XGBoost antes e depois da calibração
Calibração das probabilidades
Matriz de confusão e curva ROC do modelo de churn
Matriz de confusão e curva ROC (conjunto de teste)
Taxa de churn por contrato, serviço de internet e forma de pagamento
Taxa de churn por segmento
Importância das variáveis do modelo XGBoost
Importância das variáveis

Projetos relacionados