#PRIMER MODELO ##Primero cargamos los paquetes a utilizar, luego importamos los datos. options(scipen=999) pkges<-c(“mfx”,“pROC”,“tidyverse”,“forecast”,“data.table”) lapply(pkges,“library”,character.only=T)
#BASE DE DATOS
maindir <- getwd() subdir <- c(“/Unidad 3/Semana 9/”) #————————————————————————————————-* datos <- read.csv(paste0(maindir,“/UCI_Credit_Card.csv”),header = T)
datos <- datos[complete.cases(datos),] #Se tiene que cambiar las variables, que son dicotomicas: plot1 <- ggplot(data = datos, aes(x=factor(SEX), fill =factor(default.payment.next.month))) + geom_bar() + ylab(“Observations count”) + scale_x_discrete(labels = c(‘Male’,‘Female’)) + xlab("")
plot1
plot2 <- ggplot(data = datos, aes(x=factor(EDUCATION), fill =factor(SEX))) + geom_bar() + ylab(“Observations count”) + xlab(“(1=graduate school, 2=university, 3=high school, 4=others, 5=unknown, 6=unknown)”)
plot2
#En los niveles educativos mas bajos hay mas mujeres, lo cual se aplica la inclusion financiera. #Se puede decir que estas dos variables estan correlacionadas, por lo tanto tienen que ir ambas en nuestro nuevo modelo.
#Se tiene que cambiar las variables, que son dicotomicas: cred <- datos[,-1] cred\(SEX <- as.factor(cred\)SEX) cred\(MARRIAGE <- as.factor(cred\)MARRIAGE) cred\(EDUCATION <- as.factor(cred\)EDUCATION)
#Hay un 22.12% de los contratos de tarjetas de credito que incumpliran el proximo mes.
#Haremos uso de los modelo Logit ya que es un modelo que analisa variables dicotomicas, como la base de datos que se tiene. #MODELAREMOS CON TODAS LAS VARIABLES modelo1 <- glm(default.payment.next.month ~ LIMIT_BAL + EDUCATION + PAY_2 + BILL_AMT1 + PAY_AMT1 ,data = cred, family = binomial (link = “logit”)) model.AIC <- stepAIC(modelo1) #Se puede observar que el AIC= 29300.52, es un creterio de informacion, tendra que ser comparado con otro AIC de otro modelo para elegir el mejor modelo que explique mejor la variable dependiente.
yhat1<-model.AIC$fitted.values hist(yhat1)
#Ahora lo que se buscara más adelante es un modelo con un AIC menor al de este modelo, pero que solo sontenga 5 variables.
modelo1 <- glm(default.payment.next.month ~ SEX + MARRIAGE + PAY_0 + BILL_AMT6 +, PAY_AMT6 , data = cred, family = binomial (link = “logit”)) model.AIC <- stepAIC(modelo1)
c<-seq(0.001,0.3,by=0.01) sens<-c() spec<-c() for (i in 1:length(c)){ y.pred<-ifelse(model.AIC\(fitted.values > c[i], yes = 1, no = 0) spec[i]<-prop.table(table(cred\)default.payment.next.month,y.pred),1)[1] sens[i]<-prop.table(table(cred$default.payment.next.month,y.pred),1)[4] } o.cut<-mean(c[which(round(spec,1)==round(sens,1))],na.rm = T) plot(c,sens,type=“l”,col=2,main=c(“Especificidad vs Sensibilidad”),ylab=c(“Especificidad/Sensibilidad”)) lines(c,spec,col=3)
##(ESPECIFICIDAD Y SENSIBILIDAD)
abline(v=o.cut) print(o.cut) y.pred<-ifelse(model.AIC\(fitted.values > o.cut, yes = 1, no = 0) matriz_confusion <- table(cred\)default.payment.next.month, y.pred, dnn = c(“observaciones”, “predicciones”)) prop.table(matriz_confusion,1) #Se evalua la matriz de confusion para interpretar la especificidad y la sensibilidad. #Si el modelo es correcto en prediccion se tendra la prediccion correcta de fracasos y exitos. #La especificidad se interpreta de la siguiente manera: con el modelo que se ha elejido hasta ahora se tiene #un 60% probabilidad de fracaso, en este caso 0= no default, por ello se puede decir que exite un 60% de probabilidad #de que no se entre en default en proximo mes,de acuerdo a las variables tomadas para dicha prediccion.
##AREA BAJO LA CURVA ROC roc(cred$default.payment.next.month,yhat1)
plot(roc(cred$default.payment.next.month,yhat1),main=c(“Curva ROC”))
#El area bajo la curva es 0.6761, por ello decimos que es media aceptable, se esperaria que sa mayor a 0.90 para que se acepte #completamente que si se hizo una buena prediccion. Es mejor cuando esta pegado a 1. #——————————————————————————————-* XB <- as.formula(“default.payment.next.month ~ factor(SEX)+factor(MARRIAGE)+factor(EDUCATION)”) modelo2 <- glm(XB,data = cred) summary(modelo2)
logitmfx(formula=XB, data=cred) summary (model.AIC)