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

jueves, 1 de noviembre de 2007

Un ejemplo con datos No Balanceados

En un artículo anterior comenté que en Powerhouse no es necesario balancear los datos. De hecho podría llegar a ser contraproducente. En este artículo mostraré un ejemplo que con muchas herramientas de Data Mining necesitaría un ajuste en los datos a fin de balancear la variable a predecir.

Los datos son acerca de una campaña de marketing para la venta de tarjetas de crédito. Existen >11.000 casos, 39 variables independientes y una variable dependiente que es un flag indicando si el cliente contactado con la oferta de la tarjeta, la aceptó o no.

La particularidad de estos datos es que la variable dependiente tiene muy pocas respuestas positivas, alrededor de 1.5%, como puede verse en el gráfico o en la tabla. Esta clase de distribución en datos de campañas de marketing no es inusual y complica la creación de un modelo de predicción en más de una forma.


Si la herramienta de modelado necesita trabajar con datos balanceados (por ejemplo una red neuronal) hay que seleccionar parte de los datos para lograr una distribución más equitativa con la consecuente disminución de la cantidad de datos disponibles para realizar el modelo. Otra alternativa es generar nuevos datos artificiales con una distribución similar a los casos poco representados, aunque este último método no es recomendado.

Powerhouse puede trabajar con los datos tal como están. Al cargar la tabla con los datos, se dejó de lado un 40% de casos para verificar el modelo.

El primer paso es crear una selección de variables

Se seleccionaron 4 variables que llevan la mayor información libre de ruido y con una buena probabilidad de ser una muestra representativa de la población. Estas variables llevan el 75.07% de la información necesaria para predecir la variable independiente.

El siguiente paso es construir un modelo OPFIT ya que es el que normalmente obtiene los mejores resultados. La siguiente ventana muestra el desempeño del modelo

El KS es 40.7 sobre los datos de entrenamiento (trainining set) y 36.6 sobre los de prueba (test set). Considerando que los datos de prueba no se usan en ningún momento para crear el modelo, este sería el valor aproximado de KS que debería esperarse cuando el modelo se ponga en producción.

El valor del R2 no parece ser muy bueno, pero esto es debido a que este parámetro de medición no es adecuado para este tipo de problemas.

La curva de Lift muestra que sobre los datos de prueba, con un 20% de los clientes se pueden conseguir alrededor de un 50% de clientes que aceptaron la oferta. Para tener datos más precisos se puede consultar la tabla de Lift que muestra que efectivamente el valor es 50% o un lift de 2.5

Ya que la variable a predecir está tan desequilabrada (1.45%/98.55% en este caso), vamos a probar de cargar un 75% de los datos para realizar el modelo (Training set) y el 25% restante para prueba y compararemos las variables seleccionadas y el rendimiento de los modelos.

La ganancia de información es algo menor pero mejora la confianza de tener una muestra representativa, lo que podría mejorar el desempeño del modelo en los datos de prueba (y por consiguiente con datos nuevos). Las variables seleccionadas son las mismas. El modelo tiene un KS de 41.5 y 38 sobre los datos de entrenamiento y prueba. Se puede notar que la brecha entre ambas tablas disminuyó (antes era un poco más de 4 puntos y ahora es de 3.5). La tabla de Lift muestra un desempeño algo superior al anterior

Con Powerhouse existe la posibilidad de realizar un nuevo modelo usando todos los datos disponibles ya que casi no existe riesgo de sobre-entrenamiento, sobre todo una vez que se comprobó que el modelo funciona bien con datos de prueba.

Es más, en este ejercicio pudimos ver que aumentando la cantidad de datos para el entrenamiento, el desempeño del modelo sobre los datos de pruebas fue más cercano al desempeño sobre los datos de entrenamiento.

martes, 16 de octubre de 2007

¿Es necesario balancear los datos?

Supongamos un proyecto de Data Mining del área de marketing de una empresa en donde el objetivo es construir un modelo para predecir quién responderá a la oferta de un producto.

Existen distintas maneras de llevar adelante un proyecto de este tipo, una de ellas es realizar una campaña ofertando el producto a una muestra al azar de clientes con el objeto de recabar información que será usada en el proyecto. La idea es usar una muestra que sea lo más pequeña posible pero que contenga la suficiente información para hacer el modelo. Por ejemplo, si la empresa tuviera 100.000 clientes, se podría tomar una muestra al azar de 10.000 para enviarles el folleto. Una vez que pase un tiempo prudencial, se puede armar la tabla con todas las variables disponibles de los clientes de la muestra más una variable que indique si el cliente compró o no el producto. O sea, la variable a predecir será "Compra" cuyos dos únicos valores serán "SI" o "NO".

Depende el tipo de producto, podría ser que el porcentaje de gente que compre el producto sea muy bajo, por ejemplo, sólo el 1%.

Así que la variable "Compra" tendrá la distribución de valores:

Muchas herramientas para construir modelos tienen problemas con este tipo de distribución de la variable a predecir. Por ejemplo, si se entrena una red neuronal con un nodo como Salida (Output) se obtendrá un modelo cuya respuesta será la misma para todos los clientes: "NO". ¿Por qué? Porque los algoritmos de entrenamiento están diseñados para reducir el error. Si la respuesta es para todos los casos "NO", el error que se comete es del 1%, o dicho de otro modo, el modelo acertará el 99% de las veces!

A este tipo de modelo, el que siempre contesta lo mismo para cometer el mínimo error, se lo conoce como modelo naïve.

Lo que se necesita es un modelo que supere el modelo naïve.

Una vía para lograr que la herramienta de modelado no produzca un modelo naïve es balancear los datos, o lo que es lo mismo, modificar la distribución de la variable a predecir para que sea 50%/50%. Una manera de lograr esto es la siguiente:

Seleccionar todas las filas en donde la variable a predecir toma el valor "SI". En nuestro caso hipotético de la campaña de marketing nos quedaríamos con unas 100 filas (el 1% de 10.000). Luego se deben incluir otros 100 casos en los que el cliente no compró el producto ("NO"). Ahora tendremos una tabla de datos en los que la distribución de la variable a predecir es 50%/50%.

Pero estos datos tienen dos problemas: la distribución de la variable a predecir no es real (¡ya lo sabíamos!) y son insuficientes para realizar un buen modelo, al menos en nuestro caso en que sólo conseguimos 200 filas.

¿Cómo solucionamos la falta de datos? Existen dos maneras. Hay herramientas que generan nuevas filas artificiales en las que la variable de salida toma el valor menos representado (en nuestro caso "SI"). No tengo claro la validez de este método y si realmente ayuda. En mi caso particular, hace unos años utilicé esta práctica con redes neuronales y no obtuve ningún beneficio.

La otra solución es aumentar el tamaño de la muestra, pero esto incrementa los costos del proyecto (para tener una muestra representativa de la población, el costo podría aumentar hasta¡ 10 veces!)

¿Qué hacer si la herramienta de Data Mining es Powerhouse? Nada

Una de las grandes ventajas que tiene Powerhouse es que no es necesario (ni aconsejable) balancear los datos. Todas las pruebas realizadas por nosotros y por muchos usuarios de Powerhouse, indicaron que es mejor no balancear que hacerlo.