Machine LearningPeople AnalyticsPythonHR Analytics

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.

10 de abril de 2024·4 min de leitura
Como construir um modelo de predição de turnover com 87% de acurácia

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).