No passado, o foco maior era em “taxas” como taxa de rotatividade (attrition) e retenção. Gerentes de RH calculavam essas taxas históricas e tentavam prever as futuras usando ferramentas de data warehousing. Essas métricas mostram o impacto agregado do churn — mas contam só metade da história. Outra abordagem é olhar também para os registros individuais, além do agregado.
Há muitos estudos de caso sobre churn de clientes. Em churn de clientes, você prevê quem e quando vai parar de comprar. O churn de funcionários é semelhante, mas o foco é no colaborador em vez do cliente. Aqui, você pode prever quem e quando um funcionário vai encerrar o vínculo. O churn de funcionários é caro, e melhorias incrementais geram resultados significativos. Ele ajuda a desenhar planos de retenção mais eficazes e a aumentar a satisfação dos colaboradores.
Análise de churn de funcionários
Churn de funcionários pode ser definido como a saída — ou “vazamento” — de um ativo intelectual de uma empresa ou organização. Em outras palavras: quando colaboradores deixam a organização, isso é churn. De forma análoga, quando um membro deixa uma população, temos churn.
Pesquisas mostram que o churn de funcionários é afetado por idade, tempo de casa, remuneração, satisfação no trabalho, salário, condições de trabalho, potencial de crescimento e percepção de justiça. Outras variáveis como gênero, etnia, escolaridade e estado civil também são fatores importantes na previsão de churn. Em alguns casos, colaboradores com habilidades de nicho são mais difíceis de substituir, impactando o andamento dos trabalhos e a produtividade do time. Contratar substitutos tem custos (recrutamento e treinamento) e o novo colaborador precisa de tempo para atingir o mesmo nível de proficiência técnica ou de negócio do profissional anterior. Para lidar com isso, muitas organizações aplicam técnicas de machine learning para prever churn e, assim, agir com antecedência.
Os pontos a seguir ajudam a entender melhor as diferenças entre churn de cliente e churn de funcionário:
No RH, a empresa escolhe quem contratar; no marketing, você não escolhe seus clientes.
Os colaboradores são a cara da sua empresa e, juntos, produzem tudo o que a companhia entrega.
Perder um cliente afeta receita e imagem de marca. Ganhar novos clientes é mais difícil e custoso do que reter os atuais. O churn de funcionários também dói: exige tempo e esforço para encontrar e treinar um substituto.
O churn de funcionários tem dinâmicas próprias quando comparado ao churn de clientes. Entendê-las ajuda a criar planos de retenção mais eficientes e a elevar a satisfação interna. Algoritmos de data science podem prever o churn futuro.
Análise exploratória
A análise exploratória de dados é o processo inicial em que você resume características do conjunto de dados — padrões, tendências, outliers — e testa hipóteses usando estatística descritiva e visualização.
Importando módulos
#import modulesimport pandas # for dataframesimport matplotlib.pyplot as plt # for plotting graphsimport seaborn as sns # for plotting graphs% matplotlib inlineTecnologia
Carregando o dataset
Vamos carregar o dataset de RH com a função read_csv do pandas. Você pode baixar os dados por este link.
Este dataset tem 14.999 amostras e 10 atributos (6 inteiros, 2 floats e 2 objetos).
Nenhuma coluna possui valores nulos/ausentes.
Descrição dos 10 atributos:
satisfaction_level: nível de satisfação do colaborador (0 a 1).
last_evaluation: desempenho avaliado pelo empregador (0 a 1).
number_projects: quantos projetos foram atribuídos ao colaborador.
average_monthly_hours: média de horas trabalhadas por mês.
time_spent_company: tempo de casa (anos na empresa).
work_accident: se o colaborador teve ou não acidente de trabalho.
promotion_last_5years: se houve promoção nos últimos 5 anos.
Departments: departamento/área de atuação.
Salary: faixa salarial (low, medium, high).
left: se o colaborador deixou a empresa ou não.
Vamos para os insights dos dados
No dataset, há dois tipos de colaboradores: os que ficaram e os que saíram. Podemos dividir em dois grupos e comparar suas características. Aqui, calculamos as médias de cada grupo usando groupby() e mean().
Aqui, usamos um gráfico de barras com Matplotlib. Esse tipo de gráfico é ótimo para contagens de variáveis discretas.
left_count=data.groupby('left').count()
plt.bar(left_count.index.values, left_count['satisfaction_level'])
plt.xlabel('Colaboradores que saíram')
plt.ylabel('Número de colaboradores')
plt.show()Tecnologia
Dos ~15.000, cerca de 3.571 saíram e 11.428 ficaram. Ou seja, 23% do total saiu.
Número de projetos
Também podemos contar quantos colaboradores atuam em cada quantidade de projetos.
num_projects=data.groupby('number_project').count()
plt.bar(num_projects.index.values, num_projects['satisfaction_level'])
plt.xlabel('Número de projetos')
plt.ylabel('Número de colaboradores')
plt.show()Tecnologia
A maioria dos colaboradores está em 3 a 5 projetos.
Tempo de casa
Também podemos analisar a distribuição por tempo de empresa (experiência).
time_spent=data.groupby('time_spend_company').count()
plt.bar(time_spent.index.values, time_spent['satisfaction_level'])
plt.xlabel('Anos de empresa')
plt.ylabel('Número de colaboradores')
plt.show()Tecnologia
A maioria tem entre 2 e 4 anos de casa. Há também um grande salto entre 3 e 4 anos.
Subplots com Seaborn
Analisar recurso por recurso funciona, mas consome tempo. Uma opção melhor é usar a biblioteca Seaborn e plotar tudo de uma vez com subplots.
features=['number_project','time_spend_company','Work_accident','left','promotion_last_5years','Departments ','salary']
fig=plt.subplots(figsize=(10,15))for i, j inenumerate(features):
plt.subplot(4,2, i+1)
plt.subplots_adjust(hspace =1.0)
sns.countplot(x=j,data = data)
plt.xticks(rotation=90)
plt.title("No. of employee")Tecnologia
Observações a partir da visualização acima:
A maioria trabalha em 3 a 5 projetos.
Há uma grande queda entre 3 e 4 anos de experiência.
23% dos colaboradores deixaram a empresa.
Pouquíssimos receberam promoção nos últimos 5 anos.
O departamento de vendas tem o maior número de colaboradores, seguido por técnico e suporte.
A maioria recebe salário médio ou baixo.
fig=plt.subplots(figsize=(10,15))for i, j inenumerate(features):
plt.subplot(4,2, i+1)
plt.subplots_adjust(hspace =1.0)
sns.countplot(x=j,data = data, hue='left')
plt.xticks(rotation=90)
plt.title("No. of employee")Tecnologia
Mais insights a partir do gráfico:
Colaboradores com mais de 5 projetos tendem a sair.
Quem fez 6 ou 7 projetos saiu com mais frequência — sinal de sobrecarga.
Com 5 anos de casa, muita gente sai por falta de promoções; acima de 6 anos, a tendência é permanecer por vínculo com a empresa.
Quem foi promovido nos últimos 5 anos quase não saiu; quem saiu, em geral, não foi promovido nesse período.
Resumo da análise e visualização
Fatores que mais influenciam alguém a deixar a empresa:
Promoções: colaboradores sem promoção nos últimos 5 anos têm muito mais chance de pedir demissão.
Tempo de casa: o marco de 3 anos é crítico, com muitos desligamentos; por volta de 6 anos, a saída é bem menos provável.
Número de projetos: engajamento importa. Quem tem 3 a 5 projetos tende a ficar; com menos ou mais projetos, aumenta a chance de sair.
Salário: a maioria dos desligamentos está nas faixas baixa e média.
Análise de clusters
Vamos identificar grupos entre os que saíram. Satisfação e desempenho parecem ser os fatores mais importantes para ficar ou sair. Então, vamos agrupá-los via clusterização.
#import modulefrom sklearn.cluster import KMeans
# Filter data
left_emp = data[['satisfaction_level','last_evaluation']][data.left ==1]# Create groups using K-means clustering.
kmeans = KMeans(n_clusters =3, random_state =0).fit(left_emp)Tecnologia
# Add new column "label" annd assign cluster labels.
left_emp['label']= kmeans.labels_
# Draw scatter plot
plt.scatter(left_emp['satisfaction_level'], left_emp['last_evaluation'], c=left_emp['label'],cmap='Accent')
plt.xlabel('Satisfaction Level')
plt.ylabel('Last Evaluation')
plt.title('3 Clusters of employees who left')
plt.show()Tecnologia
Entre os que saíram, podemos identificar 3 perfis:
Alta satisfação e alta avaliação (em verde no gráfico) — os “Winners”.
Baixa satisfação e alta avaliação (em azul) — os “Frustrated”.
Satisfação e avaliação moderadas (em cinza) — o “Bad match”.
Construindo um modelo de previsão
Pré-processamento dos dados
Muitos algoritmos de machine learning exigem entradas numéricas, então precisamos converter colunas categóricas em numéricas.
Para codificar, podemos mapear cada valor para um número. Ex.: na coluna Salary, low:0, medium:1, high:2.
Esse processo é chamado de label encoding, e o sklearn facilita isso com o LabelEncoder.
# Import LabelEncoderfrom sklearn import preprocessing
#creating labelEncoder
le = preprocessing.LabelEncoder()# Converting string labels into numbers.
data['salary']=le.fit_transform(data['salary'])
data['Departments ']=le.fit_transform(data['Departments '])Tecnologia
Aqui, importamos o módulo de pré-processamento e criamos um LabelEncoder. Com ele, aplicamos fit_transform para converter as colunas "salary" e "Departments " em valores numéricos.
Dividindo treino e teste
Para avaliar o desempenho do modelo, é boa prática dividir o dataset em treino e teste.
Vamos usar train_test_split(). Você precisa passar 3 parâmetros: features, target e tamanho do conjunto de teste. Opcionalmente, use random_state para aleatoriedade reprodutível.
#Spliting data into Feature and
X=data[['satisfaction_level','last_evaluation','number_project','average_montly_hours','time_spend_company','Work_accident','promotion_last_5years','Departments ','salary']]
y=data['left']Tecnologia
# Import train_test_split functionfrom sklearn.model_selection import train_test_split
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 70% training and 30% testTecnologia
Aqui, o dataset foi dividido em 70:30 — 70% para treinar e 30% para testar.
Construção do modelo
Vamos construir um modelo para prever o churn de funcionários.
Usaremos um Gradient Boosting Classifier.
Primeiro, importe o módulo e crie o objeto do classificador com GradientBoostingClassifier().
Depois, ajuste no conjunto de treino com fit() e gere previsões no teste com predict().
#Import Gradient Boosting Classifier modelfrom sklearn.ensemble import GradientBoostingClassifier
#Create Gradient Boosting Classifier
gb = GradientBoostingClassifier()#Train the model using the training sets
gb.fit(X_train, y_train)#Predict the response for test dataset
y_pred = gb.predict(X_test)Tecnologia
Avaliando o desempenho do modelo
#Import scikit-learn metrics module for accuracy calculationfrom sklearn import metrics
# Model Accuracy, how often is the classifier correct?print("Accuracy:",metrics.accuracy_score(y_test, y_pred))# Model Precisionprint("Precision:",metrics.precision_score(y_test, y_pred))# Model Recallprint("Recall:",metrics.recall_score(y_test, y_pred))Tecnologia
Excelente: a taxa de acerto foi de 97%, uma ótima precisão geral.
Precisão (Precision): mede quão corretas são as previsões positivas. No nosso caso, quando o modelo previu que alguém sairia, isso ocorreu em 95% das vezes.
Revocação (Recall): entre os funcionários que de fato saíram no conjunto de teste, o modelo identificou 92% deles.
Conclusão
Parabéns por chegar até o fim deste tutorial!
Você aprendeu o que é churn de funcionários, como ele difere do churn de clientes, como fazer análise exploratória e visualização do dataset com matplotlib e seaborn, e como construir e avaliar modelos com o scikit-learn em Python.
Fico no aguardo de feedbacks e perguntas. Deixe um comentário e farei o possível para responder.
Descubra como escrever funções em Python reutilizáveis e eficientes. Domine parâmetros, instruções de retorno e temas avançados como funções lambda. Organize melhor seu código com main() e outras boas práticas.
Aprenda sobre as ferramentas Python essenciais para o desenvolvimento de software, raspagem e desenvolvimento da Web, análise e visualização de dados e aprendizado de máquina.
Mergulhe na ciência de dados com Python para analisar e visualizar seus dados de forma eficaz. Não precisa ter experiência ou conhecimento em programação.
No passado, o foco maior era em “taxas” como taxa de rotatividade (attrition) e retenção. Gerentes de RH calculavam essas taxas históricas e tentavam prever as futuras usando ferramentas de data warehousing. Essas métricas mostram o impacto agregado do churn — mas contam só metade da história. Outra abordagem é olhar também para os registros individuais, além do agregado.
Há muitos estudos de caso sobre churn de clientes. Em churn de clientes, você prevê quem e quando vai parar de comprar. O churn de funcionários é semelhante, mas o foco é no colaborador em vez do cliente. Aqui, você pode prever quem e quando um funcionário vai encerrar o vínculo. O churn de funcionários é caro, e melhorias incrementais geram resultados significativos. Ele ajuda a desenhar planos de retenção mais eficazes e a aumentar a satisfação dos colaboradores.
Análise de churn de funcionários
Churn de funcionários pode ser definido como a saída — ou “vazamento” — de um ativo intelectual de uma empresa ou organização. Em outras palavras: quando colaboradores deixam a organização, isso é churn. De forma análoga, quando um membro deixa uma população, temos churn.
Pesquisas mostram que o churn de funcionários é afetado por idade, tempo de casa, remuneração, satisfação no trabalho, salário, condições de trabalho, potencial de crescimento e percepção de justiça. Outras variáveis como gênero, etnia, escolaridade e estado civil também são fatores importantes na previsão de churn. Em alguns casos, colaboradores com habilidades de nicho são mais difíceis de substituir, impactando o andamento dos trabalhos e a produtividade do time. Contratar substitutos tem custos (recrutamento e treinamento) e o novo colaborador precisa de tempo para atingir o mesmo nível de proficiência técnica ou de negócio do profissional anterior. Para lidar com isso, muitas organizações aplicam técnicas de machine learning para prever churn e, assim, agir com antecedência.
Os pontos a seguir ajudam a entender melhor as diferenças entre churn de cliente e churn de funcionário:
No RH, a empresa escolhe quem contratar; no marketing, você não escolhe seus clientes.
Os colaboradores são a cara da sua empresa e, juntos, produzem tudo o que a companhia entrega.
Perder um cliente afeta receita e imagem de marca. Ganhar novos clientes é mais difícil e custoso do que reter os atuais. O churn de funcionários também dói: exige tempo e esforço para encontrar e treinar um substituto.
O churn de funcionários tem dinâmicas próprias quando comparado ao churn de clientes. Entendê-las ajuda a criar planos de retenção mais eficientes e a elevar a satisfação interna. Algoritmos de data science podem prever o churn futuro.
Análise exploratória
A análise exploratória de dados é o processo inicial em que você resume características do conjunto de dados — padrões, tendências, outliers — e testa hipóteses usando estatística descritiva e visualização.
Importando módulos
Carregando o dataset
Vamos carregar o dataset de RH com a função read_csv do pandas. Você pode baixar os dados por este link.
Depois de carregar o dataset, é útil saber um pouco mais sobre ele. Você pode verificar nomes de atributos e tipos de dados usando info().
Descrição dos 10 atributos:
Vamos para os insights dos dados
No dataset, há dois tipos de colaboradores: os que ficaram e os que saíram. Podemos dividir em dois grupos e comparar suas características. Aqui, calculamos as médias de cada grupo usando groupby() e mean().
Interpretando: quem saiu tinha satisfação mais baixa, menor taxa de promoção, salários mais baixos e trabalhava mais horas do que quem ficou.
A função describe() no pandas é prática para obter estatísticas-resumo: contagem, média, desvio padrão, valores mínimo e máximo e quantis.
Visualização de dados
Quem saiu
Vamos ver quantos colaboradores saíram.
Aqui, usamos um gráfico de barras com Matplotlib. Esse tipo de gráfico é ótimo para contagens de variáveis discretas.
Dos ~15.000, cerca de 3.571 saíram e 11.428 ficaram. Ou seja, 23% do total saiu.
Número de projetos
Também podemos contar quantos colaboradores atuam em cada quantidade de projetos.
Tempo de casa
Também podemos analisar a distribuição por tempo de empresa (experiência).
A maioria tem entre 2 e 4 anos de casa. Há também um grande salto entre 3 e 4 anos.
Subplots com Seaborn
Analisar recurso por recurso funciona, mas consome tempo. Uma opção melhor é usar a biblioteca Seaborn e plotar tudo de uma vez com subplots.
Observações a partir da visualização acima:
Mais insights a partir do gráfico:
Resumo da análise e visualização
Fatores que mais influenciam alguém a deixar a empresa:
Análise de clusters
Vamos identificar grupos entre os que saíram. Satisfação e desempenho parecem ser os fatores mais importantes para ficar ou sair. Então, vamos agrupá-los via clusterização.
Entre os que saíram, podemos identificar 3 perfis:
Construindo um modelo de previsão
Pré-processamento dos dados
Muitos algoritmos de machine learning exigem entradas numéricas, então precisamos converter colunas categóricas em numéricas.
Para codificar, podemos mapear cada valor para um número. Ex.: na coluna Salary, low:0, medium:1, high:2.
Esse processo é chamado de label encoding, e o sklearn facilita isso com o LabelEncoder.
Aqui, importamos o módulo de pré-processamento e criamos um LabelEncoder. Com ele, aplicamos fit_transform para converter as colunas "salary" e "Departments " em valores numéricos.
Dividindo treino e teste
Para avaliar o desempenho do modelo, é boa prática dividir o dataset em treino e teste.
Vamos usar train_test_split(). Você precisa passar 3 parâmetros: features, target e tamanho do conjunto de teste. Opcionalmente, use random_state para aleatoriedade reprodutível.
Aqui, o dataset foi dividido em 70:30 — 70% para treinar e 30% para testar.
Construção do modelo
Vamos construir um modelo para prever o churn de funcionários.
Usaremos um Gradient Boosting Classifier.
Primeiro, importe o módulo e crie o objeto do classificador com GradientBoostingClassifier().
Depois, ajuste no conjunto de treino com fit() e gere previsões no teste com predict().
Avaliando o desempenho do modelo
Excelente: a taxa de acerto foi de 97%, uma ótima precisão geral.
Precisão (Precision): mede quão corretas são as previsões positivas. No nosso caso, quando o modelo previu que alguém sairia, isso ocorreu em 95% das vezes.
Revocação (Recall): entre os funcionários que de fato saíram no conjunto de teste, o modelo identificou 92% deles.
Conclusão
Parabéns por chegar até o fim deste tutorial!
Você aprendeu o que é churn de funcionários, como ele difere do churn de clientes, como fazer análise exploratória e visualização do dataset com matplotlib e seaborn, e como construir e avaliar modelos com o scikit-learn em Python.
Fico no aguardo de feedbacks e perguntas. Deixe um comentário e farei o possível para responder.
Se quiser se aprofundar em Python, confira o curso Intermediate Python for Data Science da DataCamp.