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

Mostrando entradas con la etiqueta Ruido. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ruido. Mostrar todas las entradas

sábado, 11 de febrero de 2012

Un Modelo para separar la Señal del Ruido

Qué bueno sería que los datos contuvieran toda la información necesaria para realizar predicciones, pero lamentablemente no es así. No solamente no contamos con toda la información, además esta información está mezclada con ruido.
La tarea de un modelo predictivo es separar la información útil o señal, del ruido. Veamos un ejemplo paso a paso.
Utilizaré 2 casos similares a fin de comparar sus resultados. Ambos pertenecen a campañas de marketing. El primero proviene de una competencia de Data Mining que organizó la Universidad de Chile en 2005 y que a juzgar por los resultados, no incluía datos reales. El segundo es un ejemplo real de una campaña ofreciendo una nueva tarjeta de crédito a clientes existentes de un banco.

Paso 1: análisis de la información

Una vez que los datos son preparados y las variables son seleccionadas, es posible realizar un análisis infométrico (para conocer más detalles de este tipo de análisis se pueden consultar otros artículos en este mismo blog)
El caso de la Universidad de Chile  muestra que los datos están bastante limpios y es probable que se pueda desarrollar un buen modelo

La información que se necesita para que el modelo sea perfecto es 0.15 bits (este bajo valor indica que existe un desbalance importante, lo cual es cierto ya que sólo aceptan la oferta alrededor de un 2%). Las variables seleccionadas aportan un total de 7.74 bits, pero gran parte de esta información es equívoca, lo que desde el punto de vista de la Teoría de la Información significa que existen muchas maneras de decir lo mismo. Al canal de información ingresan 0.11 bits de la entrada (7.74-7.63) más 0.04 bits de ruido.
La tarea del modelo es separar el 75% de la señal del 25% del ruido.
El caso real es un poco más complejo de modelar
La variable a predecir necesita 0.11 bits de información, indicando como en el caso anterior, que existe un desbalance muy pronunciado (en este caso, sólo el 1.4% de los clientes aceptan la nueva tarjeta). El ruido (54%) supera la señal (46%). Esto implica que es probable que el modelo que utilice estos datos no sea tan bueno como el anterior, ya que por más que haga un buen trabajo separando la señal del ruido, sólo existe un 46% de información.

Paso 2: Evaluación del modelo

Veamos ahora si el análisis infométrico anterior se condice con los resultados de los modelos. Existen varias métricas que pueden utilizarse para evaluar un modelo. En este caso, en donde la variable a predecir contiene 2 estados (Compra/No compra) lo más adecuado puede ser el estadístico KS, o las curvas Lift y ROC.
La siguiente tabla compara los modelos
El rendimiento de los modelos está de acuerdo al análisis llevado a cabo en el paso anterior. Es más, desde mi experiencia jamás tuve la suerte de trabajar con datos tan limpios como los de la Universidad de Chile, por lo que supongo que son datos creados artificialmente para la competencia.
Antes de continuar haré un breve repaso sobre la curva ROC. Quienes deseen más información al respecto pueden consultar excelentes artículos que existen en Internet.
Curva ROC
En medio de la segunda guerra mundial se necesitaba mucha práctica para que los operadores de Radar pudieran distinguir un objeto sólido en una maza de puntos verdes que aparecía en una pequeña pantalla de 7.5 cm de diámetro. A fin de medir el rendimiento de los operadores de Radar, los Británicos inventaron las curvas ROC, que viene del acrónimo Receiver Operator Characteristics (a veces es llamada, erróneamente, Receiver Operating Characteristic curve).
La curva ROC del modelo con datos real luce como sigue:
Si se trata de distinguir un avión, o se trata de distinguir si un cliente comprará o no el producto habrá 4 posibilidades:
Si se predice Positivo y en realidad es Positivo, tenemos un Verdadero Positivo (VP), si se predice Negativo y en realidad es Negativo, tenemos un Verdadero Negativo (VN). Caso contrario tenemos los Falsos Positivos (FP) y los Falsos Negativos (FN).
La curva ROC se concentra en la predicción de los Positivos (por ejemplo, en aquellos clientes que compran) y en cómo el modelo acierta o no. Cuanto mayor sea la diferencia entre los VP  y los FP, mayor será el poder de discriminación que tendrá el operador o el modelo.
El área comprendida entre la parte superior de la diagonal y la curva representa el rendimiento de operador o del modelo, ya que la separación de la curva de la diagonal indica la separación entre los VP y los FP.  A mayor área, mayor rendimiento. Un modelo perfecto tendrá un área del 100%, mientras que el área de un modelo inservible será del 0%.
Señal y Ruido
Ahora viene la parte interesante. Los datos representan algún proceso o sistema que genera una señal mezclada con ruido. Lo que deseamos es separar esta señal del ruido. Resulta que la Teoría de Detección de Señales (Signal Detection Theory) nos permite obtener la distribución de la señal y del ruido a través de la Curva ROC.
Los cálculos necesarios para dibujar estas distribuciones son demasiado complejos para describir en este artículo y tampoco vienen al caso. Lo importante que quiero recalcar es que es posible obtener  una gráfica que  muestra claramente la señal y el ruido además del trabajo del modelo para separarlos.
Señal/Ruido en datos de la Universidad de Chile
El modelo de los datos artificiales muestra una separación bastante buena. La curva roja representa el ruido y la azul la señal, que se crea en relación a la primera. En estos datos el ruido parece estar bastante acotado como lo muestra su baja dispersión. En cambio la señal, está un poco más dispersa. Las medias de la señal y el ruido están bastante alejadas, permitiendo que el modelo realice una buena separación.

Señal/Ruido en datos de tarjeta de crédito

Este caso tiene dos diferencias con respecto al anterior. Por un lado, ambas dispersiones son similares, pero lo más llamativo es que ambas distribuciones tienen sus medias muy cercanas, haciendo demasiado dificultoso la separación de la señal de ruido. Esto explica por qué el modelo sobre los datos de tarjeta de crédito tiene un rendimiento muy inferior al anterior.

Conclusión

Muchas veces nos encontramos con casos en que es muy difícil desarrollar un modelo predictivo que sea útil para el negocio y nos preguntamos si existirá algún algoritmo que sea capaz de lidiar con los datos.
Un análisis de la información, al que Dorian Pyle llama Data Survey(*), es inmensamente útil en estos casos, porque es capaz de mostrar si los datos realmente contienen información. Si no es el caso, entonces ningún algoritmo podrá ser útil para crear un modelo. Las medidas de información establecen límites teóricos que sirven para evaluar el rendimiento de los modelos.
Cuando intentamos modelar datos que no conocemos, el Data Survey construye un mapa que nos guiará por el buen camino.
Una vez construido el modelo, a partir de la Teoría de Detección de Señales y con algunas presunciones (por ejemplo que el ruido y la señal están distribuidas normalmente), es posible visualizar la forma de ambos, la señal y el ruido. Estos gráficos pasan a ser otras herramientas útiles para explicar el rendimiento de un modelo.
Tanto la señal como el ruido están presentes en las variables de entrada, llamadas también variables independientes. La tarea principal del modelo es descubrir la señal aún en presencia del ruido.
(*) Aquellos que deseen una explicación detallada del Data Survey pueden referirse al excelente tratamiento que hace Dorian Pyle en el capítulo 11 de su libro DataPreparation for Data Mining

jueves, 15 de septiembre de 2011

La información como marco de referencia (Parte II)

En el artículo anterior (http://powerhousedm.blogspot.com/2011/09/la-informacion-como-marco-de-referencia.html) vimos que las variables independientes de un modelo transmiten información que ayuda a reducir la incertidumbre de la variable a predecir.

En el ejemplo anterior, la incertidumbre de lo que hará el cliente es de 0.40 bits pero conociendo su comportamiento (a través de las variables independientes) la reducimos a 0.16 bits. O sea, gracias al modelo tenemos más certeza de lo que hará el cliente. Pero no podemos estar 100% seguros. Todavía hay 0.16 bits de incertidumbre.
¿Por qué no es posible reducir a 0 bits? El culpable es el ruido. Supongamos que identificamos un patrón de comportamiento que se repite 100 veces en los datos. Este patrón no es otra cosa que una determinada combinación de valores de las variables independientes.

Si este patrón siempre estuviera asociado al mismo resultado final (se Fuga SI o No), entonces el ruido sería 0. Pero generalmente esto no sucede. De las veces que aparece el mismo patrón, algunas veces está asociado con Fuga=Si y otras con Fuga=No. Cuanto más similar sea esta distribución con la distribución de la variable a predecir, más ruido contendrán los datos, al menos en este patrón.
El modelo no podrá hacer mucho si los datos contienen demasiado ruido.  Es más, estos 0.16 bits establecen un límite teórico a lo que cualquier herramienta de modelado podrá obtener de estos datos. En este ejemplo los datos contienen un 40% de ruido (0.16/0.40).

En el siguiente artículo analizaremos la información desde el punto de vista de las variables independientes

jueves, 11 de octubre de 2007

¿Qué es el ruido?

La Teoría de la Información tiene una definición precisa del ruido, pero en este artículo trataré este tema de una manera más informal. Aquel que quiera conocer más acerca de la Teoría de la Información y cómo es posible usarla para medir el ruido y la señal que contienen los datos puede leer Data Mining y Teoría de la Información.

En cualquier tipo de comunicación, el ruido es algo que hay que evitar, ya que ensucia el mensaje que se está transmitiendo.

Cuando nos referimos a un modelo de predicción, podemos asumir que las variables independientes transmiten información sobre la variable dependiente. Dicho de otro modo, existen variables que comunican información que nos será útil para predecir la variable de interés.

Ahora bien, no siempre los modelos alcanzan un alto grado de precisión en sus predicciones debido a distintas razones. Por ejemplo, podría ser que las relaciones entre las variables independientes y la dependiente no sean lineales y la herramienta usada para construir el modelo sólo tenga en cuenta relaciones lineales.

Otra razón que muchas veces escuchamos tiene que ver con el ruido en los datos. Se suele decir que los datos contienen ruido y esto interfiere con la creación de un buen modelo. Pero ¿qué es el ruido?

Podemos definir el ruido como una señal aleatoria que se suporpone a la señal original y confunde al destinatario. Veamos un ejemplo viendo primero una señal sin ruido y luego con rudio superpuesto.

Supongamos que tenemos la siguiente relación entre dos variables

y = x2 – x + 2

Una tabla de datos que contenga esta relación tendrá dos variables X e Y. La variable X será la variable independiente e Y la dependiente. Podemos asumir que X transmite información acerca de Y y un buen modelo será capaz de usar la información de X para estimar Y.

Si graficamos esta relación veremos que para cada valor de X existe solamente un valor de Y posible

Los datos podrán contener varios valores de X iguales, por ejemplo, varias filas en donde X es 5, pero en cada una de estas filas, la variable Y tendrá el mismo valor: 22 (que es el resultado de la ecuación dada más arriba).

Supongamos ahora que los datos tienen la siguiente particularidad: para un mismo valor de X pueden existir varios valores de Y. O sea, ahora si existen varias filas en donde X es 5, no necesariamente el valor de Y será en todas ellas 22. Podría ser que en algunas sea 20, en otras 22 y en otras 30.

El gráfico de estos nuevos datos se verá así:

Estos nuevos datos contienen ruido porque para una misma señal (en nuestro ejemplo la señal es el valor de X) existen distintos valores que puede tomar la variable a predecir.

El ruido, así como la información, se mide en bits. Powerhouse mide el ruido que contienen los datos y la información que queda luego de suprimir el ruido. Por ejemplo, si los datos contaminados con ruido son analizados con Powerhouse, resulta que el 58% de la información es ruido, con lo que sólo el 42% servirá para estimar exactamente Y. Dicho de otro modo, un modelo construido con estos datos nunca será lo suficientemente preciso debido a que parte de la información contiene ruido. Es importante notar que no importa el tipo de herramienta usada para construir el modelo. Si los datos contienen ruido, el modelo no será perfecto, y el grado de precisión dependerá justamente del nivel de rudio.

La información en los datos

Hace unas semanas encontré una tesis de grado en la que se mostraba cómo una red neuronal (NN) resolvía un problema de clasificación. El dataset usado tiene 41 variables independientes mas la variable dependiente. Se trata de clasificar el tipo de onda (hay tres clases) en base a los atributos dados por las variables. Si bien todas las variables contienen ruido, las últimas 20 no contienen información acerca del tipo de onda (son solo ruido).

La tesis muestra cómo con una NN se logra un modelo con aproximadamente un 83% de aciertos en la clasificación.

Quise ver si Powerhouse era capaz de lograr resultados similares, y en este artículo contaré paso por paso lo que fui logrando y las sorpresas que tuve.

Comencé como siempre lo hago, realizando un modelo default. Para ser más preciso, usé solamente las variables seleccionadas y luego el modelo OPFIT (una especie de regresión logística aplicada a los datos preparados por Powerhouse).

La siguiente pantalla de Powerhouse muestra la información que había disponible para resolver el problema


Para mantener las cosas simples, solo usaré 2 columnas de esta pantalla en todos los análisis de este artículo, la que muestra las variables seleccionadas y la que muestra la ganancia de información.

Powerhouse seleccionó solamente 3 variables x7, x11 y x15. Estas tres variables llevan más del 60% de la información necesaria para clasificar correctamente la forma de onda.

Esto significa que el modelo construído con estas tres variables sería bastante bueno, pero seguramente no tan bueno como el de las redes neuronales.

El modelo OPFIT basado en estas tres variables confirmó mi sospecha de que no lograría demasiado. Sólo se logra un 59% de aciertos en el Training Set (datos usados para construir el modelo) y un 56% en el Test Set (datos nunca vistos. Hay que considerar que en Powerhouse, a diferencia de una NN, el Test Set realmente no se usa para nada).

La matriz de confusión da un poco más de detalles sobre los resultados


Ya que el modelo OPFIT no lograba discriminar la clase "0", probé con otro modelo de Powerhouse llamado MAXIT.

Este modelo, al igual que el OPFIT, se basa en el mapa de información creado por Powerhouse. La diferencia es que mientras que OPFIT mapea la información usando una simple función de transferencia lineal, MAXIT lo hace mediante un conjunto de reglas. En general, OPFIT funciona bien con la mayoría de los problemas que aparecen en áreas de negocios, ya que las no linealidades encontradas en los datos son resueltas en la transformación de datos que se realiza cuando se construye el mapa de información, pero hay veces en que, si bien existe información, OPFIT no puede acceder a ella mientras que MAXIT si lo hace.

Los resultados del modelo MAXIT con estas mismas tres variables mejoraron respecto del OPFIT

Ahora el porcentaje de aciertos subió al 66% en el Training Set y 64% en el Test Set, y además los aciertos de la clase "0" mejoraron bastante. De todas maneras, todavía estaba lejos del 83% logrado por una NN. Pero claro, la NN usó todas las variables disponibles y estos modelos sólo usaron 3 variables.

Así que el siguiente paso fue construir los modelos con todas las variables disponibles. Pero en Powerhouse no es posible construir un modelo sin antes haber seleccionado las variables, así que primero se debe hacer una selección aclarando que se desean todas las variales disponibles. O sea, se espera lograr una lista de variables ordenadas según la información que aportan. Y acá fue donde apareció la sorpresa, no hacen falta todas las variables ya que ¡11 de ellas contienen el 100% de la información necesaria para predecir la clase!


En la columna de la ganancia de información se puede ver que las últimas 3 variables aportan menos que el 1% de información. Es más, también se puede comprobar que el algoritmo de selección de variables es muy robusto respecto del ruido, ya que variables que sólo aportan ruido (x21 hasta x41, según se aclara en el sitio donde se obtuvieron los datos) aparecen al final de una selección forzada a elegir todas las variables. Powerhouse no continúa seleccionando variables porque ya no es necesario. Estas 11 variables contienen toda la información necesaria.

El modelo MAXIT sobre estas 11 variables no mejoró demasiado, 72% para el TR y 67% para el TS. Así que me pregunté por qué MAXIT no estaba capturando toda la información disponible si una red neuronal lo hacía. Entonces recordé que la red (al menos la que yo construí usando un producto comercial llamado NeuralWare) contiene 3 nodos de salida, uno para cada clase. Así que intenté un método que muchas veces mejoró mis resultados: construir tres modelos distintos, uno para cada clase, en vez de pretender que un solo modelo prediga las tres clases.

Lo único que tuve que hacer es agregar tres variables a la tabla de datos. La primera contenía un 1 cada vez que la clase a predecir era "0" y un 0 cada vez que la clase era "1" ó "2". La segunda contenía un 1 cada vez que la clase era "1" y un 0 si era "0" ó "2". La tercera, un 1 si la clase era "2" y un 0 si era "0" ó "1". Así que primero construí un modelo (ahora usé el OPFIT) para predecir la primera variable agregada, o sea para predecir si la clase es "0". Luego hice los otros dos modelos (también OPFIT) , uno para predecir si la clase es "1" y otro para "2".

Luego los apliqué a los datos y consideré que la clase sería aquella en que el modelo OPFIT diera el score más alto (el modelo OPFIT no solo predice categorías y valores continuos, sino que en cada predicción muestra un score). Por ejemplo, si los scores eran 0.89, 0.95 y 0.32 para las clases "0", "1" y "2" respectivamente, la predicción sería la clase "1" por tener el score más alto.

¿El resultado? ¡Un 86% de aciertos en el Training set y un 83% en el Test set!

En este ejercicio podemos ver dos cosas importantes:

  1. Muchas veces unas pocas variables contienen toda la información necesaria para resolver el modelo. Agregar más variables complejiza el modelo innecesariamente.
  2. Una manera de mejorar los resultados es construir varios modelos y luego unirlos para obtener el resultado buscado.

miércoles, 10 de octubre de 2007

Powerhouse, una manera diferente de hacer Data Mining

Powerhouse es una herramienta de Data Mining basada en un enfoque completamente distinto que el usado normalmente para analizar datos.

Cuando se intenta realizar un modelo de predicción, generalmente se asume que los datos contienen la información suficiente para lograr un buen modelo.

Powerhouse no supone que existe información, la mide.

Claude Shannon detalló en su Teoría de la Información cómo es posible medir la información en bits usando un concepto llamado entropía.

Powerhouse sienta sus bases en la Teoría de la Información y logra mejorar la práctica de hacer Data Mining mediante las siguientes ventajas que le otorga este enfoque:
  • Los datos son preparados automáticamente a fin de exponer al máximo la información que puedan contener
  • La selección de variables es un proceso directo, rápido y que garantiza un grupo óptimo de variables con información libre de ruido
  • Crea modelos de predicción simples de entender y con rendimientos similares a las redes neuronales
  • Descubre modelos de segmentación que exponen clusters naturales en los datos
El sitio web de Powerhouse contiene información más detallada sobre sus características y ventajas.