Si hay algo por lo que ha caracterizado los últimos años es por el volumen de información. Gigas, Terabytes de datos por todos lados, almacenados en los más diversos lugares, al alcance de todos pero, ¿de qué sirve tanto dato si luego no hacemos nada con ellos?
Hay gente a la que nos encanta jugar con los datos. Ver que nos pueden ofrecer, que podemos obtener con ellos, si podemos adivinar el futuro gracias a ellos, … es realmente una ciencia apasionante. En los últimos años ha crecido el interes por gente que tenga la habilidad de manejar estos datos y poder sacar conclusiones de ellos. Esto se ha vuelto cada vez más necesario, pues hay grandes cantidades de empresas que almacenan datos pero no son capaces de sacar provecho de ellos. Así, ha nacido la figura del «científico de datos» o «data scientist», que no es más que alguién con amplios conocimientos en el campo de las matemáticas y que es capaz de interpretar datos para sacar conclusiones, predicciones o visualizaciones de ellos.
Hoy vamos a jugar un poco con los datos, y con una serie de herramientas que facilitan este manejo. Para empezar, necesitamos dos cosas. En primer lugar, los datos. En esta ocasión tenemos un conjunto de datos del hundimiento más célebre de la historia de la nautica: el Titanic (que además viene con concurso). Los datos nos los podemos bajar de aquí. Por otro lado, necesitamos un objetivo. Vamos a desarrollar una heurística para adivinar si un pasajero sobrevivió o no al hundimiento. En concreto, necesitamos una heurística que tenga una tasa de acierto superior al 80%. Ya tenemos todo lo necesario para empezar.
Para realizar el análisis, podemos usar cualquier herramienta. Nosotros vamos a utilizar Pandas, una biblioteca para el análisis de datos sobre Python. Esta biblioteca permite hacer operaciones sobre los datos y facilita mucho el manejo de ellos.
Antes de empezar a desarrollar una heurística, es importante familirizarse con el problema y con los datos. Pero en este caso, ¿va a ser sencillo, no? Todos sabemos la historia del Titanic, el hundimiento, y hemos visto en el cine o en libros cómo fueron aquellos angustiosos momentos. Veamos entonces el conjunto de datos que tenemos. En concreto, vamos a ver algunas de las variables del conjunto de datos.
- survival: indica si la persona sobrevivió al incidente o no.
- pcclass: indica la clase en la que viajaba el pasajero.
- sex: indica el sexo del pasajero, male para los hombres y female para las mujeres.
- age: edad del pasajero.
El conjunto de datos posee otros dastos, pero este puede ser un buen comienzo. Si hacemos caso al dicho clásico del mar («las mujeres y los niños primero»), con estas variables podemos hacer una buena predicción.
Es el momento de empezar a prepara un pequeño script que nos permita verificar si nuestra heurística es buena. Podemos empezar con este.
import pandas def obtener_prediccion(path_csv): """Metodo que implementa la heuristica""" return None if __name__ == '__main__': dataset = 'dataset/titanic_data.csv' # Obtenemos las predicciones y leemos el conjunto de datos. resultado_heuristica = obtener_prediccion(dataset) dataset = pandas.read_csv(dataset) # Aplicamos magia de Python, para crear un diccionario con el id del # pasajero y si comprobar si ha sobrevivido o no sd = dict(zip(dataset.PassengerId, dataset.Survived)) # Calculamos el porcentaje de supervivientes de nuestra heuristica correcto = 0 for key in set(resultado_heuristica): if(resultado_heuristica[key] == sd[key]): correcto += 1 print (100) * (correcto / float(len(resultado_heuristica))), "%"
Y ya tenemos listo nuestro banco de pruebas para probar. Ahora es el momento de probar heurísticas. Dado el conocimiento previo que tenemos, sabemos que si el pasajero es mujer tiene más probabilidades de sobrevivir que si es hombre, luego vamos a probar una heurística muy sencilla:
def obtener_prediccion(path_csv): """Metodo que implementa la heuristica""" # Diccionario donde guardamos la predicción prediccion = {} # Leemos el fichero del csv df = pandas.read_csv(path_csv) # Por cado uno de ellos, calculamos los valores de la predicción for pasajero_index, pasajero in df.iterrows(): #Agregamos la prediccion pasajero_id = pasajero['PassengerId'] # Si el pasajero es muher, entonces predecimos que ha sobrevivido if (pasajero['Sex'] == "female"): prediccion[pasajero_id] = 1 else: prediccion[pasajero_id] = 0 return prediccion
Y con ello obtenemos el siguiente resultado:
78.6756453423 %
¡Ya estamos muy cerca, y sólo en el primer intento! Pero ¿cómo podemos mejorar el resultado? Con nuestro conocimiento de la materia. Por ejemplo, sabemos que no sólo las mujeres tenían preferencia en los botes salvavidas, sino que también los niños. Añadimos la condición a nuestra heurística.
if (pasajero['Sex'] == "female" or pasajero['Age'] < 12) and (pasajero['Pclass'] == 1 or pasajero['Pclass'] == 2): prediccion[pasajero_id] = 1 else: prediccion[pasajero_id] = 0
Y el resultado es:
80.0224466891 %
¡LO CONSEGUIMOS! Hemos desarrollado una heurística que es capaz de predecir si una persona fue superviviente del Titanic sólo sabiendo el sexo, la edad y la clase en la que viajaba.
Este es, de forma resumida, el trabajo de un científico de datos. Primero, es vital conocer el dominio sobre el que estamos trabajando. Posteriormente, es necesario recopilar los datos y adecuarlos para poder trabajar mejor con ellos. También es vital fijarse un objetivo (¿qué queremos saber?) y posteriormente generar los modelos para extraer esa información. Un último paso es utilizar esa información, bien sea a través de la visualización de los datos, a través de informes o dentro de una aplicación para mejorar su rendimiento.
Este trabajo ofrece muchas posibilidades y permite ver los hechos desde una perspectiva distinta. Es un trabajo cada vez más útil, dado el volumen de datos que manejamos. Al final, los datos no son más que el reflejo objetivo de la realidad, pero debemos tener cuidado. Únicamente muestran un parte de la realidad, y a los seres humanos nuestra imaginación y nuestros sesgos a menudo nos juegan malas pasadas.
Y tú, ¿cómo mejorarías la heurística?
PD: Este ejercicio forma parte de un curso de Udacity. Si te interesa adentrarte en este mundo, igual es un buen punto de partida.