En este blog se exploran las posibilidades de analizar datos y crear modelos basados en la Teoría de la Información usando Powerhouse

martes, 21 de abril de 2009

Selección de variables

Seleccionar las mejores variables puede llegar a ser uno de los principales problemas en un proyecto de Data Mining.

Una opción es elegir aquellas variables que desde el punto de vista del negocio parecen importantes. Claro que para esto se debe conocer muy bien el negocio y se puede correr el riesgo de elegir variables altamente correlacionadas. Además es muy posible que el grupo de variables seleccionadas diste mucho de ser el óptimo (por ejemplo, podrían quedar afuera ciertas variables que aportan buena información).

Otra alternativa es la fuerza bruta, pero sólo en casos con muy pocas variables disponibles. Cuando la cantidad de variables comienza a ser importante, este enfoque queda descartado debido a la enorme cantidad de pruebas que hay que realizar. Por ejemplo, suponiendo que hay 20 variables disponibles y se deben elegir 6, la cantidad de combinaciones posibles es mayor a 38.000. Si en vez de 20 tenemos 100, las diferentes combinaciones superan los 1.000 millones.

Un método que ha demostrado ser muy eficiente es el que se basa en la Teoría de la Información. Sin entrar en demasiados detalles, los pasos a seguir son los siguientes:
  1. Seleccionar del total de las variables, aquella que transmite mayor cantidad de información.
  2. Seleccionar del resto de variables disponibles, aquella que transmita la mayor cantidad de información nueva
  3. Continuar en el paso 2 hasta que la ganancia de información ya no justifique la pérdida de representatividad de población (ver artículo ¿Cuántos datos necesito para obtener un buen modelo?)

Este procedimiento toma muy poco tiempo y crea un conjunto de variables que cumple con las siguientes características:

  1. Contiene la mayor cantidad de información dado los datos disponibles
  2. Contiene la mejor relación señal/ruido
  3. Las variables seleccionadas no son colineales
  4. Tiene en cuenta las interacciones entre variables
  5. Usualmente aparecen seleccionadas variables que son consideradas como muy importantes desde el punto de vista del negocio

Aquellos interesados en conocer más acerca de la Teoría de la Información pueden leer el artículo Powerhouse: Data Mining usando Teoría de la Información

6 comentarios:

Andrés Parra dijo...

Cómo tiene en cuenta las interacciones entre variables? No podría pasar que una variable no aporte nada a nivel general, pero en ciertos subconjuntos de casos (por ej. en una rama de un árbol de decisión) sea importante? No correríamos el riesgo de dejarla afuera?

No se podría repetir el procedimiento de análisis de las variables en varios niveles de un árbol antes de descartar cualquiera?

Cómo se compara la selección de variables por la ganancia de información con la selección por Chi-cuadrado?

Yo creo que hoy en día las computadoras son suficientemente potentes, y los algoritmos implementados suficientemente robustos, como para no estar "obligados" a eliminar variables antes de empezar (al menos en los problemas de negocios más comunes). Lo consideraría un "último recurso". Preferiría dejar todas las variables y que el algoritmo elija las que le resulten más útiles. Además, si eliminamos variables, y después en base a un conocimiento más profundo del problema vamos agregando nuevas (combinaciones de las anteriores o enriqueciendo el dataset con información externa), quizás las nuevas variables interaccionen mejor con alguna de las variables que eliminamos.

(Recién veo que volviste a escribir, me alegro mucho. :) )

Saludos,
Andrés.
http://parramining.blogspot.com

Marcelo R. Ferreyra dijo...

Andrés, muchas gracias por tus comentarios y preguntas.

Voy a comenzar a responderte en base a tu último párrafo. Cuando vos decís que preferirías dejar que el algoritmo elija las variables que resulten más útiles, ¿a qué algoritmo te referís? Porque justamente la selección de variables de la que hablo es en realidad un algoritmo para elegir las variables más útiles (en la jerga de la Teoría de la Información serían aquellas variables que transmiten mayor información acerca de la variable output).

Una vez que se cuenta con los datos básicos es bastante común crear variables derivadas, lo que normalmente termina en una tabla con 100 o más variables. Intentar usar todas estas variables para crear un modelo puede poner en problemas a ciertas herramientas, por ejemplo una red neuronal. Entonces seleccionamos las variables más importantes para usarlas en la herramienta de modelado.

Algunas herramientas tienen un algoritmo de selección incorporado, por ejemplo los árboles, utilizando alguna medida de “importancia” como ser la cantidad de información. Pero el método que usan es distinto al que se propone desde la Teoría de la Información (TI). En el caso de un árbol, se van seleccionando las variables, una a la vez. En cambio el método descrito en este artículo va considerando las variables previamente seleccionadas. ¿Cómo lo hace? Muy simple: cada nueva variable a considerar agrega una nueva dimensión al espacio de estados. De esta manera cada estado sigue siendo representado por un mensaje que lleva una determinada cantidad de información correspondiente a todas las variables seleccionadas hasta el momento. La variable que incremente el mayor número de bits de información (en promedio), será la seleccionada en ese paso.

Si bien desde la TI es posible considerar explícitamente las interacciones entre variables, en Powerhouse no está considerada aún esa opción, pero en la práctica, el método utilizado en la versión actual resulta muy efectivo para tratar interacciones. La razón es que generalmente las variables que participan de una interacción, llevan información por si solas y su probabilidad de ser elegidas es alta. Una vez que una de estas variables es elegida, la siguiente variable a elegir es casi siempre aquella (o aquellas) que interactúa con ésta. Esto se debe a la naturaleza misma de la interacción: dos o más variables que interactúan llevan más información que la suma de la información individual. Esto se ve muy bien en el análisis entrópico de las variables elegidas y quizás sea un tema para mi próximo artículo.

Finalmente hay que considerar que cuantas más variables use un modelo, menos robusto será, debido a que con cada incremento de la dimensionalidad hace falta un mayor número de casos para poblar el manifold. Llega un punto en que se necesitan más casos que los disponibles. Esta es otra razón para mantener el número de variables de un modelo lo suficientemente bajo.

Espero haber sido de ayuda. Si no lo logré, no dudes en preguntar.

Saludos,

Marcelo

Andrés Parra dijo...

Tenés razón, en una red neuronal es imprescindible la selección. Por algoritmo me refería a un árbol de decisión, un generador de reglas, etc.

Respecto a tu comparación con el árbol, me parece que no es tan diferente respecto a que cada variable considera las ya seleccionadas, aunque los casos que tienen en cuenta ambos métodos son diferentes. A ver si me explico: ¿Cómo serían los 3 pasos que mencionás en el artículo, para un árbol de decisión? Creo que algo así:

1. Seleccionar de todas las variables, aquella que mejor separa los casos de acuerdo a la variable objetivo (midiendo por chi-cuadrado, entropía, u otro índice). Usarla para dividir el nodo raíz.
2. Para cada una de las ramas (que contienen subconjuntos de casos), seleccionar del resto de variables disponibles aquella que mejor separa estos casos.
3. Continuar el paso 2 hasta que los nodos sean demasiado pequeños o la división no sea significativa.

Entonces en cada subdivisión sí se están tomando en cuenta las variables que ya se usaron, pero además, se está tomando en cuenta separar sólo los casos que tiene esa rama, a diferencia de tu método que tiene en cuenta la ganancia de información siempre en relación a todos los casos. Estoy en lo correcto?

De esta manera el árbol de decisión estaría seleccionando qué variables usar, e incluso luego se podrían tomar las mismas para una red neuronal (previa adecuada preparación).

Volviendo a una pregunta de mi comentario anterior, me gustaría ver cómo se comparan los resultados de aplicar ambas técnicas (i.e. chi-cuadrado vs. ganancia de información, en un ring a 12 asaltos ;) ).

Saludos,
Andrés.
http://parramining.blogspot.com

Marcelo R. Ferreyra dijo...

Andrés, como vos bien especificas con el método del árbol, cada variables se elige en base a los datos disponibles, pero no en base a otras variables elegidas previamente. Dicho de otro modo, cada vez que se usa una rama del árbol para seleccionar una variable, sólo se tienen en cuenta los casos que pertenecen al árbol. En cambio en el método descripto en este artículo siempre se tienen en cuenta todos los datos, pero también las variables elegidas previamente. Esto permite que si exiten variables que interactúan, la probabilidad de elegirlas sea muy alta.

En pruebas realizadas por otros usuarios de Powerhouse, la selección de variables funcionó igual o mejor que la selección generada por distintos árboles. Entre las diferencias están la velocidad y la cantidad de variables (Powerhouse es más rápido y genera un conjunto más reducido pero con la mayor información libre de ruido disponible).

De todas maneras sería interesante seguir comparando los métodos sobre distintos datasets.

Saludos,
Marcelo

Andrés Parra dijo...

Entendido, muchas gracias!

Saludos,
Andrés.
http://parramining.blogspot.com

Anónimo dijo...

hello


Just saying hello while I read through the posts


hopefully this is just what im looking for looks like i have a lot to read.