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

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.

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

jueves, 18 de octubre de 2007

Pasos para construir un score

En este artículo explicaré lo simple que es armar un score en Powerhouse. Como ejemplo utilizaré datos de una compañia de seguros publicados para una competencia de Data Mining y que actualmente sirven como benchmark.

El problema a resolver es muy simple:

¿Podría decirme quién está interesado en comprar una póliza de seguros para una casa rodante (caravan) y explicarme por qué?

Para resolver el problema se publicaron dos tablas de datos, una con 85 variables explicatorias acerca de quién compró o no una póliza en el pasado. O sea, cada fila consiste de 85 variables independientes más otra variable dependiente que indica con 1 ó 0 si la persona compró o no. La otra tabla es similar a la anterior excepto porque no contiene la variable que indica si la persona compró la póliza o no.

Si estuviéramos trabajando en un proyecto real con una compañía de seguros, la primera tabla de datos podría venir de una campaña de marketing realizada con una muestra de los clientes y la segunda tabla estaría formada por los clientes que no participaron en la campaña anterior.

Con el propósito de minimizar los costos de la segunda campaña (la que se hará con la segunda lista de clientes), la oferta no será enviada a toda la lista de clientes, sino a aquellos 800 clientes con mayor probabilidad de que compren el seguro.

Así que los pasos a realizar en el proyecto serán:
  1. Construir un modelo usando los datos de la primera tabla
  2. Aplicar el modelo a la segunda tabla para obtener una probabilidad de que el cliente compre el seguro
  3. Seleccionar los 800 clientes con mayor probablidad
En un proyecto real se enviarían los folletos a estos 800 clientes con la esperanza que compraran la póliza un porcentaje similar al obtenido en las pruebas con la primera tabla. Pero en nuestro caso usaremos un dato que fue publicado luego que la competencia finalizó. Este dato fue la lista de los clientes pertenecientes a la segunda tabla y que compraron la póliza. Dicho de otro modo, nuestra segunda tabla contiene la variable a predecir. De este modo podremos probar el modelo y compararlo con los resultados obtenidos por los participantes de la competencia.

En la página web The Insurance Company (TIC) Benchmark hay más detalles del problema con los datos y los resultados.

Un score es un número que tiene asociada una probabilidad. Un score de riesgo de crédito indicará la probabilidad de falta de pago.

En este caso, el score tendrá asociada la probabilidad de que el cliente compre la póliza de seguros.

Bueno, luego de esta larga introducción podemos comenzar con el proyecto.

Powerhouse tiene tres modelos que generan un score, el OPFIT, el MAXIT y el Scorecard. Para esta tarea podemos usar el modelo OPFIT o el Socrecard.

Comenzamos cargando los datos y definiendo CARAVAN como la variable a predecir (es la variable 86). Hay que tener en cuenta que no hace falta hacer ninguna preparación previa de los datos. Cuando los mismos son cargados en Powerhouse, quedan automáticamente preparados para que cada variable exponga al máximo la información que pueda contener acerca de la variable a predecir.

Al terminar la carga y la preparación de los datos (esta preparación en realidad forma parte de algo más complejo que es un mapeo de información, pero para este ejercicio no hace falta considerar este tema), aparece una ventana de estadísticas que sirve para realizar un análisis exploratorio

La pantalla muestra una lista de todas las variables con varias columnas con información acerca de la misma. La parte inferior de la ventana muestra más detalles acerca de la variable que está seleccionada en ese momento.

En un proyecto real esta información es muy útil para verificar si las variables contienen la información que se espera que tengan.

El siguiente paso es seleccionar las variables más importantes. El modelo que vayamos a construir debe estar basado en una pocas variables por varias razones:
  1. Es más simple de entender
  2. Existe mayor probabilidad de que funcione correctamente con datos nuevos
  3. Se facilita la preparación de variables para el área de sistemas
En un siguiente artículo discutiré este tema con mayor profundidad.

Tenemos a disposición 85 variables. ¿Cómo seleccionar un grupo óptimo de variables? La tarea no es simple debido a la explosión combinatoria que aparece si se desean probar todos los grupos posibles. Afortunadamente Powerhouse usa un método basado en la Teoría de la Información que le permite encontrar un grupo óptimo de variables en muy poco tiempo (para este caso Powerhouse tardó 30 segundos para encontrar las variables con mayor información acerca de la variable a predecir). La siguiente tabla muestra las variables seleccionadas

Las variables aparecen en orden. O sea, PPERSAUT es la variable que mayor información aporta acerca de si el cliente comprará o no la póliza. La siguiente variable es la que mayor información adicional aporta., y así sucesivamente. Las 5 variables juntas aportan un 58% de la información necesaria para predecir sin errores si el cliente comprará o no la póliza.

Powerhouse no continuó seleccionando más variables porque la siguiente variable no aportaría la suficiente información adicional para justificar la pérdida de representatividad de la muestra con la que se construirá el modelo. Dicho de otro modo, Powerhouse nos dice: "Para obtener un buen modelo que funcione tanto con datos del training set como con datos nuevos, éstas son las 5 variables recomendadas"

Si bien no es necesario para este artículo profundizar más en el análisis de las variables seleccionadas, vale la pena notar que las últimas dos variables parecen aportar más información que cada una del resto, tomadas por separado. O sea, la última variable aporta 58.11% - 36.90% = 21.21% de información adicional. De la misma manera, la variable anterior aporta 17.26%. Esto parece contradecir lo que dije anteriormente, que la primer variable es la que lleva la mayor cantidad de información posible. Pero esta contradicción es sólo aparente. Lo que está sucediendo es que las variables que van siendo agregadas están interactuando con las ya seleccionadas previamente, entonces la información que aportan es mayor que si las tomáramos aisladamente.

Continuando con la creación del score, lo que falta ahora es realizar un modelo con estas 5 variables. Con un clic sobre esta selección elegimos construir un OPFIT. El modelo se construye en unos pocos segundos y se muestra una ventana con el modelo, pero no analizaremos esta ventana, solo nos concetraremos en el rendimiento, especificamente en la curva de Lift sobre el Test set.

El problema original nos pide elegir los 800 clientes entre 4.000 con mayor probabilidad de comprar una póliza, o sea, el 20%. Del gráfico de Lift podemos notar que 20% de los clientes (escala horizontal) seleccionados con el modelo contiene aproximadamente un 50% de compradores de póliza. Los datos de la primera tabla muestran que un 5.72% de los clientes compraron la póliza (este dato sale de la distribución de la variable a predecir). Por lo tanto podemos estimar la cantidad de clientes que comprarán la póliza en la segunda tabla. Debe ser 5.72% de 4.000 ó lo que es lo mismo, 229 clientes. Así que en base a estos cálculos deberíamos esperar que el modelo seleccione aproximadamente un 50% de 229, o sea unos 114 clientes.

Veamos si esto es cierto. Recordemos que nosotros ya conocemos cuáles clientes de la segunda tabla realmente compraron la póliza, así que simplemente aplicaremos el modelo a la segunda tabla de clientes, los ordenamos en base al score de mayor a menor, seleccionamos los primeros 800 y contamos cuántos clientes compraron la póliza.

Para aplicar el modelo a la segunda tabla, primero debemos agrega esta nueva tabla al proyecto haciendo clic derecho sobre el proyecto y elegiendo "Agregar Fuente de Datos".

Luego hacemos clic sobre el signo + de la tabla agregada y buscamos la variable CARAVAN que es la que nos dice si el cliente compró o no la póliza. La arrastramos hasta el área de trabajo para crear una vista con esta variable. Luego arrastramos el modelo OPFIT hasta esta vista y obtendremos el score para cada cliente.

Ahora podemos exportar esta Vista para cargarla en Excel y seleccionar los clientes con mayor probabilidad. ¿El resultado? 118 clientes, aproximadamente lo que esperábamos (114).

El ganador de este concurso obtuvo 121 clientes y el segundo 115, así que Powerhouse no lo hizo tan mal. Es más, si consideramos que el tiempo total del proyecto fue inferior a 5 minutos, podemos asumir que los resultados han sido más que satisfactorios.

Ya está listo y probado el modelo de score, pero todavía falta algo para terminar con el proyecto, falta explicar por qué. Para esto usaremos el modelo Scorecard. Este modelo podríamos haberlo usado en un principio en vez del OPFIT, pero se supone que OPFIT es levemente más preciso que el Scorecard. De hecho, una prueba rápida revela que el Scorecard encuentra 117 clientes en los 800 (OPFIT encontró 118), así que la diferencia es realmente muy pequeña.

Pero el Scorecard que construiremos será más simple y menos preciso, ya que solo lo quereos para explicar las relaciones encontradas en los datos. Así que en vez de usar los parámetros default en las opciones del modelo, cambiaremos uno de ellos. En vez de usar 5 rangos (o 5 bins) para las variables, usaremos solo dos, así el modelo será más simple de entender

El modelo es el siguiente:

El modelo de score se interpreta de la siguiente manera. El score será un número entre 0 y 100. A mayor score, mayor probabilidad de que el cliente compre una póliza. Cada variable aporta parte del score. Así por ejemplo, para la variable PPERSAUT tenemos dos valores de score, si la variable toma un valor menor que 5.5, entonces para esta variable, el score es 0. En cambio, si el valor de PPERSAUT es mayor o igual a 5.5, entonces el score será 40. El resto de las variables se interpretan de la misma manera.

La tercera columna "Si es nulo" es para el caso de que el valor de esa variable no se conozca. En ese caso el score asociado a esa variable será el indicado en esta columna. Por ejemplo, para la primera variable es 17.

El score total de un cliente es la suma de los scores individuales de cada variable.

La variable PPERSAUT se refiere a "Contribution car policies", y según el modelo a mayores valores que tome, mayor será la probabilidad de que el cliente compre la póliza.

Con el resto de las variables se puede hacer una análisis similar. En particular se puede ver que la variable MOSHOOFD tiene una relación inversa con la probabilidad: a mayores valores, menor es la probabilidad.

Este modelo puede exportarse a Excel y se obtendrá, entre otras cosas, una tabla con las probabilidades asociadas a cada score.

Conclusión, realizar un score con Powerhouse es una tarea muy simple que lleva pocos minutos una vez que se cuenta con la tabla de datos correspondiente.

Powerhouse no sólo obtiene modelos precisos y robustos (trabajan muy bien con datos nuevos), sino que a su vez estos modelos son muy simples de entender.