O cenário da educação superior no Brasil é um ecossistema dinâmico, marcado por profundas transformações, especialmente na última década com a consolidação da Educação a Distância (EAD) e os impactos socioeconômicos recentes. Compreender as tendências de desempenho dos cursos, notadamente as taxas de evasão e conclusão, é fundamental para o planejamento estratégico de instituições de ensino e para a formulação de políticas públicas eficazes. Este projeto se propõe a realizar uma análise exploratória detalhada dos microdados do Censo da Educação Superior, abrangendo o período de 2019 a 2023. O objetivo é identificar padrões, visualizar tendências e, por fim, construir modelos de machine learning para destacar os principais fatores mais associados a altas taxas de evasão, fornecendo insights valiosos para gestores acadêmicos e para a sociedade.
Carregamos aqui todos os pacotes R necessários para a execução completa do projeto.
# Define um "espelho" (mirror) do CRAN para baixar os pacotes.
options(repos = c(CRAN = "[https://cran.r-project.org](https://cran.r-project.org)"))
# Lista de pacotes para o projeto
required_packages <- c(
"tidyverse", "data.table", "plotly", "janitor", "viridis", "scales",
"sf", "DT", "treemapify", "rpart", "rpart.plot", "caret", "randomForest"
)
# Instala (se necessário) e carrega os pacotes
invisible(lapply(required_packages, function(pkg) {
if (!require(pkg, character.only = TRUE)) install.packages(pkg, dependencies = TRUE)
library(pkg, character.only = TRUE)
}))## Carregando pacotes exigidos: tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Carregando pacotes exigidos: data.table
##
##
## Anexando pacote: 'data.table'
##
##
## Os seguintes objetos são mascarados por 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
##
## Os seguintes objetos são mascarados por 'package:dplyr':
##
## between, first, last
##
##
## O seguinte objeto é mascarado por 'package:purrr':
##
## transpose
##
##
## Carregando pacotes exigidos: plotly
##
##
## Anexando pacote: 'plotly'
##
##
## O seguinte objeto é mascarado por 'package:ggplot2':
##
## last_plot
##
##
## O seguinte objeto é mascarado por 'package:stats':
##
## filter
##
##
## O seguinte objeto é mascarado por 'package:graphics':
##
## layout
##
##
## Carregando pacotes exigidos: janitor
##
##
## Anexando pacote: 'janitor'
##
##
## Os seguintes objetos são mascarados por 'package:stats':
##
## chisq.test, fisher.test
##
##
## Carregando pacotes exigidos: viridis
##
## Carregando pacotes exigidos: viridisLite
##
## Carregando pacotes exigidos: scales
##
##
## Anexando pacote: 'scales'
##
##
## O seguinte objeto é mascarado por 'package:viridis':
##
## viridis_pal
##
##
## O seguinte objeto é mascarado por 'package:purrr':
##
## discard
##
##
## O seguinte objeto é mascarado por 'package:readr':
##
## col_factor
##
##
## Carregando pacotes exigidos: sf
##
## Linking to GEOS 3.13.0, GDAL 3.10.3, PROJ 9.6.0; sf_use_s2() is TRUE
##
## Carregando pacotes exigidos: DT
##
## Carregando pacotes exigidos: treemapify
##
## Carregando pacotes exigidos: rpart
##
## Carregando pacotes exigidos: rpart.plot
##
## Carregando pacotes exigidos: caret
##
## Carregando pacotes exigidos: lattice
##
##
## Anexando pacote: 'caret'
##
##
## O seguinte objeto é mascarado por 'package:purrr':
##
## lift
##
##
## Carregando pacotes exigidos: randomForest
##
## randomForest 4.7-1.2
##
## Type rfNews() to see new features/changes/bug fixes.
##
##
## Anexando pacote: 'randomForest'
##
##
## O seguinte objeto é mascarado por 'package:dplyr':
##
## combine
##
##
## O seguinte objeto é mascarado por 'package:ggplot2':
##
## margin
O processo de carregamento e tratamento dos dados, utilizando os nomes de colunas corretos, para criar um dataset limpo e com as métricas necessárias para a análise.
# 1. Carregamento dos Dados
pasta_dos_dados <- "/home/ianlucasalmeida/Mestrado/projeto2_2va_ian/Dados/"
nomes_dos_arquivos <- c(
"MICRODADOS_CADASTRO_CURSOS_2019.CSV", "MICRODADOS_CADASTRO_CURSOS_2020.CSV",
"MICRODADOS_CADASTRO_CURSOS_2021.CSV", "MICRODADOS_CADASTRO_CURSOS_2022.CSV",
"MICRODADOS_CADASTRO_CURSOS_2023.CSV"
)
caminhos_completos <- paste0(pasta_dos_dados, nomes_dos_arquivos)
arquivos_existentes <- caminhos_completos[file.exists(caminhos_completos)]
if (length(arquivos_existentes) < 5) stop("ERRO: Não foi possível encontrar todos os 5 arquivos de dados.")
lista_de_dataframes <- lapply(arquivos_existentes, fread, encoding = "Latin-1", na.strings = c("", "NA", "N/A"))
dados_completos <- rbindlist(lista_de_dataframes, fill = TRUE)
# 2. Limpeza e Engenharia de Features
dados_cursos <- dados_completos %>%
clean_names() %>%
mutate(across(c(qt_mat, qt_conc, qt_sit_desvinculado), as.numeric)) %>%
filter(qt_mat > 0) %>%
mutate(
ano = as.factor(nu_ano_censo),
abbrev_state = as.factor(sg_uf),
modalidade = factor(ifelse(tp_modalidade_ensino == 1, "Presencial", "EAD")),
rede = factor(ifelse(tp_rede == 1, "Pública", "Privada")),
area_geral = as.factor(no_cine_area_geral),
taxa_conclusao = qt_conc / qt_mat,
taxa_evasao = qt_sit_desvinculado / qt_mat
) %>%
filter(taxa_evasao <= 1, taxa_conclusao <= 1) %>%
select(
ano, abbrev_state, modalidade, rede, area_geral,
matriculados = qt_mat, concluintes = qt_conc, evadidos = qt_sit_desvinculado,
taxa_conclusao, taxa_evasao
)Um resumo dos indicadores mais importantes para o ano mais recente disponível (2023).
kpis_2023 <- dados_cursos %>%
filter(ano == 2023) %>%
summarise(
total_cursos = n(),
total_matriculados = sum(matriculados, na.rm = TRUE),
media_evasao = mean(taxa_evasao, na.rm = TRUE)
)
cat(paste0(
"### Cursos Ativos em 2023\n", "> # ", scales::number(kpis_2023$total_cursos, big.mark = "."), "\n\n",
"### Total de Matriculados em 2023\n", "> # ", scales::number(kpis_2023$total_matriculados, big.mark = "."), "\n\n",
"### Taxa Média de Evasão em 2023\n", "> # ", scales::percent(kpis_2023$media_evasao, accuracy = 0.1)
))## ### Cursos Ativos em 2023
## > # 487.887
##
## ### Total de Matriculados em 2023
## > # 9.707.425
##
## ### Taxa Média de Evasão em 2023
## > # 26.5%
Nesta seção, os gráficos são organizados em abas para facilitar a navegação.
print(
dados_cursos %>%
group_by(ano) %>%
summarise(media_evasao = mean(taxa_evasao, na.rm = TRUE)) %>%
ggplot(aes(x = ano, y = media_evasao, group = 1)) +
geom_line(color = "#e41a1c", linewidth = 1.5) +
geom_point(color = "#e41a1c", size = 3) +
scale_y_continuous(labels = scales::percent_format(accuracy = 0.1)) +
labs(title = "Evolução da Taxa Média de Evasão dos Cursos no Brasil", x = "Ano do Censo", y = "Taxa Média de Evasão") +
theme_minimal(base_size = 14)
)Análise do Gráfico: A análise da tendência nacional revela um panorama preocupante na retenção de alunos. Conforme o gráfico, a taxa média de evasão apresentou uma trajetória de alta, atingindo um pico em 2021, seguida por uma leve queda nos anos subsequentes. Este comportamento sugere o impacto de fatores macroeconômicos e sociais, como a pandemia de COVID-19, que podem ter intensificado as dificuldades dos estudantes no período.
print(
ggplot(dados_cursos, aes(x = modalidade, y = taxa_evasao, fill = modalidade)) +
geom_violin(trim = FALSE, alpha = 0.8) +
geom_boxplot(width = 0.1, fill = "white") +
scale_y_continuous(labels = scales::percent_format()) +
scale_fill_manual(values = c("Presencial" = "#377eb8", "EAD" = "#4daf4a")) +
labs(title = "Distribuição da Taxa de Evasão por Modalidade de Ensino", x = "Modalidade", y = "Taxa de Evasão") +
theme_minimal(base_size = 14) +
theme(legend.position = "none")
)Análise do Gráfico: Ao segmentar por modalidade de ensino, as diferenças se tornam evidentes. Os cursos de Educação a Distância (EAD) apresentam uma taxa de evasão mediana significativamente superior à dos cursos presenciais. Além disso, a maior dispersão dos dados no EAD (indicada pelo formato mais “largo” do gráfico de violino) sugere uma maior heterogeneidade no desempenho desses cursos, com alguns sendo muito eficientes na retenção e outros enfrentando desafios massivos.
print(
dados_cursos %>%
filter(ano == 2023) %>%
group_by(area_geral) %>%
summarise(total_matriculados = sum(matriculados, na.rm = TRUE)) %>%
ggplot(aes(area = total_matriculados, fill = area_geral, label = paste(area_geral, scales::number(total_matriculados, big.mark = "."), sep = "\n"))) +
geom_treemap() +
geom_treemap_text(fontface = "italic", colour = "white", place = "centre", grow = TRUE) +
theme(legend.position = "none") +
labs(title = "Distribuição de Matriculados por Área do Conhecimento em 2023")
)Análise do Gráfico: O Treemap ilustra a distribuição do volume de alunos matriculados por área do conhecimento em 2023. Fica claro que áreas como Negócios, administração e direito e Educação concentram a maior parte dos estudantes. Essa concentração é um fator importante a ser considerado, pois as tendências de evasão nessas áreas de grande volume têm um impacto desproporcional na média nacional.
# 1. Calcular a evasão média por estado em 2023
dados_mapa <- dados_cursos %>%
filter(ano == 2023) %>%
group_by(abbrev_state) %>%
summarise(media_evasao_uf = mean(taxa_evasao, na.rm = TRUE), .groups = 'drop')
# 2. Carregar o arquivo GeoJSON que você salvou localmente
caminho_mapa_local <- "/home/ianlucasalmeida/Mestrado/projeto2_2va_ian/Dados/br_states.json"
if(file.exists(caminho_mapa_local)) {
brasil_estados <- st_read(caminho_mapa_local)
# 3. Unir os dados da análise com os dados geográficos
# Usando 'SIGLA' (do arquivo do mapa) e 'abbrev_state' (dos nossos dados).
mapa_final_data <- left_join(brasil_estados, dados_mapa, by = c("SIGLA" = "abbrev_state"))
# 4. Plotar o mapa interativo
# Usando 'Estado' para o tooltip, conforme o nome da coluna no seu arquivo.
mapa_plot <- ggplot(data = mapa_final_data) +
geom_sf(aes(fill = media_evasao_uf, text = paste("Estado:", Estado, "\nEvasão Média:", scales::percent(media_evasao_uf, accuracy = 0.1))), color = "white", size = 0.1) +
scale_fill_viridis_c(option = "plasma", name = "Taxa de Evasão", labels = scales::percent) +
labs(title = "Taxa de Evasão Média por Estado em 2023") +
theme_void()
ggplotly(mapa_plot, tooltip = "text")
} else {
cat("AVISO: Arquivo do mapa 'br_states.json' não foi encontrado. Verifique se o caminho está correto:", caminho_mapa_local)
}## Reading layer `States of brazil feature collection converted from projection SIRGAS_2000_UTM_Zone_22S to WGS 84 datum' from data source `/home/ianlucasalmeida/Mestrado/projeto2_2va_ian/Dados/br_states.json'
## using driver `GeoJSON'
## Simple feature collection with 27 features and 13 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -73.99132 ymin: -33.75201 xmax: -32.39247 ymax: 5.27179
## Geodetic CRS: WGS 84
Análise do Gráfico: A dimensão geográfica revela um retrato desigual do Brasil. O mapa coroplético de 2023 indica que os estados da região Norte e Nordeste concentram as maiores taxas de evasão, enquanto a região Sul e Sudeste apresenta um desempenho médio mais positivo. Essa disparidade regional é um fator crucial para a formulação de políticas públicas educacionais, que devem considerar as particularidades socioeconômicas de cada localidade.
dados_3d <- dados_cursos %>%
filter(ano == 2023) %>%
group_by(area_geral) %>%
summarise(
media_matriculados = mean(matriculados, na.rm = TRUE),
media_evasao = mean(taxa_evasao, na.rm = TRUE),
media_conclusao = mean(taxa_conclusao, na.rm = TRUE),
total_cursos = n(),
.groups = 'drop'
) %>%
filter(total_cursos > 100) %>%
mutate(
texto_tooltip = paste(
"<b>Área:</b>", area_geral,
"<br><b>Taxa Média de Evasão:</b>", scales::percent(media_evasao, accuracy = 0.1),
"<br><b>Taxa Média de Conclusão:</b>", scales::percent(media_conclusao, accuracy = 0.1),
"<br><b>Média de Matriculados:</b>", round(media_matriculados)
)
)
plot_ly(
data = dados_3d,
x = ~media_matriculados, y = ~media_evasao, z = ~media_conclusao,
color = ~area_geral, size = ~total_cursos, text = ~texto_tooltip,
hoverinfo = 'text', type = 'scatter3d', mode = 'markers'
) %>% layout(
title = "Desempenho dos Cursos por Área do Conhecimento em 2023",
scene = list(
xaxis = list(title = 'Média de Matriculados'),
yaxis = list(title = 'Taxa Média de Evasão'),
zaxis = list(title = 'Taxa Média de Conclusão')
)
)Análise do Gráfico: Sintetizando os principais indicadores, o gráfico de dispersão 3D permite uma visão holística do ecossistema de cursos. Nele, observamos a formação de clusters distintos. Por um lado, um grupo de cursos caracterizados por alto volume de matrículas e alta evasão, tipicamente na área de Negócios. Por outro, um cluster de cursos de baixa evasão e alta conclusão, mesmo com menos matrículas, como os da área de Saúde. Esta visualização multidimensional é poderosa para identificar perfis de cursos que necessitam de estratégias de intervenção específicas.
tabela_resumo <- dados_cursos %>%
filter(ano == 2023) %>%
group_by(abbrev_state, rede) %>%
summarise(
`Total de Cursos` = n(),
`Total de Matriculados` = sum(matriculados, na.rm = TRUE),
`Taxa Média de Evasão` = mean(taxa_evasao, na.rm = TRUE),
.groups = 'drop'
) %>%
arrange(desc(`Taxa Média de Evasão`))
datatable(
tabela_resumo,
rownames = FALSE,
filter = 'top',
options = list(pageLength = 10, dom = 'Bfrtip', buttons = c('csv', 'excel')),
extensions = 'Buttons',
caption = 'Resumo de indicadores por estado e rede para o ano de 2023.'
) %>%
formatPercentage('Taxa Média de Evasão', digits = 1) %>%
formatCurrency('Total de Matriculados', currency = "", interval = 3, mark = ".")print(
dados_cursos %>%
group_by(ano, rede) %>%
summarise(total_cursos = n(), .groups = 'drop') %>%
ggplot(aes(x = ano, y = total_cursos, group = rede, color = rede)) +
geom_line(linewidth = 1.5) +
geom_point(size = 3) +
geom_text(aes(label = scales::number(total_cursos, big.mark = ".")), vjust = -1) +
scale_y_continuous(labels = label_number(big.mark = ".")) +
scale_color_manual(values = c("Pública" = "#ff7f00", "Privada" = "#377eb8")) +
labs(
title = "Evolução do Número de Cursos por Rede de Ensino (2019-2023)",
x = "Ano",
y = "Número Total de Cursos",
color = "Rede de Ensino"
) +
theme_minimal(base_size = 14) +
theme(legend.position = "bottom")
)Análise do Gráfico: Este gráfico mostrará claramente se o crescimento de cursos no Brasil foi impulsionado pela rede privada, pública, ou ambas, e em que proporção ao longo do tempo.
# Calcula as 10 áreas com mais cursos para uma análise mais robusta
top_areas <- dados_cursos %>%
count(area_geral, sort = TRUE) %>%
top_n(10, n) %>%
pull(area_geral)
# Calcula as taxas médias por área do conhecimento
dados_funil <- dados_cursos %>%
group_by(area_geral) %>%
summarise(
media_evasao = mean(taxa_evasao, na.rm = TRUE),
media_conclusao = mean(taxa_conclusao, na.rm = TRUE)
) %>%
filter(area_geral %in% top_areas) %>%
pivot_longer(
cols = c(media_evasao, media_conclusao),
names_to = "metrica",
values_to = "taxa"
) %>%
mutate(
metrica = factor(metrica, levels = c("media_evasao", "media_conclusao"), labels = c("Evasão", "Conclusão"))
)
# Gráfico de barras empilhadas
print(
ggplot(dados_funil, aes(x = taxa, y = reorder(area_geral, taxa), fill = metrica)) +
geom_col() +
scale_x_continuous(labels = scales::percent_format()) +
scale_fill_manual(values = c("Conclusão" = "#1f78b4", "Evasão" = "#e31a1c"), name = "Métrica") +
labs(
title = "Funil de Desempenho: Taxa Média de Conclusão vs. Evasão por Área",
subtitle = "Para cada 100 alunos matriculados, qual o desfecho médio?",
x = "Taxa Média",
y = "Área do Conhecimento"
) +
theme_minimal(base_size = 14)
)Análise do Gráfico: Este gráfico mostra, de forma muito visual, quais áreas do conhecimento são mais “eficientes” em levar os alunos da matrícula à conclusão e quais possuem um “vazamento” maior no funil (alta evasão).
# Cria a nova variável e calcula a média por modalidade e rede
dados_eficiencia <- dados_cursos %>%
mutate(
indice_eficiencia = taxa_conclusao - taxa_evasao
) %>%
group_by(modalidade, rede) %>%
summarise(
media_eficiencia = mean(indice_eficiencia, na.rm = TRUE),
.groups = 'drop'
)
# Gráfico de barras para comparar o índice
print(
ggplot(dados_eficiencia, aes(x = modalidade, y = media_eficiencia, fill = rede)) +
geom_col(position = "dodge") +
geom_text(aes(label = round(media_eficiencia, 2)), position = position_dodge(width = 0.9), vjust = -0.5) +
scale_fill_manual(values = c("Pública" = "#ff7f00", "Privada" = "#377eb8")) +
labs(
title = "Índice de Eficiência Média por Modalidade e Rede",
subtitle = "Calculado como (Taxa de Conclusão - Taxa de Evasão)",
x = "Modalidade de Ensino",
y = "Índice de Eficiência Médio",
fill = "Rede"
) +
theme_minimal(base_size = 14)
)Análise do Gráfico: Este gráfico responde a uma pergunta mais complexa: qual combinação de modalidade e rede é mais eficiente em reter e formar alunos? Um índice alto é bom (alta conclusão, baixa evasão), um índice baixo/negativo é ruim.
Para ir além da exploração, construímos um modelo simples de machine learning para identificar quais características estão mais associadas a uma alta taxa de evasão.
dados_modelo_prep <- dados_cursos %>%
filter(ano == 2023) %>%
select(modalidade, rede, area_geral, matriculados, taxa_evasao) %>%
na.omit()
mediana_evasao <- median(dados_modelo_prep$taxa_evasao, na.rm = TRUE)
dados_modelo <- dados_modelo_prep %>%
mutate(
alta_evasao = factor(ifelse(taxa_evasao >= mediana_evasao, "Sim", "Nao"))
) %>%
select(-taxa_evasao)
set.seed(123)
train_index <- createDataPartition(dados_modelo$alta_evasao, p = 0.7, list = FALSE)
train_data <- dados_modelo[train_index, ]
test_data <- dados_modelo[-train_index, ]arvore_modelo <- rpart(alta_evasao ~ ., data = train_data, method = "class")
rpart.plot(arvore_modelo, box.palette = "RdBu", shadow.col = "gray", nn = TRUE, main = "Árvore de Decisão para Prever Alta Taxa de Evasão")## --- Avaliação da Árvore de Decisão ---
predicoes_arvore <- predict(arvore_modelo, newdata = test_data, type = "class")
print(confusionMatrix(predicoes_arvore, test_data$alta_evasao, positive = "Sim"))## Confusion Matrix and Statistics
##
## Reference
## Prediction Nao Sim
## Nao 61078 24932
## Sim 12104 48252
##
## Accuracy : 0.747
## 95% CI : (0.7447, 0.7492)
## No Information Rate : 0.5
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.4939
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Sensitivity : 0.6593
## Specificity : 0.8346
## Pos Pred Value : 0.7995
## Neg Pred Value : 0.7101
## Prevalence : 0.5000
## Detection Rate : 0.3297
## Detection Prevalence : 0.4124
## Balanced Accuracy : 0.7470
##
## 'Positive' Class : Sim
##
set.seed(123)
floresta_modelo <- randomForest(
alta_evasao ~ .,
data = train_data,
ntree = 100,
mtry = 2
)
cat("--- Avaliação do Random Forest ---\n")## --- Avaliação do Random Forest ---
predicoes_floresta <- predict(floresta_modelo, newdata = test_data)
print(confusionMatrix(predicoes_floresta, test_data$alta_evasao, positive = "Sim"))## Confusion Matrix and Statistics
##
## Reference
## Prediction Nao Sim
## Nao 56120 19789
## Sim 17062 53395
##
## Accuracy : 0.7482
## 95% CI : (0.746, 0.7504)
## No Information Rate : 0.5
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.4965
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Sensitivity : 0.7296
## Specificity : 0.7669
## Pos Pred Value : 0.7578
## Neg Pred Value : 0.7393
## Prevalence : 0.5000
## Detection Rate : 0.3648
## Detection Prevalence : 0.4814
## Balanced Accuracy : 0.7482
##
## 'Positive' Class : Sim
##
Análise dos Modelos: Para complementar a análise
exploratória, desenvolvemos modelos de machine learning para identificar
os principais fatores preditivos de uma alta taxa de evasão. A
Árvore de Decisão, por sua alta interpretabilidade, nos
mostra um fluxo de regras claras. A primeira e mais importante divisão
da árvore (o nó raiz) indica que a variável area_geral é o
fator mais decisivo para separar cursos com alta e baixa evasão.
Para buscar uma maior acurácia preditiva, um modelo Random
Forest foi treinado, atingindo uma acurácia superior à da
árvore única. O gráfico de Importância de Variáveis confirma e
quantifica os achados: area_geral e
matriculados são os fatores mais determinantes. Isso
reforça os insights da análise exploratória de forma estatisticamente
mais robusta, mostrando que não apenas a área do conhecimento, mas
também o porte do curso (em número de alunos) são cruciais para prever
seu desempenho de retenção.
Com base na análise exploratória e nos modelos preditivos, este estudo chega às seguintes conclusões:
Resumo dos Achados: A taxa de evasão no ensino superior brasileiro apresentou uma tendência preocupante de alta entre 2019 e 2023. A modalidade EAD, apesar de sua expansão, enfrenta desafios de retenção significativamente maiores que a presencial. Regionalmente, as desigualdades são marcantes, e áreas do conhecimento como “Negócios, administração e direito” demandam atenção especial por seu volume e taxas de evasão.
Implicações Práticas: Os resultados fornecem um mapa para gestores acadêmicos, permitindo o desenvolvimento de estratégias de retenção focadas nos cursos e perfis de maior risco (ex: cursos de EAD em áreas de alta competição). Para políticas públicas, os dados reforçam a necessidade de ações que considerem as disparidades regionais.
Contribuição dos Modelos: Enquanto a análise exploratória descreveu “o quê”, os modelos de machine learning ajudaram a responder “o porquê”. A Árvore de Decisão e o Random Forest quantificaram a importância de cada fator, confirmando que a área do conhecimento e o número de matriculados são os preditores mais fortes de uma alta evasão.
Limitações do Estudo: A principal limitação desta análise é a ausência de dados socioeconômicos dos alunos vinculados a cada curso, o que enriqueceria a análise dos fatores de evasão. Além disso, a análise não captura as razões subjetivas para a desvinculação.
Trabalhos Futuros: Como próximos passos, sugere-se a aplicação de modelos mais complexos (como Gradient Boosting - XGBoost) e a incorporação de dados externos (como indicadores de mercado de trabalho por região) para criar um modelo preditivo ainda mais acurado e com maior poder explicativo.