Punto 1:

a) ¿Cuáles son las ventajas y desventajas de un método muy flexible versus un método menos flexible para el problema de regresión o clasificación? ¿Bajo que circunstancias, un método más flexible se prefiere a un método menos flexible? ¿Cuándo un método menos flexible se prefiere?

En la misión de encontrar una buena aproximación de la función que conecta los inputs con los outputs en una base de datos, se encuentra que existen muchos métodos para hacer dicha aproximación y que para cada uno de ellos se puede hablar de su flexibilidad. No obstante, existe un trade-off, entre la flexibilidad de un modelo y su complejidad, que da a conocer las ventajas y desventajas que tiene cada modelo. Dado lo anterior, un modelo muy flexible permite un buen ajuste los datos, lo cual puede reducir en gran medida el error y dar una mejor predicción. Ahora bien, aunque la flexibilidad suena prometedora tiene el problema de la complejidad; un modelo flexible tiene problemas en la complejidad pues tiene que estimar más parámetros. Junto con esto, existe el peligro de un modelo tan flexible que se adapte perfectamente a los datos, esto se conoce como over-fitting. Un último problema de los métodos flexibles es que requieren muchos datos para lograr una mejor aproximación a la función que relaciona los inputs con los outputs, por lo que los métodos muy flexibles requieren bases de datos de gran tamaño.

Estos problemas se resuelven cuando se decide bajar la flexibilidad del modelo, es decir, buscar una aproximación menos compleja para encontrar la función que dibuja los outputs en función de los inputs. Ahora bien, como se mencionó anteriormente existe un trade-off entre flexibilidad y complejidad, por lo que un enfoque menos flexible puede resolver las desventajas mencionadas anteriormente. En otras palabras, el enfoque menos flexible permite trabajar con bases de datos más pequeñas, evita problemas como el over-fitting y se facilita la estimación dado que requiere de menos parámetros.

Dos ejemplos de lo anterior se ven reflejados en técnicas de aprendizaje para predicción como la regresión lineal (menos flexible) y k-vecinos más cercanos (más flexible). Ambos procesos aproximan las expectativas condicionales de acuerdo con los promedios, pero difieren en cuanto a sus supuestos. Por un lado, el método de k-vecinos cercanos supone que la función se aproxima correctamente por medio de una función constante local, es decir su método es más complejo, pero a su vez más flexible. Por el contrario, la regresión lineal asume que \(f(x)\) puede aproximarse apropiadamente usando una función lineal global, en otras palabras, es mas sencilla de calcular, pero es menos flexible, lo que implica que puede no adaptarse bien a los datos y tener errores mayores. No obstante, la regresión lineal puede ser un mejor enfoque para bases pequeñas, mientras que k-vecinos cercanos es mejor para grandes bases de datos.

b) ¿Cuáles son las ventajas del enfoque paramétrico en la regresión o clasificación frente al enfoque no paramétrico? ¿Cuáles son las desventajas?

Dado que en ambos casos lo que se busca es encontrar una buena aproximación a una función \(f\) desconocida que conecta los inputs con los outputs, existen entonces varias maneras de aproximarse a dicha función. Por un lado, está el enfoque paramétrico, el cual toma ciertos supuestos frente a dicha función que permiten que su método sea mas sencillo. Por ejemplo, el método paramétrico asume linealidad en los parámetros, lo cual le permite simplificar la estimación pues ésta se enfoca principalmente en los betas que acompañan a las variables. En este sentido puede facilitar el proceso de estimación y puede verse como una ventaja frente a métodos más complejos como el enfoque no paramétrico.

No obstante, puede tener desventajas, la linealidad de los parámetros e incluso una presuposición sobre la función \(f\) pueden llegar a alejarse de la verdadera función dada su poca flexibilidad. En este sentido el enfoque no paramétrico tiene una gran ventaja pues no asume nada sobre la función desconocida y su característica le permite tener mayor flexibilidad frente a la linealidad del otro enfoque. Cabe resaltar que el enfoque no paramétrico tiene mejores resultados cuando se tienen grandes bases de datos que le dan mejor conocimiento de la función \(f\) desconocida.

c) Explique, ¿por qué se presenta el “trade-off” entre sesgo y varianza?

Este trade-off entre sesgo y varianza es otra consecuencia de las características de flexibilidad de los modelos que se discutieron anteriormente. En general, los modelos buscan aproximarse a una función de la mejor manera posible e intentando siempre mantener el sesgo y la varianza bajos. No obstante, la flexibilidad de los modelos juega de nuevo un papel de gran importancia en este aspecto. Un modelo muy flexible consigue adaptarse a los datos de manera diferente a las regresiones lineales normales, esto puede ser muy bueno en casos donde los datos son muy variables, pero también tener consecuencias cuando los datos están distribuidos de tal manera que se pueda usar una regresión lineal. En otras palabras, los modelos más flexibles no son siempre superiores a los menos flexibles.

Por lo mencionado arriba, un modelo muy flexible puede tener una buena adaptación a los datos, pero dada su flexibilidad esto implica que cada punto de los datos tiene una gran influencia sobre el modelo. Esto quiere decir que su varianza es mayor, es decir, que los modelos mas flexibles son más susceptibles a cambios en los datos. Sin embargo, estos modelos al aproximarse mejor a los datos reducen su sesgo, lo que muestra un ejemplo de lo que se puede ganar por un lado con un sesgo bajo, pero lo que se pierdo por otro con una varianza muy alta. Lo contrario sucede con modelos menos flexibles como la regresión lineal. En este caso el modelo se adapta a los datos de manera más rígida, lo que implica que cada punto tiene una influencia menor sobre la estimación, es decir su varianza es menor. Pero, al ser menos flexible esto implica que puede llegar a alejarse mucho del estadístico deseado, es decir tiene un sesgo grande. De esta manera se ve como hay un trade-off entre sesgo y varianza en los modelos.

d) Teniendo en cuenta las clases de regresiones regularizadas vistas en clase (eg. ridge, lasso), explique cómo funciona el trade-off entre sesgo y varianza y establezca una comparación entre los dos modelos (presente ventajas y desventajas).

A mayor complejidad vista como dimensiones o mayor cantidad de variables aumenta la varianza y presenta un sesgo bajo. Las variaciones en estos términos pueden afectar el error de la prueba y la interpretación.

Ventajas de Ridge Desventajas de Ridge Ventajas de Lasso Desventajas de Lasso
Restringiendo el tamaño de los coeficientes evito cancelar coeficientes negativos con positivos. Al analizar las soluciones hay un alto costo computacional porque \(\lambda\) si varía. Se puede generalizar como estimadores de Bayes. Al analizar las soluciones hay un alto costo computacional porque \(\lambda\) si varía.
Tiene una constante positiva sumada a \(X^TX\). Esto hace que el problema no sea singular aún si la multiplicación no es de rango completo. La región de la restricción tiene esquinas y por ello las soluciones en estos bordes hacen que algún \(\beta_j=0\). Asigna la menor q de tal forma que la región de la restricción sea convexa, así facilita el problema de optimización. Comportamiento intermedio respecto a otros métodos.
Versión escalada de MCO. También es la media posterior. Gran capacidad de procesamiento computacional. La contracción de Lasso causa que las estimaciones de los coeficientes que no son cero sean consistentes, pero sesgadas hacia cero.
SVD facilita el análisis de métodos estadísticos. La penalidad de la red elástica hace una selección de variables como Lasso.
Se puede generalizar como estimadores de Bayes. Se puede escribir de forma equivalente en forma de Lagrangiano.
La penalidad de la red elástica encoje los predicadores relacionados como Ridge. Conectado a LAR, este último es un algoritmo muy eficiente al computar todo el camino de Lasso.
Contracción suave, sin usar pasos discretos. LAR(Lasso) requiere el mismo orden computacional que un MCO con p predictores.
Tiene propiedades matemáticas y tiene la capacidad de recuperar un vector de coeficiente escaso subyacente.
Tiene linealidad por partes.
No se penaliza el intercepto y se estandarizan los predictores para que la penalidad sea significativa.

e) Indique cuál es la opción correcta. Justifique su respuesta: En una elección, los votantes eligen uno entre N candidatos posibles. Adicionalmente, los votantes no se comunican entre ellos mientras votan. ¿Cuál de los siguientes métodos trabaja de forma similar a ese procedimiento de votación?.

  • Boosting
  • Baggng
  • Todas las anteriores
  • Ninguna de las anteriores

Bagging es el método que trabaja de manera similar al proceso de votación, esto dado que en bagging se toman los resultados de múltiples estimaciones y se promedian entre sí con el propósito de reducir la varianza y el error de prueba. Ahora bien, una de las características de bagging es que toma crea múltiples bases para obtener un resultado de cada una y luego promediarlas, pero estas bases no comunican entre sí, no cambian su estimación en función de las otras. Lo anterior si sucede en boosting, pues dentro de este método cada nuevo proceso toma en cuenta lo sucedido en la estimación anterior, hay comunicación. Y, con base en esta comunicación, penalizan o no las decisiones anteriores para encontrar un mejor ajuste. Por este motivo, en el caso de la votación la mejor representación de esto es Bagging.

Punto 2:

a) Construya la variable a predecir, para ello calcule la media de la nota final, con base en esa media, cree una variable dicotómica que tome el valor de 1 si el estudiante tuvo una calificación final mayor a la media, 0 de lo contrario. Realice las transformaciones pertinentes en todas las variables.

Para contruir la variable dicótoma se debe encuentra la media de la nota final. En promedio los alumnos en la base de datos obtienen una nota de 11.91, por lo que se crea la variable nota que toma el valor de 1 si el estudiante i obtuvo una nota final por encima del promedio y 0 si obtuvo una nota final igual o menor al promedio.

dt$nota= ifelse(dt$G3>mean(dt$G3), 1, 0)

Así mismo, se explora la base de datos para ver si es necesario considerar cambios adicionales a las varaibles explicativas:

str(dt) # Todas las variables están correctamente definidas. 
head(dt) # Se explora las primeras observaciones de la base. 

dt=dt[, -1] # Se elimina la variable X, ya que  no es necesario el identificador. 
dt=dt[, -31] # Se elimina la varaible G3. 

# Se divide la base en entrenamiento y prueba:
  dt$nota <- as.factor(dt$nota)
  set.seed(123) # Para que se puedan replicar los resultados con el resto del grupo. 
  id=sample(1:nrow(dt),size=nrow(dt)*0.7)

  train=dt[id,] 
  test=dt[-id,] 

b) Implemente correctamente el problema de predicción usando árboles de decisión. Muestre el árbol formado e interprételo brevemente.

set.seed(123) 
tree <- rpart(nota ~ ., data = train,  method="class", control=rpart.control(xval=10, cp=1e-04)) 

El arbol inicial que se encuentra es:

El árbol busca clasificar correctamente si un estudiante está por encima o por debajo del promedio de la nota final de su clase. Así, el arbol comienza por dividir de acuerdo a si un estudiante aprovó o no la materia, dado que la cualidad de aprobar la materia depende de la nota final, el árbol sugiere que el promedio está por encima de la nota mínimo para aprobar, por lo que reprobar implica necesariamente estar por debajo del promedio.

Por el otro lado, un buen predictor sobre el desempeño del estudiante es si quiere entrar a educación superior o no. De esta forma, un estudiante que aprueba la materia y no está interesado en educación superior tiene mayor probabilidad de estar por debajo del promedio.

En términos generales, el árbol usa características del personales estudiante, de su familia y de la educación que recibió para hacer la predicción, esto busca dividir el espacio de características de tal forma que se minimice el error. Algunas divisiones de ese espacio son:

  • Para un estudiante que aprueba la materia, que quiere entrar a educación superior, cuya madre no trabaja en la casa, que es mujer, no cuenta con ayuda extra y su salud está autoregistrada por debajo de 4.5, el modelo predice que estará por encima del promedio.
  • Para un estudiante que aprueba la materia, que quiere entrar a educación superior, cuya madre no trabaja en la casa, que es mujer, que es hombre, no vive en una área rural, la razón por la cual va a ese colegio tiene que ver con la cercanía a su casa, la reputación o por los cursos, y tiene poca propensión a consumir alcohol entre semana; el modelo predice que estará por encima del promedio.
  • Para un estudiante que aprueba la materia, que quiere entrar a educación superior, cuya madre trabaja en la casa, cuyo tiempo de estudio a la semana es igual o menor a 30 minutos y valora altamente salir con sus amigos, el modelo predice que estará por debajo del promedio.

c) Muestre y explique el resultado de la validación cruzada ¿Cuál es el mejor parámetro de complejidad?

Se presentan los resultados de la validación cruzada:

CP nsplit rel error xerror xstd
0.2952 0 1.0000 1.0000 0.0506
0.0857 1 0.7048 0.7048 0.0476
0.0476 2 0.6190 0.6667 0.0469
0.0333 3 0.5714 0.6476 0.0465
0.0214 4 0.5381 0.6333 0.0462
0.0143 6 0.4952 0.6857 0.0472
0.0095 9 0.4524 0.6714 0.0469
0.0071 11 0.4333 0.6952 0.0474
0.0048 14 0.4095 0.7143 0.0477
0.0001 17 0.3952 0.6762 0.0470

Dado estos resultados, es claro que el parámetro de complejidad que minimiza el error es 0.0214. A continuación se realiza el árbol con el parámetro de complejidad óptimo:

#Mínimo error:
bestcp=tree$cptable[which.min(tree$cptable[,"xerror"]),"CP"]
  
# Podar árbol con el parámetro de error mínimo:
set.seed(123)
ptree<- prune(tree,
              cp= bestcp)

La validación cruzada se utiliza dado que probablemente el árbol inicial, entrenado usando toda la base de entrenamiento, probablemente overfits los datos, el proceso tiene como propósito escoger el valor del parámetro de complejidad que minimice el error. El parámetro de complejidad establece lo mínimo que debe reducirse el error para que se lleve acabo la división en un nodo, si ese nodo no reduce el error en más del parámetro de complejidad el nodo no se tiene en cuenta.

El proceso de validación cruzada implica en este caso que se dividen los datos de entrenamiento en 10 subgrupos y se contruyen 10 árboles distintos. Usando la técnica de dejar uno afuera se prueban distintos valores de \(\alpha\) y calculan el error del árbol con ese parámetro. De esta forma, la tabla anterior muestra los resultados de esas iteraciones usando 10 diferentes valores de \(\alpha\).

El árbol de clasificación una vez se usa el parámetro de error mínimo es:

d) Implemente Bagging y muestre las variables más importantes. Explique cuál es el criterio para calcular dicho ranking.

Para implementar bagging se usa el la misma función de Random Forest pero se establece que el algoritmo debe considerar todas las variables al momento de decidir la división del nodo, es decir, establecemos la opción mtry de la función igual a 30, que es el total de variables explicativas.

set.seed(123) 
est_bag = randomForest(nota ~., data=train,   mtry=30, importance=TRUE, ntree=2000)

El criterio para establecer qué tan importante es una variable se mide con la Disminución Media del Gini, esta es una medida de qué tanto una variable contribuye a la homogeneidad entre los nodos y hojas en el Random Forest final. Cuando se usa una variable determinada para dividir un nodo, el coeficiente de gini para los nodos subsiguientes se calcula y se compara con el gini del nodo anterior, así se establece que tanto se está reduciendo el gini con la división usando esa varaible. Entre más reduzca el gini una determinada variable, más importante es en el modelo.

e) Implemente Random Forest y muestre las variables más importantes.

set.seed(123) 
est_frs = randomForest(nota ~., data=train, importance=TRUE, ntree=2000)

f) Realice las predicciones de los tres métodos anteriores y evalúelas utilizando el Área bajo la curva. Según este criterio, ¿cuál es el mejor método?.

p_ptree <-predict(ptree, test, type="class")
p_bag <- predict(est_bag, test, type = "class")
p_randomf <- predict(est_frs, test, type = "class")

predicciones_reg= c("p_ptree", "p_bag","p_randomf")
nombres <- c("Árbol de Clasificación", "Bagging", "Bosques Aleatorios")
auc=NULL

for (i in 1:length(predicciones_reg)){
  A=get(paste(predicciones_reg[i]))
  p=AUC(A, test$nota)
  auc=rbind(auc, p)
}

resultados <- data.frame(Modelo=nombres, AUC=auc)
resultados$AUC <- round(resultados$AUC, 4)
kable(resultados)
Modelo AUC
Árbol de Clasificación 0.7102
Bagging 0.7170
Bosques Aleatorios 0.7012

De acuerdo a este criterio de decisión el modelo con mayor capacidad predictiva es el Bagging.

g) Implemente boosting de árboles utilizando el paquete gbm, para ello establezca inicialmente el número de árboles en 2000 y la profundidad de los árboles en 2, muestre las variables más importantes y el número de árboles óptimos.

set.seed(123) 
gbm1=gbm(nota~. , data=train, distribution="bernoulli",n.trees=2000, interaction.depth=2, 
          cv.folds = 15)

mejor = gbm.perf(gbm1, method="cv", plot.it = F)  # Validar resultados

## El arcol con el número de árboles óptimos es:
set.seed(123)
gbmf=gbm(nota~.,data=train,distribution="bernoulli",n.trees=mejor,interaction.depth=2)

De acuerdo a los resultados de la validación cruzada, el número de árboles óptimo es mean(mejor). Las 10 variables más importantes son:

Variable Influencia.Real
failures 33.700030
higher 12.638177
Medu 10.582507
Mjob 7.384213
school 5.008832
studytime 4.144773
Dalc 3.934079
sex 3.499685
absences 2.884155
Walc 2.518144

Además, las 10 variables menos importantes son:

Variable Influencia.Real
21 internet 0.4551846
22 famrel 0.4447439
23 age 0.1522053
24 Fjob 0.1102321
25 nursery 0.0795761
26 famsize 0.0229775
27 paid 0.0154945
28 Pstatus 0.0000000
29 famsup 0.0000000
30 romantic 0.0000000

h) Manteniendo el número de árboles en 2000, realice el tunning en forma conjunta (loops anidados) del mínimo número de observaciones que debe tener un nodo para poder ser dividido (valores 5, 7, 10) y la máxima profundidad de las interacciones entre las variables (valores 1,3, 4, 5, 7), ¿cuál es la mejor combinación?. Muestre las variables más importantes y grafique el error de validación versus los valores de la máxima profundidad de las interacciones entre las variables.

# Se definen los parámetros del loop:
a <- c(5, 7, 10)
b <- c(1, 3, 4, 5, 7)
cv <- NULL
A <- NULL
B <- NULL
c<-1

# Se contruye un loop para probar diferentes conbinaciones de los parámetros:
  for (i in 1:length(a)){
    for (j in 1:length(b)){
      set.seed(123)
      gbm_loop=gbm(nota~. , data=train, distribution="bernoulli",n.trees=2000, 
                   interaction.depth=b[j], n.minobsinnode=a[i], cv.folds = 10)
      A[c]=paste(a[i])
      B[c]=paste(b[j])
      cv[c]=mean(gbm_loop$cv.error) 
      c<-c+1
    }
  }

La siguiente tabla muestra el error promedio de validación para cada una de las combinaciones de los parámetros. Así, se puede observar que el número de observaciones óptimas que debe tener un nodo para poder ser dividido es 7 y la máxima profundidad óptima de las interacciones entre varaibles es 7.

Obs.Min.Nodo Max.Prof.Interac Error.Validacion
5 1 1.2438
5 3 1.1896
5 4 1.1800
5 5 1.1736
5 7 1.1670
7 1 1.2438
7 3 1.1890
7 4 1.1792
7 5 1.1723
7 7 1.1655
10 1 1.2437
10 3 1.1888
10 4 1.1780
10 5 1.1712
10 7 1.1656

A continuación se presentan las 10 varaibles más importantes para la combinación óptima:

Variable Influencia.Relativa
failures 20.108755
Mjob 7.731276
higher 7.225262
Medu 5.903274
absences 5.259239
sex 4.225433
studytime 3.883913
reason 3.802171
school 3.482543
Fedu 3.416522