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 Modelos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Modelos. 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

miércoles, 14 de septiembre de 2011

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

La compañía ACME tiene un serio problema: cada mes pierde alrededor de un 8% de sus clientes. Si bien es cierto que también adquiere nuevos clientes, el resultado neto es una pérdida del 3%. A este paso en 9 meses habrá perdido un 25% de sus clientes.

Para mejorar la situación, decide identificar los clientes con altas probabilidades de fuga y tratar de retenerlos.
Veamos cómo se ve esta situación desde el punto de vista de la información


La compañía tiene sus Clientes que se comportan de determinada manera. Este patrón de comportamiento es representado como Mensajes que serán codificados por el Modelo para transmitir uno de dos mensajes: el cliente se va o se queda.
Los mensajes de entrada están formados por las variables que capturan el comportamiento de los clientes. El modelo fue armado para identificar patrones y asociarlos con una de dos respuestas posibles.

Antes de armar el modelo, existe una incertidumbre acerca de si los clientes permanecerán o se irán a la competencia, que puede expresarse en bits. En este ejemplo la incertidumbre es aproximadamente 0.40 bits (los detalles de cómo se mide esta información no son necesarios para el propósito de este artículo, pero pueden consultarse en http://powerhousedm.blogspot.com/2010/05/como-medir-la-informacion-que-lleva-un.html)
Las variables que capturan su comportamiento envían información a través del modelo, con el propósito de reducir la incertidumbre. En este ejemplo, las variables aportan 0.24 bits de información. Entonces gracias al modelo la incertidumbre sobre lo que hará el cliente (permanece o se va), se reduce de 0.40 bits a 0.16 bits (0.40 – 0.24). Si en vez de valores absolutos queremos expresar la reducción de incertidumbre en valores relativos, diríamos que el conjunto de variables con los que se desarrolló el modelo aportan el 60% (0.24 bits) de la información necesaria para predecir si el cliente se fugará o no con un 100% de exactitud (0.40 bits).

También podríamos decir que la incertidumbre de la variable a predecir se reduce a un 40%, una vez que se conocen las variables independientes.
En el siguiente artículo veremos cómo se interpretan estos 0.16 bits de incertidumbre restante.

viernes, 25 de febrero de 2011

La entropía como medida de la información

En el artículo anterior mostré cómo es posible medir la información que un grupo de variables lleva sobre otra y en el artículo sobre Información, incertidumbre y sorpresa expliqué cómo medir la información de una variable.


En este artículo mostraré cómo la entropía también es útil cuando medimos la información de un conjunto de variables.

Supongamos que tenemos dos tablas con 3 variables numéricas con similar distribución cada una (podemos asumir una distribución uniforme o normal).

Supongamos que la primer tabla, que llamaré T1, tiene las variables sin ningún tipo de relación entre ellas, mientras que la tabla T2 contiene algún tipo de relación entre las variables.

Voy a dejar algunas preguntas para que las responda el que lo desee y en breve publicaré las respuestas.

¿Qué tabla contiene más “orden”? ¿La T1 o la T2?

¿Cuál de las dos tablas tendrán una entropía mayor? ¿por qué?

¿Cómo debería ser el tipo de relación para que la entropía sea mínima o máxima?

Asumiendo que cada una de las tres variables lleva algo de información sobre una cuarta variable, ¿qué tabla es preferible para armar un modelo de predicción?

Quedo a la espera de respuestas y/o comentarios.

Gracias

miércoles, 9 de enero de 2008

¿Cómo medir el rendimiento de un modelo? (Parte II)

En el artículo anterior vimos cómo nos puede ayudar una matriz de confusión en la tarea de evaluar un modelo de score. En el análisis que vimos como ejemplo, asumimos que las equivocaciones y los aciertos tenían el mismo peso tanto para los clientes Activos como los No Activos, pero esto no tiene que ser necesariamente así.

En ciertos casos conviene ponderar los aciertos y errores según la categoría que se está prediciendo. Por ejemplo, equivocarse cuando se predice que un cliente no se irá a la competencia cuando realmente se va, podría tener más graves consecuencias que equivocarse en el caso contrario: se predice que se irá a la competencia pero se quedará. Para tratar estos casos de aciertos y errores ponderados simplemente se puede asignar un costo al error cometido. Por ejemplo, supongamos el siguiente caso:

1. Predecir erróneamente que el cliente se queda (se predice Activo pero el cliente es No Activo), tiene un costo de 5 unidades.
2. Predecir erróneamente que el cliente se va (se predice No Activo pero el cliente es Activo), tiene un costo de 1 unidad.

Considerando la matriz de confusión del artículo anterior




El costo total de esta prueba sería:

Costo total = 1.884 * 5 + 1.651 * 1 = 11.071

Curva Lift

Otra manera de evaluar un modelo es mediante una curva lift.

Para entender este gráfico comencemos con la curva roja que representa un modelo perfecto, o sea, aquel con un 100% de aciertos.

Supongamos que tenemos un modelo perfecto que predice un score 100 para todos los clientes que son No Activos y un score 0 para todos los Activos. Aplicamos el modelo a los datos de prueba y luego ordenamos por el score, de mayor a menor. Tendremos una tabla similar a la siguiente:

La curva perfecta (curva roja) representa el porcentaje de clientes No Activos que van apareciendo a medida que recorremos la tabla ordenada por el score del modelo Perfecto. Vemos que aproximadamente el 8% de los primeros clientes que aparecen (el porcentaje de clientes o casos aparece en el eje horizontal), son todos los clientes No Activos que encontraremos en esta tabla, o sea el 100% (representado con un 1 en el eje vertical). Esto es lógico, ya que el modelo perfecto es capaz de separar perfectamente las dos clases a predecir.

La curva perfecta continúa horizontalmente ya que no hay más clientes No Activos.

La curva del modelo naïve (color azul) se construye con una tabla similar a la anterior pero en donde el score es un número al azar. Una vez ordenada la tabla por este valor aleatorio, se necesitará recorrer toda la tabla para que aparezca el 100% de los clientes No Activos. O sea, esta curva es una línea recta que comienza en 0 y termina 1 (el 100% de los clientes No Activos). En cualquier punto el porcentaje de clientes No Activos será exactamente el mismo que el porcentaje de clientes en ese punto. Por ejemplo, tomando el 40% de clientes habremos seleccionado el 40% de los clientes No Activos.

Si todavía no queda claro qué representa la curva del modelo naïve se puede pensar un ejemplo concreto. Supongamos que tenemos 1.000 clientes y 100 de ellos son No Activos. Si no sabemos nada acerca de cada cliente, ¿cuántos clientes tendremos que tomar para estar seguros que seleccionamos los 100 No Activos? La respuesta es 1.000, o sea el 100% de los clientes. Y si seleccionamos un 40% de los clientes al azar, ¿cuántos clientes No Activos encontraremos? La respuesta es 40, o sea un 40% de los No Activos.

La curva del modelo se encontrará entre estas dos curvas extremas (la curva del modelo perfecto y la curva del modelo naïve). En el gráfico de arriba es la curva verde y nos indica el porcentaje de clientes No Activos que tendremos para cada grupo de clientes seleccionados en base al score del modelo. Por ejemplo, tomando un 20% de clientes (20% en el eje horizontal) obtendremos un 55% (0.55 en el eje vertical) de los clientes No Activos.

Cuanto más se parezcan la curva del modelo con la curva perfecta, mejor será el modelo.

Otra manera de ver esta información es mediante una tabla que muestre los valores de la curva en puntos específicos, por ejemplo en cada decil (cada 10%).


El decil 1, o sea el primer 10% de los clientes ordenados por el score del modelo, contiene el 40% de los clientes No Activos. El Lift que tiene el modelo en este punto se calcula como el cociente entre el porcentaje de clientes No Activos encontrados por el modelo y el que encontraría el modelo naïve, o sea 40%/10% = 4 (el valor de lift mostrado es 3,95 porque los porcentajes mostrados están redondeados).

Todos los ejemplos de estos dos artículos se basaron en un modelo de fuga de clientes o attrition, pero debe tenerse en cuenta que un modelo de score es simplemente un modelo de predicción que a cada predicción le asigna un score. Normalmente cada score tiene asociada una probabilidad de la clase a predecir. Por ejemplo, un score 76 podría significar una probabilidad del 58% de que el cliente se vaya a la competencia, de comprar un determinado producto, de aceptar una determinada oferta, de que el cliente no pague, etc.

lunes, 24 de diciembre de 2007

¿Cómo medir el rendimiento de un modelo? (Parte I)

Una vez que se construye un modelo de predicción se debe medir su rendimiento tanto sobre los datos con los que fue construido como sobre datos nunca vistos. Un buen modelo debería tener rendimientos similares con ambos datos. Si la diferencia es muy grande y a favor de los datos de entrenamiento, es probable que el modelo haya copiado parte del ruido. Para conocer más acerca de estos temas se puede consultar los artículos “¿Qué es el ruido” y “Datos de prueba contaminados”.

En este artículo trataré sobre cómo medir el rendimiento de un modelo de score, en particular para variables dependientes de dos estados, o categorías, por ejemplo, un modelo de score para estimar la probabilidad de fuga de clientes (attrition).

En un modelo de attrition que realicé el año pasado los resultados sobre los datos de prueba se resumen con la siguiente tabla:





Esta tabla, llamada matriz de confusión, es una de las herramientas que se pueden usar para medir el rendimiento de un modelo que predice dos posibles resultados. En este caso los estados en que se encuentran los clientes son:

1. Activos, son aquellos que siguen operando con la empresa
2. No Activos, son los que dejaron de operar con la empresa

Los datos que se usaron para probar el modelo contenían 36.292 clientes en total, de los cuales había 33.417 clientes Activos y 2.875 clientes No Activos, tal como se puede ver en la matriz de confusión. O sea, en esta tabla, las filas representan la variable dependiente o como figura a la izquierda, la Categoría Actual.

La distribución de los estados de la variable dependiente es:

Porcentaje de Activos = 33.417 / 36.292 = 92,08%
Porcentaje de No Activos = 2.875 / 36.292 = 7,92%

Una vez que se aplicó el modelo sobre estos datos, se obtuvieron las predicciones correspondientes. Se predijeron 33.650 clientes como Activos y 2.642 como No Activos.

Con esta tabla podríamos calcular cuántos aciertos tuvo el modelo. Para esto sólo hay que sumar los casos en los que el modelo acertó. O sea, se predijo No Activo y el cliente es No Activo, y se predijo Activo y el cliente es Activo.



O sea el modelo acertó

Aciertos: 991 + 31.766 = 32.757 veces

El porcentaje de aciertos se calcula como la cantidad de aciertos dividido la cantidad total de casos

Porcentaje de aciertos = 32.757 / 36.292 = 90,26%

La pregunta es, ¿es útil esta medición? Antes de contestar esta pregunta vamos a calcular cuánto sería el porcentaje de aciertos de un modelo que sólo responda al azar pero respetando la distribución de la variable dependiente. O sea, un modelo que responda Activo el 92,08% de las veces y No Activo el 7,92% restante de las veces.

Haciendo un poco de cálculos encontramos que este modelo tendría un porcentaje de aciertos de

Aciertos = 7,92% * 2.875 + 92,08% * 33.417 = 30.998

% Aciertos = 30.998 / 36.292 = 85.41%

En principio parece que el primer modelo (el que tiene un acierto de 90.26%) no es mucho mejor que un modelo al azar. Es más, hay casos en que el porcentaje de aciertos de un modelo al azar supera al de un modelo hecho con alguna herramienta de Data Mining. Pero entonces ¿de qué sirve trabajar tanto en un modelo si hacer predicciones al azar podría tener un mayor porcentaje de aciertos?

Una de las diferencias está en las predicciones de la clase o categoría menos representada. O sea, en nuestro ejemplo, en las predicciones de los clientes No Activos. Si comparamos los aciertos de ambos modelos, veremos una gran diferencia:

%Aciertos = Aciertos de No Activos / Total de No Activos predichos

%Aciertos modelo DM = 991 / 2.642 = 37.41%

En el caso de predicciones al azar, se predijeron 7,92% del total de casos, o sea 2.875 = 7,92% * 36.292

%Aciertos modelo al azar = 227 / 2.875 = 7.92%

Ahora se puede apreciar el valor de un modelo realizado con técnicas de Data Mining, ya que es capaz de predecir mucho mejor los clientes No Activos.

En el siguiente artículo seguiré con este tema.

Durante este año que viene me gustaría recibir algunos comentarios acerca de los artículos o los temas tratados. Al no tener feedback no tengo claro si los temas son interesantes o de la profundidad esperada.

Les deseo a todos los lectores del blog que tengan unas Felices Fiestas y un excelente 2008.

Hasta pronto,

Marcelo

lunes, 22 de octubre de 2007

El problema XOR

A principios de los 60 Frank Rosenblatt propuso una técnica llamada Perceptron Convergence Procedure para entrenar una red neuronal capaz de resolver simples problemas de reconocimiento de patrones.

El Perceptron era una red neuronal sin unidades ocultas, lo que no le permitía resolver ciertos problemas. Esta dificultad fue el tema principal del libro Perceptrones de Seymour Papert y Marvin Minsky.

Uno de los problemas más conocidos que no podía resolver el Perceptron era una función lógica llamada OR Exclusiva o simplemente XOR. Las funciones lógicas tienen normalmente dos entradas y una salida que depende de los valores de las entradas. Las entradas y las salidas pueden tomar dos valores: Verdadero y Falso, ó 0 y 1. Así para cada función lógica existe una tabla que indica cuál será la salida dada la combinación de los valores de la entrada. Para la función XOR la tabla es la siguiente:

El resultado de XOR será Verdadero (1) sólo si las dos entradas son distintas, sino será Falso (0).

Una manera de ver por qué este aparentemente simple problema ponía en dificultades al Perceptron, es representar cada entrada en un espacio de dos dimensiones, una para X y la otra para Y.

El Perceptron puede resolver problemas que son linealmente separables, o sea, que exista una línea (o hiperplano) que separe grupos de entradas que tengan la misma salida. En el caso del XOR es imposible encontrar tal solución, como puede verse en el siguiente gráfico


La entradas que tienen el mismo resultado en la función XOR son 0,1 y 1,0 por un lado, y 0,0 y 1,1 por el otro. En el gráfico se puede notar que no es posible encontrar una línea que separe estas entradas en dos grupos.

Luego de la publicación del libro de Minsky y Papert, el campo de la investigación de las redes neuronales comenzó a debilitarse y la mayoría de sus investigadores se pasaron al área del la Inteligencia Artificial simbólica.

A fines de los 70 y principios de los 80 se descubre cómo entrenar redes neuronales multicapas capaces de resolver cualquier tipo de problemas, incluyendo el XOR.

Resumiendo, una red neuronal con una capa oculta (hidden layer) resuelve sin inconvenientes el problema del XOR.

¿Qué pasa con Powerhouse? ¿Es capaz de resolver el XOR?

coinciden con las reglas del El modelo OPFIT no puede lograrlo, pero sí el MAXIT. Abajo se ve el modelo que se obtiene. Tiene 4 reglas y logra un 100% de aciertos. Las reglas que encuentra el modelo MAXIT son las reglas que definen las función XOR.


Para encontrar el modelo se usaron datos de entrenamiento que contenían alrededor de 1000 ejemplos del XOR

jueves, 11 de octubre de 2007

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.