En análisis de datos es importante que la información que se estudia no contemple datos innecesarios o de formato incorrecto para evitar deducciones erróneas o imprecisas. Por ejemplo se quieres hacer un modelo sobre el coste de los vuelos a bajo coste dentro Europa no tiene sentido que en los datos incluya billetes de primera clase o ¡peor aún billetes de autobús!
Otros casos que también que se deben considerar son los datos malos. Por ejemplo, se haces un análisis sobre el tiempo medio que lleva un autobús para llegar a una parada; poco te sirven los datos incoherentes generados por GPS defectuoso del vehículo.
Los procedimientos de limpiar el dato, o Data cleansing, permiten generar coherencia en los datos para la respuesta que se busca.
En los parágrafos que siguen, pensado para personas que están dando sus primeros pasos en el análisis de datos, explicaremos la importancia de limpiar los datos además de analizar información incorrecta o irrelevante haciendo un ejemplo simplificado.
Un modelo de Machine Learning ?
El ciclo de vida para producir un modelo de Machine Learning se puede distribuir en los siguientes pasos:
- Obtener los datos
- Limpiar y preparar los datos
- Generar el modelo
- Evaluar el modelo
- Desplegar el Modelo
- Hacer predicciones
Dentro de estos pasos el relativo a la limpieza y preparación de los Datos es el más costoso pero es uno de las más importantes. Esta etapa es conocida como Data Cleansing o Data Cleaning.

¿Qué es el Data Cleaning? ?
Como Data Cleaning entendemos todas las operaciones necesarias para depurar un grupo de datos de la información que puede desviar el análisis de los datos de su objetivo.
Durante esta fase se realizan descartes de datos y la gestión de los datos ausentes.
Podéis pensar que con esta limpieza se puede perder información importante para el modelo; pero realizada de modo correcto esta mejora la calidad del dato y nos aproxima a una respuesta más correcta sobre la pregunta que queremos responder.
Algunas de las operaciones de limpieza que se pueden realizar son:
Limpieza de datos mal formateados ?
El impacto del formato de datos es evidente en análisis de datos. Es fácil deducir que si esperamos que un campo sea el dato relativo a un precio pero trabajamos con un texto…, el proceso fallará.
Limpieza de los datos incongruentes ?
La limpieza de datos incongruentes depende del conocimiento del dato. Por ejemplo si estás analizando los datos sobre la ruta de taxis al aeropuerto, puedes excluir de los datos todas las rutas que no terminan en el aeropuerto, ¿no?
Compensación de los datos ausentes ?
Básicamente en los datos es posible que haya campos que no estén informados, a estos los llamamos los datos ausentes. En este caso tenemos dos opciones:
- Descartar los datos
- Rellenarlos como mejor se pueda
En muchos casos se elige la segunda opción donde para los datos tipo numérico se puede poner un valor medio del campo, o la mediana. Y respecto a los datos no numéricos, podemos aislarlos como una categoría aparte.
Ejemplo práctico: Predicción de precios ?
En lo que sigue vamos a demostrar lo útil que puede ser el Data Cleaning con un ejemplo. Para ello, vamos a hacer un análisis para prever las tarifas de las taxis de Nueva York dentro de la isla de Manhattan. Este es uno de los problemas clásicos de introducción de la página de Kaagle.
Para los que no lo conocéis: Kaggle es una comunidad de Data Science que realiza desafíos de análisis de datos con una comunidad muy activa. A los interesados en el mundo del Machine Learning os aconsejo que os acerquéis.
Para poder ejecutar el ejemplo haremos uso de Jupyter Notebook (Sobre la instalación y el uso del Jupyter notebook prepararé un artículo aparte :D. Mientras tanto, una buena referencia es la propia página de Jupyter).
Los datos sobre el movimiento de taxis los obtendremos de la página NYC OpenData.
Para poder realizar la prueba dentro del entorno de Jupyter Notebook es necesario una versión reducida, para tener los tiempos de ejecución aceptables. También restringimos el dataset a solo Manhattan. Para simplificar el modelo vamos a eliminar los campos que no sean numéricos (p.e: “payment_type”) y también aquellos que por su naturaleza no tienen correlación con la pregunta.

Con estos datos, sin limpiar, intentamos generar un modelo Random forest:

El valor de correlación que esperamos en este caso debería ser el más pequeño posible: un valor cero implica que coinciden la previsión, en este caso hablamos de Overfitting, que es otro problema.
El resultado se puede interpretar como que el modelo puede predecir el coste del viaje en taxi, teniendo todos los otros datos, con un error de cerca de 1 dólar; que no está mal.
Ahora vemos que podemos hacer si limpiamos un poco los datos. Por ejemplo:
- quitamos los valores negativos de la cantidad
- los taxis vacíos (sin pasajeros)
- los viajes demasiados largos (1000 km dentro de la isla de Manhattan es bastante raro)
- y las tarifas que parecen absurdas (suponemos un límite de 410 dólares)

Ahora calculando el modelo con los datos pre-procesados obtenemos:

Obtenemos como desviación ahora 0.17 dólares para nuestro modelo predictivo y sin hacer ningún tipo de calibración en el mismo. Es un resultado mucho mejor que el anterior y se ajusta a lo que se podía esperar.
Conclusión ?
Como hemos visto, la preparación y limpieza de los datos, antes de generar el modelo, nos lleva a una mejora importante en cuanto a la predicción que se consigue con los modelos.
Es importante considerar que el trabajo de preparación de los datos es el más costoso, ya que es necesario un análisis exploratorio del mismo y procesar las millones de entradas para formatearlos de modo correcto.