Como construir um modelo de predição de turnover com 87% de acurácia
Um guia prático sobre feature engineering, escolha de algoritmo e como tornar o modelo acionável para gestores de RH.

Turnover voluntário é um dos maiores custos ocultos das organizações. Um colaborador que pede demissão carrega consigo conhecimento, relacionamentos e produtividade — e o processo de reposição pode custar até 1,5x o salário anual do profissional.
A boa notícia: a decisão de sair raramente é abrupta. Existem sinais semanas ou meses antes. Com os dados certos e um modelo bem construído, é possível agir antes que seja tarde.
Neste artigo, compartilho a arquitetura que usamos no Banco BV para construir um modelo com 87% de acurácia e AUC-ROC de 0.91.
---
1. Os dados que fazem a diferença
O erro mais comum em projetos de predição de turnover é usar apenas dados de RH transacionais (cargo, salário, tempo de empresa). Esses dados capturam o estado do colaborador, mas não a trajetória.
As features mais preditivas no nosso modelo foram:
| Feature | Importância (SHAP) | Intuição | |---|---|---| | Variação do score de clima (6m) | Alta | Queda recente é sinal forte | | Meses desde última promoção × score de desempenho | Alta | Estagnação percebida | | Taxa de ausência nos últimos 3 meses | Média | Desengajamento comportamental | | Horas de treinamento nos últimos 12m | Média | Investimento da empresa no colaborador | | Betweenness na rede organizacional | Média | Isolamento = risco |
2. Feature Engineering
A parte mais impactante do projeto não foi o algoritmo — foi a engenharia de features. Transformamos dados brutos em variáveis que capturam tendências:
`python
import pandas as pd
import numpy as np
def calcular_variacao_clima(df: pd.DataFrame) -> pd.Series: """ Calcula a variação do score de clima entre a pesquisa atual e a anterior para cada colaborador. Variações negativas > 1 desvio padrão são altamente preditivas. """ return ( df.groupby("employee_id")["survey_score"] .transform(lambda x: x.diff().fillna(0)) )
def velocidade_de_carreira(df: pd.DataFrame) -> pd.Series:
"""
Razão entre número de promoções e anos de empresa.
Colaboradores com velocidade abaixo da média do nível têm
risco aumentado.
"""
tenure = (
(pd.to_datetime("today") - pd.to_datetime(df["hire_date"])).dt.days / 365.25
).clip(lower=0.5)
return df["promotions_count"] / tenure
`
3. Escolha do Algoritmo
Testamos 5 algoritmos com validação cruzada estratificada (5-fold):
- Regressão Logística: AUC-ROC 0.74 - Random Forest: AUC-ROC 0.87 - Gradient Boosting: AUC-ROC 0.91 ✓ - XGBoost: AUC-ROC 0.90 - LightGBM: AUC-ROC 0.89
O Gradient Boosting venceu marginalmente. A hipótese: a natureza sequencial do boosting captura melhor as interações entre variáveis de carreira que evoluem ao longo do tempo.
4. O problema do desbalanceamento
Com 18% de taxa de turnover, a classe positiva é minoritária. Sem tratamento, o modelo aprende a dizer "não vai sair" para todos e atinge 82% de acurácia — inútil para o negócio.
Usamos duas estratégias combinadas:
`python
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import GradientBoostingClassifier
SMOTE apenas no treino — NUNCA no teste ou validação
sm = SMOTE(random_state=42, k_neighbors=5) X_train_res, y_train_res = sm.fit_resample(X_train, y_train)Class weight reforça o aprendizado da classe minoritária
clf = GradientBoostingClassifier( n_estimators=300, learning_rate=0.05, # GBM não tem class_weight direto — usamos sample_weight )`5. Tornando o modelo acionável
Um modelo com 91% de AUC-ROC que ninguém usa não resolve nada. A chave foi transformar o score probabilístico em uma linguagem para gestores:
- 🔴 Risco Alto (score ≥ 0.70): conversa de carreira prioritária esta semana - 🟡 Risco Médio (0.40–0.70): check-in no próximo 1:1 - 🟢 Risco Baixo (< 0.40): monitoramento regular
Para cada colaborador em risco, o sistema exibe os 3 principais fatores SHAP que contribuíram para a classificação, dando contexto ao gestor antes da conversa.
---
Conclusão
Predição de turnover é 20% algoritmo e 80% feature engineering + produto. O modelo tecnicamente perfeito que chega como planilha para o RH terá impacto zero. Invista igual nas três frentes: dados → modelo → experiência do usuário.
O código completo está disponível no [GitHub](https://github.com/gleissonbispo/turnover-predictor).