**IAIC 2024-25** Flujo de Trabajo de ML El aprendizaje automático se ha convertido en algo más que un conjunto de técnicas para la resolución de problemas y la toma de decisiones, proporcionando un enfoque global para atacar problemas a través del uso de modelos matemáticos y manipulación de datos. En este capítulo veremos una breve guía que muestra los pasos generales que deben guiar a Ingenieros y Analistas de Datos en la definición y ejecución de proyectos relacionados con ML. Para ello, comenzaremos viendo qué debemos pedir a este tipo de perfiles, para pasar a analizar los elementos clave de un buen proyecto de ML, los tipos de aprendizaje que podemos abordar, los algoritmos que tenemos para realizar el entrenamiento, y el flujo de trabajo completo que podría implicar realizar una tarea de este tipo. ![](img/FlujoML.jpg) # Ingenieros y Analistas de Datos El rol de un **Ingeniero de Datos** (actualmente definido en lo que se conoce como **Ciencia de Datos**, un área que agrupa técnicas estadísticas con técnicas computacionales) es centrarse en las primeras etapas del flujo de datos: **adquisición**, **limpieza** y **estructuración** de los datos, principalmente. A pesar de ello, sus funciones no se restringen al análisis de estos datos, sino que a menudo debe construir herramientas e implementar algoritmos que automaticen las diferentes etapas involucradas. La recolección de datos es una labor sumamente compleja en la mayoría de los casos interesantes, que incluye tareas que van desde el conocimiento de las APIs del sistema de proveedor de datos (en caso de que los haya), hasta el uso de técnicas de scraping, extracción de datos a partir de fuentes no estructuradas (como textos), búsqueda y procesamiento de imágenes, etc. En un nivel más técnico, también establecen flujos de trabajo basados en aprendizaje profundo y lo que se conoce como AutoML (automatizar el nivel completo de selección, entrenamiento y validación de modelos). ![](img/team.png width=60%) El rol de un **Analista de Datos** es centrarse en las últimas etapas del flujo de datos: **procesamiento**, **visualización** y **automatización** de Datos. Generalmente, los analistas toman conjuntos de datos o datasets ya construidos, limpiados y estructurados previamente para su análisis y procesamiento, y se centran en la inspección y visualización de los mismos para poder determinar los modelos matemáticos más adecuados para el análisis y su procesamiento. Por ello, suele ser necesario que los analistas tengan amplios conocimientos de técnicas estadísticas, algoritmos de aprendizaje profundo, algoritmos heurísticos y algoritmos de optimización, así como ser capaces de medir el rendimiento a partir de los resultados obtenidos en los experimentos de prueba para mejorar el desempeño de los algoritmos. En última instancia, deben preparar el sistema completo de trabajo con el fin de que se convierta en una tarea automatizable y con persistencia en el tiempo. Con todo esto, será el analista quién presente los resultados y documente el proceso. # Elementos Clave de un Proyecto Los elementos principales que componen un proyecto de ML son: * ![](img/dataset.png align=right width=10%)**Dataset**: El elemento principal será el conjunto de datos sobre el que se realizará el proyecto. A veces, las primeras fases del propio proyecto consisten en recopilar (a partir de fuentes diversas) los datos necesarios para abordar el problemas que se quiere resolver. La mayoría de las empresas relacionadas invierten grandes cantidades de dinero en la construcción de grandes conjuntos de datos con el fin de tener bases suficientemente sólidas como para asegurar que los resultados del análisis ML proporcionen un conocimiento valioso del problema. Algunas fuentes de datos que se pueden usar parcialmente (lo que constituye parte del éxito de algunos proyectos) pueden requerir conocimientos de Big Data, Internet de las Cosas, Minería de Datos y técnicas de Web Scraping, así como la integración de las API que permitan el acceso y manipulación de estos datos. * ![](img/data-visualization.jpg align=right width=10%)**Análisis Exploratorio y Visualización de Datos**: Es importante dominar las técnicas básicas estadísticas, así como diversos tipos de visualización de datos, para poder realizar una inspección adecuada de los datos y generar resultados visuales que expliquen las relaciones internas entre las distintas unidades de información recopiladas. Estas tareas descriptivas y analíticas permiten atacar la selección de los componentes principales y guiar la selección de los algoritmos base más adecuados que serán utilizados en fases posteriores. * **Algoritmos Base**: Los algoritmos base (que es donde basaremos el resto del curso) permiten extraer conocimiento de los datos con el objetivo de resolver el problema inicial que se había planteado, y por tanto deben estar alienados con ese objetivo inicial. Cuantos más algoritmos se conozcan, más posibilidades de éxito habrá en los análisis, por lo que se deben dominar conceptualmente y detectar factores determinantes como: qué tipos de entrada de datos usan y usarán en etapas futuras, qué resultados esperados deben generarse, y qué tipo de tareas han de resolverse. En función de la respuesta a estas preguntas, encontraremos, en un primer nivel, la clasificación por la tarea a realizar (en una división sencilla, algoritmos supervisados frente a no supervisados), y en un segundo nivel, la clasificación por el tipo de respuesta e hipótesis de partida (regresión, clasificación, máquinas de soporte vectorial, redes neuronales, clusterización, selección de componentes principales, etc.). En general, es común dar el nombre de _máquina_ o _modelo_ al tipo genérico de algoritmo que se use. Al procedimiento de elegir los algoritmos más adecuados se le denomina **Selección de Modelos**. * **Entrenamiento**: Como hemos visto en el tema anterior, casi todos los algoritmos de ML se basan en entrenar a una máquina respecto a un conjunto de datos, ajustando los parámetros de los modelos matemáticos que subyacen a la máquina seleccionada con el fin de que definan respecto a nuestro objetivo del problema, lo mejor posible los patrones internos subyacentes a los datos que representan nuestro problema. Aquí es importante considerar el formato de entrada y salida que necesita el tipo particular de modelo seleccionado, por ejemplo, conversión de tipos de datos, transformación de rangos y distribuciones, creación de categorías, etc. Además, para el proceso específico del ajuste suele ser necesario dividir y aleatorizar las muestras de datos disponibles, con el fin de mejorar la confianza en los resultados obtenidos. * **Pruebas de Rendimiento**: Las pruebas de validación y rendimiento tienen el objetivo de medir en términos absolutos o relativos, el grado de error generado en el proceso de ajuste. Para ello, se hace uso de la división de las muestras que se hizo en la etapa de entrenamiento, pero también existen técnicas adicionales como la validación cruzada para casos en los que tal división no sea posible. # Tipos de Aprendizaje ![](img/ML.png align=right width=40%)Al proceso de entrenamiento, que consiste en ajustar los parámetros de los modelos matemáticos seleccionados para procesar y aproximarse a los datos, también se le llama **Aprendizaje** en el contexto de ML. Existen dos tipos de aprendizaje principales según cómo se usen las muestras de datos: * **Aprendizaje Supervisado**: considera que las muestras están etiquetadas (con categorías, valores numéricos, etc), y nuestro objetivo futuro es predecir la etiqueta de cada muestra a partir del resto de información del dataset. Por ejemplo, imágenes ya clasificadas, textos con sus categorías o precios de productos a lo largo de periodos de tiempo. Matemáticamente, se corresponde con aprender una función que, a partir de ciertos datos, devuelve la etiqueta adecuada. * **Aprendizaje No Supervisado**: considera que las muestras no están etiquetadas y nuestra tarea es la determinación de patrones en las muestras disponibles. Por ejemplo, determinación de agrupaciones, reducción de dimensionalidad, etc. Adicionalmente, es habitual considerar una tercera línea en el aprendizaje que viene representada por el **Aprendizaje por Refuerzo**, donde los datos no se tienen a priori, sino que se obtienen en tiempo real y a partir de la ejecución de la máquina en su desempeño para la resolución de un problema. En estos casos, suele ser habitual considerar que la _máquina_ es un agente que debe aprender una política de toma de decisiones óptima en su interacción con un mundo real, por ejemplo, un robot que debe aprender a desenvolvers en el mundo a partir de las interacciones que realiza y los resultados que obtiene de ellas. # Algoritmos de Aprendizaje Supervisado y No Supervisado A continuación enumeramos brevemente algunos algoritmos comunes en ML y damos una breve descripción de su funcionamiento y objetivos. ## Algoritmos Supervisados * **Regresión Lineal**: Buscan una dependencia lineal entre los datos de entrada (características numéricas) y los de salida (etiquetas numéricas). En el caso de una única característica y una sola etiqueta, el problema es calcular la recta $y = m * x + b$ que mejor ajuste a los datos ($m$ y $b$ serían los parámetros del modelo a ajustar). Para medir este _mejor ajuste_ se utiliza la optimización por mínimos cuadrados, en el que se mide la suma cuadrática entre los datos y la recta. De forma similar se puede generalizar a dimensiones superiores, donde se busca un hiperplano, $y = m_1 * x_1 + m_2 * x_2 + ... + m_n * x_n + b$. Un caso de aplicación es la de la predicción del valor de un producto a partir de los costes de producción de sus componentes, donde ser presupone que el coste de un producto se puede expresar como una combinación lineal del coste de sus componentes. ![](img/regression.png width=50%) * **Regresión Logística**: Sigue un razonamiento similar al anterior, pero en el que la función que se usa para aproximación es la conocida como _función logística_, una familia parametrizada de funciones crecientes que tienen su dominio en $\mathbb{R}$ y su rango en $(0,1)$. Suelen usarse para determinar datos etiquetados en diversas categorías, ofreciendo un peso de pertenencia a una categoría. * **Árboles de Decisión**: Son árboles formados por nodos de decisión (interiores) y nodos de salida (hojas) que sirven para describir sistemas de tomas de decisiones por reglas, donde lo que se aprende a partir de los datos es tanto la estructura del árbol como el contenido de las _decisiones_ en cada nodo. ![](img/tree-graphic.webp width=40%) * **Máquinas de Soporte Vectorial**: Por medio de la construcción de un conjunto de vectores (que se llaman *vectores soporte*) intentan generar espacios vectoriales (normalmente, hiperplanos) que separen los datos respecto a la categoría de su etiqueta. De esta forma, la pertenencia en un subespacio u otro determinará la etiqueta que se debe asociar a los diversos datos. Se suele aplicar en problemas con pocas categorías, por ejemplo, en sistemas de recomendación. ![](img/Support-Vector-Machine.png width=30%) * ![](img/ANN.webp align=right width=30%)**Redes Neuronales**: Se basan en una representación parametrizada en forma de grafo de funciones altamente no lineales (en contra de la regresión lineal). Los nodos del grafo (llamados habitualmente _neuronas_) se pueden ordenar en capas y grupos que resuelven partes del problema de forma jerárquica. Han demostrado una gran capacidad de adaptación a muchos problemas y aproximación de funciones genéricas en presencia de suficientes datos. Según la topología del grafo subyacente se distinguen entre ANN — Redes Neuronales Artificiales (genéricas), RNN — Redes Neuronales Recursivas (especializadas en aprender secuencias, como textos), CNN — Redes Neuronales Convolucionales (especializadas en aprendizaje por capas matriciales de datos, como imágenes y vídeo), y DL - Deep Learning (agrupan genéricamente cualquier red con un elevado número de niveles y neuronas). ## No Supervisados * **K-Medias**: Sirve para determinar agrupaciones de datos en un número predeterminado de bolsas. Para ello, busca los puntos ideales que ocupan el centro de masa de los datos de una misma categoría. Se puede aplicar, por ejemplo, para agrupar usuarios afines según sus métricas de comportamiento ante un producto, canciones similares según su huella de audio, o personas afines según sus respuestas a exámenes psicológicos. ![](img/kmeans.png width=30%) * **K-Vecinos**: Encuentra agrupaciones a partir de la proximidad entre los datos y la función que mide la distancia o similaridad entre ellos. Sirve para encontrar grupos de datos similares en espacios de alta dimensión. ![](img/knn.webp width=20%) * **DBSCAN**: Es uno de los algoritmos más potentes de clusterización. Busca grupos de datos entre áreas de alta densidad y baja densidad que separen a los datos. ![](img/dbscan.jpg width=30%) * **Análisis de Componentes Principales (PCA)**: Es uno de los algoritmos más importantes en la exploración de datos y reducción de la dimensionalidad. Permite extraer un conjunto reducido de características para reducir la complejidad de los datos manteniendo el nivel informativo de los mismos. Una de las aplicaciones es reducir variables que codifiquen correlaciones entre ellas y poder generar un modelo reducido para así ser utilizado en otros algoritmos. Un ejemplo de aplicación es reducir las métricas de un paciente en un hospital, al que se le han tomado 10 indicadores y sólo se desea trabajar con 3 o 4. ![](img/PCA.png width=30%) # Flujo de Trabajo del Machine Learning (ML Pipeline) Los pasos más importantes de la resolución de problemas por medio de ML (lo que se conoce como _Flujo de Trabajo_ o _Pipeline_ del ML) se pueden resumir en (debe tenerse presente que, dependienendo de la complejidad y características particulares de algunos problemas y objetivos, este flujo puede verse modificada con algunos pasos adicionales y usando técnicas muy específicas y distintas): ![](img/ML.jpg) !!!Ejemplo: 1. Definición del problema Al definir el problema debe considerarse primero el dataset que será utilizado (o construido, en caso de que no haya ninguno disponible adecuado), así como los objetivos que deben ser alcanzados y los recursos reales que podemos utilizar. Es muy importante en esta etapa determinar claramente cómo se evaluará la calidad de los resultados alcanzados, con el fin de determinar si se consideran los objetivos alcanzados o no. !!!alg: 2. Análisis de las muestras Al comenzar el análisis deberá hacerse una exploración completa de los conjuntos de datos que contienen las muestras. Algunas de las etapas por las que puede pasar este análisis son: * Descripción de los datos: Muestra el número de columnas y tipos de datos contenidos en el dataframe o conjunto de datos utilizado. * Inspección de los datos: Muestra algunos datos contenidos en el dataset para ver su estructura y verificar su contenido. * Estadísticas descriptivas: Muestra para cada eje estadísticas generales y descriptivas acerca de los datos. !!!teorema: 3. Visualización de los datos Con el fin de tener una información visual de los datos lo más rica posible se utilizan gráficas que ofrezcan lo que el análisis directo de los datos no permite. Por ejemplo: * Gráficas de Distribución: Muestran la distribución de los ejes, si son categóricos se suelen usar barras y si con continuos se suele utilizar el histograma. * Gráficas de Correlación: Muestra la correlación entre dos ejes, si los ejes son categóricos, se utiliza un mapa de calor, si los ejes son continuos se usa una gráfica de puntos y en modelos mixtos se utilizan gráficas de violín o cajas. * Gráficas de pares: Permite comparar las distribuciones y correlaciones entre todos los ejes en forma matricial. !!!att: 4. Análisis estadístico Antes de procesar los datos en cualquier algoritmo base seleccionado, es importante inspeccionar estadísticamente el conjunto de datos para poder enfocar el análisis a datos mas precisos y segmentados. Suelen considerarse dos actividades básicas: * Curtosis y Asimetría Estadística: Determina un análisis sobre la distribución y varianza por cada característica, de tal modo que se pueda determinar el grado de Asimetría Estadística. * Valores Atípicos: (_Outliers_ en inglés) Son los valores que no coinciden con el resto de los datos porque siguen una distribución distinta, pudiento representar ruido o mediciones erróneas. Como pueden perjudicar el proceso de ajuste, suelen ser eliminados del análisis para hacer más preciso el estudio. !!!def: 5. Selección de Modelos Es la etapa en la que, en función de los resultados anteriores y de nuestro conocimiento implícito en la resolución de problemas, se deciden cuáles son los algoritmos más adecuados para la consecución de los objetivos marcados en el paso 1. !!!demo: 6. Entrenamiento y Validación Es el proceso por el que, usando los datos del problema, se ajustan los parámetros e hiperparámetros de los modelos seleccionados. Además de la división del dataset inicial, la técnica más común para probar los modelos es la Validación Cruzada, que mide la eficiencia de un algoritmo en su aprendizaje y permite comparar diferentes modelos de aprendizaje y sus resultados. !!!note: 7. Persistencia de los modelos Es importante hacer persistir los resultados obtenidos y los modelos entrenados para que puedan ser consumidos en el futuro por otras aplicaciones o soluciones. Por ejemplo, si se ha entrenado una red neuronal para encontrar rostros dentro una imagen, entonces lo mejor será guardar el modelo de la red neuronal como un archivo portable que se pueda cargar en cualquier momento, y así permita predecir resultados para nuevas entradas de datos.