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

viernes, 12 de octubre de 2007

¿Qué hacer con los NULLS?

Llamaré NULL a una posición de una variable que debería tener un valor pero está vacía. Por ejemplo, la siguiente variable tiene un NULL en la fila 4

Los NULLS pueden ser de dos tipos: valores faltantes y valores vacíos. Es muy importante tener en claro la diferencia entre los dos.

Un valor faltante es un valor que tiene sentido que exista. El ejemplo de arriba muestra una variable llamada Hpwr (potencia) y que pertenece a una tabla de datos acerca de vehículos. Otras variables de la misma tabla son MiGal (millas por galón), Cyl (cantidad de cilindros), WtLbs (peso en libras), Acc0-60 (aceleración de 0 a 60 mph), etc. En esta tabla, al vehículo representado en la fila 4 le falta el valor de la potencia. Debería existir un valor, pero no está. Este es un NULL del tipo valor faltante.

En cambio, un valor vacío es un valor que no tiene sentido que exista. Por ejemplo, consideremos una variable que indique el saldo en la cuenta corriente de un cliente. Si el cliente no posee cuenta corriente, ¿qué valor debería tener esa variable para ese cliente? Cero no puede ser, porque esto significaría que el cliente decidió tener cuenta corriente y en su saldo tiene 0$, y esto no es cierto. Veremos un poco más adelante cómo tratar con este caso.

Ahora que tenemos claro los dos tipos de NULLS veremos qué hacer en cada caso.

El caso más simple es el de valores faltantes. Por alguna razón el valor no está presente, aunque debería estarlo. ¿Qué hacer? La respuesta más simple es ignorar toda la fila. Hay veces en que los valores faltantes aparecen desparramados al azar en toda la tabla de datos, pero con suerte no hay demasiados. O sea, si tomáramos la decisión de ignorar las filas que tienen al menos un valor faltante, todavía nos quedaríamos con un porcentaje importante de total de filas (por ejemplo, sólo el 10% de las filas serían ignoradas así que nos quedaría el 90% para trabajar). Esta es la mejor solución, pero no siempre es posible.

Hay ocasiones en que si bien ninguna variable tiene individualmente más que un pequeño porcentaje de valores faltantes, el hecho de considerar todas las variables en conjunto hace que la cantidad de filas ignoradas sea lo suficientemente grande como para quedarnos sin datos para analizar. En este caso la única respuesta es completar los valores vacíos. El problema es con qué valor. Con cualquier valor que pongamos estaremos introduciendo un sesgo. En el artículo sobre la preparación de datos hablé sobre la estructura que conserva una fila. Si reemplazamos el valor faltante por un valor que no es apropiado, estaremos modificando esta estructura. Completar con el valor promedio de la variable no es una buena idea, por la razón expuesta anteriormente.

Dorian Pyle en su libro Data Preparation for Data Mining hace un tratamiento exhaustivo sobre el reemplazo de NULLS. Powerhouse se basa en uno de estos métodos para realizar el reemplazo automático de valores faltantes que tiene que ver con interferir lo mínimo posible con la estructura entre variables.

Antes de pasar al tratamiento de valores vacíos vale la pena tener en cuenta un caso que aparece muy a menudo. Muchas veces las variables que tienen sólo dos valores, por ejemplo SI y NO, vienen con un solo valor completado (por ejemplo SI) y el otro valor está vacío (significando en realidad que debería ser un NO). O sea, si nos guiamos por la cantidad de NULL reportados podríamos descartar esta variable por contener demasidos NULLS, pero un análisis más detallado indicará que sólo hay que cambiar los valores faltantes por NO. Powerhouse puede hacer esto en forma automática por medio de la opción VRN (o NRV en Inglés) durante la carga de datos.

Veamos ahora cómo tratar los NULLS cuando son del tipo valor vacío, o sea, que están sin completar porque no tiene sentido poner un valor.

En Powerhouse existe un tipo de variable llamada Mixta. La misma puede contener valores numéricos y categóricos a la vez. En el ejemplo del saldo de la cuenta corriente, si el cliente tiene cuenta corriente, el valor será el saldo, caso contrario, el valor será alguna indicación tal como "SIN CUENTA".


Powerhouse tratará esta variable como si fuera numérica para clientes con cuenta corriente y como si fuera categórica para el resto de los clientes.

Resumiendo, si la cantidad de valores faltantes no es demasiado grande, lo ideal es ignorar las filas que contienen valores faltantes, caso contrario reemplazarlos de manera que se interfiera lo mínimo posible con la estructura interna de los datos.

Si los NULLS representan valores vacíos, usar un string cualquiera para reemplazar los vacíos para que Powerhouse automáticamente trate esta variable como Mixta.

4 comentarios:

consultora dijo...

Me parece novedoso el manejo de los datos. Tengo las siguientes preguntas para hacer. ¿los datos se cargan directamente en este sistema? ¿Pueden ser importados de algún otro software?. Algunos clientes míos tienen sistemas CRM con una enorme cantidad de datos que creo que podrían ser analizados mas profundamente. ¿Existe la posibilidad de que sean usados directamente o es necesario de alguna preparación especial?

Marcelo R. Ferreyra dijo...

Powerhouse puede acceder directamente a archivos de datos con formato texto o a cualquier formato través de ODBC.

El único requisito que deben cumplir los datos es estar en forma de tabla, o sea, una fila para cada caso en donde las columnas representen las variables. Por ejemplo, si los datos son acerca de clientes, cada fila representará un cliente y cada columna una variable que indique algo sobre ese cliente.

Del resto no debe preocuparse. Los datos pueden contener outliers, nulos, variable categóricas y númericas. Powerhouse tratará cada caso de la mejor manera posible.

Otra característica de Powerhouse, que comentaré en un próximo artículo, es que no se deben balancear los datos. Muchas herramientas necesitan que la variable a predecir tenga igual porcentaje de casos positivos que negativos (en el caso de que la variable tenga sólo dos valores posibles), por lo que si los porcentajes son muy distintos (por ejemplo 1%/99%), se deben seleccionar datos para balancearlos. Powerhouse puede tratar estos datos "desbalanceados" sin tratamiento previo.

muecadevida dijo...

Hola,primero gracias por blog.
Tengo una duda, que pasa si tengo confeccionado una encuesta en número para variables categóricas (encuesta sociodemográfica) de manera que el valor cero representa la no secuencialidad (pregunta q no corresponde contestar por secuencialidad) y el valor nueve el NS/NC. Es correcto considerar los campos con valores nueves como campos vacios, pudiendo significar q la persona no sabia?¿
El valor cero también indicaria vacio ? .Gracias

Marcelo R. Ferreyra dijo...

Hola, gracias por tu comentario.

En principio parecería que una respuesta NS/NC (marcada como 9) sería lo mismo que una respuesta nula (valor faltante), por lo que podrían tomarse como equivalentes (el 9 y el Nulo).

Respecto del valor 0, si representa una pregunta que no debe tener respuesta, entonces ese valor debería ser distinto que el Nulo (ya que es un valor vacío)

Saludos,

Marcelo