Aspectos Generales del Data Science

Hace tiempo escribí un post sobre Data Science en telegra.ph, que resultó ser una plataforma muy buena para que jamás nadie pueda leerte. Por eso, decidí migrarla acá

El ánimo de este artículo darle una vuelta menos formal a un artículo sobre Data Science que escribí para la empresa en la que trabajo. Además, acá no me amarro a ninguna tecnología en específico.

El Data Science está de moda, al fin y al cabo los datos son el nuevo petróleo de las empresas. Estas, generan y generan datos pero luego no saben qué hacer con ellos ni menos cómo darles alguna ventaja competitiva. Es decir, convertir los datos en información, esta en conocimiento, luego a partir de ahí tomar acciones pertinentes.

data science

En la imagen tienes el flujo que cualquier data-scientist haría en su trabajo diario:

Primero, importar los datos desde diversas fuentes.

Ordenarlos para hacerlos "analizables", en un tablón donde cada columna es una variable y cada fila es una observación.

Luego de ordenar, hay que transformar; homologar, estandarizar, agregar nuevas variables usando fórmulas a partir de variables existentes, creando agregaciones, etc.

Ordenar y transformar tienen como sobrenombre "wrangling" o riña, pelea.

Para generar conocimiento es necesario Visualizar y Modelar, ya que ambas son complementarias, siempre termina siendo necesario más de una iteración.

Básicamente con una visualización puedes ver patrones "al ojo", cosas que se destaquen o que llamen la atención. Luego confirmas tus teorías usando modelos. Así creas un ciclo de preguntas y respuestas, hipótesis y confirmaciones.

Al final, para que el conocimiento encontrado se convierta en acción, se debe comunicar a la organización, típicamente a quién pueda tomar decisiones. No vale de mucho saber algo si nada se hace después con ello.

Además, de forma transversal tenemos la programación, que es automatizar todo lo que se pueda desde el primer al último paso.

Importación

En teoría se puede importar datos desde muchas fuentes: bases de datos, sensores de aparatos, archivos planos, webservices, API, etc.

En la práctica, en Chile por lo menos, muchas veces los datos de una compañía están en Excel y son digitados a mano. Esto da muchos problemas, sólo los que se me vienen a la mente de momento:

  • Muchas personas que manejen el archivo = muchas versiones distintas del archivo.

  • De esas muchas versiones, algunas tendrán más o menos columnas, formatos de datos distintos por columna (texto vs número), o formas distintas de digitar el mismo dato (ej. sexo M/F, H/M, V/D, 1/0, etc)

  • Errores provocados por mala digitación

  • Formatos de fecha, esto también ocurre en las bases de datos, pero en un archivo esto es más recurrente.

  • ¿Cómo saber quién tiene la versión más actualizada?

  • Errores de nombre de archivo, o de ruta de acceso, problemas de permiso, etc.

La mayoría de los errores anteriores se pueden mitigar a punta de negociación. Pero mitigar no es eliminar por completo.

Importar desde bases de datos es relativamente fácil, cuando se conoce el modelo. Es vital hacer cuadraturas, es decir, que como mínimo cuadren los totales.

Wrangling

Es la más tediosa de las tareas para un data-scientist. Muchos de los datos de origen tendrán valores nulos, fuera de rango, mal digitados, con formato no apropiado, etc. Pero si entra basura, inevitablemente saldrá basura, así que es inevitable trabajar en la limpieza de los datos antes de procesarlos.

Una forma práctica que se usa hace muchos años y sigue usándose es tener una base de datos temporal. Ahí hacer limpieza y transformaciones de los datos para luego poblar el repositorio definitivo.

Una herramienta semi automatizada creada por Philip Guo y colaboradores llamada Data Wrangler se puede encontrar acá: http://vis.stanford.edu/wrangler/app/ aunque ya no está soportada y han sacado una versión comercial acá: http://cur.lv/15mnf1

Para entenderla mejor es bueno saber que las siguientes son las transformaciones disponibles que ofrece:

  • Cut. Eliminar texto seleccionado desde celdas en columnas específicas.

  • Delete. Eliminar filas que cumplan algún índice o predicado.

  • Drop. Eliminar columnas de la tabla.

  • Edit. Editar el texto de cada celda de una columna.

  • Extract. Copiar texto de una columna para crear una nueva.

  • Fill. Rellenar celdas vacías usando valores de celdas adyacentes.

  • Fold. Pivotear tabla. Convertir filas seleccionadas en índices y columnas en valores.

  • Merge. Concatenar dos o más columnas en una sola.

  • Promote. Promover valores de columnas como encabezados.

  • Split. Separar una columna en más de una usando delimitadores.

  • Translate. Desplazar la posición del valor de una celda según un offset.

  • Transpose. Transponer columnas y filas.

  • Unfold. Pivotear mapeando valores e índices como una colección de nuevas columnas, una por cada llave.

Más info de Data Wrangler acá: http://cur.lv/15mmzm

Análisis

Es parte del core del Data Science, Visualización y Modelado; básicamente es crear scripts analíticos, ejecutarlos, revisar su salida, refinar y darle otra vuelta al ciclo. La mayoría prefiere usar lenguajes como Python, Perl, R y Matlab.

La mayoría del tiempo utilizado en esta etapa se pierde en:

  • Dependiendo de la cantidad de datos, y lo optimizado del código en los scripts, puede tomar mucho tiempo ejecutar un análisis.

  • Lo anterior, repetido cada vez que se realiza un pequeño ajuste en el script para volver a ejecutarlo.

  • Caídas por errores del código o inconsistencias en los datos.

A menudo no se sabe qué cosa funcionará, haces un intento programando con una combinación de parámetros y una combinación de archivos de entrada. Terminas con una proliferación de archivos de salida y tienes que recordar en renombrar estos archivos de forma diferente o anotar los parámetros cada vez. Además, constantemente se está ajustando el programa. Entonces volver atrás a algo que se hizo tres meses atrás, lo más probable es que no se tenga idea qué significa el nombre de los archivos de salida y termines intentando repetir todo para averiguarlo.

Reflexión

Este paso lo menciona Philip Guo, paralelo al Análisis (Visualización y Modelado), estas reflexiones consisten en:

  • Tomar notas. En papel o digital, ambas con sus ventajas y desventajas.

  • Reuniones. Reunirse con el equipo para discutir los resultados y decidir los siguientes pasos a seguir. Esto es, por ejemplo, hacer ajustes en los scripts o hacer hipótesis alternativas.

  • Comparar resultados y explorar alternativas. Muchas veces los análisis son prueba-error, por eso es bueno comparar gráficos, algoritmos, parámetros, etc.

Comunicar

El último paso es diseminar los resultados, ya sea con un reporte escrito, una presentación, un paper académico, dashboard web, etc. El desafío es consolidar todos los hallazgos y material recolectado en algún formato legible para alguien no-técnico.

Además, un data-scientist querrá adicionalmente distribuir sus scripts para que otros colegas puedan reproducir sus experimentos. En esto último lo difícil es homologar el ambiente en el que fueron ejecutados los scripts con quienes lo ejecutarán en sus propios ambientes.

Por último, está el tema de la compatibilidad en el tiempo del script, "future proof" el script para que pueda ser ejecutado en las siguientes versiones de sistema operativo, librerías, bases de datos, etc.

Fuentes:

Pretendo ir añadiendo más a medida que estudio más sobre el tema.