knitr::opts_chunk$set(screenshot.force = FALSE)

Este documento é referente a Parte 1 do Lab 3, aqui estaremos fazendo uma análise descritiva para o entendimento dos dados. A base de dados que iremos utilizar é referente aos anos de 2000 a 2015 e mostra a frequência de evasão de alunos de Ciência da Computação ao fim do primeiro semestre de aula no curso durante esse período de tempo. Teremos as seguintes colunas em nossa base de dados com seus respectivos significados:

  • MAT_ALU_MATRICULA: Matrícula aluno (anonimizado)
  • MAT_TUR_DIS_DISCIPLINA: Código Disciplina
  • disciplina: Nome Disciplina
  • MAT_TUR_ANO: Ano da matrícula
  • MAT_MEDIA_FINAL: Média obtida na disciplina
  • EVADIU: Variável-alvo que indica se o aluno evadiu ou não ao término do período.
dados = read.csv("treino_classificacao.csv")

Uma visualização que mostre em que ano houve mais evasões

Abaixo temos uma visualização que mostra a quantidade de evasões ao longo dos anos. É possível perceber que 2011 foi o ano em que ocorreu mais evasões, um total de 9. Vale salientar que esse valor pode ser maior nesse ano pela maior quantidade de alunos que se matricularam. Até 2010 a quantidade de matrículas atingiu o valor máximo de 83, a partir de 2011 esse valor passou para 113, chegando a atingir 197 em 2015.

evasoes = subset(dados, EVADIU == T)
contagem.evasoes = group_by(evasoes[!duplicated(evasoes[,1]),], MAT_TUR_ANO) %>% summarise(Evasao = as.numeric(sum(EVADIU == T)))

p = highchart() %>% hc_xAxis(categories = contagem.evasoes$MAT_TUR_ANO) %>% hc_add_series(data = contagem.evasoes$Evasao, name = "Evasões") %>% hc_title(text = "Evasões ao longo dos anos") %>% hc_colors(c("purple")) %>% hc_yAxis(title = list(text = "Total de evasões")) %>% hc_xAxis(title = list(text = "Ano"))
p

plot of chunk unnamed-chunk-3

Distribuição das classes

A classe de evasão está distribuída da seguinte maneira ao longo dos anos:

mat_unicas = dados[!duplicated(dados[,1]),]

contagem.distr = group_by(mat_unicas, MAT_TUR_ANO, EVADIU) %>% summarise(count = n())

hchart(contagem.distr, "column", hcaes(x = MAT_TUR_ANO, y = count, group = EVADIU), name= c('Não evadiu', "Evadiu")) %>%  hc_title(text = "Distribuição das classes") %>% hc_colors(c("darkblue", "orange")) %>% hc_yAxis(title = list(text = "Total de alunos")) %>% hc_xAxis(title = list(text = "Ano"))

plot of chunk unnamed-chunk-4

Desbalanceamento de classes

 contagem.total = group_by(mat_unicas, EVADIU) %>% summarise(count = n())

hchart(contagem.total, "column", hcaes(y = count, group = EVADIU), name= c('Não evadiu', "Evadiu")) %>%  hc_title(text = "Distribuição da classe") %>% hc_plotOptions(column = list(stacking = "normal")) %>% hc_colors(c("darkblue", "orange")) %>% hc_yAxis(title = list(text = "Total de alunos"))

plot of chunk unnamed-chunk-5

Observando o gráfico acima é possível reparar que a classe relacionada a evasão está desbalanceada, apresentando a seguinte proporção:

contagem.total[2,2]/(contagem.total[1,2] + contagem.total[2,2])
##       count
## 1 0.0392302

Uma classe desbalanceada pode influenciar negativamente nos algorítimos de aprendizado uma vez que a parte de maior proporção tende a enviesar o desempenho de classficadores. Tais algorítimos visam minimizar erros gerais, que classes em minoria possuem baixa contribuição. Além disso, os algorítmos assumem que os dados apresentam classes balanceadas assim como que erros são obtidos de diferentes classes.

Um novo atributo

Adicionamos agora um novo atributo aos dados. O atributo é referente a reprovações nas disciplinas Programação I e Laboratório de Programação I. Entram nessa situação notas nas disciplinas que são abaixo de 5.0. São possíveis os seguintes valores:

  • 0: quando o aluno não reprovou nenhuma da duas disciplinas.
  • 1: quando o aluno reprovou apenas uma das disciplinas.
  • 2: quando o aluno reprovou ambas as disciplinas.

Utilizamos esse atributo por imaginar que alunos que reprovam disciplinas de programação no primeiro semestre são aqueles que não se interessam ou têm dificuldade no conteúdo e tendem a ficar desmotivados com relação ao futuro no curso. Em outras palavras, eles percebem que essa não é a carreira que querem seguir e como consequência evadem.

Abaixo vemos uma repersentação gráfica com o novo atributo:

novo_atr = subset(dados, disciplina == "Programação I" | disciplina == "Laboratório de Programação I") %>% group_by(MAT_ALU_MATRICULA) %>% mutate(rep = sum(MAT_MEDIA_FINAL <5))

mat_unicas = novo_atr[!duplicated(novo_atr[,1]),]
contagem.freq = group_by(mat_unicas, rep,EVADIU) %>% summarise(count = n())

hchart(contagem.freq[contagem.freq$EVADIU==T,], "column", hcaes(x = rep,y=count, group = EVADIU), name= c("Evadiu")) %>%  hc_title(text = "Distribuição evasão") %>% hc_colors(c("darkred")) %>% hc_xAxis(title = list(text = "Número de reprovações em P1 e LP1")) %>% hc_yAxis(title = list(text = "Total de alunos"))

plot of chunk unnamed-chunk-7

hchart(contagem.freq[contagem.freq$EVADIU==F,], "column", hcaes(x = rep,y=count, group = EVADIU), name= c("Não evadiu")) %>%  hc_title(text = "Distribuição não-evasão") %>% hc_colors(c("darkred")) %>% hc_xAxis(title = list(text = "Número de reprovações em P1 e LP1")) %>% hc_yAxis(title = list(text = "Total de alunos"))

plot of chunk unnamed-chunk-7

Percebemos que os alunos que evadiram se concentram no grupo dos que reprovaram ambas as disciplinas, reparamos também que dos alunos que evadiram nenhum reprovou apenas uma das disciplinas. Também é possível notar que o número de alunos que não evadiram é consideravelmente maior no cenário em que não há reprovações.

Os gráficos nos mostram que a maior frequência de evasão e não-evasão ocorrem em grupos diferentes. As distribuições dos atributos tem valores diferentes entre as classes e isso ajuda mais o classificador, pois os valores podem ser separados mais facilmente, reduzindo a probabilidade de erros no momento de predição da classe.