Árboles De Decisión

Cuidado con ChatGPT (advertencia núm. 232923423)

I.

Cuando éramos críos e íbamos al colegio, todos hemos participado en conversaciones que discurrían más o menos así:

— Quiero ver el programa X.
— No puedes porque A, B y C.
— Pero Fulanito lo ve todos los días.
— No te fijes en lo que hace el más tonto; fíjate en lo que hace el más listo.

Los primeros buscadores de internet eran catastróficos. Un día apareció uno nuevo, Google, con una filosofía de madre de los setenta: fijarse en lo que hacía el más listo, no el más tonto. En el fondo, tecnicismos aparte, era en lo que se basaba el PageRank.

Repensando la codificación por impacto

R

Hay una entrada mía, esta, que me ronda la cabeza y con la que no sé si estoy completamente de acuerdo. Trata de justificar la codificación por impacto de variables categóricas en modelos lineales (generalizados o no) y cuanto más la releo, menos me la creo. O, más bien, comienzo a cuestinarme más seriamente contextos en los que funciona y contextos en los que no.

Pero comencemos por uno simple: los árboles. Es moda pensar que, dado un predictor categórico, un árbol explora todas las permutaciones posibles de categorías y que por eso algunas implementaciones de, por ejemplo, bosques aleatorios no permiten variables categóricas de más de cierto número no particularmente generoso de niveles.

Rápido y frugal: una digresión en la dirección inhabitual

Siempre (aténganse los puristas al contexto) recomiendo comenzar con un árbol de decisión para, sobre esa base, ensayar métodos más potentes. Sobre todo si la precisión conviene más que la interpretabilidad.

En la dirección opuesta se sitúan los árboles rápidos y frugales. Un árbol rápido y frugal es un tipo de árbol de decisión tal como

fast_frugal_tree

La restricción que satisface (a diferencia de los árboles de decisión más habituales) es que:

Discretización de variables continuas (con árboles)

La primera entrada de esta bitácora es de enero de 2010. En aquella época, recuerdo, había apartado un artículo sobre categorización de variables continuas, i.e., el proceso de convertir (¿para qué?) una variable continua en categórica de una manera óptima.

Aparte de cuestionar el paraqué (¿por qué porqué es sustantivo y paraqué no?) de la cosa me asaltaron dudas sobre el cómo. Si se quiere discretizar, ¿por qué no usar directamente un árbol? Es decir, un árbol simple en el que se modele la variable objetivo en función de la continua que se desee discretizar.

evtree: árboles globales

Tengo por delante otro proyecto que tiene mucho de análisis exploratorio de datos. Sospecho que más de un árbol construiré. Los árboles son como la Wikipedia: prácticamente nunca el último pero casi siempre el primer recurso.

Esta vez, además, por entretenerme un poco, probaré el paquete [evtree](http://cran.r-project.org/web/packages/evtree/index.html). Aunque no porque espere sorprendentes mejoras con respecto a los tradicionales, ctree y rpart.

¿Qué tiene aquél que los diferencie de los otros dos? Que la optimización es global. Tanto ctree como rpart utilizan algoritmos recursivos: al definir un nuevo corte del espacio, el algoritmo solo tiene en cuenta la región definida por los cortes anteriores. La optimización es local. evtree utiliza un algoritmo global de la familia de los evolucionarios (¡qué tufillo a lentorro!). Los detalles están aquí.

Bajo el capó del particionamiento recursivo basado en modelos

Una de las mayores contrariedades de estar sentado cerca de alguien que es más matemático que un servidor (de Vds., no de silicio) es que oye siempre preguntar por qué. Una letanía de preguntas me condujo a leer papelotes que ahora resumo.

Primero, unos datos:

set.seed(1234)

n <- 100

x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)

y <- 0.3 + 0.2 * x1 + 0.5 * (x2 > 0) + 0.2 * rnorm(n)

Luego, un modelo:

modelo <- lm(y ~ x1)
summary(modelo)

# Call:
#   lm(formula = y ~ x1)
#
# Residuals:
#   Min      1Q  Median      3Q     Max
# -0.9403 -0.2621  0.0420  0.2299  0.6877
#
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)
# (Intercept)  0.55632    0.03364  16.538  < 2e-16 ***
#   x1           0.21876    0.03325   6.579 2.34e-09 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.3323 on 98 degrees of freedom
# Multiple R-squared:  0.3063,  Adjusted R-squared:  0.2992
# F-statistic: 43.28 on 1 and 98 DF,  p-value: 2.341e-09

Pocos que no entiendan cómo se han generado los datos advertirían lo malo de su especificación: hemos omitido una variable explicativa cuyo efecto ha ido a incrementar el error de manera que los tests habituales de bondad de ajuste no advierten.

Incrementalidad via particionamiento recursivo basado en modelos

Planteas un modelo tal como resp ~ treat y no encuentras diferencia significativa. O incluso puede ser negativa. Globalmente.

La pregunta es, con el permiso del Sr. Simpson (o tal vez inspirados por él), ¿existirá alguna región del espacio en la que el tratamiento tiene un efecto beneficioso? Puede que sí. Y de haberla, ¿cómo identificarla?

De eso hablo hoy aquí. E incluyo una protorespuesta.

Primero, genero datos:

n  <- 20000
v1 <- sample(0:1, n, replace = T)
v2 <- sample(0:1, n, replace = T)
v3 <- sample(0:1, n, replace = T)

treat <- sample(0:1, n, replace = T)

y <- v1 + treat * v1 * v2
y <- exp(y) / (1 + exp(y))
y <- sapply(y, function(x) rbinom(1,1,x))

dat <- data.frame(
    y = y,
    treat = factor(treat), v1 = v1,
    v2 = v2, v3 = v3)

Como puede apreciarse, solo las variables v1 y v2 (y no v3) interaccionan con el tratamiento: solo en la región donde v1 = v1 = 1 el efecto del tratamiento es positivo.

En recuerdo de Leo Breiman

Recomiendo leer esto. Es un artículo que repasa la labor de Leo Breiman, pionero en esa nueva forma de plantear el análisis de datos que acabó convirtiéndose en la minería de datos y de algunos de los algoritmos y métodos más comunes que conforman la caja de herramientas de quienes lo practican hoy en día. Entre ellos, los árboles de decisión y de regresión y los random forests.

Así comienza el artículo:

How many theoretical probabilists walk away from a tenured faculty position at a top university and set out to make their living as consultants? How many applied consultants get hired into senior faculty positions in first-rate research universities? How many professors with a fine reputation in their field, establish an equally fine reputation in a different field, after retirement? Leo Breiman did all of these things and more.