image

Bootcamps ilimitados e +750 cursos pra sempre

70
%OFF
Article image
Marcus Guedes
Marcus Guedes08/09/2026 07:32
Compartilhe

TítuloDo EDA à previsão: O que aprendi estudando churn em duas etapas do artigo

  • #Machine Learning
  • #Data
  • #Python
  • #scikit-learn

Quando comecei a trabalhar com um projeto de churn, a primeira tentação poderia ser partir diretamente para Machine Learning.

Escolher um algoritmo, treinar o modelo, medir a acurácia e verificar se ele consegue prever quais clientes têm maior probabilidade de cancelar um serviço.

Mas trabalhar o problema em duas etapas me mostrou algo mais importante:

Antes de tentar prever o comportamento dos clientes, precisamos entender os dados que representam esse comportamento.

Foi exatamente essa sequência que utilizei no projeto.

Primeiro, Análise Exploratória de Dados (EDA).

Depois, modelagem preditiva.

E essa divisão acabou transformando o projeto em um exercício não apenas de Python e Machine Learning, mas de compreensão de como Data Science pode apoiar decisões de negócio.

🔎 Etapa 1 — entender antes de prever

Churn representa, de forma simplificada, a saída ou cancelamento de clientes.

Em negócios baseados em relacionamento recorrente, entender churn é particularmente importante porque adquirir um cliente e perdê-lo pouco tempo depois pode comprometer receita, CAC, LTV e a própria eficiência da operação.

Mas saber apenas a taxa de churn não responde às perguntas mais relevantes.

Eu precisava investigar:

  • Quem são os clientes que estão saindo?
  • Existem características comuns entre eles?
  • Tempo de contrato influencia?
  • Determinados serviços estão associados a maior churn?
  • O comportamento muda conforme perfil ou modalidade de contrato?
  • Quais variáveis parecem ter maior relação com a saída?

É nesse momento que entra a EDA — Exploratory Data Analysis.

🐍 Python e Pandas: preparando o terreno

Antes dos modelos, existe uma etapa que nem sempre aparece nas demonstrações mais bonitas de Data Science:

preparar os dados.

Com Python e Pandas, podemos investigar estrutura, tipos de dados, valores ausentes, duplicidades, distribuições e inconsistências.

Operações como:

df.info()
df.describe()
df.isnull().sum()
df.duplicated().sum()
df["Churn"].value_counts(normalize=True)

parecem simples.

E são.

Mas ajudam a responder uma questão fundamental:

Com que dados estamos realmente trabalhando?

Também podemos criar variáveis derivadas, transformar campos, agrupar categorias e comparar diferentes segmentos da base.

Essa preparação influencia diretamente tudo o que virá depois.

Um modelo sofisticado treinado sobre dados mal preparados continua sendo um modelo construído sobre uma base ruim.

📊 EDA não significa simplesmente fazer gráficos

Visualização é uma parte importante da análise exploratória, mas o objetivo não deveria ser produzir gráficos por produzir.

Cada visualização precisa ajudar a responder uma pergunta.

Por exemplo:

Qual é a distribuição de churn?

Existe diferença de churn entre tipos de contrato?

Clientes com menor tempo de relacionamento apresentam comportamento diferente?

Determinados serviços aparecem com maior frequência entre clientes que cancelaram?

O processo começa a funcionar como uma investigação:

Pergunta → análise → evidência → nova pergunta.

Nesse momento, ferramentas de visualização podem revelar padrões que dificilmente seriam percebidos olhando apenas para tabelas.

Mas ainda não estamos fazendo previsão.

Estamos tentando entender o fenômeno.

🤖 Etapa 2 — da análise para Machine Learning

Depois de compreender melhor os dados, a pergunta muda.

Na EDA, estávamos essencialmente perguntando:

O que os dados históricos revelam sobre churn?

Na modelagem preditiva, passamos a perguntar:

Com base nesses padrões, conseguimos estimar quais clientes apresentam maior probabilidade de churn?

É a transição entre uma abordagem predominantemente descritiva/diagnóstica e uma abordagem preditiva.

E isso exige preparar os dados para que os algoritmos possam utilizá-los.

⚙️ Preparação para os modelos

Nem todas as variáveis chegam em formato adequado para Machine Learning.

Variáveis categóricas, por exemplo, precisam ser transformadas em representações numéricas.

Dependendo do conjunto de dados e do algoritmo escolhido, podemos trabalhar com técnicas como:

One-Hot Encoding

pd.get_dummies(df, columns=["Contract"], drop_first=True)

Também podemos precisar avaliar:

  • encoding de variáveis categóricas;
  • transformação de variáveis;
  • normalização ou padronização;
  • seleção de features;
  • multicolinearidade;
  • desbalanceamento das classes.

Aqui aparece uma diferença importante entre simplesmente executar um algoritmo e construir um pipeline de Machine Learning.

Cada transformação precisa fazer sentido para os dados e para o modelo utilizado.

🧪 Treino e teste

Também precisamos avaliar o modelo utilizando dados que ele não utilizou durante o treinamento.

Uma abordagem comum é separar a base:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
  X,
  y,
  test_size=0.2,
  random_state=42,
  stratify=y
)

O stratify=y é particularmente interessante quando trabalhamos com classificação, pois ajuda a preservar a proporção das classes nos conjuntos de treino e teste.

A lógica é simples:

Treinamos com uma parte dos dados e avaliamos com outra.

Se avaliarmos o modelo apenas nos exemplos que ele já viu, podemos ter uma percepção excessivamente otimista sobre sua capacidade de generalização.

📐 Accuracy não conta toda a história

Essa foi uma das partes mais interessantes do estudo.

Imagine uma base em que a maioria dos clientes não apresenta churn.

Um modelo poderia simplesmente aprender a prever a classe majoritária.

Sua accuracy poderia parecer boa.

Mas ele seria pouco útil para identificar justamente os clientes que queremos encontrar.

Por isso, em problemas de classificação, precisamos olhar além da acurácia.

Precision

Responde aproximadamente:

Dos clientes que o modelo classificou como churn, quantos realmente eram churn?
Precision = TP / (TP + FP)

Uma precision maior significa menos falsos positivos.

Recall

Responde:

Dos clientes que realmente eram churn, quantos o modelo conseguiu identificar?
Recall = TP / (TP + FN)

Em determinadas estratégias de retenção, recall pode ser extremamente relevante.

Se o custo de perder um cliente for alto, talvez seja preferível identificar uma parcela maior dos clientes em risco, mesmo aceitando alguns falsos positivos.

F1-score

Precision e recall podem entrar em conflito.

O F1-score ajuda a avaliar o equilíbrio entre os dois:

F1 = 2 × (Precision × Recall) / (Precision + Recall)

Não significa que F1 seja automaticamente “a melhor métrica”.

Significa que precisamos escolher a métrica considerando o problema que queremos resolver.

🧩 Matriz de confusão: transformando métricas em erros concretos

Uma ferramenta particularmente útil é a confusion matrix.

from sklearn.metrics import confusion_matrix

confusion_matrix(y_test, y_pred)

Ela permite observar:

True Positive (TP)

Previmos churn e o cliente realmente saiu.

True Negative (TN)

Previmos permanência e o cliente permaneceu.

False Positive (FP)

Previmos churn, mas o cliente permaneceria.

False Negative (FN)

Previmos permanência, mas o cliente saiu.

E aqui Data Science encontra novamente o negócio.

Porque FP e FN não são apenas números em uma matriz.

Eles possuem consequências.

💰 Quanto custa um erro?

Imagine um falso positivo.

O modelo identifica um cliente como risco de churn e a empresa oferece um desconto para retê-lo.

Mas aquele cliente não pretendia cancelar.

Talvez tenhamos criado um custo desnecessário.

Agora imagine um falso negativo.

O modelo considera o cliente seguro.

Nenhuma ação é realizada.

E ele cancela.

Nesse caso, podemos ter perdido uma oportunidade de retenção.

Qual erro é pior?

A resposta não está no Scikit-learn.

Está no modelo de negócio.

Essa é uma distinção fundamental.

O algoritmo calcula.

O negócio atribui significado ao erro.

🧠 Logistic Regression x Random Forest

Outro aprendizado interessante é que modelos diferentes podem enxergar o problema de maneiras diferentes.

A Logistic Regression é frequentemente utilizada como baseline em problemas de classificação.

Além de relativamente simples, ela possui boa interpretabilidade e pode ajudar a compreender a relação entre determinadas variáveis e a probabilidade da classe.

Já modelos como Random Forest conseguem capturar relações mais complexas e não lineares.

Com Scikit-learn, podemos experimentar ambos:

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier

logistic = LogisticRegression(max_iter=1000)

forest = RandomForestClassifier(
  n_estimators=200,
  random_state=42
)

Mas a pergunta não deveria ser:

“Qual algoritmo é mais sofisticado?”

E sim:

“Qual modelo apresenta o melhor equilíbrio entre desempenho, interpretabilidade e necessidade do negócio?”

Em algumas situações, um modelo ligeiramente menos preciso, mas muito mais interpretável, pode gerar mais valor.

📈 ROC-AUC e capacidade de separação

Outra métrica útil em classificação é a ROC-AUC.

Em vez de avaliar apenas uma classificação final baseada em determinado threshold, ela ajuda a observar a capacidade do modelo de distinguir as classes ao longo de diferentes limiares.

from sklearn.metrics import roc_auc_score

roc_auc_score(y_test, y_proba)

Novamente, porém, nenhuma métrica deveria ser interpretada isoladamente.

O objetivo não é acumular números.

É compreender como o modelo se comporta e se esse comportamento é adequado ao problema.

🎯 Prever churn não reduz churn

Talvez essa seja a conclusão mais importante.

Imagine que construímos um excelente modelo.

Ele identifica corretamente clientes com maior probabilidade de sair.

O projeto terminou?

Não.

Na verdade, começamos outra etapa.

Precisamos transformar previsão em ação.

Por exemplo:

Cliente identificado como alto risco → ação de retenção → acompanhamento → resultado.

Podemos então medir:

  • taxa de retenção;
  • custo da ação;
  • receita preservada;
  • ROI da estratégia;
  • comportamento posterior;
  • eficácia por segmento.

Isso cria um ciclo:

Dados → EDA → Features → Modelo → Previsão → Ação → Resultado → Novos dados

O Machine Learning passa a fazer parte de um sistema de decisão, e não ser apenas um experimento isolado.

🚀 O que esse projeto mudou na minha forma de estudar Data Science

Quando começamos a estudar Machine Learning, existe uma tendência natural de concentrar atenção nos algoritmos.

Qual modelo utilizar?

Qual biblioteca?

Qual hiperparâmetro?

Como aumentar a accuracy?

Essas perguntas são importantes.

Mas percebi que existe outra sequência que considero mais interessante:

Qual é o problema?

O que os dados conseguem nos mostrar?

O que queremos prever?

Quanto custa errar?

Como a previsão será utilizada?

Como mediremos o resultado da decisão?

Essa sequência aproxima Data Science da realidade das empresas.

Porque ninguém deveria implementar Machine Learning simplesmente para possuir Machine Learning.

A tecnologia precisa contribuir para alguma decisão.

🔄 Do EDA à decisão

Hoje eu resumiria o aprendizado dessas duas etapas desta maneira:

EDA ajuda a entender o passado.

Machine Learning ajuda a estimar possibilidades futuras.

O negócio decide o que fazer com essa informação.

Python, Pandas e Scikit-learn tornam possível construir boa parte desse pipeline.

Mas são ferramentas.

O verdadeiro valor aparece quando conseguimos conectá-las a uma pergunta de negócio.

Um bom modelo não é apenas aquele que prevê corretamente. É aquele cuja previsão pode contribuir para uma decisão melhor.

E talvez seja justamente essa a passagem mais interessante:

de estudar algoritmos para começar a pensar em sistemas de decisão orientados por dados.

💬 E você?

Em um projeto de churn, qual etapa considera mais crítica: EDA, preparação dos dados, escolha das features, seleção do modelo, definição das métricas ou transformação da previsão em uma ação de retenção?

Compartilhe sua experiência nos comentários.

#DataScience #MachineLearning #Python #Pandas #ScikitLearn #EDA #Churn #DataAnalytics #BusinessAnalytics #InteligenciaArtificial

Compartilhe
Recomendados para você
Bootcamp Bradesco - GenAI, Dados & Cyber
Bootcamp Afya - Automação de Dados com IA
Accenture - Python para Análise e Automação de Dados
Comentários (0)