Skip to content

Repository files navigation

🛡️ Streaming Service Churn Radar (v3.0 - Production Ready)

Python MLflow XGBoost Streamlit SHAP DVC

Plataforma completa de MLOps para predição e gestão de Churn em serviços de streaming. Arquitetura desenhada para ação tática em tempo real, integrando treinamento rastreável, governança de modelos, versionamento de dados e interface de decisão com explicabilidade individual e impacto financeiro mensurável.


📑 Sumário


📖 O Storytelling por trás dos Dados

O Desafio do Streaming Moderno

Imagine uma plataforma de streaming com milhões de assinantes. Todo mês, milhares cancelam. O custo de aquisição de novos clientes (CAC) é 5x maior que a retenção de existentes. A Lifetime Value (LTV) média de um cliente fiel é R$ 960/ano (R$ 80/mês × 12 meses), enquanto a perda de um cliente churned representa não só a receita direta, mas também o investimento em aquisição que se perdeu.

A pergunta não é "quem vai sair?", mas "quem está prestes a sair, quanto isso custa, e o que podemos fazer agora?"

A Jornada da Solução

Fase 1: A Descoberta (EDA)

"Os dados revelaram uma verdade incômoda: 40% dos cancelamentos aconteciam nos primeiros 3 meses. Clientes com contrato mensal tinham 3x mais chance de churn que anuais, e o LTV de clientes churned era 60% menor que o de retidos."

Análise exploratória identificou os drivers silenciosos do churn:

  • Tenure baixo (< 6 meses): Clientes novos são voláteis (LTV potencial: R$ 480 vs. R$ 1.440 de clientes +12 meses)
  • Contrato mensal: Sem compromisso de longo prazo (churn 3x maior)
  • Múltiplos tickets de suporte: Frustração acumulada (cada ticket reduz LTV em ~R$ 120)
  • Ausência de descontos: Percepção de valor baixa (clientes sem desconto têm 45% mais churn)

Fase 2: A Modelagem (ML)

"Modelos tradicionais alcançavam AUC 0.95, mas falhavam em produção. Estávamos vazando dados do futuro."

A quebra de paradigma veio com o Split Temporal: em vez de embaralhar dados aleatoriamente, simulamos a passagem do tempo. Treinamos no passado, validamos no "futuro". Resultado: um modelo robusto (AUC 0.85) que generaliza para cenários reais e não superestima receita recuperável.

Fase 3: A Explicabilidade (SHAP)

"Um modelo que acerta mas não explica é inútil para retenção. Precisávamos saber POR QUE cada cliente está em risco."

Implementamos SHAP para traduzir predições em ações acionáveis:

  • "Cliente ID-4523 tem 85% de risco porque abriu 3 tickets de suporte e não recebeu desconto → Custo de retenção sugerido: R$ 18/mês (20% off) para salvar R$ 1.078/ano"
  • "Cliente ID-7821 está insatisfeito com o valor pago (R$ 89,90) versus tempo de uso → Oferecer plano anual com 15% de desconto"

Fase 4: A Governança (MLOps + DVC)

"Modelos em produção sem versionamento são caos. Precisávamos de rastreabilidade total — não só de código, mas de dados."

Entrou MLflow para modelos e DVC para dados: cada experimento versionado, cada dataset rastreável, cada modelo registrado com sua linhagem de dados. De "funciona na minha máquina" para "funciona em qualquer máquina, reproduzivelmente".

Fase 5: O Impacto Financeiro (ROI)

"Técnicos falam em AUC e F1-Score. Negócio fala em dinheiro. Precisávamos traduzir."

A última camada foi quantificar o valor: cada cliente em risco representa receita potencial perdida. Cada ação de retenção bem-sucedida é receita recuperada. O dashboard passou a mostrar não só probabilidades, mas R$ em jogo, permitindo priorizar clientes pelo potencial de receita recuperada, não apenas pela probabilidade de churn.

O Impacto em Números

Antes Depois
Tempo para identificar risco: 2 horas 2 segundos
Taxa de acerto em produção: 62% 82%
Reprodutibilidade de experimentos: Nula Total (MLflow + DVC)
Rastreabilidade de dados: Inexistente Completa (DVC)
Visibilidade financeira: Nenhuma Receita em risco em tempo real
CAC recuperável: Não medido R$ 318K/ano em retenção otimizada
Reclamações de "por que me ligaram?": Alta Zero (explicação SHAP)

A Lição Central

"Dados não salvam clientes. Decisões baseadas em dados, explicáveis, versionadas, quantificadas em dinheiro e acionáveis, salvam."

Este projeto não é apenas código. É uma jornada de maturidade analítica: desde a pergunta de negócio, passando pela engenharia de modelos robustos e governança completa, até a entrega de valor financeiro mensurável em produção.


💰 Impacto Financeiro Estimado

Com base nos dados analisados no dashboard operacional:

Métrica de Negócio Valor
Total de clientes analisados 5.000
Clientes em alto risco (threshold 0.70) ~1.661 (33%)
Churn estimado no grupo de alto risco¹ ~80%
Ticket médio mensal R$ 80
LTV médio de cliente retido R$ 960 (12 meses)
CAC (Custo de Aquisição) ~R$ 240 (3x ticket mensal)

¹ Hipótese de negócio: Clientes com probabilidade > 70% de churn têm taxa de churn real estimada em 80%, baseada em benchmarks de indústria de streaming. Este valor é calibrável via testes A/B em produção.

📊 Cálculo do Impacto

# Lógica de cálculo implementada no dashboard
clientes_em_risco = 1.661
taxa_churn_real = 0.80  # 80% dos high-risk de fato churnam
ticket_medio = 80
taxa_retencao = 0.25    # 25% dos contatos resultam em retenção

clientes_realmente_em_risco = clientes_em_risco * taxa_churn_real
# ≈ 1.329 clientes

receita_mensal_em_risco = clientes_realmente_em_risco * ticket_medio
# = R$ 106.320

receita_recuperavel_mensal = receita_mensal_em_risco * taxa_retencao
# = R$ 26.580

impacto_anual = receita_recuperavel_mensal * 12
# = R$ 318.960

🎯 Resultado Financeiro

Indicador Valor
💰 Receita em risco (mensal) R$ 106.320
💸 Receita recuperável (mensal) R$ 26.580
📈 Impacto anual estimado R$ 318.960
🎯 ROI da ação de retenção 5.900% (custo R$ 18 vs. receita R$ 1.078)

📌 Nota de implementação: Este cálculo é baseado em hipóteses de negócio calibráveis (ticket médio, taxa de churn real, taxa de sucesso de retenção). Em produção, esses valores são ajustados via testes A/B e dados reais de campanhas. O slider de threshold no dashboard permite ajustar a sensibilidade da detecção, impactando diretamente a quantidade de clientes sinalizados e o impacto financeiro projetado — mais conservador (threshold 0.80) = menos clientes, maior precisão; mais agressivo (threshold 0.60) = mais clientes, maior cobertura.

🧪 Plano de Validação via Testes A/B

Fase Experimento Métrica de Sucesso Timeline
Piloto Selecionar 200 clientes high-risk, dividir 50/50 (ação vs. controle) Taxa de retenção no grupo de ação > 25% 1 mês
Calibração Ajustar threshold baseado em custo de campanha vs. receita recuperada ROI > 400% 2 meses
Escala Expandir para 100% da base high-risk com modelo calibrado Receita recuperada mensal próxima à projeção de R$ 26K 3 meses

🎯 Objetivo Estratégico

Transformar dados históricos em inteligência preventiva acionável com retorno financeiro mensurável. O sistema identifica padrões comportamentais que precedem o cancelamento, permitindo que a equipe de retenção atue proativamente nos clientes de maior valor — priorizando ações pelo potencial de receita recuperada, não apenas pela probabilidade de churn.


🏗️ Arquitetura do Sistema

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   Data Layer    │────▶│   ML Pipeline    │────▶│  MLflow Server  │
│   (DVC + CSV)   │     │ (XGBoost + SHAP) │     │  (Registry)     │
└─────────────────┘     └──────────────────┘     └────────┬────────┘
         │                                                │
         │              ┌─────────────────────────────────┘
         │              │
         ▼              ▼
┌─────────────────────────────────────────────────────────────┐
│                    DVC (Data Version Control)                │
│  • Rastreabilidade de datasets                               │
│  • Reprodutibilidade total (código + dados + modelo)        │
│  • Integração com MLflow para linhagem completa             │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    ┌──────────────────┐
                    │  Streamlit Dash  │
                    │  (Operational)   │
                    │  + KPIs Financeiros │
                    └──────────────────┘

Componentes Principais

Camada Tecnologia Função
Data Versioning DVC + Git Rastreabilidade e versionamento de datasets
Data Pipeline Pandas + YAML Carregamento sanitizado com remoção automática de Target Leakage
ML Engine XGBoost (Native Categorical) Modelo com suporte nativo a variáveis categóricas
Explainability SHAP Análise de contribuição individual por feature
Governança MLflow Tracking, Model Registry e versionamento de modelos
Interface Streamlit Dashboard operacional com lista de alvos, SHAP e KPIs financeiros

📊 Performance e Rigor Estatístico

Após limpeza rigorosa de variáveis viciadas (Customer_ID, Satisfaction_Score, Last_Activity):

Métrica Técnica Valor Metodologia Status
ROC AUC 0.8493 Split Temporal (Out-of-Time) ✅ Robusto
Accuracy 0.822 Validação no "futuro" ✅ Confiável
F1-Score 0.779 Balanceado Precision/Recall ✅ Equilibrado

⚠️ Nota de Rigor: Modelos com AUC > 0.95 foram descartados por apresentarem data leakage. A versão atual (v3.0) reflete comportamento real e generalizável, validado temporalmente.

Por que Split Temporal?

Diferente de split aleatório tradicional, nossa abordagem simula a passagem do tempo:

Dados Históricos: [████████████████████░░░░░░░░░░]
                  └─ Treino (80%) ─┘└── Teste (20%) ─┘
                                     (Futuro simulado)

Isso garante que o modelo seja avaliado em dados que nunca viu, refletindo cenário real de produção.


🔍 Explicabilidade SHAP

Cada predição é acompanhada de análise de contribuição das features:

Visualização Propósito
Waterfall Plot Explicação individual do cliente selecionado
Summary Plot Importância global das features na base
Force Plot Direção do impacto (positivo/negativo para retenção)

Exemplo de Insight: "Cliente ID-4523 tem 85% de risco de churn porque seus Support_Tickets_Raised (3 tickets) e Discount_Offered (0%) contribuem +12% e +8% respectivamente para o risco."


🗂️ Versionamento de Dados com DVC

Garantimos reprodutibilidade total através do versionamento de dados:

# Verificar status dos dados
dvc status

# Reproduzir pipeline completo (dados + modelo)
dvc repro

# Pull de dados versionados (para novo ambiente)
dvc pull

# Comparar versões de datasets
dvc diff

Benefícios do DVC no Projeto

Recurso Aplicação
Git-like Versioning Cada commit de código acompanha a versão exata dos dados
Storage Remoto Datasets grandes em S3/GCS/Azure sem poluir o repo
Pipeline Reproduzível dvc repro recria exatamente o mesmo experimento
Linhagem de Dados Rastreia qual versão de dados gerou qual modelo

Integração MLflow + DVC: Cada run do MLflow registra não só métricas e parâmetros, mas também o hash DVC do dataset usado, garantindo rastreabilidade completa.


🚀 Execução do Sistema

1. Preparação do Ambiente (Docker - Recomendado)

# Clonar e entrar no diretório
git clone <repo-url>
cd streaming_service_analysis_churn

# Subir infraestrutura completa
docker-compose up -d

# Executar pipeline de treinamento
docker exec -it churn_trainer python main.py --mode full

2. Acesso às Interfaces

Serviço URL Descrição
MLflow UI http://localhost:5000 Experiments, runs e model registry
Dashboard http://localhost:8501 Interface operacional com SHAP e KPIs financeiros
Modelo API http://mlflow:5000 Endpoint interno para predições

3. Ciclo de Vida do Modelo

# Treino completo com promoção automática
docker exec -it churn_trainer python main.py --mode full

# Apenas treino (sem promoção)
docker exec -it churn_trainer python main.py --mode train

# Apenas promoção do modelo existente
docker exec -it churn_trainer python main.py --mode promote

# Com otimização de hiperparâmetros (Optuna)
docker exec -it churn_trainer python main.py --mode full --tune

4. Gerenciamento de Dados com DVC

# Adicionar novo dataset ao versionamento
dvc add data/raw/streaming.csv
git add data/raw/streaming.csv.dvc .gitignore
git commit -m "Add v2.0 dataset with 50k customers"

# Push para storage remoto (S3/GCS/Azure)
dvc push

# Em outra máquina: pull e reproduzir
dvc pull
dvc repro  # Reexecuta pipeline com dados exatos

Painel Principal com KPIs Financeiros

Dashboard Preview Dashboard mostrando KPIs financeiros em tempo real: receita em risco, recuperável e impacto anual estimado

  1. 💰 Receita em Risco: Valor mensal potencialmente perdido (R$ 106K)
  2. 💸 Receita Recuperável: Projeção de receita salva com ações de retenção (R$ 26K/mês)
  3. 📈 Impacto Anual Estimado: ROI do sistema de prevenção de churn (R$ 318K/ano)
  4. 🎯 Probabilidade Média de Evasão: Indicador técnico de saúde da base (43.86%)
  5. ⚡ Threshold Ajustável: Slider interativo (0.0 - 1.0) para calibrar sensibilidade da detecção

Como usar o slider: Ajustar o threshold impacta diretamente a quantidade de clientes sinalizados e o impacto financeiro projetado:

  • Mais conservador (0.80): Menos clientes, maior precisão, menor custo de campanha
  • Mais agressivo (0.60): Mais clientes, maior cobertura, maior investimento em retenção

Lista Tática de Alvos (Priorizada por Valor)

  • Filtro de Prioridade: Slider de threshold (0.0 - 1.0) com atualização em tempo real dos KPIs financeiros
  • Ordenação por Risco + Valor: Clientes com maior probabilidade E maior ticket são destacados
  • Colunas Estratégicas: Customer_ID, probabilidade, Monthly_Spend, receita em risco, região
  • Exportação CSV: Download direto para CRM com colunas de valor para campanhas

Análise SHAP Individual com Contexto Financeiro

Cliente selecionado: ID-4523
├── Probabilidade de Churn: 85%
├── Monthly Spend: R$ 89,90
├── Receita Anual em Risco: R$ 1.078,80
├── Top 3 Motivos de Risco:
│   ├── Support_Tickets_Raised: +12% (3 tickets)
│   ├── Discount_Offered: +8% (0% desconto)
│   └── Monthly_Spend: +5% (acima da média)
└── Recomendação: Oferecer desconto de 20% (custo R$ 18/mês) 
                   para reter R$ 1.078/ano = ROI 5.900%

📂 Estrutura do Projeto

streaming_service_analysis_churn/
├── app/
│   ├── main_dash.py              # Interface Streamlit (com SHAP + KPIs financeiros)
│   ├── components.py             # Componentes UI reutilizáveis
│   └── services.py               # Lógica de negócio com cálculos financeiros
├── data/
│   ├── raw/
│   │   ├── streaming.csv         # Dataset base (versionado com DVC)
│   │   └── streaming.csv.dvc     # Metadados DVC
│   ├── processed/                # Dados processados (DVC)
│   └── interim/                  # Artefatos intermediários
├── docker/
│   ├── Dockerfile                # Imagem da aplicação
│   └── Dockerfile.mlflow         # Imagem do MLflow server
├── docs/
│   └── dashboard_preview.png     # Screenshot do dashboard para README
├── src/
│   ├── config/
│   │   └── loader.py             # Gestão de YAML
│   ├── data/
│   │   └── data_loader.py        # Sanitização e leakage removal
│   ├── features/
│   │   └── feature_engineering.py # Pipeline de FE
│   ├── models/
│   │   └── xgboost.py            # Wrapper XGBoost + SHAP
│   └── pipelines/
│       ├── train.py              # Pipeline com split temporal
│       └── promotion.py          # Governança de modelos
├── .dvc/                         # Configuração DVC
├── .dvcignore                    # Ignore para DVC
├── docker-compose.yml            # Orquestração completa
├── dvc.yaml                      # Pipeline DVC (opcional)
├── dvc.lock                      # Lock file de reprodutibilidade
├── main.py                       # Entry point CLI
├── requirements.txt              # Dependências
└── README.md                     # Este arquivo

🛠️ Tecnologias e Stack

Categoria Ferramentas
Core Python 3.12, Pandas, NumPy, Scikit-Learn
Modelagem XGBoost 2.0+ (categorical nativo)
Explicabilidade SHAP, Matplotlib
MLOps MLflow 2.9+ (Tracking, Registry, Artifacts)
Data Versioning DVC 3.0+ (Git-like para dados)
Interface Streamlit, Plotly
Infraestrutura Docker, Docker Compose
Validação Split Temporal, ROC-AUC, F1-Score
Impacto de Negócio Cálculos financeiros customizados (LTV, CAC, ROI)

📈 Roadmap e Próximos Passos

  • Split Temporal: Validação out-of-time implementada
  • SHAP Integration: Explicabilidade individual por cliente
  • Dockerização: Ambiente completo containerizado
  • DVC Integration: Versionamento de dados implementado
  • KPIs Financeiros: Impacto de receita em tempo real no dashboard
  • DVC Pipelines: dvc.yaml com stages automatizados
  • API FastAPI: Endpoint REST para predições em tempo real
  • A/B Testing: Framework para testes de modelos e campanhas de retenção
  • Drift Detection: Monitoramento automático de degradação de performance
  • Auto-Retraining: Pipeline de re-treino automático mensal via DVC + CI/CD
  • Calibragem Financeira: Integração com dados reais de campanhas para ajustar projeções

👤 Autor

Ricson Ramos
Analista de Dados & Engenheiro de Machine Learning

LinkedIn GitHub


📝 Notas de Versão

v3.0 (Mar/2026)

  • Implementação de Split Temporal para validação realista
  • Integração de SHAP para explicabilidade individual
  • Dockerização completa com MLflow server dedicado
  • DVC Integration para versionamento de dados e reprodutibilidade total
  • KPIs Financeiros no dashboard: receita em risco, recuperável e impacto anual
  • Cálculos de LTV e CAC para contexto completo de negócio
  • Correção de data leakage em variáveis de satisfação

v2.0 (Fev/2026)

  • Estrutura base com XGBoost e MLflow
  • Dashboard Streamlit operacional
  • Sistema de promoção automática para Production

Licença: MIT | Status: Production-Grade Architecture (Simulated)

About

End-to-End Churn Prediction Pipeline | XGBoost model, interactive Streamlit dashboard for ROI analysis, and full Docker containerization for production-ready deployment

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages