Machine learning · 2026 · por Luiz Trajano
Previsão de Churn e Segmentos de Clientes em Academias
Quem vai sair da academia no mês que vem, que tipos de cliente existem e o que fazer para segurar cada um? Numa academia, o cliente raramente cancela: ele vem algumas vezes, vai cada vez menos e um dia some.
Python · Pandas · scikit-learn · SciPy · Seaborn
Origem: projeto da trilha TripleTen Data Analyst (sprint 13). Briefing e dados fornecidos pelo curso; análise, código e conclusões meus.
A pergunta
A Model Fitness, uma rede de academias, queria agir antes de perder o cliente. O problema é que na academia quase ninguém cancela de forma explícita: a pessoa vai cada vez menos e um dia não volta. Quando a academia percebe, ela já foi. O trabalho tinha três partes: prever quem vai sair no mês seguinte, descobrir que tipos de cliente existem na base e transformar isso em ações de retenção concretas.
Os dados
Os perfis de 4.000 clientes, com 14 colunas: contrato (duração, meses restantes, tempo de casa),
frequência (média semanal no total e no mês corrente), gastos com serviços extras, perfil (idade,
gênero, se mora perto, se veio por indicação, se é de empresa parceira) e a coluna Churn, que diz
quem saiu no mês. Nenhum ausente e nenhum duplicado. Saíram 1.061 clientes, 26,5% da base.
Antes de qualquer modelo, encontrei três coisas que mudam a leitura:
- O contrato de 3 meses citado no enunciado não existe. Só há contratos de 1, 6 e 12 meses, então qualquer média de contrato como "3,16 meses" é uma mistura, não o contrato de alguém.
- Dois pares de colunas são quase gêmeos: período do contrato e meses restantes (r = 0,97), e a frequência total e a do mês corrente (r = 0,95). Isso distorce a leitura dos coeficientes de um modelo linear.
- Uma coluna é suspeita de vazamento. Dos 122 clientes que pararam de ir à academia no mês corrente, 116 saíram (95,1%). Se o "mês corrente" é o próprio mês da saída, essa coluna entrega a resposta ao modelo.
Método, e por que este método
Separei treino e validação com divisão estratificada, para a proporção de quem saiu ficar igual
(26,5%) nos dois pedaços, e fixei o random_state em tudo. A régua veio antes de qualquer modelo: um
chute de "ninguém sai" acerta 73,5% e não encontra nenhum cliente que saiu. Com saídas raras, a
acurácia sozinha engana, então comparei também precisão, sensibilidade, F1 e ROC-AUC.
Treinei uma regressão logística (com padronização ajustada só no treino) e uma floresta aleatória. Declarei antes que diferenças de até 0,02 contam como sorteio. A floresta ficou nominalmente à frente em quatro métricas, mas por no máximo 0,010: um empate. Para testar o vazamento, retreinei os dois modelos sem a coluna suspeita. Escolhi a logística porque, sem essa coluna, ela encontra mais clientes que saem (78,8% contra 75,9%), é mais simples e tem coeficientes que dá para ler.
Para os grupos, tirei o Churn antes de agrupar, para os grupos saírem do perfil e não da resposta,
padronizei tudo e rodei o K-Means com 5 grupos. O dendrograma sugeria 4 e a silhueta foi fraca
(0,128), então leio cada grupo como uma tendência, não como uma categoria rígida. O K-Means também
mudava de resultado entre versões do scikit-learn; fixei o ponto de partida e documentei a comparação
pela inércia, para os grupos serem os mesmos em qualquer ambiente.
Achados
Quem sai é o cliente novo, de contrato curto e frequência em queda. Quem saiu tinha em média 0,99 mês de casa, contra 4,71 de quem ficou. Saíram 42,3% dos clientes de contrato mensal e 2,4% dos de contrato anual.
O modelo encontra quem vai sair. A regressão logística acerta 92,5% dos clientes da validação e encontra 176 dos 212 que saíram (83,0%), com 88,0% de acerto entre os que aponta. Sem a coluna suspeita, a sensibilidade cai para 78,8%: ela pesa, mas não sustenta o modelo sozinha. Nos dois modelos, os fatores que mais pesam são o tempo de casa e a frequência no mês.
Cinco tipos de cliente, com riscos muito diferentes, como mostra o gráfico acima. Os de pouco vínculo (1.108 clientes) perderam 52,6% e os que moram longe (544) perderam 45,0%: juntos, os dois grupos concentram 828 das 1.061 saídas. Os de contrato anual perderam só 2,2% e os assíduos, 6,9%. Os indicados por amigo ficaram perto da média (24,8%): a indicação ajuda, mas sozinha não segura.
O perfil médio de cada grupo, igual à tabela da seção 4.4 do notebook, mostra de onde vem cada nome: o grupo 0 é o único sem ninguém morando perto, o grupo 1 concentra o contrato anual, o grupo 2 tem 100% de indicados, o grupo 3 é o menor em quase tudo e o grupo 4 é o que mais frequenta.
| cluster | 0Moram longe | 1Contrato anual | 2Indicados | 3Pouco vínculo | 4Assíduos |
|---|---|---|---|---|---|
| gender | 0,50 | 0,50 | 0,48 | 0,49 | 0,59 |
| Near_Location | 0,00 | 0,94 | 1,00 | 1,00 | 0,97 |
| Partner | 0,47 | 0,74 | 0,82 | 0,24 | 0,26 |
| Promo_friends | 0,08 | 0,49 | 1,00 | 0,02 | 0,09 |
| Phone | 0,92 | 0,90 | 0,90 | 0,90 | 0,90 |
| Contract_period | 2,21 | 11,87 | 3,16 | 1,99 | 2,81 |
| Group_visits | 0,22 | 0,55 | 0,45 | 0,32 | 0,48 |
| Age | 28,48 | 29,93 | 29,22 | 28,21 | 30,14 |
| Avg_additional_charges_total | 133,63 | 164,87 | 141,20 | 131,19 | 162,01 |
| Month_to_end_contract | 2,07 | 10,87 | 2,92 | 1,90 | 2,59 |
| Lifetime | 2,78 | 4,70 | 3,71 | 2,40 | 5,13 |
| Avg_class_frequency_total | 1,66 | 2,00 | 1,73 | 1,27 | 2,88 |
| Avg_class_frequency_current_month | 1,47 | 1,99 | 1,63 | 1,03 | 2,88 |
A decisão que habilita
Quatro princípios de retenção, cada um com um passo prático. O primeiro mês decide: boas-vindas com avaliação física e contato do instrutor no fim do primeiro mês. Contrato longo segura: oferecer o semestral ou o anual no mês anterior ao fim do contrato mensal, começando pelos grupos de maior saída. A queda de frequência é o alarme: rodar todo mês o modelo treinado sem a coluna suspeita e contatar quem tiver maior probabilidade de sair. Vínculo social ajuda a ficar: aula em grupo e benefício para quem indica um amigo.
Os princípios vêm de associação, não de causa, então cada ação deve ser testada antes com um grupo de controle sorteado. O projeto foi aprovado pelo revisor da TripleTen.