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

jueves 2 de octubre de 2008

Correlación e Información Mutua

El coeficiente de correlación entre dos variables está basado en la covarianza (y normalizado mediante las varianzas de cada variable) y asume, entre otras cosas, que la relación entre las variables es lineal. Esto significa que el coeficiente de correlación (o de determinación r2) no es suficiente para saber si dos variables están correlacionadas. El siguiente es un ejemplo tomado del libro “The Visual Display of Quantitative Information” de Edward Tufte y basado en 4 pares de variables ideadas por Francis Anscombe.

Las 4 variables Y tienen la misma media y desviación estándar. Además el coeficiente de correlación entre X e Y es el mismo en los 4 casos (0.816) y comparten la misma recta de regresión y = 0.5 x + 3

Las cuatro relaciones con distintas entre si, pero sus correlaciones son las mismas. Esto nos enseña la importancia de usar gráficos de dispersión para visualizar la relación entre dos variables, más que confiar en su correlación.

¿Pero qué sucede si analizamos estas relaciones usando medidas de información?

La primera diferencia que encontramos es que las entropías de las variables Y son distintas, excepto las dos últimas. La diferencia más importante es que la información transmitida entre cada par de valores es diferente en los 4 casos, como puede verse en la siguiente tabla



En los tres primeros casos, la información transmitida nos indica que es posible realizar un buen modelo, mientras que en el último caso, un valor de sólo 18% nos dice que ningún modelo será capaz de hacer un buen trabajo para representar esta relación (lo cual es obvio mirando el gráfico de dispersión).

La información transmitida no asume ningún tipo de relación, como lo hace el coeficiente de correlación. Esta es una gran ventaja, porque muchos data sets contienen relaciones no-lineales que son descartadas al utilizar correlaciones lineales.

En casos que involucran sólo dos variables, una manera de confirmar si la relación es lineal es usar los gráficos de dispersión, pero cuando aparecen más variables independientes, graficar la relación no sirve. Una solución es utilizar medidas de información mutua como la información transmitida.

viernes 25 de abril de 2008

Ya no es necesario torturar los datos

Existe un concepto muy arraigado y que se basa en las viejas tecnologías de análisis de datos: para obtener un buen modelo hay que hacer una enorme cantidad de pruebas.

¿Cuál es la mejor transformación para cada variable? ¿Cuál es el mejor valor para reemplazar los nulos? ¿Cuáles son las variables más adecuadas para realizar el modelo? ¿Cuántas variables se deben incluir? ¿Qué tipo de modelo es el mejor? Éstas son algunas de las tantas preguntas que se deben contestar para crear un modelo, con lo que no es de extrañar que muchos piensen que no sólo tienen que hacer muchos intentos sino que además deben saber de estadística y necesitan tener mucha experiencia.

Afortunadamente la teoría de la información responde a cada una de estas preguntas. La clave está en medir la información que contiene cada variable disponible. Hay sólo una transformación de la variable que maximiza la información y reduce el ruido. Existe sólo un grupo de variables que lleva la mayor información posible con el menor ruido posible.

Una vez realizada la mejor transformación y elegidas las mejores variables, toda la información disponible está expuesta de tal manera que con una simple regresión se obtiene un modelo excelente y muy fácil de interpretar.

En resumen, con la teoría de la información ya no es necesario ensayar diferentes transformaciones de variables, distintas combinaciones de variables y algoritmos para ver cuál es el que mejores resultados genera.

Hay un solo camino para hacer las cosas: el óptimo.

¿Utopía? No, realidad.

Powerhouse es la prueba.

viernes 28 de marzo de 2008

Modelos de predicción usando modelos de segmentos

En el artículo anterior comenté que los modelos de clusters o segmentos pueden usarse para varios propósitos. Hoy mostraré cómo es posible usar un modelo de segmentos para predecir.

Powerhouse permite generar modelos de clusters con distintas cantidades de segmentos. Cuando se usa el modelo para explicar los datos, se prefieren pocos segmentos, pero si el modelo se usa para predecir, es preferible que la cantidad de segmentos o clusters sea grande.

Un modelo de clusters es normalmente un modelo no supervisado. Dicho de otro modo, no existe una variable output que sirve como guía en la creación del modelo. La utilidad de un modelo no supervisado está relacionada con la manera en que se distribuyen los valores de las variables en cada uno de los clusters.

Si los valores de la variable output (variable a predecir) se distribuyen con diferentes rangos en cada cluster, es posible usar el promedio de los valores de cada cluster como valor predicho. Por ejemplo, supongamos que un modelo contiene 10 clusters. Supongamos también que la variable a predecir es del tipo SI/NO. Si asignamos 1 para SI y 0 para NO, podemos calcular el promedio por cada cluster y cada valor representará la probabilidad de que la variable tome valor SI. La siguiente tabla muestra lo que podrían ser estos valores

Con esta tabla podemos armar el modelo de predicción de la siguiente manera: cuando tenemos un caso nuevo, representado por las mismas variables con las que se armó el modelo de cluster, sólo hay que calcular el cluster al que corresponde. Luego, la predicción, que en este ejemplo será la probabilidad de ser "SI", será la probabilidad asignada al cluster en la tabla de arriba.

Como ejemplo práctico usé datos acerca de los clientes de un banco para armar un modelo de riesgo crediticio. Luego construí un modelo de cluster, que en Powerhouse se llama OPTICL. Modifiqué la cantidad de clusters llevándolo al máximo. Esto resultó en un modelo con 64 clusters. Luego calculé la probabilidad de encontrar valores SI de la variable output usando los datos de entrenamiento.

Es importante aclarar que Powerhouse no usa la variable output para construir un modelo de cluster (si lo hiciera ya no sería un modelo no supervisado).

Finalmente apliqué el modelo en los datos de prueba (esto genera un número de cluster para cada caso) y reemplacé los números de cluster de cada caso por la probabilidad calculada anteriormente.

¿El resultado? Un modelo con un KS de 51% (es un excelente valor). Para comparar, realicé un modelo de predicción utilizando el Scorecard de Powerhouse sobre los mismos datos y encontré que el rendimiento fue levemente superior con un KS de 55% sobre los datos de prueba.

Conclusiones:

Los modelos de predicción no tienen que ser necesariamente supervisados. En este artículo vimos cómo es posible realizar un modelo no supervisado con una muy buena respuesta.

jueves 27 de marzo de 2008

Segmentaciones con Powerhouse

Los modelos de clustering tienen varios usos, uno de los cuales es la segmentación de clientes.

Se pueden segmentar los clientes en base a diferentes criterios y utilizando distintas variables. Powerhouse tiene la capacidad de encontrar los segmentos naturales que puedan existir en los datos en forma completamente automática. Sólo es necesario indicarle cuáles serán las variables con las que deberá trabajar y elegir algunos de sus modelos.

Como ejemplo de segmentación elegí los datos provenientes de una línea de POS (cajas registradoras). Uno de los módulos de Powerhouse es capaz de leer cada ticket y en base a una serie de parámetros generar automáticamente los datos en el formato usado en cualquier proyecto de Data Mining. En este artículo mostraré unos pocos ejemplos de la información encontrada en la comparación de los clusters o segmentos.

La representación gráfica de los segmentos que muestra Powerhouse es la siguiente:


Los puntos negros representan los clientes. Cuando dos clientes son similares, o sea, los valores que toman todas las variables que los identifican son parecidos, aparecen juntos. Cuanto más se parezcan más juntos estarán. En cambio si dos clientes son muy distintos, ya no serán vecinos sino que estarán situados en zonas separadas.

Cuando la densidad de puntos es alta (o lo que es lo mismo, cuando en una zona se agrupen gran cantidad de clientes similares), el color de la zona es rojo. Cuando una zona tiene muy baja densidad, el color es azul. Los colores intermedios indican zonas con densidades intermedias.

Powerhouse busca las zonas de más baja densidad para delimitar los distintos segmentos. En el gráfico de arriba estos límites están representados por líneas blancas.

Basado en estos datos Powerhouse identificó 3 segmentos (este es el número de segmentos que mejor se ajusta, pero el usuario tiene la posibilidad de elegir un número distinto de segmentos).

Ahora es momento de encontrar qué características tiene cada segmento. O sea, en qué se parecen y en qué se distinguen los segmentos encontrados.

Una manera de hacerlo (y no es la única ofrecida por Powerhouse), es mediante la comparación de clusters que se genera automáticamente con un clic.

La ventana de Estadísticas de los Clusters nos permite ver cómo se distribuyen los valores de cada una de las variables entre los distintos segmentos. En este caso vemos que el monto promedio gastado en cada ticket es distinto en cada segmento. La columna que dice Todos indica cuál es el promedio, el valor mínimo y el máximo de esta variable considerando todos los clientes, en este caso 114,81$. El resto de las columnas indica también los valores promedios, mínimo y máximo pero para cada segmento. Abajo aparecen un pequeño gráfico de la distribución de estas variables.

Es posible hacer análisis similares para otras variables y encontrar el perfil de los clientes de cada segmento para luego tomar algún tipo de acción.

En este proyecto se encontraron muchas diferencias interesantes, por ejemplo una de ellas es que el segmento que deja el márgen bruto más alto también es el que compra pocos productos de indumentaria pero el que más gasta en frutas y verduras.

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