In [2]:
df <- read.csv('evasao.csv')
head(df)
str(df)
summary(df)
In [3]:
table(is.na(df))
Separando dados de treino e de teste:
In [18]:
n <- nrow(df)
set.seed(42) # Se não fizer isso, verá valores diferentes dos meus
limite <- sample(1:n, size = round(0.75*n), replace = FALSE)
train_df <- df[limite,]
test_df <- df[-limite,]
head(train_df)
length(train_df$periodo)
Criando e treinando o modelo:
In [19]:
modelo <- glm('abandonou ~ periodo + bolsa + repetiu + ematraso + disciplinas + faltas + desempenho', data = train_df, family = 'binomial')
summary(modelo)
Verificando a relevância dos coeficientes com anova():
In [20]:
anova(modelo, test = "Chisq")
Vamos criar um novo modelo com apenas as variáveis relevantes: "repetiu" e "desempenho":
In [21]:
train_r <- subset(train_df,select = c('repetiu','desempenho','abandonou'))
modelo2 <- glm('abandonou ~ repetiu + desempenho', data = train_r, family = 'binomial')
summary(modelo2)
anova(modelo2, test = "Chisq")
Testando o modelo:
In [23]:
test_r <- subset(test_df,select = c('repetiu','desempenho','abandonou'))
resultados <- predict(modelo2,newdata = test_r, type = 'response')
resultados_ar <- ifelse(resultados > 0.5, 1, 0)
erroMedio <- mean(resultados_ar != test_r$abandonou)
print(paste('Precisão modelo reduzido:',1 - erroMedio))
Não é um resultado muito bom... 57% Mas é melhor do que nada. Talvez, a adição de outras variáveis ou um novo levantamento ajudem a resolver.
In [28]:
df_predicao <- data.frame(desempenho = test_r$desempenho,
repetiu = test_r$repetiu,
abandonou_obs = test_r$abandonou,
abandonou_pred = resultados_ar)
In [29]:
head(df_predicao)
In [ ]: