Aprendizaje Automático (Machine Learning) en el Desarrollo de Software
Conceptos fundamentales, algoritmos, ciclo de vida y aplicaciones prácticas
Guía de estudio · Preparación para examen · Versión académica
Conceptos fundamentales y definiciones
¿Qué es el Aprendizaje Automático?
El Machine Learning (ML) es una rama de la Inteligencia Artificial que permite a los sistemas aprender patrones a partir de datos sin ser explícitamente programados para cada tarea. En lugar de seguir reglas codificadas a mano, el sistema ajusta sus parámetros internos mediante un proceso de entrenamiento.
Definición formal (Mitchell, 1997): "Un programa de computadora aprende de la experiencia E con respecto a una tarea T y una medida de rendimiento P, si su rendimiento en T, medido por P, mejora con la experiencia E."
Diferencias clave: Programación tradicional vs. ML
Aspecto
Programación tradicional
Machine Learning
Entrada
Datos + Reglas
Datos + Respuestas (etiquetas)
Salida
Respuestas
Reglas (modelo aprendido)
Mantenimiento
Actualizar reglas manualmente
Reentrenar con nuevos datos
Escalabilidad
Limitada por complejidad de reglas
Mejora con más datos
Casos de uso
Lógica determinista clara
Patrones complejos o implícitos
Terminología esencial
Dataset: conjunto de datos usado para entrenamiento, validación y prueba.
Feature (característica): variable de entrada usada para hacer predicciones.
Label (etiqueta): variable de salida o respuesta correcta.
Modelo: función matemática que mapea features → predicciones.
Parámetros: valores internos del modelo ajustados durante el entrenamiento (pesos).
Hiperparámetros: configuración del algoritmo definida antes del entrenamiento (tasa de aprendizaje, profundidad del árbol…).
Inferencia: uso del modelo entrenado sobre datos nuevos.
Entrenamiento / Train: proceso de ajuste de parámetros.
Validación / Val: ajuste de hiperparámetros y selección de modelo.
Test: evaluación final del modelo sobre datos nunca vistos.
Tipos de aprendizaje automático
Aprendizaje supervisadoSupervisado
Los datos de entrenamiento incluyen etiquetas. El modelo aprende a predecir la salida correcta. Ejemplos: clasificación de bugs, predicción de defectos, estimación de esfuerzo.
Aprendizaje no supervisadoNo supervisado
Sin etiquetas. El modelo descubre estructura oculta en los datos. Ejemplos: agrupación de tickets similares, detección de anomalías, clustering de código.
Aprendizaje por refuerzoRefuerzo
Un agente aprende por prueba y error maximizando una recompensa. Ejemplos: optimización de pipelines CI/CD, agentes de pruebas automáticas.
Aprendizaje semi-supervisado
Mezcla de datos etiquetados (pocos) y no etiquetados (muchos). Ejemplos: clasificación de código con pocos ejemplos anotados.
Tipos de tareas
Tarea
Salida
Algoritmos típicos
Ejemplo en software
Clasificación
Clase discreta
SVM, Random Forest, Red neuronal
Bug crítico / no crítico
Regresión
Valor continuo
Regresión lineal, GBM, MLP
Estimación de horas de desarrollo
Clustering
Grupos
K-Means, DBSCAN, Hierarchical
Agrupación de requisitos similares
Detección de anomalías
Normal / Anomalía
Isolation Forest, Autoencoder
Detección de fallos en producción
Generación / NLP
Texto, código
Transformers (GPT, BERT)
Autocompletado, generación de tests
Ranking
Orden de relevancia
LambdaRank, LightGBM
Priorización de tareas en backlog
Algoritmos principales
Algoritmos clásicos supervisados
Regresión lineal y logística
Regresión lineal: modela la relación entre features y una variable continua. Función: ŷ = w·x + b. Minimiza el error cuadrático medio (MSE).
Métodos embedded: importancia de features en Random Forest / XGBoost.
Regla de oro: El feature engineering suele tener mayor impacto en el rendimiento del modelo que el algoritmo elegido. Datos bien preparados superan a algoritmos complejos con datos sucios.
Evaluación de modelos y métricas
Partición de datos
Hold-out: división train/val/test (p. ej., 70/15/15 o 80/20).
K-Fold Cross-Validation: divide en K partes, entrena K veces, promedia métricas. Más robusto para datasets pequeños.
Stratified K-Fold: mantiene la proporción de clases en cada fold.
Time Series Split: para datos temporales, el test siempre es futuro respecto al train.
Curva ROC: TPR vs FPR a distintos umbrales. AUC = 1 → modelo perfecto; AUC = 0.5 → aleatorio.
Curva Precision-Recall: útil con clases muy desbalanceadas.
Curva de aprendizaje: rendimiento en train vs val según tamaño del dataset. Diagnóstica overfitting/underfitting.
Overfitting, Underfitting y Regularización
Overfitting (Sobreajuste)
El modelo memoriza los datos de entrenamiento y generaliza mal. Síntoma: Error train bajo, error val/test alto. Bias bajo, Varianza alta.
Underfitting (Subajuste)
El modelo es demasiado simple para capturar el patrón. Síntoma: Error train alto, error val también alto. Bias alto, Varianza baja.
Trade-off Bias–Varianza
Error total = Bias² + Varianza + Ruido irreducible
El objetivo es encontrar el punto óptimo de complejidad del modelo donde el error de generalización es mínimo.
Técnicas contra el overfitting
Técnica
Descripción
Aplicable en
Regularización L1 (Lasso)
Penaliza |w|. Produce sparsity (pone pesos a cero).
Regresión, redes neuronales
Regularización L2 (Ridge)
Penaliza w². Reduce pesos pero no los elimina.
Regresión, redes neuronales
Elastic Net
Combinación de L1 y L2.
Regresión
Dropout
Desactiva aleatoriamente neuronas durante entrenamiento.
Redes neuronales
Early Stopping
Detiene el entrenamiento cuando val loss deja de mejorar.
Redes neuronales, GBM
Data Augmentation
Genera variaciones artificiales de los datos de entrenamiento.
Imágenes, texto
Reducir complejidad
Menos capas/neuronas, menor profundidad del árbol.
GPT: decodificador autoregresivo. Generación de texto y código.
LLMs en software: GitHub Copilot, CodeLlama, StarCoder → generación y revisión de código.
Transfer Learning: reutilizar un modelo preentrenado en una tarea grande (p. ej., texto general) y adaptarlo a una tarea específica (p. ej., detección de vulnerabilidades). Reduce drásticamente el coste de entrenamiento y los datos necesarios.
ML aplicado a fases del desarrollo de software
Análisis de requisitos
Clasificación de requisitos: distinguir funcionales de no funcionales automáticamente (NLP + clasificadores).
Detección de ambigüedad: modelos de lenguaje identifican requisitos vagos o contradictorios.
Extracción de entidades: NER para identificar actores, acciones y restricciones en especificaciones en lenguaje natural.
Trazabilidad: embeddings semánticos para vincular requisitos con código o tests automáticamente.
Priorización: modelos de ranking basados en impacto, urgencia y dependencias.
Diseño y arquitectura
Recomendación de patrones de diseño: dado el contexto del problema, sugerir patrones adecuados (Clasificación).
Análisis de deuda técnica: modelos entrenados en histórico de código para identificar áreas problemáticas.
Detección de code smells: Random Forest / SVM sobre métricas de código (acoplamiento, cohesión, complejidad ciclomática).
Refactoring automático: LLMs sugieren y aplican refactorizaciones.
Planificación y estimación
Estimación de esfuerzo: regresión sobre features del proyecto (puntos de historia, complejidad, equipo, histórico de velocidad).
Predicción de plazos: modelos de series temporales sobre velocidad del equipo.
Predicción de riesgo: clasificadores sobre características del sprint/proyecto para predecir retrasos.
Técnicas ML usadas: Random Forest, GBM, redes LSTM para tendencias temporales.
Implementación (codificación)
Autocompletado de código: modelos de lenguaje (Copilot, Tabnine) que predicen el siguiente token.
Generación de código: LLMs (GPT-4, CodeLlama) generan funciones completas desde descripción en lenguaje natural.
Detección de bugs: análisis estático con ML para identificar patrones asociados a defectos.
Detección de vulnerabilidades: clasificadores entrenados en CWEs (Common Weakness Enumeration).
Revisión de código: modelos que detectan anti-patrones y sugieren mejoras.
Búsqueda de código: embeddings semánticos para recuperar fragmentos similares.
Pruebas (Testing)
Generación de casos de prueba: LLMs generan tests unitarios a partir del código fuente.
Priorización de tests: modelos que predicen qué tests es más probable que fallen basándose en cambios recientes.
Predicción de defectos: modelos de clasificación sobre métricas de módulo (complejidad, cambios recientes, cobertura).
Análisis de mutaciones: ML para seleccionar mutantes relevantes.
Testing de UI: visión por computador para detectar regresiones visuales.
Documentación
Generación de docstrings / comentarios: LLMs describen funciones automáticamente.
Resumen de cambios: modelos de summarización para changelogs a partir de commits.
Actualización de documentación: detección de inconsistencias entre código y docs mediante análisis semántico.
DevOps y operaciones
Análisis de logs: clustering y clasificación para detección automática de errores.
Detección de anomalías en métricas: Isolation Forest, LSTM Autoencoder sobre métricas de sistema (CPU, latencia…).
Predicción de fallos: modelos que anticipan degradación de rendimiento antes de que ocurra.
Optimización de pipelines CI/CD: RL para seleccionar orden y paralelismo de jobs.
AIOps: conjunto de técnicas ML para automatizar operaciones IT.
Herramientas y frameworks principales
Categoría
Herramienta
Uso principal
ML clásico
scikit-learn
Algoritmos clásicos, pipelines, evaluación
XGBoost / LightGBM
Gradient boosting de alta eficiencia
statsmodels
Modelos estadísticos, series temporales
Deep Learning
PyTorch
Investigación, flexibilidad, redes neuronales
TensorFlow / Keras
Producción, despliegue móvil/edge
Hugging Face Transformers
LLMs, NLP, modelos preentrenados
Datos
Pandas / NumPy
Manipulación y análisis de datos
Apache Spark / PySpark
Procesamiento distribuido de big data
MLOps
MLflow
Tracking de experimentos, registro de modelos
Kubeflow / Vertex AI
Pipelines ML en Kubernetes / GCP
DVC
Versionado de datos y modelos
Monitorización
Evidently AI
Detección de data drift, informes de modelo
Prometheus + Grafana
Métricas de sistema y modelo en producción
Visualización
Matplotlib / Seaborn / Plotly
Exploración y comunicación de datos
AutoML
AutoSklearn / H2O / Google AutoML
Selección automática de algoritmo e hiperparámetros
MLOps: ML en producción
MLOps extiende los principios de DevOps al ciclo de vida del ML, asegurando reproducibilidad, escalabilidad y monitorización continua.
Versionado: código (Git) + datos (DVC) + modelos (MLflow Model Registry).