En el episodio de hoy de Un podcast ninja sobre Big Data sacamos nuestra faceta más exploradora y hablamos de qué hacer al enfrentarnos por primera vez a un dataset y del análisis exploratorio de datos (EDA) 🧭
En el episodio de la semana pasada averiguamos varios sitios de los que podíamos sacar datos para empezar a hacer nuestros pinitos ninja entrenando modelos de Machine Learning y hoy vamos a ver qué hacer con estos datos o con cualquier conjunto de datos al que nos enfrentemos.
En la mayoría de cursos o tutoriales que hay por ahí se pasa por alto esta etapa o se trata muy por encima porque la gente está generalmente ávida de empezar a entrenar sus modelos de aprendizaje automático y luego tunearlos sin sospechar que en la vida real, dedicarle un buen rato a explorar los datos que tenemos nos ahorrará bastantes quebraderos de cabeza.
Es un poco como ir a la montaña, la parte de la ruta en sí es la parte emocionante, la que todo el mundo quiere hacer.
Y luego está la parte de comprobar los mapas, dónde están los refugios, qué rutas alternativas hay, qué tipo de paisajes podemos encontrar si vamos por un camino o por otro, encargarse de las provisiones que van a ser necesarias… esa parte, que da bastante más trabajo, es bastante menos popular.
Peeeero hacer bien la parte de investigación previa a salir de ruta suele salir a cuenta.
¿Que es posible que acertéis a la primera y entrenéis un modelo de Machine Learning sencillo que os dé los resultados que necesitáis en un dataset facilito?
Puede ser.
Especialmente si empezáis por los conjuntos de datos que se pueden encontrar en Kaggle.
Estos datasets serían como el montecito pequeño y con senderos para llegar a la cima.
Aunque no os fiéis porque aunque muchos de los datasets de Kaggle están más o menos preparados para poder saltarse la parte de análisis exploratorio de datos y pasar directamente a la parte de entrenar el modelo con alguna posibilidad de éxito hay otros que no.
Yo personalmente os recomiendo que lo hagáis siempre porque entenderéis mejor lo que estáis haciendo y descubriréis cosas bastante interesantes sobre vuestros datos.
O sea que para el caso de estar entrenando modelos de Machine Learning sobre un conjunto de datos la parte de exploración sería un primer paso en el flujo de trabajo y para el caso de analistas de datos… pues es fundamental…
Así es cómo se encuentran los patrones escondidos en los datos.
Entonces lo primero antes de salir a explorar la montaña, o en nuestro caso a explorar el conjunto de datos que tenemos delante, es saber por dónde empezamos a explorar.
¿Empezamos a caminar directamente hacia la cima o rodeamos la base de la montaña para encontrar la mejor ruta?
Pues depende.
Depende de lo que estéis tratando de lograr. Si queréis llegar a la cima, probablemente sea bueno comenzar a escalar pronto. Pero igual también sería bueno dedicar un tiempo a buscar la mejor ruta.
Explorar datos es lo mismo.
¿Qué preguntas estáis tratando de responder?
O mejor, ¿qué suposiciones estamos tratando de demostrar que no son correctas?
Ese sería el primer paso como siempre que estamos delante de un problema relacionado con datos. Saber qué es lo que queremos conseguir y a qué preguntas estamos intentando dar respuesta.
Parece un poco tonto pero es fundamental.
¿Y luego qué?
Pues el siguiente paso sería saber qué tipos de datos tenemos y qué representa cada uno.
Si tenemos datos tipo tabla como si fuera una tabla de excel en filas y columnas puede que en cada columna tengamos:
Aquí lo primero que podemos hacer es separar cada columna o característica en cajitas, según el tipo de datos que hay dentro.
Por ejemplo, si nuestro conjunto de datos tiene columnas con los datos personales de gente tipo nombre, apellido, si es hombre o mujer, color favorito, edad, altura, peso, domicilio, DNI...
Tendremos columnas con datos numéricos como la edad, la altura y el peso.
Columnas con categorías como el color favorito o el género.
Estas columnas se llaman categorías porque representan una opción de entre un número limitado de opciones. De entre todos los colores el favorito será uno, no es como el peso, que es un valor continuo…
Finalmente, es posible que haya algunas columnas que no tenemos muy claro cómo clasificar.
No pasa nada, porque sólo estamos en el primer paso.
Si de entre todos los datos tenemos dudas sobre lo que representa alguna columna tendremos que buscar en la documentación del conjunto de datos, si es que viene con una, buscar en internet o preguntar al experto en el campo en el que estamos trabajando.
Igual estamos explorando un conjunto de datos médicos con valores de parámetros en un análisis de sangre y no sabemos qué significa alguna columna o cuáles son sus valores habituales… Pues tener un médico a mano para preguntar es siempre de gran utilidad.
Y luego hay otro tema a la hora de ver el tipo de datos que hay en cada una de nuestras columnas. Hay algunas que parecen números pero en realidad son categorías, vienen disfrazadas.
Por ejemplo, imaginad que una columna nos da la información sobre el número de hermanos de una persona. Pues, este dato es, en principio, un número pero lo podríamos tratar como una categoría porque hay un número finito de hermanos que se pueden tener.
Podemos agrupar a las personas según su número de hermanos.
Hijos únicos por un lado, luego la gente que tiene 1 hermano o hermana, los que tienen dos y así hasta llegar a 69, ¿sabíais que dicen que la mujer que más hijos ha tenido en la historia fue una rusa que se llamaba Valentina Vassilyeva que vivió hace 300 años y tuvo 69?
Eso dicen...
El caso es que a parte de casos especiales como este podemos tratar el número de hermanos como una categoría aunque sea un número.
La idea es que si podéis agrupar los datos en vuestra cabeza con bastante facilidad, puede ser que nos convenga tratar esa columna como categoría en lugar de como número.
Siempre dependerá del caso particular pero puede serviros como pista.
Después según el tipo de dato que tenga cada columna lo exploraremos y prepararemos de maneras diferentes. Columnas numéricas por un lado y columnas con categorías por otro.
¿Y qué hacemos con las que no tenemos claras?
De momento podemos ver si realmente creemos que aportan información para el problema que queremos resolver.
Aunque siempre decimos que más datos ayudan en estos problemas de Big Data si estamos hablando de algo que no tiene nada que ver pues no lo vamos a procesar.
Por ejemplo, si tenemos un dataset con datos personales y financieros de gente porque queremos ver si les prestamos o no dinero, pues igual su nombre de pila no nos dice nada y podemos pasar de esa columna.
El tema es que la primera etapa de análisis exploratorio de datos debe tener el objetivo no solo de plantear más preguntas sobre los datos, sino también de empezar a ver qué información podemos desestimar.
Sin miedo, porque siempre podemos recuperarla más tarde.
El siguiente paso en el análisis exploratorio de un dataset una vez que ya hemos visto que tipos de datos tenemos es ver cuánto de completos están esos datos.
Puede ser que la gente no haya rellenado su edad y entonces no tenemos esa info para muchas de nuestras filas. En los conjuntos de datos que se encuentran en problemas del mundo real es algo de lo más común.
Para evaluar cuál es la situación de nuestro conjunto de datos en cuanto a valores faltantes suele ser bastante útil utilizar visualizaciones.
Hay herramientas específicas para eso pero incluso si fuera una tabla excel y marcáis en negro las celdas vacías y luego hacéis zoom out podréis ver cuáles son las columnas más problemáticas en este aspecto.
¿Y qué hacemos con todos esos datos que no conocemos?
Pues, de nuevo, depende.
Porque NO hay soluciones únicas para tratar los datos faltantes. Tenemos que estudiar el conjunto de datos y sus columnas específicas para determinar qué hacemos con esos datos que no sabemos.
Por ejemplo, si la gente no rellena su edad y no la sabemos podemos poner que tienen -1 años, y sabemos que eso no puede ser o si no ha rellenado si es hombre o mujer podemos poner una categoría nueva que diga vacío, porque el campo está vacío.
Una vez hayamos solucionado el problema de los valores que nos faltan podemos pasar a la siguiente fase.
La de los valores raros, outliers o valores atípicos. Como queráis llamarles.
Estos valores hay que tenerlos en cuenta porque podrían sesgar los resultados de nuestro análisis de datos, proporcionando una representación engañosa de los datos.
Además, si se los enchufamos como datos de entrenamiento a un modelo de Machine Learning, puede ocurrir que el modelo tienda a intentar ajustar ese valor raro y lleve al sobreajuste u overfitting.
Por otro lado, si los quitamos sin más nos podemos encontrar ante un modelo que sea demasiado generalista.
Si ve algo un poquito fuera de lo que ha visto durante el entrenamiento los resultados serán malos.
Como siempre, es mejor experimentar iterativamente para encontrar la mejor manera de lidiar con los valores atípicos.
Estos valores raros pueden ser valores atípicos reales o errores que se han colado en nuestro dataset.
¿Recordáis a Valentina Vassilyeva y sus 69 hijos?
Pues eso.
Entonces ¿Cómo encontramos estos valores atípicos?
Pues en una primera aproximación podemos representar algunos estadísticos de nuestro conjunto de datos.
Saber cuál es el valor más frecuente, cuál es el máximo, cuál el mínimo y cuál la media.
Si fuera un dataset con una columna con el número de hijos de cada mujer tendríamos que el valor mínimo es cero, porque no se pueden tener menos hijos que ninguno a no ser que fuera un error.
Y en ese caso, pues ya habríamos detectado que algo está pasando ahí.
El valor más frecuente igual es dos hijos. El valor medio es 1,6 y de repente el máximo es Valentina Vassilyeva con 69 hijos.
Pues ya vemos que eso es un valor raro. Si luego de repente nuestro modelo empieza a decirnos que las mujeres tienen 30 hijos pues podemos sospechar que algo hemos hecho mal.
Otra manera es, de nuevo, utilizar visualizaciones.
Las visualizaciones son muy importantes en esta parte de análisis exploratorio de datos porque nos permiten reconocer patrones muy rápidamente.
Para detectar los valores atípicos en nuestro dataset lo más eficiente es representar la distribución de valores.
Cuántas mujeres no tienen hijos, cuántas tienen un hijo, cuantas dos, etc...
Y así vamos explorando cada una de las columnas de nuestro dataset para ir formándonos una idea de lo que tenemos delante.
Este tipo de visualizaciones nos ayudará a representar la dispersión de los diferentes valores de los datos que tenemos.
Y lo que es más importante, nos ayudará a identificar posibles valores atípicos.
Si bien los valores atípicos no son difíciles de detectar, a veces es complicado lidiar con ellos.
Como siempre depende del conjunto de datos y del objetivo del proyecto.
Los métodos para manejarlos son en parte similares a los datos faltantes.
Podríamos pasar de ellos y desecharlos, reemplazarlos por algún otro valor o simplemente, dejarlos como están y ver cómo afecta.
Así que resumiendo, cuándo os encontréis ante un nuevo conjunto de datos:
Espero que os guste el episodio.
Si es así, no olvidéis dejar un «Me gusta» y algún comentario al episodio en Ivoox o una valoración de 5 estrellas del podcast en Apple podcasts, en Spotify, en Google podcasts o donde quiera que escuchéis el podcast.
Recordad que si tenéis cualquier duda o pregunta podéis contactar conmigo a través del formulario de contacto o podemos seguir la conversación en Twitter.
Muchas gracias por estar ahí y os espero en el próximo episodio de Un Podcast Ninja sobre Big Data.