Está en la página 1de 173

FACULTAD DE

INGENIERÍA Y CIENCIAS

CII3427 - Data Science

Aprendizaje Estadístico
Raúl Pezoa
Aprendizaje Estadístico

Aprendizaje estadístico se refiere a un amplio se de herramientas para


entender data. Pueden clasificarse en supervisadas y no supervisadas.
En términos amplios, aprendizaje supervisa implica construir modelos
para predecir o estimar, basado en uno o más inputs. Con aprendizaje
no supervisado, existen inputs pero no un output definido. Podemos
aprender sin embargo relaciones entre la data.
Ejemplo Aprendizaje supervisado

Pareciera que sueldo depende de la edad, sin embargo hay mucha


variabilidad. Otras variables? año, nivel de educación. Necesitaremos
combinar estas variables para intentar predecir el sueldo dado una
edad, año y nivel educativo. Esto es un problema de regresión.
Ejemplo Aprendizaje supervisado

Dado datos de una bolsa de comercio, queremos predecir si el valor


de un índice bajará o subirá usando data de los últimos 5 días. Este
es un problema de clasificación.
Ejemplo Aprendizaje no supervisado

Dados datos de células cancerígenas, existen grupos de característi-


cas diferentes? Esto es un problema de clustering, puede utilizarse
posteriormente para clasificar (pasando a supervisado) o bien solo
como manera de extraer información.
Aprendizaje supervisado - Fijando ideas I

Supongamos que tenemos una base con datos con ventas y el monto
destinado a promoción en radio, TV y periódicos.
1 head ( A d v e r t i s i n g )
2 # TV r a d i o newspaper s a l e s
3 # 1 230.1 37.8 69.2 2 2 . 1
4 #2 44.5 39.3 45.1 10.4
5 #3 1 7 . 2 45.9 69.3 9.3
6 #4 1 5 1 . 5 41.3 58.5 18.5
7 #5 180.8 10.8 58.4 12.9
8 #6 8.7 48.9 75.0 7.2

Claramente, la empresa no puede cambiar directamente las ventas,


pero si los montos de promoción. Queremos ajustar un modelo que
nos permita predecir ventas dependiendo en estas variables.
• Variables independientes: TV, radio, newspaper.
• Variable dependiente: sales.
Aprendizaje supervisado - Fijando ideas II
Aprendizaje supervisado - Fijando ideas III

De manera general, observamos una variable cuantitativa Y y p dife-


rentes predictores X = (X1 , . . . , Xp ), y la relación se escribe

Y = ƒ (X ) + ϵ

con ϵ independiente de X y media cero.


Lo mejor que podemos hacer con un set de datos es estimar la función
ƒ , obteniendo ƒ̂ .
Aprendizaje supervisado - Fijando ideas IV
Para qué estimar ƒ I

• Para predecir: Si tenemos un nuevo set de datos X, dado que


los errores se promedian a cero, podemos estimar los nuevos
valores de Y por
Ŷ = ƒ̂ (X )

Sin embargo, esto contiene dos tipos de errores:


– Reducible: Ajustando “mejores” funciones ƒ̂ podemos minimi-
zarlo.
– Irreducible: Asociado al término ϵ, que asumimos independiente
de X. Puede contener información de otras variables relevantes
no medidas, o simplemente efectos aleatorios.
Para qué estimar ƒ II

]︀2
E(Y − Ŷ )2 = E ƒ (X ) + ϵ − ƒ̂ (X )
[︀
]︀2
= ƒ (X ) − ƒ̂ (X ) + Var(ϵ)
[︀
⏟ ⏞ ⏟ ⏞
Reducible Irreducible

• Para hacer inferencia: Nos interesa ver cómo X afecta Y , por lo


que queremos estimar ƒ pero no necesariamente predecir.
– Cuáles predictores impactan significativamente en Y .
– Elasticidades.
• En el caso de ventas y promoción, las preguntas podrían ser:
– Predicción: ?
– Inferencia: ?
Cómo estimar ƒ ?

• A partir de un set de datos, que llamaremos datos de entrena-


miento queremos encontrar, a grandes rasgos, ƒ̂ tal que Y ≈
ƒ̂ (X ) para cualquier observación (X, Y ). Esto puede ser realiza-
do a partir de dos tipos de técnicas:
– Paramétricos: Asumimos una forma funcional para ƒ , por e.g.
lineal
ƒ ( X ) = β0 + β1 X1 + . . . + βp Xp

para luego estimar β0 , . . . , βp usando por ejemplo mínimos cua-


drados
– No paramétricos: No asumimos forma funcional, intentamos
encontrar estimador de ƒ no demasiado sobreajustado (e.g. SVM,
redes neuronales).
Trade-off entre precisión e interpretabilidad

¿Por qué elegiríamos un enfoque más restrictivo en vez de uno más


flexible? Depende del objetivo.
Cómo evaluamos bondad de ajuste? I
• De manera genérica, en regresión se suele utilizar
n
1 ∑︁
MSE = (y − ƒ̂ ( ))2
n =1

donde ƒ̂ ( ) es la predicción para el i-ésimo dato. Nos interesa


este valor sobre el set de entrenamiento?

La verdad es que no demasiado, no nos interesa instancias sobre


las cuales ya sabemos su resultado. Si tuviéramos instancias nue-
vas (N1 , y1N ), . . . , (Nm , ym
N
) (de validación) nos gustaría calcular
quizás
m
1 ∑︁
MSE_Validación = (yN − ƒ̂ (N ))2
m =1
Cómo evaluamos bondad de ajuste? II

• Cómo lo hacemos para evaluar MSE_Validación? Si de repente


llegan más datos, fácil. Si no?
• Basta con realizar una vez esto?
• Y si seleccionamos método o parámetros que minimizan
MSE_Validación directamente?
Sobreajuste
Descomponiendo Error

• Es fácil mostrar que podemos descomponer error esperado de


la siguiente forma
]︀2
E(y0 − ƒ̂ (0 )) = Var(ƒ̂ (0 )) + Bias(ƒ̂ (0 )) + Var(ϵ)
[︀

donde
– Var(ƒ̂ (0 )): Varianza del estimador de ƒ̂ cuando es estimado
sobre diferentes sets de entrenamiento. Métodos muy flexibles
o con muchos grados de libertad tienen alta varianza.
– Bias(ƒ̂ (0 )): Error introducido por una posible simplificación en
la forma funcional de ƒ , por e.g. asumirla lineal. Métodos muy
flexibles o con muchos grados de libertad tienen poco bias.
Descomponiendo Error
Y qué pasa con clasificación?

• Intuitivamente, querríamos usar medida


n
1 ∑︁
 (y 6= ŷ )
n =1


⎨1 si y 6= ŷ
con  (y 6= ŷ ) =
⎩0 si y = ŷ
• Qué pasa si hay alguna clase muy minoritaria?
Validación
Validación I
• Hemos hablado sobre problema con ajustar y evaluar modelo
sobre un único conjunto.

• Maximizar el rendimiento sobre el mismo conjunto de ajuste


recompensa a modelos muy complejos que no generalizan bien.
• La idea es tener una estimación del error en el futuro
Validación II

• Introduciremos formalmente dos métodos de validación:


– Leave-one-out
– k -capas
Leave-one-out I

• Separar la data en dos conjuntos


Entrenamiento={(2 , y2 ), (3 , y3 ), . . . , (n , yn )}
Validación={(1 , y1 )}
• Ajustar modelo sobre Entrenamiento, validar sobre Validación.
• Repetir, dejando una observación diferente cada vez.
Leave-one-out II

• ¿Cómo calculamos error promedio? Basta calcular


n
1 ∑︁
Error
n =1

donde Error es la medida de error que nos interesa sobre el


dato -ésimo. Es decir, promediamos los resultados de los errores
sobre los n datos.
k -fold I

• Separar la data en k conjuntos C1 , C2 , . . . , Ck de tamaño similar,


elegidos de manera aleatoria.
• Ajustar modelo sobre Entrenamiento = {C2 , . . . , Ck }. Validar
sobre C1
• Repetir, dejando un conjunto fuera cada vez.
k -fold II

• ¿Cómo calculamos error promedio? Basta calcular


k
1 ∑︁
Errork
k =1

donde Errork es la medida de error que nos interesa sobre el


k -ésimo conjunto. Es decir, promediamos los resultados de las
k repeticiones.
Regresión Lineal
Regresión Lineal

• Uno de los primeros enfoques que a uno se le ocurren para el


contexto de predicción de una variable cuantitativa.
• Pese a que suena más fome que enfoques más modernos, puede
ser la herramienta adecuada en muchos casos.
• Además, no podemos pretender aplicar técnicas más sofistica-
das si no entendemos regresiones lineales.
Regresión Lineal Simple I

• Como todos sabemos, asume una relación lineal entre la variable


dependiente y la independiente:

Y = β0 + β1 X + ϵ

• Cómo estimamos los coeficientes? Sean β̂0 y β̂1 dichos estima-


dores. El error para el valor  de Y será

e = y − ŷ = y − β̂0 − β̂1 

y definimos la suma de los residuos cuadrados como

RSS = e2 + . . . + e2
1 n
Regresión Lineal Simple II

El método de los mínimos cuadrados ordinarios (OLS) se basa


en escoger β̂0 y β̂1 tales que minimicen RSS.
• Intuitivamente, OLS minimiza las distancias verticales de las
observaciones a la línea de regresión
Regresión Lineal Simple III
Extensiones I

• Variables Cualitativas: Las variables predictoras no necesaria-


mente deben ser cuantitativas. Si la variable tiene dos niveles,
digamos  ∈ {0, 1}, usar esta variable resulta en el modelo

⎨β + β + ϵ si  = 1
0 1  
y = β0 + β1  + ϵ =
⎩β 0 + ϵ  si  = 0

Es decir, agregamos un intercepto particular a uno de los grupos.


Extensiones II
Si la variable tiene más niveles, por ejemplo,  ∈ {A, B, C},
podemos crear variables dummys

⎨1 si  = A

1 =
⎩0 si  6= A


⎨1 si  = B
2 =
⎩0 si  6= B

y modelo queda

⎨β 0 + β 1 + ϵ  si  = A


y = β0 + β1 1 + β2 2 + ϵ = β0 + β2 + ϵ si  = B

β0 + ϵ si  = C


Extensiones III
Es decir, agregamos interceptos específicos para dos grupos. En
general, siempre habrá n − 1 interceptos, con n número de
niveles. Al grupo sin intercepto lo llamamos nivel basal.
• Interacciones Consideremos el modelo estándar de dos varia-
bles
Y = β0 + β1 X1 + β2 X2 + ϵ

De acuerdo a este modelo, si X1 aumenta en una unidad, Y


aumenta en un promedio de β1 unidades. El valor de X2 no
modifica este hecho. Una extensión natural es considerar

Y = β0 + β1 X1 + β2 X2 + β3 X1 X2 + ϵ

= β0 + (β1 + β3 X2 ) X1 + β2 X2 + ϵ
Extensiones IV

Como (β1 + β3 X2 ) cambia con X2 , el efecto de un aumento en


X1 sobre Y no es constante. Lo mismo es aplicable con variables
categóricas.
Extensiones V
• Relaciones No Lineales Otra extensión natural es considerar el
modelo (por ejemplo)

Y = β0 + β1 X1 + β2 X 2 + ϵ
1

Este modelo sin embargo sigue siendo lineal.


• En R
1 # Interaccion
2 modelo <− lm ( s a l e s∼TV* r a d i o , d a t a = A d v e r t i s i n g )
3
4 # R e l a c i o n no l i n e a l
5 modelo <− lm ( s a l e s∼TV+ I ( TV ^ 2 ) , d a t a = A d v e r t i s i n g )
6 # Graficar regresion cuadratica
7 l i b r a r y ( ggplot2 )
8 q p l o t ( TV , s a l e s , d a t a = A d v e r t i s i n g , geom= c ( " p o i n t " , " smooth " ) , method = " lm " , f o r m u l a
=y ∼ x + I ( x ^2) , se =F )
Selección de Modelo
Selección de Modelo

• La elección de un modelo es un arte, no hay una forma correcta


de hacerlo. Lo más importante es entender el fenómeno, inten-
tar decidir a priori cuáles variables o relaciones debiesen ser
importantes y con qué signo.
• Pese a esto, podemos sistematizar la elección, no es siempre lo
ideal, pero es una opción.
• Para esto, necesitamos definir algunos indicadores.
Indicadores de bondad de ajuste I
• Recordemos que una opción para cuantificar qué tan buena es
una regresión es utilizar el KPI
n
1 ∑︁ RSS
MSE = (y − ŷ )2 =
n 
n

• Sin embargo, pensar en elegir el modelo con el menor MSE


puede terminar causando un sobreajuste, ya que solo damos
cuenta del bias, no de la varianza.
• Para ajustarlo, si tenemos d predictores, definimos

1
Cp = (RSS + 2dσ̂ 2 )
n
Indicadores de bondad de ajuste II

Con σ̂ 2 un estimador de la varianza de los errores σ 2 . Agregamos


un término que da cuenta de la varianza del método de ajuste,
y que crece con el número de estimadores. Se puede probar
que si σ̂ 2 un estimador insesgado de σ 2 , entonces Cp es un
estimador insesgado del error sobre un set de validación.
• Definimos una medida proporcional Criterio de Información de
Akaike
1
AIC = 2
(RSS + 2dσ̂ 2 )
nσ̂
Indicadores de bondad de ajuste III

• Definimos el Criterio de Información Bayesiano

1
BIC = (RSS + log(n)dσ̂ 2 )
n

dado que log(n) > 2 para n > 7, casi siempre BC penaliza
más que Cp y AC el número de predictores, por lo que selec-
ciona modelos más pequeños.
• Finalmente, definimos el R2 ajustado, que corrige el hecho que
R2 siempre aumenta con número de variables

RSS/ (n − d − 1)
R2 ajustado = 1 −
TSS/ (n − 1)
Una posible forma : Elegir el mejor subset I

1. Sea M0 el modelo nulo sin predictores y que predice la media


muestral para cada observación.
2. Para k = 1, . . . , p:
(︀p)︀
a) Ajustar todos los k modelos que contienen k predictores.
b) Escoger el mejor de esos modelos, llamándolo Mk . El mejor está
definido como el que tiene el menor RSS, o equivalentemente el
mayor R2 .
3. Escoger el mejor modelo entre M0 , M1 , . . . , Mp , esta vez
ocupando como criterio Cp , BIC o R2 ajustado.
Una posible forma : Elegir el mejor subset II

1 d f <− f r e a d ( " Wage . c s v " , sep = " ; " , dec = " , " )
2
3 l i b r a r y ( leaps )
4 r e g f i t . f u l l = r e g s u b s e t s ( wage∼. , d a t a = df , nvmax = 1 6 )
5 r e g . summary <− summary ( r e g f i t . f u l l )
6
7 # G r a f i c a m o s e v o l u c i o n cp , b i c y r 2 a j u s t a d o segun numero de v a r i a b l e s
8 l i b r a r y ( ggplot2 )
9 q p l o t ( 1 : 1 6 , r e g . summary $ cp )
10 q p l o t ( 1 : 1 6 , r e g . summary $ b i c )
11 q p l o t ( 1 : 1 6 , r e g . summary $ a d j r 2 )
12
13 #Vemos g r a f i c a m e n t e c u a l e s e l mejor modelo segun cada i n d i c a d o r
14 plot ( r e g f i t . full , scale =" adjr2 " )
15 p l o t ( r e g f i t . f u l l , s c a l e = " Cp " )
16 plot ( r e g f i t . full , scale =" bic " )
Una posible forma: Forward Stepwise Selection I

1. Sea M0 el modelo nulo sin predictores y que predice la media


muestral para cada observación.
2. Para k = 0, . . . , p − 1:
a) Considerar todos los p − k modelos que agregan un predictor
adicional a Mk .
b) Escoger el mejor de esos modelos, llamándolo Mk +1 . El mejor
está definido como el que tiene el menor RSS, o equivalente-
mente el mayor R2 .
3. Escoger el mejor modelo entre M0 , M1 , . . . , Mp , esta vez
ocupando como criterio Cp , BIC o R2 ajustado.
Una posible forma: Forward Stepwise Selection II

1 l i b r a r y ( leaps )
2 r e g f i t . fw = r e g s u b s e t s ( wage∼. , d a t a = df , method = " f o r w a r d " , nvmax = 1 6 )
3 r e g . summary <− summary ( r e g f i t . fw )
4
5 # G r a f i c a m o s e v o l u c i o n cp , b i c y r 2 a j u s t a d o segun numero de v a r i a b l e s
6 l i b r a r y ( ggplot2 )
7 q p l o t ( 1 : 1 6 , r e g . summary $ cp )
8 q p l o t ( 1 : 1 6 , r e g . summary $ b i c )
9 q p l o t ( 1 : 1 6 , r e g . summary $ a d j r 2 )
10
11 #Vemos g r a f i c a m e n t e c u a l e s e l mejor modelo segun cada i n d i c a d o r
12 p l o t ( r e g f i t . fw , s c a l e = " a d j r 2 " )
13 p l o t ( r e g f i t . fw , s c a l e = " Cp " )
14 p l o t ( r e g f i t . fw , s c a l e = " b i c " )
Una posible forma: Backward Stepwise Selection I

1. Sea Mp el modelo completo, que contiene todos los


predictores.
2. Para k = p, p − 1, . . . , 1:
a) Considerar todos los k modelos que agregan que quitan úni-
camente uno de los predictores de Mk , para así tener k − 1
predictores.
b) Escoger el mejor de esos modelos, llamándolo Mk −1 . El mejor
está definido como el que tiene el menor RSS, o equivalente-
mente el mayor R2 .
3. Escoger el mejor modelo entre M0 , M1 , . . . , Mp , esta vez
ocupando como criterio Cp , BIC o R2 ajustado.
Una posible forma: Backward Stepwise Selection II

1 l i b r a r y ( leaps )
2 r e g f i t . bw= r e g s u b s e t s ( wage∼. , d a t a = df , method = " backward " , nvmax = 1 6 )
3 r e g . summary <− summary ( r e g f i t . bw )
4
5 # G r a f i c a m o s e v o l u c i o n cp , b i c y r 2 a j u s t a d o segun numero de v a r i a b l e s
6 l i b r a r y ( ggplot2 )
7 q p l o t ( 1 : 1 6 , r e g . summary $ cp )
8 q p l o t ( 1 : 1 6 , r e g . summary $ b i c )
9 q p l o t ( 1 : 1 6 , r e g . summary $ a d j r 2 )
10
11 #Vemos g r a f i c a m e n t e c u a l e s e l mejor modelo segun cada i n d i c a d o r
12 p l o t ( r e g f i t . bw , s c a l e = " a d j r 2 " )
13 p l o t ( r e g f i t . bw , s c a l e = " Cp " )
14 p l o t ( r e g f i t . bw , s c a l e = " b i c " )
Enfoques más modernos I

• Los enfoques anteriormente mencionados son muy clásicos.


forward y backward están pensados para reducir cálculos, pero
eso usualmente no es un problema actualmente. Pese a esto,
elegir el mejor subset se va al otro extremo.
• Existen herramientas de aprendizaje automático que buscan
liberar de esta decisión sobre el mejor modelo al tomador de
decisiones, sobretodo cuando existen muchas variables inde-
pendientes.
• Son muy útiles, pero no hay que pensarlas como balas de plata,
de ser posible, un razonamiento y análisis adecuado del mode-
lador es mucho más recomendable.
Enfoques más modernos II

• Intuición: Si ajustamos modelo con todos los p posibles regreso-


res, las variables poco importantes debiesen tener parámetro
estimado cercano a cero.
• Problema con eso? Escala. Pero eso es solucionable normalizan-
do todas los predictores:

k − k
̃k =
sd(k )

• Pese a esto, las variables poco importantes pueden tener pará-


metros estimados relativamente grandes simplemente porque
esto produce un ajuste marginalmente mejor. ¿Cómo lo aborda-
mos? Contrayendo los parámetros a cero.
Regresión ridge o contraída I

• Recordemos que OLS encuentra los estimadores β0 , . . . , βp mi-


nimizando
⎛ ⎞2
n p
∑︁ ∑︁
RSS = ⎝y  − β 0 − βj j ⎠
=1 j=1

• Una regresión contraída es similar, pero penaliza explícitamente


a los estimadores, minimizando
⎛ ⎞2
n p p p
∑︁ ∑︁ ∑︁ ∑︁
2
⎝y  − β 0 − βj j ⎠ + λ β = RSS + λ β2
j j
=1 j=1 j=1 j=1

con λ ≥ 0 un parámetro de ajuste, determinado por separado.


Regresión ridge o contraída II

• Cuando λ = 0, recuperamos OLS. Cuando λ → ∞, β1 = β2 =


. . . = βp = 0.
Regresión ridge o contraída III
• ¿Por qué esto mejora a OLS? La respuesta está en el trade-off
sesgo-varianza. Hacer una regresión con todos los p predicto-
res (posiblemente miles) es un método con poco sesgo, pero
muchísima varianza. A medida que λ crece, la flexibilidad de
la, regresión contraída disminuye, y con ello aumenta el sesgo
pero disminuye la varianza.

Sesgo (negro), varianza (verde).


Regresión ridge o contraída IV

• Por tanto, las regresiones contraídas tienen ventaja sobre OLS


cuando este último presenta mucha varianza. Esto es el caso
cuando hay muchos predictores.
• Tiene ventaja sobre la búsqueda sobre todos los subconjuntos,
que ajusta 2p modelos.
• Sin embargo, la elección del parámetro λ es clave.
Regresión ridge o contraída V

1 l i b r a r y ( glmnet )
2 d f <− f r e a d ( " c r e d i t . c s v " , sep = " ; " , dec = " , " )
3 x = model . m a t r i x ( L i m i t∼. , d a t a = d f ) [ , − 1 ]
4 y= df $ L i m i t
5
6 # Por defecto , glmnet n o r m a l i z a v a r i a b l e s
7 # p a r a c a m b i a r e s t o , a g r e g a r s t a n d a r d i z e = FALSE
8 modelo . r i d g e = g l m n e t ( x , y , a l p h a =0 , nlambda =200)
9 p l o t ( modelo . r i d g e , x v a r = " lambda " , l a b e l = T )
10
11 # modelo . r i d g e almacena l o s c o e f p a r a cada uno de
12 # l o s p o s i b l e s lambdas , l o s i g u i e n t e e s p a r a o b t e n e r
13 # l o s c o e f p a r a e l p r i m e r lambda
14 c o e f ( modelo . r i d g e ) [ , 1 ]
15
16 # v a l i d a m o s p a r a v e r c u a l e s e l mejor lambda
17 c v . o u t = c v . g l m n e t ( x , y , a l p h a =0 , nlambda =200)
18 p l o t ( cv . out )
19 mejorlambda = c v . o u t $ lambda . min
20 coef ( cv . out )
LASSO I

• Regresión contraída tiene una contra: reduce los estimadores,


pero no fija ninguno a cero. Por tanto, genera regresión con los
p predictores.

• Si el set de predictores es grande, modelo es poco interpretable.


• LASSO es una alternativa reciente que soluciona esto. LASSO
minimiza
⎛ ⎞2
n p p p
∑︁ ∑︁ ∑︁ ∑︁
⎝y  − β 0 − βj j ⎠ + λ |βj | = RSS + λ |βj |
=1 j=1 j=1 j=1

• La intuición es exactamente la misma que para una regresión


contraída.
LASSO II

• Sin embargo, al usar una penalización ℓ1 en vez de ℓ2 como en


el caso de ridge, logra fijar varios estimadores directamente a
cero.
• Por tanto, LASSO efectivamente realiza una selección de varia-
bles, y es usada usualmente para ese fin.
LASSO III

1 l i b r a r y ( glmnet )
2 l i b r a r y ( data . t a b l e )
3 d f <− f r e a d ( " c r e d i t . c s v " , sep = " ; " , dec = " , " )
4 x = model . m a t r i x ( L i m i t∼. , d a t a = d f ) [ , − 1 ]
5 y= df $ L i m i t
6
7 # Por defecto , glmnet n o r m a l i z a v a r i a b l e s
8 # p a r a c a m b i a r e s t o , a g r e g a r s t a n d a r d i z e = FALSE
9 modelo . l a s s o = g l m n e t ( x , y , a l p h a = 1 , nlambda =200)
10 p l o t ( modelo . l a s s o , x v a r = " lambda " , l a b e l = T )
11
12 # v a l i d a m o s p a r a v e r c u a l e s e l mejor lambda
13 c v . o u t = c v . g l m n e t ( x , y , a l p h a = 1 , nlambda =200)
14 p l o t ( cv . out )
15 mejorlambda = c v . o u t $ lambda . min
16 coef ( cv . out )
Clasificación
Regresiones Logísticas
Clasificación

• Una regresión lineal como las vistas asume que la variable de-
pendiente Y es cuantitativa.
• Sin embargos, en muchos contextos, la variable a predecir puede
ser cualitativa:
– Un paciente llega a un hospital con un set de síntomas, ¿qué
nivel de riesgo presenta?
– Un sitio web de un banco debe decidir si una transacción es frau-
dulenta o no, basado en, por ejemplo, transacciones históricas.
• Estos problemas son de clasificación, nos olvidamos de regre-
sión.
¿Por qué no usar regresión lineal? I

• Supongamos que estamos en el contexto de predecir el riesgo


médico con el que llega un paciente a un hospital. Por simplici-
dad, supongamos tres niveles: bajo, medio, alto.
• Consideremos la siguiente codificación:

⎨1

⎪ si es bajo
Y= 2 si es medio

si es alto

3

¿Por qué no usar regresión lineal? II

• En este caso, parece natural dicha codificación, y podríamos usar


OLS para ajustar regresión lineal basado en valores de variables
X1 , . . . , Xp . Pero por ejemplo, si ahora queremos detectar con-
diciones médicas, por simplicidad tres casos: ataque cardíaco,
sobredosis, ataque epiléptico, ¿cómo codificamos?
¿Por qué no usar regresión lineal? III

• Consideremos la siguiente codificación:



⎨1

⎪ si es ataque cardíaco
Y= 2 si es ataque sobredosis

si es ataque epiléptico

3

• Bajo esa codificación, usando una regresión lineal sugerimos que


existe una misma “distancia” entre ataque cardíaco y sobredosis
que entre sobredosis y ataque epiléptico. Más aún, sugerimos
que sobredosis involucra síntomas entre las otras dos.
• Podríamos cambiar codificación, con lo que cambia todo el mo-
delo. En ese sentido, no es robusto.
¿Por qué no usar regresión lineal? IV

• Si la variable a predecir es binaria, por ejemplo, en el caso del


banco

⎨0 si transacción no es fraudulenta
Y=
⎩1 si transacción es fraudulenta

la situación pareciera menos severa y más natural. De hecho,


en este caso β̂X es un estimador de Pr(sobredosis|X ).
¿Por qué no usar regresión lineal? V

• Sin embargo, β̂X puede no estar en [0, 1], lo que dificulta su


interpretación como probabilidad.
• Esto usualmente es grave, objetivo podría ser encontrar proba-
bilidad de cada uno de las posibles casos.
• Además, hay problemas con los supuestos:
– Var(Y |X ) = p(X )(1 − p(X )) con p(X ) = Pr(Y = 1|X ) = βX
– Pero Var(Y |X ) = Var(ϵ)
– Luego, Var(ϵ) = βX (1 − βX ) que depende de X
– ⇒ Heterocedasticidad.
Regresión Logística I

• Regresión logística, como caso particular de un modelo lineal


generalizado, se hace cargo de estos problemas (respuestas
binarias en Y y varianza que depende de X).
• La idea es modelar linealmente un proxy η de lo que queremos
realmente llegar a predecir.

η = β0 + β1 X

• En este caso nos interesa Prob(Y = 1|X ) = p(X ), la cual se


relaciona con η a través de una función link.
• La principal intuición de la función link es que traslada valores
desde (−∞, ∞) (el recorrido de una regresión lineal) a [0, 1]
(los posibles valores de una probabilidad).
Regresión Logística II
• Ocuparemos como link la función logística

1 1
p(X ) = =
1 + e− η 1 + e − β0 − β1 X
Regresión Logística III

• Con un poco de manipulación obtenemos

p(X )
(︃ )︃
log = β0 + β1 X
1 − p(X )

donde al lado izquierdo lo llamamos logit. Una regresión logísti-


ca tiene un logit lineal en X.
• Pese a que la relación entre X y p(X ) no es lineal, si podemos
asegurar que si
– β1 > 0, un aumento en X implica un aumento en p(X ).
– β1 < 0, un aumento en X implica una disminución en p(X ).
Ajustando Regresión Logística I

• A diferencia de OLS, los parámetros de una regresión logística


son ajustados por máxima verosimilitud
∏︁ ∏︁
(βˆ0 , βˆ1 ) = argmáx ℓ(β0 , β1 ) = p( ) (1− p(0 ))
:y =1 0 :y 0 =0

• Las mismas intuiciones que en OLS pueden ser ocupadas para


errores estándar, intervalos de confianza, etc.
Intuición - Ejemplo de Juguete I
Intuición - Ejemplo de Juguete II
Intuición - Ejemplo de Juguete III
Intuición - Ejemplo de Juguete IV

• ¿Cómo clasifica? Digamos que declaramos que y = 1 si p(y |X ) ≥


0,5. De las definiciones anteriores, es fácil encontrar que esto
pasa ssi β0 + β1 X ≥ 0.
Intuición - Ejemplo de Juguete V
En R

1 l i b r a r y ( data . t a b l e )
2 e n t r <− f r e a d ( " D e t e c c i o n F r a u d e . c s v " , sep = " ; " , dec = " , " )
3
4 r e g l o g <− glm ( f r a u d e∼monto , d a t a = e n t r , f a m i l y = b i n o m i a l ( ) )
5 summary ( r e g l o g )
6
7 # probabilidades estimadas
8 e n t r $ p r o b e s t i m a d a s <− r e g l o g $ f i t t e d . v a l u e s
9 # probamos con una p r o b a b i l i d a d de c o r t e 0 . 5
10 e n t r $ p r e d i c c i o n <− i f e l s e ( e n t r $ p r o b e s t i m a d a s > = 0 . 5 , 1 , 0 )
11
12 # p o r c e n t a j e de a c i e r t o ( a c c u r a c y )
13 l e n g t h ( which ( e n t r $ f r a u d e == e n t r $ p r e d i c c i o n ) ) * 100 / nrow ( e n t r )
14
15 # p e r o hay mas t i p o s de e r r o r e s
16 t a b l e ( pred = e n t r $ p r e d i c c i o n , t r u e = e n t r $ f r a u d e )
Tipos de predicciones I

True Negative + True Positive


• Accuracy =
Total de Predicciones
Tipos de predicciones II

• Es una muy mala medida cuando las clases están desequilibra-


das. En general es mejor idea ocupar sensitivity y specificity.
True Positives
• Sensitivity =
Total Positivos (P)
True Negatives
• Specificity =
Total Negativos (N)
• Me gustaría Sensitivity=Specificity=1. Usualmente imposible.
• Existe trade-off entre ambas medidas, si aumento probabilidad
de corte, crece Specificity pero disminuye Sensitivity.
Curva ROC

AUC = Área bajo la curva, entre más cercano a 1, mejor es el clasifica-


dor.
En R

1 i n s t a l l . packages ( " devtools " )


2 l i b r a r y ( devtools )
3 i n s t a l l _ github ( " raulpezoa / udpdatascience " )
4 l i b r a r y ( udpdatascience )
5
6 p0 <− p r o b c o r t e ( modelo = r e g l o g , d a t a = e n t r , s p e c = 0 . 8 ) $p0
7
8 # probamos con d i c h a p r o b a b i l i d a d
9 e n t r $ p r e d i c c i o n <− i f e l s e ( e n t r $ p r o b e s t i m a d a s >=p0 , 1 , 0 )
10
11 #como s e ve ?
12 f r o n t e r a g l m ( r e g l o g , e n t r , p0 )
13 # que p a s a s i muevo p r o b a b i l i d a d
14 f r o n t e r a g l m ( r e g l o g , e n t r , p0 + 0 . 0 1 )
15 f r o n t e r a g l m ( r e g l o g , e n t r , p0 − 0 . 0 1 )
¿Cómo elegimos p0 ?

• Podría ser indicado por el tomador de decisiones.


– Caso más sencillo, pero menos flexible.
• Podríamos encontrar el punto que maximice alguna métrica de
desempeño.
– Promedio de sensibilidad y especificidad.
– F1 .
Indicador F1
1.00

0.75

Indicador
Valor

F1
0.50
Sens
Spec

0.25

0.00

0.00 0.25 0.50 0.75 1.00


p0

2
F1 =
1 1
+
Sensibilidad Especificidad
Selección de Variables en RL

• En RL podemos utilizar enfoques parecidos a regresión lineal.


– Probar todos los subconjuntos ¿con qué métrica comparamos?
– Elastic Net
⎛ ⎞
∏︁ ∏︁
mı́n − log ⎝ p(  ) (1 − p(0 ))⎠
:y =1 0 :y0 =0
⎛ ⎞
p p
∑︁ ∑︁
+ λ ⎝α β2 + (1 − α )
j
| β j |⎠
j=1 j=1

– Early Stopping
K-Nearest Neighbors (KNN)
KNN I
• Como vimos para regresión logística, la idea es en general esti-
mar la probabilidad de ocurrencia Prob(Y = 1|X ) = p(X ).
• Posteriormente, definiríamos una regla de clasificación, i.e. se
predice Y = 1 si p(X ) > p0 .
• La dificultad radica, claramente, en estimar p(X ).
• Una forma natural, pero no paramétrica de hacerlo es a través
de los K vecinos más cercanos.
KNN II

• En términos concretos, simplemente se estiman probabilidades


como
1 ∑︁
p(Y = j|X ) =  (y = j)
K ∈N
0

donde N 0 corresponde a los K vecinos más cercanos.


• Posteriormente, se utiliza una regla de clasificación.
• ¿Valor de K ?
Evolución frontera con K

cls
c
y

3 v

4 5 6 7 8
x

K=1
Evolución frontera con K

cls
c
y

3 v

4 5 6 7 8
x

K=3
Evolución frontera con K

cls
c
y

3 v

4 5 6 7 8
x

K = 40
Evolución frontera con K

• Un K pequeño genera más variabilidad, la frontera es más ines-


table (menor sesgo, mayor varianza).
• Un K grande genera una frontera más suave y estable (mayor
sesgo, menor varianza).
En R
1 l i b r a r y ( udpdatascience )
2 i n s t a l l . packages ( " caret " )
3 l i b r a r y ( caret )
4 # N e c e s i t a m o s que l a v a r i a b l e d e p e n d i e n t e s e a f a c t o r , s i no , hace r e g r e s i o n
5 e n t r $ f r a u d e <− a s . f a c t o r ( e n t r $ f r a u d e )
6 modeloknn <− knn3 ( f r a u d e∼monto+ b a l a n c e f i n a l d e s t , d a t a = e n t r , k =20 , prob = T )
7 modeloknn
8 e n t r $ p r o b e s t i m a d a s <− p r e d i c t ( modeloknn , e n t r , t y p e = " prob " ) [ , 2 ]
9 e n t r $ p r e d i c c i o n <− i f e l s e ( e n t r $ p r o b e s t i m a d a s > = 0 . 5 , 1 , 0 )
10 t a b l e ( pred = e n t r $ p r e d i c c i o n , t r u e = e n t r $ f r a u d e )
11
12 # Nuevamente , p0 = 0 . 5 p r o b a b l e m e n t e no e s buena e l e c c i o n
13 p r o b c o r t e ( modeloknn , d a t a = e n t r , s p e c = 0 . 8 , t i p o = " knn " )
14 e n t r $ p r e d i c c i o n <− i f e l s e ( e n t r $ p r o b e s t i m a d a s > = 0 . 0 4 7 6 1 9 0 5 , 1 , 0 )
15 t a b l e ( p r ed = e n t r $ p r e d i c c i o n , t r u e = e n t r $ f r a u d e )
16 f r o n t e r a k n n ( modeloknn , e n t r , prob = 0 . 0 4 7 6 1 9 0 5 )
17
18 # En v a l i d a c i o n
19 v a l $ p r o b e s t i m a d a s <− p r e d i c t ( modeloknn , v a l , t y p e = " prob " ) [ , 2 ]
20 v a l $ p r e d i c c i o n <− i f e l s e ( v a l $ p r o b e s t i m a d a s > = 0 . 0 4 7 6 1 9 0 5 , 1 , 0 )
21 t a b l e ( p r ed = v a l $ p r e d i c c i o n , t r u e = v a l $ f r a u d e )
22 f r o n t e r a k n n ( modeloknn , v a l , prob = 0 . 0 4 7 6 1 9 0 5 )
The Curse of Dimesionality
• Sabemos que, en general, el agregar variables independientes a
un modelo cualquiera inicialmente aumenta el rendimiento, y
luego lo empeora.
• En KNN (y en otros métodos no paramétricos), el tener muchas
variables rápidamente empeora el rendimiento. ¿Por qué?
The Curse of Dimesionality

• Supongamos que queremos diferenciar imágenes de perros y


gatos.
• Cuando tenemos una sola variable independiente, no es posible
separarlos perfectamente de manera lineal.
The Curse of Dimesionality
• Cuando nos pasamos a tres, si es posible.

• Pareciera por tanto, que más es mejor casi siempre. Pero es-
tamos olvidando algo: ¿con cuántos datos está ajustando el
The Curse of Dimesionality

• Al agregar dimensiones, mis zonas de decisión empiezan a crecer


(de manera exponencial).
• Si quisiese mantener una densidad constante de datos dentro
de cada zona, mi set de datos debería crecer exponencialmente.

• Como esto no ocurre, lo que empieza a pasar es que cada zona


termina más “despoblada”.
• Por tanto, las decisiones las tomamos con menos datos, lo que
implicada un sobreajuste.
Árboles de Decisión
Árboles de Decisión

• Método no paramétrico.
• En este caso, no estimamos probabilidades (en principio), direc-
tamente declaramos una clase.
• ¿Cómo llegamos a dicha predicción? A través de decisiones
binarias.
Árboles de Decisión

¿Es un cliente
usual?

Sí No

¿Cuántos productos
¿Hora de la visita?
ha visto?

< 15 >= 15 >3 <= 3

¿Lleva más de 3
¿Duración de visita? productos en el ¿Duración de visita? ¿Hora de la visita?
carro?

>= 15 < 15 Sí No >= 20 < 20

Compra No compra Compra No compra Compra No compra

... ...
¿Cómo funcionan?

• Supongamos que, de alguna forma, armamos un árbol sobre


algunos datos de entrenamiento ¿cómo sería la decisión para
un nuevo dato?
¿Cómo funcionan?

• Supongamos que, de alguna forma, armamos un árbol sobre


algunos datos de entrenamiento ¿cómo sería la decisión para
un nuevo dato?
• Simplemente, decimos la clase mayoritaria de cada hoja (o bien,
podríamos ocupar algo parecido a una probabilidad).
• ¿Cómo lo ajustamos? De forma iterativa.
¿Cómo lo ajustamos? I

• Supongamos que estamos decidiendo el primer split. ¿Cuál va-


riable ocupamos y qué valor usamos en caso de que la variable
sea continua? Simplemente, la combinación que lo haga mejor.
• Sean

R1 (j, s) = {X |Xj < s} R2 (j, s) = {X |Xj ≥ s}

buscamos el valor de j, s que minimizan/maximizan alguna me-


dida de desempeño.
• Si estuviesemos hablando de regresión, minimizaríamos
∑︁ ∑︁
( y − y R1 ) 2 + ( y − y R2 ) 2
:  ∈R1 (j,s) :  ∈R2 (j,s)
¿Cómo lo ajustamos? II

• En clasificación, uno está tentado a usar algo que describa cuán-


tas observaciones no están en la clase mayoritaria, en cada hoja.
• La medida más natural a minimizar es E1 + E2 , donde

Em = 1 − m́x(ρmk )
k

con ρmk la proporción de observaciones de la clase k en la región


Rm .
¿Cómo lo ajustamos? III

• Sin embargo, en vez de Em , usualmente se utiliza otra medida,


que tiene el mismo espíritu, llamado índice de Gini.
K
∑︁
Gm = ρmk (1 − ρmk )
k =1
Classification Error vs Gini I
Classification Error vs Gini II

• ¿Por qué ocupamos Gm en vez de Em ? Porque usualmente es


más “sensible”. Realmente, al construir un árbol, en cada split
maximizamos una ganancia de información:

Nzq Nder
G (j, s) =  (Dp ) −  (Dzq ) −  (Dder )
Np Np
con
– Dp : Datos del nodo padre.
– Dzq , Dder : Datos del split izquierdo y derecho respectivamente.
– Np , Nzq , Nder : Número de datos.
–  : E o G.
Classification Error vs Gini III

• ¿A qué nos referimos con que es más “sensible”? Veamos un


ejemplo: ¿qué opinan de este split?
Classification Error vs Gini IV

1 100 1 100
G = − · − ·0
4 200 2 200
=0
Classification Error vs Gini V

100 100
G = 0.375 − · 0.5 − ·0
200 200
= 0.125
¿Cómo lo ajustamos? I

• Repetimos lo anterior, buscando ahora minimizar/maximizar


estas medidas dentro de cada subregión, es decir, dividimos R1
en R11 y R12 .

R11 (, n) = {X ∈ R1 |X < s} R12 (, n) = {X ∈ R1 |X ≥ s}

y encontramos (, n) óptimo. Lo mismo para R2 .


¿Cómo lo ajustamos? II

• Se van generando zonas rectangulares. Una vez formadas las


zonas, predecimos la clase mayoritaria de cada región.
• ¿Hasta cuándo seguimos generado subregiones? Claramente,
empieza a jugar un rol la varianza-sesgo.
¿Cómo lo ajustamos? III

• Podríamos definir reglas, por ejemplo, no seguir si región tiene


menos de  observaciones, o no seguir si la máxima ganancia
de información posible es más pequeña que alguna cota.
• El problema con la primera regla es que nos podría dar demasia-
das divisiones, y el problema con la segunda regla es que podría
ser muy miope.
En R
1 library ( rpart )
2 library ( rattle )
3
4 d f <− f r e a d ( " C a r s e a t s . c s v " , sep = " ; " , dec = " , " )
5 # construimos arbol
6 a r b o l <− r p a r t ( S a l e s∼. , d a t a = df , method = " c l a s s " )
7 fancyRpartPlot ( arbol ) # graficamos
8 p r i n t c p ( a r b o l ) # vemos e r r o r e s
9
10 # Podemos f o r z a r un a r b o l mas g r a n d e
11 a r b o l g r a n d e <− r p a r t ( S a l e s∼. , d a t a = df , method = " c l a s s " , cp =0 , m i n s p l i t = 2 )
12 fancyRpartPlot ( arbolgrande )
13 printcp ( arbolgrande )
14
15 # P o s t e r i o r m e n t e , l o podamos
16 a r b o l p o d a d o <− prune ( a r b o l g r a n d e , cp = 0 . 0 0 9 1 4 6 4 )
17 f a n c y R p a r t P l o t ( arbolpodado )
18 p r i n t c p ( arbolpodado )
19
20 #Que p a s a r i a en l o s c a s o s d e s b a l a n c e a d o s
21 a r b o l <− r p a r t ( S a l e s∼. , d a t a = df , method = " c l a s s " , cp =0 , m i n s p l i t =20 , parms = l i s t ( l o s s =
m a t r i x ( c ( 0 , 1 , 2 0 0 , 0 ) , byrow =TRUE , nrow = 2 ) ) )
22 p r i n t c p ( a r b o l )
23 f a n c y R p a r t P l o t ( a r b o l )
Métodos de Ensamble
Ensamble

• El problema con los árboles, es que debido a que se ajustan de


manera greedy, tienden a presentar mucha varianza.

1 (¿Temperatura Alta?) 2 (¿Tercera Edad?) y (¿Enfermo?)


Sí Sí 1
Sí Sí 0
Sí No 1
No No 0
Ensamble

• El problema con los árboles, es que debido a que se ajustan de


manera greedy, tienden a presentar mucha varianza.

1 (¿Temperatura Alta?) 2 (¿Tercera Edad?) y (¿Enfermo?)


Sí Sí 1
Sí No 0
Sí Sí 1
No No 0
Ensamble

• El problema con los árboles, es que debido a que se ajustan de


manera greedy, tienden a presentar mucha varianza.
• ¿Cómo podríamos reducir esta varianza? Recordemos que, en
general, tomar media de variables reduce la varianza.
Ensamble

• El problema con los árboles, es que debido a que se ajustan de


manera greedy, tienden a presentar mucha varianza.
• ¿Cómo podríamos reducir esta varianza? Recordemos que, en
general, tomar media de variables reduce la varianza.
• Entonces, si tuviésemos muchos conjuntos de entrenamiento,
ajustáramos un árbol en cada uno, y promediaramos los resul-
tados, reduciríamos varianza.
Ensamble

• El problema con los árboles, es que debido a que se ajustan de


manera greedy, tienden a presentar mucha varianza.
• ¿Cómo podríamos reducir esta varianza? Recordemos que, en
general, tomar media de variables reduce la varianza.
• Entonces, si tuviésemos muchos conjuntos de entrenamiento,
ajustáramos un árbol en cada uno, y promediaramos los resul-
tados, reduciríamos varianza.
• Problema? No tenemos más conjuntos para entrenar.
• Solución? Partiremos con un enfoque llamado Bagging.
Bagging - Bootstrapping
• El objetivo es simular más conjuntos de entrenamiento.
• No pueden ser cualquier cosa, deberían parecerse en algún
sentido al conjunto de entrenamiento que tenemos.
• Supongamos que el conjunto de entrenamiento fuese un sam-
pleo de un conjunto más grande.

• ¿Cómo obtendríamos más conjuntos de entrenamiento en este


caso?
Bagging - Bootstrapping

• El problema es que el conjunto de la izquierda no lo conocemos


(si lo conociéramos, lo usaríamos y se acabaría el problema).
• La idea de bootstrapping es que el conjunto de entrenamiento
(la muestra) nos da información sobre el conjunto de la izquier-
da.
• Ejemplo de juguete: Supongamos que lanzamos un dado de 8
caras 10 veces, obteniendo 1, 1, 2, 3, 3, 3, 3, 4, 7, 7. ¿Cuál es la
distribución real? ¿Cuál es la distribución empírica?
Bagging - Bootstrapping

• No son muy parecidas en el ejemplo...


• Pero la ley de los grandes números nos asegura que se parecen
cada vez más a medida que el tamaño de la muestra crece.
• Por tanto, elegir un número de manera aleatoria con la distri-
bución real será muy parecido a elegir un número de manera
aleatoria con la distribución empírica.
• ¿Esto en que nos ayuda en el contexto que nos interesa?
Bagging - Bootstrapping
• Supongamos como ejemplo que nuestros datos son de casos
de COVID-19. Pensemos, para fijar ideas, que la única variable
independiente fuese edad, y que podemos sacar un segundo
conjunto de entrenamiento.
• Si el conjunto es elegido de manera aleatoria, las edades de la
muestra salen de la distribución real de edades.
Bagging - Bootstrapping

• El problema nuevamente es que esa distribución no la conoce-


mos.
• Pero si conocemos la distribución empírica, en el conjunto de
entrenamiento que tenemos.
• Por Ley de los Grandes números, se parece a la real, y por tanto
hacer lo siguiente es parecido:
Bagging I

• Bagging resuelve el problema anterior ajustando muchos árbo-


les sobre distintos sets de entrenamiento armados mediante
bootstrapping.
• En el caso de regresión, calculamos finalmente la media de los
árboles. Para clasificación, una regla podría ser mayoría gana.
• La gracia de este enfoque es que es muy fácil calcular el error de
validación, sin validación cruzada. Es posible mostrar que cada
dato es parte del conjunto de entrenamiento de aproximada-
mente 2/3 de los árboles.
• Entonces, uno puede usar el ∼ 1/3 de los árboles que no usan
cada dato, y ver la predicción. Esto es, efectivamente una vali-
dación.
Bagging II

• Este error se denomina out-of-bag error (OBB).


• Usualmente los árboles de este procedimiento no se podan,
luego bajo sesgo, pero alta varianza. La idea es corregir esto con
el promedio final.
• La contra de este método es que perdemos interpretabilidad.
• Entonces, perdemos noción de cuáles variables importan.
• Sin embargo, podemos obtener un índice, que es cuánto bajo
en promedio el RSS o el índice de Gini cada vez que se uso una
variable como split.
Algorithm 1 Pseudocódigo Bagging
1: for  = 1 to B do
2: Generar un subconjunto de entrenamiento E mediante boots-
trapping
3: Ajustar un árbol profundo A sobre E
4: end for
5: Combinar los árboles {A1 , . . . , AB } mediante alguna regla (por
ejemplo, mayoría)
En R
1 l i b r a r y ( randomForest )
2
3 d f <− f r e a d ( " C : / U s e r s / r a u l p / Downloads / C a r s e a t s . c s v " , sep = " ; " , dec = " , " ,
stringsAsFactors = T)
4 s e t . seed ( 1 )
5 b a g g i n g = r a n d o m F o r e s t ( S a l e s∼. , d a t a = df , mtry = 1 0 , i m p o r t a n c e = T )
6 bagging
7 varImpPlot ( bagging )
8
9 v a l <− d f [ 1 : 8 0 , ]
10 e n t r <− d f [ 8 1 : 4 0 0 , ]
11 # ###############
12 l i b r a r y ( r p a r t )
13 a r b o l g r a n d e <− r p a r t ( S a l e s∼. , d a t a = e n t r , method = " c l a s s " , cp =0 , m i n s p l i t = 2 )
14 p r i n t c p ( a r b o l g r a n d e )
15 # #
16 a r b o l p o d a d o <− prune ( a r b o l g r a n d e , cp = 0 . 0 1 5 3 8 4 7 )
17
18 v a l $ prob <− p r e d i c t ( a r b o l p o d a d o , v a l ) [ , 2 ]
19 v a l $ p r e d <− i f e l s e ( v a l $ prob > = 0 . 5 , " Low " , " H i g h " )
20 t a b l e ( p r ed = v a l $ pred , t r u e = v a l $ S a l e s )
21 # #####################
22 b a g g i n g = r a n d o m F o r e s t ( S a l e s∼. , d a t a = e n t r , mtry = 1 0 , i m p o r t a n c e = T )
23 v a l $ p r e d <− p r e d i c t ( b a g g i n g , v a l )
24 t a b l e ( p r e d = v a l $ pred , t r u e = v a l $ S a l e s )
Random Forest
• ¿Por qué usamos mtry = número de variables en el código ante-
rior?
• ¿Podría ser mejor considerar un número menor?
• Random Forest se basa en la lógica de que si es mejor. Por
ejemplo, si hay un predictor muy “bueno”, aparecerá en todos
los árboles.
• Por tanto, los árboles estarán muy correlacionados entre si, y
por tanto, la reducción en varianza no es tan grande.
• Random Forest considerá un subconjunto de m predictores
(aleatorios) como candidatos para cada árbol.
p
• El autor del método sugiere utilizar m ∼ p. Tomar m = p es
hacer bagging.
Algorithm 2 Pseudocódigo Random Forest
1: for  = 1 to B do
2: Generar un subconjunto de entrenamiento E mediante boots-
trapping
3: Generar un subconjunto V de m variables independientes
4: Ajustar un árbol profundo A sobre E utilizando solo las varia-
bles de V
5: end for
6: Combinar los árboles {A1 , . . . , AB } mediante alguna regla (por
ejemplo, mayoría)
En R

1 l i b r a r y ( randomForest )
2
3 b a g g i n g = r a n d o m F o r e s t ( S a l e s∼. , d a t a = df , mtry = f l o o r ( s q r t ( n c o l ( d f ) ) ) , i m p o r t a n c e = T )
4 bagging
5
6 #o s i m p l e m e n t e
7 b a g g i n g = r a n d o m F o r e s t ( S a l e s∼. , d a t a = df , i m p o r t a n c e = T )
8 bagging
Boosting
• Otro método de ensamble, parecido a bagging.

• A diferencia de bagging, genera árboles secuenciales.

• ¿Qué utiliza del árbol -ésimo para construir el árbol  + 1-ésimo?


Los errores
Boosting
• La idea de boosting es ir generando una secuencia de árboles
que aprenda de los errores de los anteriores.
• En concreto, el árbol  + 1-ésimo le asigna un peso mayor a los
datos de entrenamiento con predicciones erróneas del árbol
-ésimo.
• De esta manera, se generan árboles que lo hacen mejor sobre
esos puntos.
Boosting
• ¿Qué hacemos con esos árboles después? Los unimos.

Algorithm 3 Pseudocódigo Boosting Naive


1: Ajustar árbol A1 sobre base de entrenamiento
2: for  = 2 to B do
3: for j = 1 to M do
4: Si predicción de A−1 sobre fila j-ésima es correcta,  (j) =
1. En caso contrario,  (j) = K > 1.
5: end for
6: Ajustar árbol A sobre base de entrenamiento con pesos
{ (j)}M j=1
7: end for
8: Combinar los árboles {A1 , . . . , AB } mediante alguna regla (por
ejemplo, mayoría)
AdaBoost
• Freund y Schapire (1996) proponen Adaptative Boosting.
• La gran diferencia es que indican explícitamente los pesos a usar
al construir el árbol  + 1-ésimo, en función del error del árbol
-ésimo:

+1 (j) =  (j) exp(α ·  (C (j ) 6= yj ))

donde α es
α = ln((1 − e )/ e )

con e ∈ [0, 1] el accuracy ponderado del árbol  sobre la base


de entrenamiento
M
1 ∑︁
e = ∑︀M  (j) (C (j ) 6 = yj )
 (j) j=1
j=1
AdaBoost - Intuición

• Si la observación j es correctamente clasificada por el árbol ,


mantiene su peso.
• Si la observación j es incorrectamente clasificada por el árbol ,
su peso es modulado por

ep(α ) = (1 − e )/ e

lo que es grande para errores e pequeños ¿por qué?


AdaBoost - Intuición

• Si el árbol está logrando un error pequeño, es necesario pertur-


barlo mucho para que clasifique bien los puntos erróneos.
AdaBoost

• Finalmente, los autores proponen no considerar a todos los


árboles con el mismo peso en la votación.
• En particular, para predecir sobre una observación j, se calcula
B
∑︁
V0 = α  (C (j ) = 0)
=1

B
∑︁
V1 = α  (C (j ) = 1)
=1

• Los árboles con menos error pesan más.


• Con esos valores, se aplica alguna regla.
Support Vector Machine
(SVM)
SVM

• Técnica introducida en los 90 para clasificación.


• Generalización de técnicas de margen máximo.
• Veremos que es de difícil interpretación.
Hiperplano I

• En dimensión dos, un hiperplano corresponde a una recta.

β0 + β1  + β2 y = 0

• En dimensión, un hiperplano corresponde a un plano.

β0 + β1  + β2 y + β3 z = 0

• En dimensión p, corresponde a una superficie afín de dimensión


p−1
β0 + β1 X1 + . . . + βp Xp = 0
Hiperplano II

• Intuitivamente, un hiperplano divide el espacio en dos partes

β0 + β1 X1 + . . . + βp Xp > 0

β0 + β1 X1 + . . . + βp Xp < 0
Hiperplano III
Clasificación Usando Hiperplano I

• Supongamos que tenemos n observaciones, con p posibles va-


riables explicativas
⎛ ⎞ ⎛ ⎞
11 n1
⎜ . ⎟ ⎜ . ⎟
1 = ⎜ . ⎟ ⎜ . ⎟
⎝ . ⎠ , . . . , n = ⎝ . ⎠
1p np

y que estas observaciones caen en dos clases, y1 , . . . , yn ∈


{−1, 1}. También tenemos m observaciones de testeo. Nues-
tro objetivo es entrenar un clasificador basándonos en las n
primeras observaciones, de manera que clasifique correctamen-
te las m observaciones de testeo.
Clasificación Usando Hiperplano II
• Bajo este enfoque, la idea es encontrar un hiperplano separador
que nos permita lo anterior, es decir encontrar β0 , β1 , . . . , βp
tales que

β0 + β1 1 + . . . + βp p > 0 si y = 1


β0 + β1 1 + . . . + βp p < 0 si y = −1

o equivalentemente

y β0 + β1 1 + . . . + βp p > 0 ∀


(︀ )︀

• Si construimos este clasificador, decidir la clase de una nueva


observación es trivial: depende del lado del hiperplano en el
que cae.
Clasificación Usando Hiperplano III
Clasificación Usando Hiperplano IV

• En el ejemplo de arriba, si un nuevo punto ∗ cae en la parte


superior, i.e. ƒ (∗ ) = β0 + β1 ∗1 + . . . + βp p
∗ > 0, predecimos

que la clase es “1”. Si cae en la parte inferior, i.e. ƒ (∗ ) =


β0 + β1 ∗ + . . . + βp ∗ < 0, predecimos que su clase es
1 p
“−1”
• El problema natural en este caso es que puede existir más de un
hiperplano separador (de hecho, si existe uno, existirán infinitos)
en nuestra data de entrenamiento, entonces, ¿cuál elegimos?
Clasificación Usando Hiperplano V

• La elección natural será el clasificador con máximo margen, es


decir aquel con la máxima mínima distancia a los puntos.
Clasificación Usando Hiperplano VI

• Los puntos que alcanzan esta mínima distancia son llamados


support vectors, ya que “soportan” el hiperplano, si alguno se
mueve, el hiperplano de máximo margen cambia.
Clasificación Usando Hiperplano VII

• ¿Cómo se construye este clasificador? Resolviendo el problema


de optimización

m́x M
β0 ,...,βp
p
∑︁
s.a. β2 = 1
j
j=0

y β0 + β1 1 + . . . + βp p ≥ M ∀
(︀ )︀
Caso No Separable I

• En lo anterior asumimos implícitamente que los datos son se-


parables, es decir existen hiperplanos tales que son capaces
de dejar todos los puntos rojos a un lado y los azules al otro, y
dentro de esos elegimos el “mejor”.
• Pero los datos podrían verse así
Caso No Separable II

• En este caso, la formulación anterior no tiene sentido, ya que


para cualquier hiperplano existen puntos del lado incorrecto, o
dicho de otra forma, con “distancia negativa” al margen y por
tanto el problema de optimización no tiene solución con M > 0.
• Extendemos entonces los conceptos anteriores a un hiperplano
que casi separa las clases, usando lo que llamaremos margen
suave.
• Lo anterior también aplicará para casos en los cuales puede
existir un hiperplano separador, pero que no es deseable por
algún motivo:
Caso No Separable III
Clasificador de margen suave I

• Se obtiene resolviendo un problema∗ similar a


n
∑︁
m́x M−C ϵ
β0 ,...,βp ,ϵ1 ,...,ϵn
=1
p
∑︁
s.a. β2 = 1
j
j=0

y β0 + β1 1 + . . . + βp p ≥ M(1 − ϵ ) ∀


(︀ )︀

ϵ ≥ 0

• Las variables de holgura ϵ permiten mayor flexibilidad:


– Si ϵ = 0, la observación está del lado correcto y fuera del mar-
gen.
Clasificador de margen suave II

– Si 0 < ϵ < 1, la observación está del lado correcto, pero dentro


del margen.
– Si ϵ > 1, la observación está del lado incorrecto.
• El parámetro C > 0 penaliza la suma de los ϵ y por tanto indica
qué tanto toleramos violaciones del margen e hiperplano. Si
C → ∞, volvemos al caso inicial.

• Usualmente la práctica nos indica el valor de C, es decir pro-


bamos muchos valores, validamos y elegimos el mejor según
algún criterio.
• Todo esto es solo para ajustar el clasificador, para una observa-
ción nueva la regla sigue siendo
– Si ƒ (∗ ) = β0 + β1 ∗1 + . . . + βp p

> 0 predecimos la clase
como 1.
Clasificador de margen suave III
– Si ƒ (∗ ) = β0 + β1 ∗1 + . . . + βp p

< 0 predecimos la clase
como −1.

Evolución hiperplano con crecimiento de C.


• Las observaciones que caen dentro o sobre el margen son los
support vectors.
Clasificador de margen suave IV
• Un C pequeño produce muchos support vectors, luego, poca
varianza pero posiblemente alto sesgo.

Evolución hiperplano con crecimiento de C.


• Las observaciones que caen dentro o sobre el margen son los
support vectors.
Clasificador de margen suave V

• Un C pequeño produce muchos support vectors, luego, poca


varianza pero posiblemente alto sesgo.
Separación No Lineal I

• Existen casos en los cuales la separación no puede ser realizada


de manera adecuada con un hiperplano (algo lineal).
• Un enfoque usado para estos casos es mapear los datos ori-
ginales a otro espacio de mayor dimensión donde los datos
posiblemente si son separables linealmente
Separación No Lineal II

• Luego, en este espacio de mayor dimensión construimos un


hiperplano separador y lo llevamos de vuelta al espacio original.
Separación No Lineal III

• Pese a lo atractivo, en el ejemplo, al pasar a este espacio ne-


cesitamos considerar términos cuadráticos como variables ex-
plicativas. Si el número de variables es mayor, y el cambio de
dimensión es más grande, esto se hace intratable.
Support Vector Machine I

• SVM recoge las ideas anteriores y la noción de que nos gustaría


agrandar el espacio agregando cuadrados de variables, interac-
ciones, etc.
• Lo anterior es muy costoso computacionalmente, por lo que es
necesario abordarlo de otra forma.
• Para esto, SVM introduce kernels.
• Para evitar tecnicismos, solo diremos que estas funciones re-
emplazan el producto interno usual  · b = n=1  b por un
∑︀

producto interno distinto, logrando con esto replicar parcialmen-


te el efecto de aumentar la dimensionalidad, pero de manera
mucho más eficiente.
• Los kernels más comunes son:
Support Vector Machine II

– Lineal
– Radial, K = exp(− γ(|| − b||2 )
– Polinomial K = (γ · b + 1)q , con q el grado
– Sigmoidal K = tnh(γ · b + 1)
Support Vector Machine III
¿Intuición sobre γ? I

• Es posible mostrar que el clasificador para un SVM con kernel es


∑︁
ƒ () = α K (,  )
∈S

donde S son los vectores de soporte, y el clasificador es tal que


declara 1 si ƒ () > 0 y −1 si ƒ () < 0.
• Todos los kernel introducen una noción de distancia, por ejem-
plo, en el caso del kernel radial se utiliza la distancia euclidiana.
• Por tanto, si una nueva observación  está “lejos” de uno de los
vectores de soporte j , K (, j ) será pequeño y la decisión no
estará influenciada mucho por ese vector de soporte.
¿Intuición sobre γ? II

• γ modula el “radio de influencia” de los vectores de soporte, si


γ es pequeño, K decrece de manera más lenta con la distancia
entre  y  , por lo que la influencia de  “alcanza más”. Si γ es
grande, pasa lo contrario.
Evolución Frontera con γ I

γ = 0,01. Fuente: chrisalbon.com


Evolución Frontera con γ II

γ = 1. Fuente: chrisalbon.com
Evolución Frontera con γ III

γ = 10. Fuente: chrisalbon.com


Evolución Frontera con γ IV

γ = 100. Fuente: chrisalbon.com


Evolución Frontera con C I

C = 1. Fuente: chrisalbon.com
Evolución Frontera con C II

C = 10. Fuente: chrisalbon.com


Evolución Frontera con C III

C = 1000. Fuente: chrisalbon.com


Evolución Frontera con C IV

C = 10000. Fuente: chrisalbon.com


En R

1 i n s t a l l . packages ( " e1071 " )


2 l i b r a r y ( e1071 )
3
4 d f <− f r e a d ( " c a n c e r . c s v " , sep = " ; " , dec = " , " )
5 d f $ d i a g n o s t i c o <− a s . f a c t o r ( d f $ d i a g n o s t i c o )
6 e n t r <− d f [ 1 : 4 4 8 , ]
7 v a l <− d f [ 4 4 9 : 5 6 0 , ]
8
9 # a j u s t a m o s modelo
10 modelosvm <− svm ( d i a g n o s t i c o∼p e r i m e t r o + s i m e t r i a , d a t a = e n t r , k e r n e l = " r a d i a l " , c o s t = 1 ,
gamma = 0 . 1 )
11 f r o n t e r a s v m ( modelosvm , e n t r )
12
13 # vemos como anda en v a l i d a c i o n
14 p r e d i c c i o n <− p r e d i c t ( modelosvm , v a l )
15 t a b l e ( p r ed = p r e d i c c i o n , t r u e = v a l $ d e f a u l t n u m )

También podría gustarte