Ciencia de datos escalable más allá del ordenador local
La ciencia de datos es un término que describe la intersección de varias disciplinas clave.
Yo diría que hay varios pilares de especialización en ciencia de datos:
- Conocimiento del negocio
- Probabilidad y estadística
- Informática y programación de software
- Comunicación escrita y oral
El tercer pilar se centra en comprender la informática y la programación.
Aunque quizá no sea tan evidente para quienes empiezan, este ámbito también abarca temas como devops, computación en la nube, canalizaciones de datos, ingeniería de datos, experiencia consultando distintos tipos de bases de datos, y la creación y despliegue de soluciones de software en producción, entre otros.
Además, los data scientists necesitan desarrollar sólidas habilidades de programación, pero puede que no tengan la misma formación o experiencia en informática, conceptos de programación o arquitectura e infraestructura de software de producción que un ingeniero de software experimentado. Cuando alguien se inicia en ciencia de datos, suele instalar Python y/o R en su ordenador y escribir y ejecutar código en un entorno de desarrollo integrado (IDE) local como Jupyter Notebook o RStudio.
A medida que el análisis avanzado gana peso y los equipos de ciencia de datos crecen, también aumenta la necesidad de soluciones colaborativas para entregar insights, analítica predictiva, sistemas de recomendación, etc. La investigación reproducible y las herramientas tipo notebook combinadas con control de versiones forman parte de la solución, mientras que aprovechar plataformas y herramientas colaborativas en la nube es otra pieza clave.
Las necesidades de colaboración también incluyen a personas fuera de los equipos de ciencia de datos, sobre todo porque la ciencia de datos se aplica para lograr objetivos de negocio. Así, los stakeholders de un proyecto pueden ser directivos, responsables de departamento y otros perfiles del equipo de datos como arquitectos, ingenieros de datos, analistas, etc.
Este artículo busca darte una visión de lo que hay más allá del portátil o sobremesa, especialmente al poner soluciones de ciencia de datos en producción o cuando necesitas más potencia y capacidades de cómputo. Según tu experiencia, el contenido debería ser útil para data scientists de todos los niveles.
¡Vamos allá!
¿Qué es exactamente la nube?
Ah, la famosa y a menudo mal entendida nube. Aunque suene abstracta, en realidad el concepto es bastante concreto. Antes de entrar en materia, definamos algunas ideas clave.
Varios ordenadores conectados que comparten recursos forman una red; Internet es el ejemplo más grande y conocido. Las redes domésticas, como una LAN (Local Area Network) o un WiFi (SSID), donde se conectan varios dispositivos, son otro ejemplo, aunque mucho más pequeño. Los recursos compartidos pueden ser páginas web, contenido multimedia, almacenamiento de datos, servidores de aplicaciones, impresoras, etc.
En una red, los ordenadores se llaman nodos y se comunican mediante protocolos bien definidos como HTTP (HyperText Transfer Protocol) o TCP/IP (Transmission Control Protocol/Internet Protocol), entre otros. Estas comunicaciones sirven para actualizar estados, monitorización, peticiones/respuestas y muchos otros usos.
Además, muchos ordenadores no están en las instalaciones de la empresa: aplicaciones y datos suelen alojarse en centros de datos. Estos proporcionan toda la infraestructura necesaria —alimentación, refrigeración, seguridad, protección ante desastres, etc.— para operar gran cantidad de equipos accesibles para empresas o para el público.
Como el hardware de cómputo y el almacenamiento se han abaratado, muchas soluciones emplean múltiples ordenadores trabajando en conjunto, lo que permite escalar sin recurrir a una única máquina superpotente y cara. Parte de ese trabajo en conjunto consiste en asegurar que el sistema siga funcionando automáticamente aunque falle una máquina y que escale de forma automática para absorber picos de carga.
Twitter, Facebook, Instagram, Snapchat, Netflix y YouTube son ejemplos perfectos de aplicaciones en la nube que necesitan escalar de ambas maneras. Rara vez se caen por completo y pueden atender a millones de usuarios a diario.
Cuando un grupo de ordenadores está conectado a la misma red y colabora para realizar una misma tarea o conjunto de tareas, lo llamamos clúster. Un clúster puede verse como un único ordenador, pero ofrece enormes mejoras en rendimiento, disponibilidad y escalabilidad frente a una sola máquina. Más adelante veremos estas ventajas.
Los términos computación distribuida o sistemas distribuidos se refieren a software y sistemas diseñados para aprovechar clústeres y ejecutar tareas específicas, como Hadoop, Spark o MapReduce.
Y ahora sí, la definición de nube. Además de los recursos compartidos anteriores, hay otros elementos importantes como servidores, servicios, microservicios, redes, etc. Hablamos de nube cuando una sola entidad posee, administra y gestiona un conjunto de ordenadores en red y recursos compartidos para alojar y ofrecer soluciones basadas en software. Con esta definición, aunque Internet es una red, no es una nube porque no pertenece a una única parte.
Si quieres profundizar en computación en la nube y en los conceptos clave para crear software escalable y arquitecturas de big data, echa un vistazo a mi serie en tres partes sobre este tema.
Ciencia de datos en la nube
Hasta aquí hemos hablado de computación en la nube y conceptos relacionados para ilustrar las ideas implicadas. Si tu experiencia en arquitectura e ingeniería de software se limita al desarrollo local, quizá te preguntes por qué todo esto es relevante para un data scientist. Vamos a ello.
Si conoces el proceso de ciencia de datos, sabrás que gran parte del trabajo suele hacerse en el ordenador del propio data scientist. Allí instala sus lenguajes preferidos, como Python y R, y su IDE favorito. El otro paso clave es instalar los paquetes necesarios, ya sea con un gestor como Anaconda o manualmente.
Una vez listo el entorno, comienza el flujo de trabajo típico, donde lo principal que falta es el dato. Las etapas iterativas suelen incluir:
- Adquisición de datos
- Parseo, limpieza, depuración, transformación y saneamiento de datos
- Análisis y exploración de datos, como EDA (análisis exploratorio), estadísticas descriptivas, ...
- Construcción, validación y prueba de modelos, por ejemplo predictivos, de recomendación, ...
- Nota: si no se construyen modelos, entonces identificar patrones o tendencias, generar insights accionables, extraer información útil, crear informes, etc. En este tutorial, consideraremos ambos casos como «crear un entregable».
- Ajuste y optimización de modelos o entregables
A veces, sin embargo, no es práctico ni deseable realizar todas las tareas de ciencia de datos o big data en el entorno local. Estas son algunas de las razones principales:
- Los conjuntos de datos son demasiado grandes y no caben en la memoria (RAM) del entorno para entrenar modelos u otros análisis
- La potencia de proceso (CPU) del entorno no permite ejecutar las tareas en un tiempo razonable o, directamente, no puede
- El entregable debe desplegarse en un entorno de producción y quizá integrarse como componente de una aplicación mayor (por ejemplo, una aplicación web, una plataforma SaaS, ...)
- Se prefiere usar una máquina más rápida y potente (CPU, RAM, ...) y no cargar el ordenador local
Cuando ocurre algo así, hay varias opciones. En lugar de usar la máquina local del data scientist, suele derivarse el cómputo a una máquina on‑premise o a una máquina virtual en la nube (por ejemplo, AWS EC2, AWS Elastic Beanstalk). La ventaja de usar máquinas virtuales y clústeres con autoescalado es que pueden levantarse y retirarse según se necesiten, y además ajustarse a los requisitos de cómputo y almacenamiento.
Si hablamos de desplegar entregables en producción como parte de una aplicación mayor o de una canalización de datos, hay muchas opciones y retos a tener en cuenta. Profundizar en ello queda fuera del alcance de este artículo.
Además de soluciones y herramientas desarrolladas a medida para la nube o para producción, existen numerosas ofertas de servicios de proveedores destacados, que suelen integrarse bien con notebooks como Jupyter. Están disponibles principalmente como APIs de big data, machine learning e inteligencia artificial, e incluyen opciones como la plataforma de IA de AWS, Databricks, Google Cloud Platform Datalab y Machine Learning, entre muchas otras.
Para un análisis mucho más detallado sobre ciencia de datos y analítica avanzada en producción frente a desarrollo, con recomendaciones de lenguajes, paquetes, frameworks y plataformas, te recomiendo mi serie en tres partes. Mi serie sobre arquitecturas escalables de software y big data también complementa muy bien el tema de la nube.
Arquitectura de software y atributos de calidad
La arquitectura de software consiste en diseñar un sistema —normalmente en la nube— que materializa un producto, servicio o sistema de cómputo orientado a tareas. También puedes oír «arquitectura de sistemas» o «arquitectura software», que vienen a significar lo mismo.
Parte del diseño es elegir los lenguajes y tecnologías adecuados (el stack), componentes, paquetes, frameworks, plataformas, etc. Esto exige valorar muchos factores, especialmente el propósito del sistema y otros trade‑offs relevantes. Este aspecto de la arquitectura requiere habilidades, conocimiento y experiencia que se adquieren con el tiempo, como hace un arquitecto de software.
Otro aspecto crítico de la arquitectura e ingeniería de sistemas son los llamados atributos de calidad o requisitos no funcionales. Esto es especialmente cierto en soluciones reales en producción.
Los requisitos no funcionales suelen incluir:
- Disponibilidad
- Rendimiento
- Fiabilidad
- Escalabilidad (vertical y horizontal)
- Extensibilidad
- Usabilidad
- Modularidad
- Reutilización
En este artículo verás un resumen de cuatro de los más importantes: disponibilidad, rendimiento, fiabilidad y escalabilidad. Ten en cuenta que la explicación es de alto nivel, sin entrar en métricas ni definiciones formales.
Disponibilidad es, tal cual suena, que el sistema esté disponible; es decir, que esté operativo. Puede significar muchas cosas y depende en gran medida de la fiabilidad y la escalabilidad. «Operativo» implica que el sistema funciona como se espera y cuando se necesita: para una persona usuaria —por ejemplo, en Facebook o Netflix— o para un conjunto de servicios en la nube que procesan datos.
Fiabilidad describe la capacidad del sistema para funcionar correctamente sin fallos ni errores. Cuanto más pueda operar así, mayor tolerancia a fallos tendrá. Lograr un 100% de fiabilidad es muy difícil: es imposible prever y probar todos los casos y, además, los fallos pueden deberse a muchos motivos (bugs, problemas de entorno, recursos limitados como CPU, RAM, disco, ...).
Rendimiento se refiere a la velocidad con la que el sistema ejecuta tareas, o, dicho de otra manera, el tiempo que tarda en realizar una tarea concreta. Piensa en YouTube: esperas que un vídeo cargue y empiece a reproducirse en un tiempo razonable. Cuanto más rendimiento ofrezca YouTube, antes se reproducirá el vídeo, más satisfechos estarán sus usuarios y menos abandonos habrá. Lo contrario —una lentitud extrema— haría que la gente dejase de usarlo.
Por último, la escalabilidad es crítica en ciertas aplicaciones y describe la capacidad del sistema para mantener un nivel de rendimiento (a alto nivel) ante un aumento de la carga. Carga es el número de solicitudes concurrentes al sistema.
Un buen ejemplo es la venta inicial de entradas para un equipo muy popular o un artista de moda. En cuanto se abren las ventas, una web como Ticketmaster puede recibir cientos de miles de peticiones simultáneas. Según la capacidad del sistema para escalar, el rendimiento puede degradarse mucho o el sistema puede caerse por completo. Ninguno de los dos escenarios es deseable.
Para afrontarlo, se emplean técnicas de escalado vertical u horizontal. Escalar en vertical es sustituir los equipos del sistema por máquinas más potentes (más CPU, más núcleos, ...) y con más recursos como memoria RAM. Estas máquinas suelen ser caras.
Escalar en horizontal, en cambio, usa máquinas de bajo coste que no son muy potentes por sí solas, pero que en conjunto soportan la carga. Como estas soluciones requieren varios ordenadores, es importante configurar el sistema para manejar de forma automática fallos de uno o más nodos (failover), entre otros supuestos.
Conclusión
Esperamos que este artículo te haya ayudado a entender muchos aspectos importantes de la ciencia de datos más allá del desarrollo local y en el contexto de soluciones reales en producción. Los conceptos de computación y arquitectura en la nube son clave cuando trabajas en soluciones de datos en producción o necesitas más potencia y recursos de cómputo.
Comparte tus ideas en los comentarios. Si quieres saber más, puedes seguir a @innoarchitech en Twitter, suscribirte al boletín de InnoArchiTech y visitar su blog. También puedes echar un vistazo a mi clase de inteligencia artificial y machine learning orientada a objetivos.

