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

jueves, 29 de noviembre de 2007

Más sobre preparación de datos

El último propósito de un proyecto de Data Mining o Minería de Datos es obtener el conocimiento necesario acerca de alguna situación a fin de controlarla o al menos predecir qué sucederá frente a determinadas condiciones. Esto es muy similar a lo que hacemos cada vez que nos enfrentamos a situaciones de la vida diaria. No sólo obtenemos la mayor información posible por medio de nuestra experiencia, sino que la vamos almacenando en nuestra memoria y tratamos de encontrar cómo se relacionan diferentes hechos u objetos. Una vez que conocemos lo suficiente estamos en posición de predecir qué sucederá, y si además somos capaces de modificar las condiciones actuales, podremos actuar para obtener lo que deseamos.

Cuando elaboramos un proyecto de Data Mining, los datos que usamos están en la memoria de una computadora y el motor analítico es un programa o algoritmo capaz de encontrar esas relaciones. Una vez encontradas las mismas, nos permitirán entender los datos que asumimos fueron generados por algún mecanismo y provenientes de algún sistema o situación de interés, por ejemplo la interacción de los clientes con una empresa.

Si la situación de interés fuera simple, quizás no haría falta recurrir a una computadora, pero si se torna compleja o demasiado grande para manejarla en nuestro cerebro, necesitamos alguna herramienta que nos asista, y qué mejor que una computadora. El único requisito es contar con datos que contengan la información necesaria para nuestro propósito.

En Data Mining los datos generalmente están en forma de tabla, en donde cada fila representa el objeto de interés, por ejemplo, un cliente, un producto o un paciente, y cada columna contiene información acerca de algún atributo del objeto. Por ejemplo en el caso de un paciente podría ser la edad, el peso, la presión arterial, etc. Muchas veces los datos vienen en forma transaccional y se necesita un trabajo de ensamblado previo a fin de obtener la tabla mencionada.

Tanto algoritmos de Data Mining como seres humanos recurrimos a un método común para hacer la cantidad de datos manejable: usamos modelos.

Un buen modelo debería capturar las partes más importantes de la situación y dejar de lado los detalles que no hacen al comportamiento. Si lo logra, entonces parte del trabajo ya está hecho. Sólo resta interpretar este modelo (entender las relaciones explícitas en el modelo) y ponerlo a trabajar, ya sea para predecir o para controlar.
Así como existen distintas clases de modelos, también existen diferentes tipos de herramientas para crearlos. Cuando los datos están preparados, es posible utilizar modelos más simples y aún obtener excelentes resultados.

Preparación de variables

Además de decidir qué hacer con los nulos, con los outliers y con datos no balanceados, la preparación de datos implica modificar la distribución de variables numéricas, transformarlas en categóricas y transformar variables categóricas en numéricas si es necesario.

Tratamiento de nulos

El tratamiento de los nulos está tratado en otro artículo, "¿Qué hacer con los Nulos'"

Qué hacer con los outliers

Un outlier es un valor muy alejado de la mayoría de los valores que toma una variable. ¿Es un error? Quizás si, quizás no. Si es posible asegurar que se trata de un error, podría corregirse o en el último de los casos ser tratado como un nulo. Caso contrario habrá que hacer algo con estos valores para que no creen problemas con la herramienta de modelado.

Un método que podría funcionar es acercar los outliers al resto de los valores lo suficiente como para que no traigan problemas en la etapa de modelado, pero no tanto como para que dejen de ser casos extremos. Existe una función que puede mapear una serie de valores en forma lineal en su parte central y logarítmica en sus extremos. Esta es la función logística


En donde Vi es el valor a transformar y Vn es el transformado. Los dos gráficos siguientes muestran el efecto de usar la función logística sobre una serie de valores que contienen dos outliers. Los valores originales están en el gráfico de la izquierda y los transformados a la derecha.

En el gráfico de la derecha se puede notar que los outliers, tanto el valor máximo como el mínimo, se acercaron al resto de los datos.

Balanceo de datos

Más frecuentemente de lo que uno quisiera, la variable a predecir tiene una distribución lo suficientemente desequilibrada como para causarle problemas a la gran mayoría de los algoritmos que generan un modelo de predicción. El caso típico es el siguiente:
Una empresa desea llevar a cabo una campaña de marketing uno a uno acerca de un nuevo producto, pero como cuenta con un presupuesto fijo desea enviar el folleto solamente a aquellos clientes que mayor probabilidad de comprar el producto tengan. Para este fin selecciona una muestra de un pequeño porcentaje de clientes y les envía el folleto. De esta manera obtendrá una base de datos con información sobre sus clientes más una variable con una indicación sobre si el cliente compró o no el producto. Esta será la variable a predecir.

Una vez armado el modelo que estime la probabilidad de compra (podría ser un modelo de score), sólo necesitará aplicarlo sobre el resto de los clientes (aquellos que no fueron contactados en la primer campaña usando la muestra de clientes) y luego seleccionar aquellos con mayor probabilidad.

El problema que aparece en este proyecto es que es normal que los clientes pertenecientes a la muestra que responden afirmativamente durante la campaña sean muy pocos (quizás menos de un 5% o 10%). Entonces la variable a predecir contendrá, por ejemplo, 95% de respuestas negativas y 5% de positivas.

Esta clase de distribución tan desequilibrada hace que muchas herramientas generen un modelo cuya respuesta será siempre No Compra para todos los clientes. La razón es que prediciendo la clase más frecuente (No Compra), el modelo obtiene un alto grado de aciertos. En este caso, obtiene ¡un 95% de aciertos!

¿Qué hacer entonces para solucionar este tema? La práctica común es balancear los datos. Esto significa que se toman todos los clientes que respondieron afirmativamente y luego una cantidad igual y al azar de clientes que respondieron negativamente. De esta manera se obtiene una muestra con una distribución de un 50% de Compra y un 50% de No Compra. Cuando la cantidad de clientes con respuesta positiva es demasiado pequeña, se acostumbra a probar con varias distribuciones para ver cuál es la adecuada (por ejemplo, 40%/60% y 30%/70%).


Si el software usado es Powerhouse, no hace falta balancear los datos. Los artículos ¿Es necesario balancear los datos? y Un ejemplo con datos no balanceados dan más detalles y ejemplos sobre este tema.

Transformación de variables numéricas

Existen dos tipos de transformaciones que pueden aplicarse a las variables numéricas: cambiar su distribución y convertir a categórica.

Cambio de la distribución

Hay veces en que la distribución de los valores de una variable está lejos de ser normal, por ejemplo tiene una larga cola como es el caso de una variable que contenga el ingreso o sueldo de las personas. La mayoría de las personas tienen un sueldo que podría ir desde digamos 500$ hasta 5.000$. Pero existen personas cuyos ingresos son mayores, llegando incluso a valores muy altos, como por ejemplo 50.000$. Si se desea un modelo que pueda predecir la probabilidad de que un cliente compre un determinado artículo, esta variable podría ser útil. Pero su poder de discriminación se verá afectado por su distribución. La diferencia entre dos clientes con ingresos de 1.000$ y 2.000$ parece ser lo suficientemente importante como para que afecte la probabilidad de comprar un producto, pero la herramienta de modelado sólo verá una diferencia del 2% (aproximadamente 1000/50.000) en estos dos valores.

Si en vez de usar la variable tal como está, se aplica la función logaritmo a cada valor, la diferencia entre estos dos valores transformados pasa a ser 15%, mas de 7 veces que el caso anterior. Cualquier herramienta que trate con esta variable transformada tendrá más posibilidades de encontrar una relación con el hecho de que un cliente haya comprado o no un artículo. La función logaritmo expande los valores bajos de una variable y comprime los altos, dejando más al descubierto la relación que podría existir con otra variable. En el gráfico de la izquierda se muestra una relación con variables sin transformar y en el de la derecha la misma relación pero con las variables transformadas.


Hay que considerar que no siempre es posible aplicar un logaritmo ya que la función sólo está definida para valores mayores que cero, y tampoco es siempre la mejor transformación, pero siempre es posible encontrar otras funciones similares (la función logística por ejemplo), o modificar la distribución de la variable con métodos numéricos.

Transformación en categóricas

Otro tipo de transformación posible es convertir la variable numérica en categórica. Se debe determinar cuáles serán los puntos de corte para que a cada rango resultante se le asigne una categoría. Existen dos métodos para encontrar los puntos de corte: supervisado y no supervisado.

Uno de los mejores métodos no supervisados es aquel que asigna a cada categoría una misma cantidad de valores. Para lograrlo se ordena la variable de menor a mayor y luego se encuentran los puntos de corte de acuerdo a la cantidad de categorías que se desean. Por ejemplo, si la variable tiene 1000 valores y se desean 10 categorías, el primer punto de corte se lo ubica en la posición 100 (1000/10) de la variable ordenada. El segundo en la 200, el tercero en la 300, y así sucesivamente.

Por ejemplo, la tabla siguiente asigna 8 categorías a una variable que va desde -10 hasta 100

Estos rangos agrupan la misma cantidad de valores en cada categoría.

Los métodos supervisados necesitan de la variable dependiente para encontrar sus puntos de corte. Uno de los más conocidos es el llamado LIL por sus siglas en inglés Least Information Loss ("Menor Pérdida de Información") y se basa en Teoría de la Información.

Cada vez que se transforma una variable numérica en categórica, se pierde información, ya que valores que antes eran distinguibles por ser diferentes, ahora serán los mismos (por ejemplo, con la tabla anterior los números 13.5, 17 y 28 pasan a ser exactamente iguales, ya que a los tres se les asigna la categoría Cat4). El método LIL trata de encontrar cuáles son los puntos de corte para que la información perdida sea mínima posible. Powerhouse tiene disponible varios métodos de binning y se usa por default el método LIL.

Transformación de variables categóricas

Los datos que integran cada fila de una tabla tienen una estructura. Los valores de cada variable están más o menos relacionados y es esta relación la que debe preservarse cada vez que se aplica algún tipo de transformación en las variables. Cuando es necesario asignar un valor numérico a variables del tipo categórico, es una práctica común hacerlo en forma arbitraria pero sin advertir que se está corriendo el riesgo de destruir la estructura interna de los datos.

La altura y el peso son ejemplos de variables que mantienen una relación entre si. Supongamos que el peso viene dado en kilogramos como una variable numérica y la altura como una variable categórica tal como se muestra en la siguiente tabla

Una manera de asignar valores numéricos a la variable altura sin tratar de preservar la relación entre estas dos variables es por orden alfabético:



El gráfico de la izquierda muestra cómo queda la relación entre estas dos variables usando la asignación numérica arbitraria dada en la tabla de arriba y el gráfico de la derecha muestra la misma relación pero usando un método de asignación numérica que no destruya la estructura.



La relación entre estas dos variables es más simple en el gráfico de la derecha (que podría considerarse lineal) que en el de la izquierda (que es definitivamente no lineal). En este caso, para obtener la tabla de asignaciones numéricas que preservaran la relación simplemente se obtuvo el promedio de pesos para cada categoría de la variable altura y luego se normalizó de 0 a 1. El resultado es el siguiente


Conclusiones

Estos son algunos de los métodos recomendados para transformar datos. Esta es una tarea que puede llevar mucho tiempo, de hecho se estima que podría consumir el 70% del tiempo total de un proyecto de Data Mining, pero las ventajas son enormes.

Una vez que los datos han sido preparados las relaciones que contienen quedan mejor expuestas, facilitando de esta manera el trabajo que tiene que hacer la herramienta que vaya a crear el modelo.

Esto a su vez tiene una consecuencia muy importante: como las relaciones quedaron al descubierto, el riesgo de sobre-entrenamiento se minimiza. Además, herramientas tan simples como una regresión lineal podrían generar un modelo excelente.

Powerhouse utiliza parte de esta metodología para preparar los datos automáticamente y evitar tener que hacerlo manualmente.

7 comentarios:

Anónimo dijo...

Impecable

Marcelo R. Ferreyra dijo...

Muchas gracias por tu comentario Jeremías.

Saludos,

Marcelo

Anónimo dijo...

El tema esta igual en MONOGRAFIAS!

quien copio a quien?

Marcelo R. Ferreyra dijo...

El artículo es el mismo, escrito por mi y publicado en Monografías y en mi Blog.

Saludos,

Marcelo

Paolo S dijo...

Muy buen artículo, realmente ilustrativo y simple de comprender

Paolo S dijo...

Muy buen artículo, realmente ilustrativo y simple de comprender

Marcelo R. Ferreyra dijo...

Muchas gracias por tu comentario Lolo.

Saludos,

Marcelo