Análise de riscos para o Burnout no ambiente de trabalho


1 Introdução

1.1 Problema

O burnout se caracteriza como um fenômeno ocupacional de esgotamento profissional reconhecido pela Organização Mundial da Saúde (OMS) desde 2019, tornando-se um dos temas mais discutidos dentro da saúde organizacional (World Health Organization (2019)). Em especial desde a pandemia de COVID-19, que mudou significativamente os padrões de trabalho, as discussões sobre o burnout se tornaram cada vez mais relevantes no que diz respeito à retenção de talentos, considerando que pesquisas apontam que o burnout é um fator importante na intenção de funcionários deixarem os seus empregos (Trinkenreich et al. (2023)).

Segundo estimativas de um estudo de referência do Instituto Americano de Estresse, o estresse ocupacional custa às empresas norte-americanas mais de US$ 300 bilhões por ano em fatores como rotatividade e falta de desempenho (American Institute of Stress (2024)). No Brasil, o burnout foi reconhecido na portaria GM/MS Nº 1.999 como doença ocupacional em 2022, impondo responsabilidades legais crescentes às empresas (Brasil. Ministério da Saúde (2023)).

Tais questões levantam a seguinte pergunta:

Quais fatores organizacionais e individuais estão mais associados ao risco de burnout, e como eles se combinam para elevar a probabilidade de um funcionário deixar a empresa?

Responder a esta pergunta se torna relevante em casos de análise de: equipes/gestores de RH, que precisem identificar perfis de risco antes que o funcionário solicite demissão; executivos que precisam entender quais departamentos/cargos concentram maior esgotamento; além de pesquisadores que demonstrem interesse nos fatores de comportamento e da organização relacionados ao burnout em larga escala.

1.2 Abordagem

Para a abordagem, foi utilizado o Synthetic Employee Dataset, disponibilizado publicamente no Hugging Face, com 850.000 perfis sintéticos de funcionários construídos com base em distribuições estatísticas reais de ambientes corporativos. O dataset inclui variáveis numéricas (como scores de estresse e carga de trabalho), categóricas (departamento, cargo, persona comportamental), booleanas (saída da empresa) e textuais (feedbacks de funcionários).

Neste primeiro momento, conduzir-se-á a importação, limpeza e pré-processamento dos dados.


2 Pacotes necessários

library(tidyverse)   # Manipulação e visualização de dados (dplyr, ggplot2, etc.)
library(janitor)     # Padronização de nomes de colunas
library(arrow)       # Leitura de arquivos no formato Parquet
library(knitr)       # Geração de tabelas formatadas no relatório
library(kableExtra)  # Estilização de tabelas
library(skimr)       # Sumários estatísticos compactos

3 Preparação dos dados

3.1 Fonte e descrição

Os dados foram obtidos do repositório público do Hugging Face:

BrotherTony. (2025). Synthetic Employee Dataset: 800K+ Records for HR Analytics. Hugging Face. https://huggingface.co/datasets/BrotherTony/employee-burnout-turnover-prediction-800k

3.1.1 Contexto e propósito original

O dataset corresponde a um conjunto de dados sintéticos, com base em padrões observados em ambientes corporativos. Seu propósito original é servir como base para modelos preditivos de burnout e análises de contextos de RH.

3.1.2 Características do dataset bruto

Atributo Valor
Total de registros ~850.000
Número de variáveis 31
Formato original Parquet
Idioma Inglês
Licença CC-BY-NC-ND 4.0 (uso permitido em contexto não comercial e com atribuição)

3.1.3 Variáveis originais

Variáveis do dataset bruto
Variável Tipo Descrição
employee_id character Identificador único
role character Cargo (diversas variações)
job_level character Nível: Entry, Mid, Senior, Manager, Lead
department character Departamento (38 divisões)
tenure_months integer Tempo de empresa em meses
salary double Salário anual em USD
performance_score double Score de desempenho (0–1)
satisfaction_score double Score de satisfação (0–1)
workload_score double Carga de trabalho (0–1)
team_sentiment double Sentimento da equipe (0–1)
recent_feedback character Texto livre de avaliação do funcionário
communication_patterns character Estilo de comunicação baseado em persona
project_completion_rate double Taxa de conclusão de projetos (0–1)
overtime_hours double Horas extras
training_participation double Participação em treinamentos (0–1)
collaboration_score double Score de colaboração (0–1)
technical_skills list Habilidades técnicas por funcionário
soft_skills list Habilidades interpessoais por funcionário
email_sentiment double Sentimento do e-mail (0–1)
slack_activity double Atividade no Slack (0–1)
meeting_participation double Participação em reuniões (0–1)
goal_achievement_rate double Taxa de atingimento de metas (0–1)
stress_level double Nível de estresse (0–1)
burnout_risk double Risco de burnout (0–1)
left_company logical Saiu da empresa? (TRUE/FALSE)
turnover_reason character Motivo da saída (quando aplicável)
risk_factors_summary character Resumo do risco (Low, Medium, High, Severe)
turnover_probability_generated double Probabilidade de saída gerada por ML
persona_name character Arquétipo comportamental (12 tipos)
role_complexity_score double Complexidade do cargo (0–1)
career_progression_score double Progressão de carreira (0–1)

3.2 Importação dos dados

O dataset é distribuído no formato Parquet, um formato binário que preserva os dados e ocupa menos espaço que um CSV equivalente. O pacote arrow permite ler arquivos Parquet diretamente de uma URL.

O dataset original é dividido em 9 arquivos (shards). Abaixo, importa-se o primeiro, que contém aproximadamente 95.000 registros com os 31 atributos originais.

url_parquet <- paste0(
  "https://huggingface.co/datasets/BrotherTony/",
  "employee-burnout-turnover-prediction-800k/",
  "resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet"
)

arquivo_local <- "0000.parquet"

if (!file.exists(arquivo_local)) {
  download.file(url_parquet, destfile = arquivo_local, mode = "wb")
}

df_bruto <- read_parquet(arquivo_local)

3.3 Etapas de limpeza e organização

3.3.1 Padronização dos nomes das variáveis

A função clean_names() do pacote janitor converte todos os nomes de colunas para snake_case, sem espaços ou caracteres especiais.

df <- clean_names(df_bruto)
names(df)
##  [1] "employee_id"                    "role"                          
##  [3] "job_level"                      "department"                    
##  [5] "tenure_months"                  "salary"                        
##  [7] "performance_score"              "satisfaction_score"            
##  [9] "workload_score"                 "team_sentiment"                
## [11] "recent_feedback"                "communication_patterns"        
## [13] "project_completion_rate"        "overtime_hours"                
## [15] "training_participation"         "collaboration_score"           
## [17] "technical_skills"               "soft_skills"                   
## [19] "email_sentiment"                "slack_activity"                
## [21] "meeting_participation"          "goal_achievement_rate"         
## [23] "stress_level"                   "burnout_risk"                  
## [25] "left_company"                   "turnover_reason"               
## [27] "risk_factors_summary"           "turnover_probability_generated"
## [29] "persona_name"                   "role_complexity_score"         
## [31] "career_progression_score"

3.3.2 Conversão de tipos de dados

Para os dados vindos do Parquet, algumas conversões de dados são necessárias: job_level precisa se tornar um fator ordenado para que comparações entre níveis funcionem corretamente, e tenure_months é convertido explicitamente para inteiro.

df$job_level <- factor(df$job_level,
                       levels  = c("Entry", "Mid", "Senior", "Manager", "Lead"), #níveis em fator para o nível
                       ordered = TRUE)

df$tenure_months <- as.integer(df$tenure_months) #inteiro

glimpse(df)
## Rows: 849,999
## Columns: 31
## $ employee_id                    <chr> "SYN_00000000", "SYN_00000001", "SYN_00…
## $ role                           <chr> " ", " Customer Success Manager", " Adm…
## $ job_level                      <ord> Mid, Manager, Entry, Manager, Mid, Mid,…
## $ department                     <chr> "Research & Development", "Research & D…
## $ tenure_months                  <int> 169, 54, 1, 31, 131, 34, 100, 77, 107, …
## $ salary                         <dbl> 79704.58, 29694.29, 62208.47, 236066.57…
## $ performance_score              <dbl> 0.6324821, 0.5385873, 0.6246560, 0.9593…
## $ satisfaction_score             <dbl> 0.6237460, 0.9825562, 0.7672001, 0.1858…
## $ workload_score                 <dbl> 0.7581168, 0.7884164, 0.6976166, 0.4931…
## $ team_sentiment                 <dbl> 0.6623349, 0.9346612, 0.8885591, 0.7321…
## $ recent_feedback                <chr> "Close to home and good shift time give…
## $ communication_patterns         <chr> "Exhibits communication style typical o…
## $ project_completion_rate        <dbl> 0.5241873, 0.5582056, 0.5668491, 0.7674…
## $ overtime_hours                 <dbl> 0.000000, 0.000000, 0.000000, 9.591680,…
## $ training_participation         <dbl> 0.04437344, 0.31485786, 0.74490049, 0.2…
## $ collaboration_score            <dbl> 0.4921307, 0.9813943, 0.7011382, 0.3396…
## $ technical_skills               <list<character>> <"REST APIs", "Python (Pand…
## $ soft_skills                    <list<character>> <"Communication", "Creativi…
## $ email_sentiment                <dbl> 0.6328913, 1.0000000, 0.7580049, 0.2025…
## $ slack_activity                 <dbl> 0.4921307, 0.9813943, 0.7011382, 0.3396…
## $ meeting_participation          <dbl> 0.4921307, 0.9813943, 0.7011382, 0.3396…
## $ goal_achievement_rate          <dbl> 0.6324821, 0.5385873, 0.6246560, 0.9593…
## $ stress_level                   <dbl> 0.9089919, 0.3633211, 0.6643785, 1.0000…
## $ burnout_risk                   <dbl> 0.8666426, 0.2189959, 0.5415310, 1.0000…
## $ left_company                   <lgl> FALSE, FALSE, TRUE, FALSE, FALSE, FALSE…
## $ turnover_reason                <chr> "Not Applicable", "Not Applicable", "Pe…
## $ risk_factors_summary           <chr> "Severe Burnout Risk", "Low Risk", "Low…
## $ turnover_probability_generated <dbl> 0.2909790, 0.1560017, 0.2338970, 0.3516…
## $ persona_name                   <chr> "ChangeResistor", "NewEnthusiast", "New…
## $ role_complexity_score          <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,…
## $ career_progression_score       <dbl> 1.0000000, 1.0000000, 0.8364946, 1.0000…

3.3.3 Tratamento de valores ausentes e strings especiais

turnover_reason usa a string "Not Applicable" para funcionários ainda ativos. Para o contexto do R, converte-se para NA. Em adição, padroniza-se a capitalização de risk_factors_summary e remove-se espaços extras nas colunas de texto.

df$turnover_reason[df$turnover_reason == "Not Applicable"] <- NA
df$turnover_reason[df$turnover_reason == ""]               <- NA


df$risk_factors_summary <- str_to_title(trimws(df$risk_factors_summary))


df$risk_factors_summary <- factor(
  df$risk_factors_summary,
  levels  = c("Low Risk", "Medium Risk", "High Risk", "Severe Burnout Risk"),
  ordered = TRUE
)


df$persona_name           <- trimws(df$persona_name)
df$role                   <- trimws(df$role)
df$department             <- trimws(df$department)
df$communication_patterns <- trimws(df$communication_patterns)
df$recent_feedback        <- trimws(df$recent_feedback)


n_nas <- colSums(is.na(df))
n_nas <- n_nas[n_nas > 0]

if (length(n_nas) > 0) {
  na_tabela <- data.frame(
    Variável    = names(n_nas),
    N_ausentes  = as.integer(n_nas)
  )
  kable(na_tabela,
        caption   = "Valores ausentes por variável (após tratamento)",
        col.names = c("Variável", "Nº de ausentes"),
        row.names = FALSE) |>
    kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
} else {
  cat("Nenhum valor ausente detectado.\n")
}
Valores ausentes por variável (após tratamento)
Variável Nº de ausentes
turnover_reason 604246
risk_factors_summary 44784

3.3.4 Processamento das colunas de habilidades

As colunas technical_skills e soft_skills contêm, em cada célula, uma lista de habilidades do funcionário. Para que possam ser usadas em análises numéricas, é necessário contar o número de habilidades de cada funcionário e adicionar essa contagem como uma nova coluna no dataset principal.

df$n_tech_skills <- sapply(df$technical_skills, length) # conta o número de habilidades técnicas por funcionário

df$n_soft_skills <- sapply(df$soft_skills, length) # conta o número de habilidades interpessoais por funcionário

# dataset expandido: uma linha por habilidade técnica
df_tech_skills <- df[, c("role", "job_level", "department",
                          "persona_name", "burnout_risk",
                          "left_company", "technical_skills")]
df_tech_skills <- tidyr::unnest(df_tech_skills, technical_skills)
names(df_tech_skills)[names(df_tech_skills) == "technical_skills"] <- "skill"
df_tech_skills$skill <- trimws(as.character(df_tech_skills$skill))

# dataset expandido: uma linha por habilidade interpessoal
df_soft_skills <- df[, c("role", "job_level", "department",
                          "persona_name", "burnout_risk",
                          "left_company", "soft_skills")]
df_soft_skills <- tidyr::unnest(df_soft_skills, soft_skills)
names(df_soft_skills)[names(df_soft_skills) == "soft_skills"] <- "skill"
df_soft_skills$skill <- trimws(as.character(df_soft_skills$skill))

3.3.5 Criação de variáveis derivadas

Criam-se novas variáveis a partir das existentes. Em especial, desenvolve-se um score composto baseado no modelo de desequilíbrio esforço-recompensa ilustrado por Siegrist (1996), que identifica a combinação de alta demanda e baixa recompensa como bases do esgotamento ocupacional. A operacionalização com pesos numéricos (0.4/0.3/0.3) é uma adaptação exploratória para as variáveis disponíveis no dataset, e não reproduz diretamente nenhuma fórmula original do autor.

High Effort (extrinsic: demands/obligations + intrinsic: need for control) <-> Low Reward (money + esteem + status control)

# 1. Faixa salarial
# Discretizar o salário para a comparação entre grupos de remuneração
df$faixa_salarial <- cut(
  df$salary,
  breaks = c(0, 50000, 80000, 120000, 200000, Inf),
  labels = c("< 50K", "50K-80K", "80K-120K", "120K-200K", "> 200K"),
  right  = FALSE
)

# 2. Tempo de empresa em anos
df$tenure_anos <- df$tenure_months / 12

# 3. Grupos de tenure (fases de carreira/estágios no trabalho)
# Comparação entre recém-contratados, médio prazo e veteranos
df$grupo_tenure <- cut(
  df$tenure_anos,
  breaks = c(0, 1, 3, 5, 10, Inf),
  labels = c("< 1 ano", "1-3 anos", "3-5 anos", "5-10 anos", "> 10 anos"),
  right  = FALSE
)

# 4. Índice de engajamento
# Média entre satisfação, colaboração e sentimento da equipe.
df$indice_engajamento <- (df$satisfaction_score +
                            df$collaboration_score +
                            df$team_sentiment) / 3

# 5. Score de desequilíbrio esforço-recompensa
# Baseado no modelo de Siegrist (1996): alta carga, horas extras e
# baixa satisfação.
# overtime_hours é dividido por 74 (máximo observado) para ficar
# na mesma escala 0-1 das demais variáveis.
df$score_desequilibrio <- (df$workload_score * 0.4) + # Carga de trabalho (peso 0.4) - recebe o maior peso por ser, no modelo, fator dominante de desequilíbrio
  (df$overtime_hours / max(df$overtime_hours, na.rm = TRUE) * 0.3) + #Horas extras (peso 0.3) - normalização min-max divide por 74 obter um número entre 0 e 1
  ((1 - df$satisfaction_score) * 0.3) #Insatisfação (peso 0.3)

# 6. Flag de alto risco de burnout (acima do percentil 75)
# Variável binária para identificar o quartil superior de risco
df$alto_risco_burnout <- df$burnout_risk >= quantile(df$burnout_risk, 0.75,
                                                      na.rm = TRUE)

# 7. Flag: saída associada ao burnout
# Funcionário que saiu E estava em alto risco
df$saida_por_burnout <- df$left_company & df$alto_risco_burnout

3.3.6 Remoção de colunas desnecessárias

As colunas de listas originais (technical_skills, soft_skills) já foram processadas, de modo que os contadores e datasets expandidos foram gerados. O employee_id não tem valor analítico. Ambos são removidos do dataset principal.

df$technical_skills <- NULL
df$soft_skills      <- NULL
df$employee_id      <- NULL

cat(sprintf("Dataset limpo final: %d linhas × %d colunas\n", nrow(df), ncol(df)))
## Dataset limpo final: 849999 linhas × 37 colunas

3.3.7 Verificação de duplicatas

n_dup <- sum(duplicated(df))
cat(sprintf("Registros duplicados: %d\n", n_dup))
## Registros duplicados: 0
if (n_dup > 0) {
  df <- unique(df)
  cat(sprintf("Após remoção: %d linhas\n", nrow(df)))
}

3.4 Visão do dataset final

df[1:10, c("role", "job_level", "department", "tenure_anos",
            "stress_level", "burnout_risk", "satisfaction_score",
            "overtime_hours", "left_company",
            "risk_factors_summary", "persona_name")] |>
  kable(caption = "Amostra do dataset limpo (10 primeiras observações)",
        digits = 3) |>
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                font_size = 11, full_width = TRUE) |>
  scroll_box(width = "100%", height = "380px")
Amostra do dataset limpo (10 primeiras observações)
role job_level department tenure_anos stress_level burnout_risk satisfaction_score overtime_hours left_company risk_factors_summary persona_name
Mid Research & Development 14.083 0.909 0.867 0.624 0.000 FALSE Severe Burnout Risk ChangeResistor
Customer Success Manager Manager Research & Development 4.500 0.363 0.219 0.983 0.000 FALSE Low Risk NewEnthusiast
Administrative Assistant Entry HR 0.083 0.664 0.542 0.767 0.000 TRUE Low Risk NewEnthusiast
Senior Manager Manager Research & Development 2.583 1.000 1.000 0.186 9.592 FALSE Severe Burnout Risk OverachievingSprinter
Anonymous Employee Mid Research & Development 10.917 0.723 0.615 0.567 0.000 FALSE Low Risk SeasonedExpert
Anonymous Employee Mid Dairy 2.833 0.362 0.217 0.909 0.000 FALSE Low Risk QuietAchiever
Anonymous Employee Mid Procurement 8.333 0.457 0.309 0.895 0.000 FALSE Low Risk QuietAchiever
Senior Business Analyst Senior Meats 6.417 0.599 0.464 0.708 0.000 FALSE Low Risk SocialCatalyst
Senior Manager Manager Sales & Marketing 8.917 0.955 0.934 0.616 0.000 FALSE Severe Burnout Risk StrugglingLearner
Sales Mid Procurement 14.083 0.401 0.254 1.000 0.000 FALSE Low Risk QuietAchiever

3.5 Sumário das variáveis de interesse

df[, c("stress_level", "burnout_risk", "satisfaction_score", "workload_score",
       "overtime_hours", "salary", "tenure_anos", "performance_score",
       "indice_engajamento", "score_desequilibrio",
       "n_tech_skills", "n_soft_skills")] |>
  skim()
Data summary
Name …[]
Number of rows 849999
Number of columns 12
_______________________
Column type frequency:
numeric 12
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
stress_level 0 1 0.79 0.26 0.00 0.61 0.94 1.00 1.00 ▁▁▂▂▇
burnout_risk 0 1 0.74 0.32 0.00 0.48 0.91 1.00 1.00 ▁▂▂▂▇
satisfaction_score 0 1 0.58 0.28 0.05 0.37 0.58 0.81 1.00 ▅▆▇▆▇
workload_score 0 1 0.60 0.20 0.01 0.46 0.61 0.76 1.00 ▁▃▇▇▅
overtime_hours 0 1 3.13 6.09 0.00 0.00 0.00 4.16 73.95 ▇▁▁▁▁
salary 0 1 84563.07 47444.31 27190.57 41006.78 78178.53 116146.64 384330.43 ▇▃▁▁▁
tenure_anos 0 1 5.87 4.18 0.08 2.50 5.58 8.75 29.75 ▇▆▁▁▁
performance_score 0 1 0.69 0.18 0.07 0.57 0.70 0.83 1.00 ▁▂▅▇▆
indice_engajamento 0 1 0.57 0.17 0.04 0.45 0.57 0.70 1.00 ▁▃▇▆▂
score_desequilibrio 0 1 0.38 0.11 0.01 0.30 0.38 0.45 0.69 ▁▃▇▆▁
n_tech_skills 0 1 6.50 1.71 4.00 5.00 6.00 8.00 9.00 ▇▅▃▅▃
n_soft_skills 0 1 5.00 1.41 3.00 4.00 5.00 6.00 7.00 ▇▇▇▇▇
vars_foco <- c("stress_level", "burnout_risk", "satisfaction_score",
               "workload_score", "overtime_hours",
               "indice_engajamento", "score_desequilibrio")

# Calcular estatísticas para cada variável individualmente
resumo <- data.frame(
  Variável        = vars_foco,
  Mínimo          = round(sapply(df[vars_foco], min,    na.rm = TRUE), 3),
  Mediana         = round(sapply(df[vars_foco], median, na.rm = TRUE), 3),
  Média           = round(sapply(df[vars_foco], mean,   na.rm = TRUE), 3),
  Máximo          = round(sapply(df[vars_foco], max,    na.rm = TRUE), 3),
  Desvio_Padrao   = round(sapply(df[vars_foco], sd,     na.rm = TRUE), 3),
  Pct_Ausentes    = round(sapply(df[vars_foco],
                                  function(x) mean(is.na(x)) * 100), 1),
  row.names       = NULL
)

kable(resumo,
      caption   = "Sumário estatístico das variáveis contínuas de interesse",
      col.names = c("Variável", "Mínimo", "Mediana", "Média",
                    "Máximo", "Desvio Padrão", "% Ausentes")) |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) |>
  column_spec(1, bold = TRUE, monospace = TRUE)
Sumário estatístico das variáveis contínuas de interesse
Variável Mínimo Mediana Média Máximo Desvio Padrão % Ausentes
stress_level 0.000 0.942 0.791 1.000 0.265 0
burnout_risk 0.000 0.914 0.736 1.000 0.316 0
satisfaction_score 0.050 0.583 0.582 1.000 0.276 0
workload_score 0.007 0.614 0.599 1.000 0.200 0
overtime_hours 0.000 0.000 3.133 73.954 6.094 0
indice_engajamento 0.041 0.570 0.574 0.999 0.169 0
score_desequilibrio 0.013 0.377 0.378 0.693 0.107 0

Destaques do sumário:

  • O burnout_risk médio da amostra é 0.74 (escala 0–1).
  • 28.5% dos funcionários saíram da empresa.
  • Funcionários com Severe Burnout Risk representam 60.8% da amostra.
  • O máximo de overtime_hours é 73.9535736h

3.5.1 Distribuição das variáveis categóricas principais

risco_tab <- as.data.frame(table(df$risk_factors_summary)) # Distribuição por nível de risco de burnout
risco_tab$Pct <- round(risco_tab$Freq / sum(risco_tab$Freq) * 100, 1)
names(risco_tab) <- c("Nível de Risco", "N", "%")

kable(risco_tab,
      caption   = "Distribuição por nível de risco de burnout",
      row.names = FALSE) |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribuição por nível de risco de burnout
Nível de Risco N %
Low Risk 315695 39.2
Medium Risk 0 0.0
High Risk 0 0.0
Severe Burnout Risk 489520 60.8
persona_tab <- as.data.frame(table(df$persona_name)) # Distribuição por arquétipo comportamental
persona_tab <- persona_tab[order(-persona_tab$Freq), ]
persona_tab$Pct <- round(persona_tab$Freq / sum(persona_tab$Freq) * 100, 1)
names(persona_tab) <- c("Persona", "N", "%")

kable(persona_tab,
      caption   = "Distribuição por arquétipo comportamental (persona)",
      row.names = FALSE) |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribuição por arquétipo comportamental (persona)
Persona N %
StrugglingLearner 86714 10.2
CorporateNavigator 69639 8.2
SteadyEddy 69611 8.2
NewEnthusiast 69566 8.2
QuietAchiever 69525 8.2
9-to-5Clockwatcher 69434 8.2
ChangeResistor 69337 8.2
SeasonedExpert 69293 8.2
SocialCatalyst 69273 8.1
OverachievingSprinter 69243 8.1
BurntOutStar 69209 8.1
AmbitiousClimber 69155 8.1

4 Conclusões Parciais

Nesta primeira etapa, foram importados ~95.000 registros via arquivo Parquet diretamente do repositório público do Hugging Face, e realizado um processo de limpeza que envolveu: padronização de nomes de colunas, conversão de tipos, tratamento de valores pseudo-ausentes, criação de contadores a partir das colunas de listas, e criação de 7 variáveis derivadas.

Em seguida, o objetivo é avançar para a análise exploratória dos dados, investigando: a distribuição do risco de burnout por departamento e níveis de cargo; variáveis com maior correlação com burnout e a saída da empresa; o perfil típico do funcionário em risco severo; diferenças do burnout por faixa salarial e tempo de empresa.

5 Referências

Licença dos dados: CC-BY-NC-ND 4.0. BrotherTony (2025), Hugging Face

American Institute of Stress. 2024. “What Is the True Cost of Work-Related Stress?” Yonkers: American Institute of Stress. https://www.stress.org/news/what-is-the-true-cost-of-work-related-stress.
Brasil. Ministério da Saúde. 2023. Portaria GM/MS Nº 1.999, de 27 de Novembro de 2023: Atualiza a Lista de Doenças Relacionadas ao Trabalho (LDRT). Portaria. Brasília, DF: Ministério da Saúde.
Siegrist, Johannes. 1996. “Adverse Health Effects of High-Effort/Low-Reward Conditions.” Journal of Occupational Health Psychology 1 (1): 27.
Trinkenreich, Bianca, Klaas-Jan Stol, Igor Steinmacher, Marco A Gerosa, Anita Sarma, Marcelo Lara, Michael Feathers, Nicholas Ross, and Kevin Bishop. 2023. “A Model for Understanding and Reducing Developer Burnout.” In 2023 IEEE/ACM 45th International Conference on Software Engineering: Software Engineering in Practice (ICSE-SEIP), 48–60. IEEE.
World Health Organization. 2019. “Burn-Out an ‘Occupational Phenomenon’: International Classification of Diseases.” Geneva: World Health Organization. https://www.who.int/news/item/28-05-2019-burn-out-an-occupational-phenomenon-international-classification-of-diseases.