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 Preparación de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Preparación de datos. Mostrar todas las entradas

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.

miércoles, 10 de octubre de 2007

La importancia de preparar los datos

Preparar los datos antes de construir un modelo con cualquier herramienta es esencial para obtener los mejores resultados. Veamos por qué.

Variables numéricas

Supongamos que estamos trabajando con una variable cuya distribución tiene una larga cola. Un ejemplo podría ser el sueldo de una persona, tal como se puede ver en el siguiente gráfico



Esta variable tiene una mediana de 1.200$ y una media de aproximadamente 1.700$, pero contiene sueldos mucho mayores, llegando a un máximo de 130.000$.

Cuando se usa esta variable sin ningún tratamiento previo, salvo expresarla en una nueva escala, como ser 0 a 1 ó –1 a +1, como lo requeriría una red neuronal, se estaría desaprovechando gran parte de la información que pudiera contener. ¿Por qué? La razón es simple, los algoritmos que trabajan con los diferentes valores de la variable tratarán de encontrar intervalos en que la variable puede discriminar valores de la variable dependiente. Pero estos intervalos siempre son relativos al rango total de la variable.

Por ejemplo, supongamos que estamos modelando un score para predecir la probabilidad de que un cliente acepte un determinado producto y creemos que el sueldo podría ser una buena variable predictora. Intuitivamente podríamos asumir que una persona con un sueldo de 1.000$ se debería comportar de manera diferente que otra cuyo sueldo sea 5.000$. Después de todo hay una diferencia de 4.000$ en los sueldos. Pero la herramienta que usemos para modelar, por ejemplo una red neuronal, verá una diferencia muy pequeña porque ambos valores solo difieren apenas en un 2%, ya que 1.000$ representa el 0.77% respecto del rango total de la variable (0 a 130.000$) y 4.000$ representa el 3.08%.

¿Cómo solucionamos esto? Existen varios métodos. Uno de ellos es aplicar la función matemática logaritmo a esta variable. El logaritmo tiene la propiedad de comprimir los valores altos y expandir los bajos. Por ejemplo, si aplicamos el logaritmo en base 10 a nuestro ejemplo y luego calculamos los valores relativos, nos queda:

Valor Original

Log

Log Relativo

1,000 $

3.00

59%

4,000 $

3.60

70%

Ahora la diferencia entre los dos sueldos es de un 11%, cinco veces más que en el caso anterior. De todas maneras hay que tener en cuenta que los logaritmos no son ni la solución ideal ni una solución universal. Por ejemplo, no es posible aplicar el logaritmo si existen valores menores o iguales a cero. Afortunadamente existen métodos numéricos capaces de modificar la forma de la distribución para que la variable incremente su poder discriminatorio, pero la explicación de los mismos quedará para un siguiente artículo.

Variables categóricas

Otro problema comúnmente encontrado en proyectos de Data Mining es la asignación de valores numéricos a variables categóricas. La práctica normal es asignar los valores numéricos al azar, sin seguir ningún método particular.

El problema con este método es que asignar valores numéricos arbitrarios a cada categoría podría destruir la estructura interna de los datos. Para aclarar esto supongamos que tomamos una fila de una tabla de datos. En general, los valores que toman las variables mantienen una cierta relación, por ejemplo, la altura y el peso de una persona. Esta relación entre variables es la que debemos mantener cuando le asignamos valores numéricos a las categorías. Si no lo hacemos, podríamos estar modificando las relaciones internas de modo que la herramienta de modelado tenga que lidiar con relaciones más complejas.

Como ejemplo práctico de preparar los datos antes de modelarlos veremos un caso real obtenido de Internet. En el sitio web de UCI Machine Learning Repository existe una tabla de datos llamada Adult. Con Powerhouse se seleccionaron 5 variables para predecir si la persona tiene ingresos mayores a 50 mil dólares anuales o no. Luego se prepararon dos modelos de regresión lineal, uno con los datos sin preparar (en donde las variables categóricas fueron numeradas en forma arbitraria) y otro con los datos preparados con Powerhouse.

Los resultados se resumen en la siguiente tabla


Datos sin Preparar

Datos Preparados

KS

44

60

R2

0.19

0.32


Con datos preparados el estadístico KS (Kolmogorov-Smirnoff) mejora casi un 50% y el coeficiente de determinación mejora más de un 50%.

Un libro que desarrolla de manera excelente el tema de preparación de datos es Data Preparation for Data Mining de Dorian Pyle.