A lo largo del curso has usado NumPy, pandas, scikit-learn, XGBoost, LightGBM y Keras sin detenerte a mirar el mapa completo: cada herramienta apareció cuando la necesitabas. Antes de llevar el modelo de churn de MercaFresh a producción, conviene hacer esa pausa. En esta lección ordenamos el ecosistema Python de machine learning por capas, comparamos las opciones que compiten entre sí (TensorFlow frente a PyTorch, las tres bibliotecas de boosting), damos criterios para elegir con cabeza y, sobre todo, aprendemos a fijar y reproducir el entorno de trabajo — porque un modelo que solo funciona "en mi máquina" no puede desplegarse, y esa es exactamente la tarea de la próxima lección.
Contenido
- El ecosistema Python de ML, por capas
- La capa base científica: NumPy, pandas, SciPy y matplotlib
- ML clásico: scikit-learn y statsmodels
- Boosting: XGBoost, LightGBM y CatBoost
- Deep learning: TensorFlow/Keras frente a PyTorch
- NLP y visión por computador: transformers, spaCy y OpenCV
- Tabla-resumen: qué biblioteca para qué tarea
- Criterios para elegir una biblioteca
- Gestión de entornos: la base de la reproducibilidad
El ecosistema Python de ML, por capas
Python domina el machine learning no por el lenguaje en sí, sino por su ecosistema: cientos de bibliotecas que se apoyan unas sobre otras formando capas. Entenderlas como capas evita dos errores típicos: pensar que hay que aprenderlas todas, y no saber cuál toca cuando aparece un problema nuevo.
graph BT
subgraph base["Capa 1 · Base cientifica"]
numpy[NumPy]
pandas[pandas]
scipy[SciPy]
mpl[matplotlib]
end
subgraph clasico["Capa 2 · ML clasico"]
sklearn[scikit-learn]
statsmodels[statsmodels]
end
subgraph boosting["Capa 3 · Boosting especializado"]
xgb[XGBoost]
lgbm[LightGBM]
cat[CatBoost]
end
subgraph dl["Capa 4 · Deep learning"]
tf[TensorFlow / Keras]
pt[PyTorch]
end
subgraph dominio["Capa 5 · Dominios: NLP y vision"]
hf[Hugging Face transformers]
spacy[spaCy]
cv[OpenCV]
end
base --> clasico
base --> boosting
base --> dl
dl --> dominio
clasico -.API compatible.-> boosting
Lectura del diagrama, de abajo arriba:
- Capa 1 — base científica: arrays, tablas, estadística y gráficos. Todo lo demás se construye encima.
- Capa 2 — ML clásico: los algoritmos de los módulos 4 y 5, con scikit-learn como estándar de facto.
- Capa 3 — boosting: bibliotecas independientes especializadas en gradient boosting (módulo 7), que imitan la API de scikit-learn para integrarse con ella.
- Capa 4 — deep learning: redes neuronales profundas (lección 07-04), con su propio motor de cómputo (GPU, diferenciación automática).
- Capa 5 — dominios: bibliotecas para texto e imagen que empaquetan modelos de deep learning listos para usar.
Para el modelo de churn de MercaFresh —datos tabulares, decenas de miles de clientes— las capas 1 a 3 son suficientes. Las capas 4 y 5 entran en juego con datos no estructurados, como verás en los proyectos de clasificación de imágenes (09-02) y análisis de sentimientos (09-03).
La capa base científica: NumPy, pandas, SciPy y matplotlib
Ya las has usado durante todo el curso; aquí solo fijamos qué papel cumple cada una:
- NumPy: el array n-dimensional y las operaciones vectorizadas. Es la lingua franca: cuando scikit-learn, XGBoost o Keras reciben datos, por debajo son arrays de NumPy. Su velocidad viene de que el bucle ocurre en C, no en Python.
- pandas: el
DataFrame, tabla con columnas tipadas y etiquetadas. Es la herramienta de las fases de limpieza y exploración (módulo 3): cargar CSV, agrupar, unir tablas, calcular el RFM de cada cliente. - SciPy: estadística e ingeniería sobre NumPy. La usaste en el módulo 2 (distribuciones, tests de hipótesis con
scipy.stats) y la reutilizarás en la lección 08-03 para detectar drift con el test de Kolmogorov-Smirnov. - matplotlib (y seaborn encima): visualización. Histogramas, curvas ROC, matrices de confusión — todos los gráficos del curso salen de aquí.
Una consecuencia práctica: cuando una biblioteca de capa superior falla con un error extraño de tipos o dimensiones, la causa suele estar en esta capa (un DataFrame con una columna object inesperada, un array con NaN). Saber bajar a la capa base a depurar es una habilidad, no un fracaso.
ML clásico: scikit-learn y statsmodels
scikit-learn: una API como filosofía de diseño
Scikit-learn es la biblioteca que más has usado, y merece la pena hacer explícito por qué resulta tan cómoda: toda la biblioteca comparte tres verbos.
| Verbo | Qué hace | Quién lo tiene |
|---|---|---|
fit(X, y) |
Aprende de los datos (parámetros del modelo, o estadísticas del preprocesador) | Todos los estimadores |
predict(X) |
Genera predicciones con lo aprendido | Modelos (clasificadores, regresores, clustering) |
transform(X) |
Transforma los datos con lo aprendido en fit |
Preprocesadores (escaladores, codificadores, PCA) |
Esta coherencia es lo que hace posible el Pipeline que construiste en el módulo 3: como todo objeto responde a los mismos verbos, se pueden encadenar piezas intercambiables, y GridSearchCV (07-05) puede optimizar cualquier combinación sin código especial.
# La misma estructura sirve para CUALQUIER modelo de scikit-learn:
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
for Modelo in [LogisticRegression, RandomForestClassifier]:
modelo = Modelo() # 1. instanciar con hiperparámetros
modelo.fit(X_train, y_train) # 2. aprender
y_pred = modelo.predict(X_test) # 3. predecirCambiar de regresión logística a Random Forest es cambiar una línea. Esa uniformidad —que en otros ecosistemas no existe— es la razón por la que scikit-learn es el punto de partida recomendado para casi cualquier problema tabular.
statsmodels: cuando importa la inferencia, no solo la predicción
Scikit-learn responde "¿qué predice el modelo?"; statsmodels responde "¿qué dice el modelo sobre los datos?": p-valores por coeficiente, intervalos de confianza, tests de hipótesis (todo el aparato del módulo 2). Si en MercaFresh la pregunta fuera "¿el número de incidencias de entrega tiene un efecto estadísticamente significativo sobre el churn, controlando por antigüedad?", statsmodels es la herramienta adecuada; para predecir qué clientes abandonarán, scikit-learn. Predicción e inferencia son objetivos distintos y cada biblioteca está optimizada para el suyo.
Boosting: XGBoost, LightGBM y CatBoost
En la lección 07-03 viste que el gradient boosting domina los problemas tabulares, y trabajaste con XGBoost y LightGBM. Las tres bibliotecas principales implementan la misma idea con énfasis distintos:
| Biblioteca | Punto fuerte | Cuándo elegirla |
|---|---|---|
| XGBoost | La más veterana y documentada; regularización muy completa | Punto de partida seguro; abundante material de ayuda |
| LightGBM | Velocidad y memoria (crecimiento por hojas, histogram-based) | Datasets grandes (cientos de miles de filas o más) |
| CatBoost | Manejo nativo de variables categóricas sin codificación previa | Muchas categóricas de alta cardinalidad; menos tuning inicial |
Las tres ofrecen una interfaz compatible con scikit-learn (XGBClassifier, LGBMClassifier, CatBoostClassifier con fit/predict), así que encajan en el pipeline del churn sin tocar el resto del código. En la práctica, con datos tabulares medianos las tres rinden de forma parecida bien ajustadas; la elección suele decidirla la velocidad de entrenamiento y la comodidad con tus datos concretos.
Deep learning: TensorFlow/Keras frente a PyTorch
Para redes profundas (07-04) hay dos ecosistemas dominantes, y conviene una comparación honesta:
| Aspecto | TensorFlow + Keras | PyTorch |
|---|---|---|
| Curva de aprendizaje | Muy suave con Keras (API de alto nivel) | Algo más de código, pero muy transparente |
| Estilo | Declarativo: describes la red y Keras la gestiona | Imperativo: escribes el bucle de entrenamiento, es "Python normal" |
| Investigación | Minoritario en papers actuales | Estándar de facto en investigación |
| Industria y despliegue | Tooling maduro (TF Serving, TFLite para móvil) | Dominante y creciendo; TorchServe, ONNX |
| Depuración | Más opaca en errores internos | Más fácil: los errores son errores de Python |
¿Cuál elegir? Para aprender y para modelos estándar, Keras (como hiciste en 07-04) sigue siendo la vía más rápida de la idea al modelo entrenado. Si vas a leer e implementar papers recientes, o quieres control fino del entrenamiento, PyTorch es hoy la opción mayoritaria. La buena noticia: los conceptos (capas, funciones de activación, descenso de gradiente, épocas) son idénticos; cambiar de framework es cuestión de días, no de meses. No es una decisión irreversible ni la más importante de tu proyecto.
NLP y visión por computador: transformers, spaCy y OpenCV
Presentación breve — los usarás de verdad en el módulo 9:
- Hugging Face
transformers: el punto de acceso a modelos preentrenados de lenguaje (BERT, y las familias que viste al final de 07-04) y visión. Su patrónpipeline("sentiment-analysis")da un clasificador de sentimientos funcional en tres líneas; será central en el proyecto 09-03. - spaCy: NLP "industrial" clásico: tokenización, entidades nombradas, lematización. Rápido y pensado para producción; ideal para preprocesar texto antes de vectorizarlo.
- OpenCV: procesamiento de imagen (leer, redimensionar, filtrar, detectar contornos). Suele ser la capa de preparación antes de una CNN; aparecerá en el proyecto 09-02.
Mención aparte merece el AutoML (auto-sklearn, FLAML, y servicios en la nube): herramientas que automatizan la selección de modelo e hiperparámetros que tú hiciste a mano en 07-05. Útiles como baseline rápido, pero no sustituyen entender lo que ocurre — todo lo que automatizan es exactamente lo que has aprendido en los módulos 6 y 7.
Tabla-resumen: qué biblioteca para qué tarea
| Tarea | Primera opción | Alternativas |
|---|---|---|
| Manipulación de datos tabulares | pandas | polars (datasets muy grandes) |
| Estadística y tests | SciPy, statsmodels | — |
| Clasificación/regresión tabular | scikit-learn | — |
| Máximo rendimiento tabular | LightGBM / XGBoost | CatBoost |
| Inferencia estadística (p-valores) | statsmodels | — |
| Clustering y reducción de dimensión | scikit-learn | UMAP (biblioteca propia) |
| Deep learning genérico | Keras (aprender) / PyTorch (investigar) | — |
| NLP moderno | Hugging Face transformers | spaCy (pipeline clásico) |
| Visión por computador | PyTorch/Keras + OpenCV | — |
| Visualización | matplotlib + seaborn | plotly (interactivo) |
Criterios para elegir una biblioteca
Ante una biblioteca nueva y brillante, aplica tres filtros antes de adoptarla:
- Madurez y mantenimiento: ¿tiene años de versiones estables, documentación cuidada, y commits recientes? Una biblioteca abandonada es deuda técnica: quedará atada a versiones viejas de NumPy o Python.
- Comunidad: ¿hay respuestas en Stack Overflow, issues atendidos, tutoriales de terceros? Cuando algo falle a las once de la noche, la comunidad es tu soporte técnico.
- Necesidad real: ¿resuelve un problema que tus herramientas actuales no resuelven, o solo es novedad? Para el churn de MercaFresh, cambiar scikit-learn + LightGBM por el framework de moda no mejoraría nada y añadiría riesgo. La herramienta aburrida y probada suele ser la decisión profesional correcta.
Un corolario importante para la próxima lección: cada biblioteca que añades es una dependencia que tendrás que instalar, versionar y mantener en producción. La factura de una dependencia no se paga al instalarla, sino al desplegarla y mantenerla durante años.
Gestión de entornos: la base de la reproducibilidad
Aquí pasamos de las bibliotecas a cómo gestionarlas, y es la parte más importante de la lección de cara al despliegue. El problema: entrenas el modelo con scikit-learn 1.5 en tu portátil; el servidor tiene la 1.2; el modelo carga mal o se comporta distinto. Este tipo de fallo silencioso es una de las causas más comunes de errores en producción.
La solución tiene dos piezas:
1. Entornos virtuales aislados — cada proyecto con sus propias versiones, sin contaminar el Python del sistema ni otros proyectos:
# Con venv (incluido en Python):
python -m venv .venv # crea el entorno en la carpeta .venv
source .venv/bin/activate # lo activa (en Windows: .venv\Scripts\activate)
pip install scikit-learn lightgbm # instala SOLO dentro del entorno
# Con conda (alternativa; gestiona también la versión de Python):
conda create -n mercafresh python=3.12
conda activate mercafresh2. Versiones fijadas por escrito — un requirements.txt que declara exactamente qué necesita el proyecto:
# requirements.txt del proyecto de churn de MercaFresh
numpy==2.1.3
pandas==2.2.3
scikit-learn==1.5.2
lightgbm==4.5.0
joblib==1.4.2pip freeze > requirements.txtvuelca las versiones exactas del entorno actual.pip install -r requirements.txtreconstruye el mismo entorno en otra máquina.- El
==(fijar la versión exacta, pinning) es deliberado: en producción no quieres que unpip installde mañana traiga una versión distinta a la de hoy. La reproducibilidad vale más que estar a la última.
Este fichero es un contrato: "el modelo se entrenó con exactamente esto". En la próxima lección lo usaremos dos veces: para cargar el modelo serializado con las mismas versiones con que se guardó, y como pieza central del Dockerfile.
Errores Comunes y Consejos
- Coleccionar frameworks en lugar de dominar uno. Saltar de biblioteca en biblioteca produce conocimiento superficial. Domina scikit-learn a fondo: sus conceptos (pipeline, CV, métricas) se transfieren a todo lo demás.
- Elegir deep learning para datos tabulares por defecto. Para problemas como el churn, el boosting sobre árboles suele igualar o superar a las redes con mucho menos coste (lo viste en el módulo 7). Elige la capa del diagrama que el problema pide, no la más alta.
- Trabajar sin entorno virtual. Instalar todo en el Python del sistema acaba en conflictos de versiones entre proyectos. Un entorno por proyecto, siempre, desde el primer día.
requirements.txtsin versiones (scikit-learna secas). Funciona hoy y falla dentro de seis meses, cuando una versión nueva cambie un comportamiento. Fija versiones exactas para todo lo que toque el modelo.- Confundir statsmodels y scikit-learn. Si necesitas p-valores e intervalos de confianza, scikit-learn no te los dará (no es su objetivo); si necesitas pipelines y predicción a escala, statsmodels no es el camino. Son complementarios.
- Consejo: antes de adoptar una dependencia nueva, mira su repositorio: fecha del último commit, número de issues abiertos sin respuesta, y si tiene versiones estables numeradas. Cinco minutos que ahorran meses.
Ejercicios
Ejercicio 1. Clasifica en su capa del ecosistema cada herramienta que necesitaría MercaFresh para estos tres encargos, y nombra la biblioteca concreta que usarías: (a) predecir el churn con datos tabulares de RFM; (b) clasificar automáticamente las fotos que los clientes suben en las reclamaciones ("producto dañado" / "producto correcto"); (c) determinar si el efecto del retraso medio de entrega sobre el churn es estadísticamente significativo.
Ejercicio 2. Un compañero propone reescribir el modelo de churn (actualmente scikit-learn + LightGBM) con un framework de deep learning aparecido hace ocho meses, "porque es el futuro". Escribe una evaluación en tres puntos usando los criterios de elección de esta lección, y una recomendación final.
Ejercicio 3. En tu máquina, crea un entorno virtual nuevo, instala scikit-learn y joblib, y genera su requirements.txt con versiones fijadas. Después, escribe los comandos que ejecutaría un compañero para reproducir tu entorno desde ese fichero.
Soluciones
Solución 1.
(a) Capas 1–3: pandas para los datos, scikit-learn para el pipeline y LightGBM (o XGBoost) como modelo. No hace falta subir más: es un problema tabular clásico.
(b) Capas 1, 4 y 5: OpenCV para leer y preparar las imágenes, y una CNN con Keras o PyTorch — o mejor, un modelo preentrenado de visión vía Hugging Face, ajustado a las dos clases. (Se desarrolla en el proyecto 09-02.)
(c) Capa 2, statsmodels: la pregunta es de inferencia (significatividad de un coeficiente controlando por otras variables), no de predicción. Un p-valor y su intervalo de confianza responden; predict no.
Solución 2. (1) Madurez: ocho meses de vida implica API inestable, bugs por descubrir y riesgo de abandono; el modelo de churn debe vivir años en producción. (2) Comunidad: escasa por definición — sin respuestas acumuladas ni tutoriales, cada problema se resuelve en solitario. (3) Necesidad real: ninguna — el problema es tabular, y en el módulo 7 comprobamos que el boosting es la herramienta adecuada; no hay ninguna carencia que el framework nuevo cubra. Recomendación: mantener scikit-learn + LightGBM; si acaso, probar el framework nuevo en un experimento aislado sin ruta a producción, y reevaluarlo cuando madure.
Solución 3.
# Crear y reproducir un entorno
python -m venv .venv
source .venv/bin/activate
pip install scikit-learn joblib
pip freeze > requirements.txt # fija las versiones exactas instaladas
# El compañero, en su máquina:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt # instala exactamente las mismas versionesEl punto clave es que pip freeze escribe ==versión para cada paquete (incluidas las dependencias transitivas, como NumPy), de modo que la reconstrucción es exacta y no "la última versión disponible ese día".
Conclusión
Ya tienes el mapa: una base científica común (NumPy, pandas, SciPy, matplotlib), scikit-learn como columna vertebral del ML clásico con su API fit/predict/transform, statsmodels para inferencia, el trío de boosting para exprimir los datos tabulares, dos grandes ecosistemas de deep learning entre los que elegir sin dramatismo, y las bibliotecas de dominio que esperan en el módulo 9. Y una regla transversal: cada dependencia se declara, se fija y se aísla en su entorno, porque la reproducibilidad no es una virtud académica sino un requisito de despliegue. Con el entorno del modelo de churn de MercaFresh congelado en un requirements.txt, estamos listos para la pregunta central del módulo: cómo sacar ese modelo del notebook y ponerlo a responder peticiones reales. Eso es la próxima lección: serialización, APIs, contenedores — implementación de modelos en producción.
Curso de Machine Learning
Módulo 1: Introducción al Machine Learning
- ¿Qué es el Machine Learning?
- Historia y evolución del Machine Learning
- Tipos de Machine Learning
- Aplicaciones del Machine Learning
- El flujo de trabajo de un proyecto de Machine Learning
Módulo 2: Fundamentos de Estadística y Probabilidad
- Conceptos básicos de estadística
- Distribuciones de probabilidad
- Correlación y covarianza
- Inferencia estadística
- Teorema de Bayes
Módulo 3: Preprocesamiento de Datos
- Limpieza de datos
- Manejo de datos faltantes
- Transformación de datos
- Codificación de variables categóricas
- Normalización y estandarización
- Ingeniería de características
Módulo 4: Algoritmos de Machine Learning Supervisado
- Regresión lineal
- Regresión logística
- Árboles de decisión
- Máquinas de soporte vectorial (SVM)
- K-Vecinos más cercanos (K-NN)
- Naive Bayes
- Redes neuronales
Módulo 5: Algoritmos de Machine Learning No Supervisado
- Clustering: K-means
- Clustering jerárquico
- Análisis de componentes principales (PCA)
- Análisis de agrupamiento DBSCAN
- Visualización de datos con t-SNE y UMAP
Módulo 6: Evaluación y Validación de Modelos
- División de datos: entrenamiento, validación y prueba
- Métricas de evaluación
- Validación cruzada
- Curva ROC y AUC
- Overfitting y underfitting
Módulo 7: Técnicas Avanzadas y Optimización
- Regularización: Ridge, Lasso y Elastic Net
- Ensemble Learning
- Gradient Boosting
- Redes neuronales profundas (Deep Learning)
- Optimización de hiperparámetros
Módulo 8: Implementación y Despliegue de Modelos
- Frameworks y bibliotecas populares
- Implementación de modelos en producción
- Mantenimiento y monitoreo de modelos
- Consideraciones éticas y de privacidad
Módulo 9: Proyectos Prácticos
- Proyecto 1: Predicción de precios de viviendas
- Proyecto 2: Clasificación de imágenes
- Proyecto 3: Análisis de sentimientos en redes sociales
- Proyecto 4: Detección de fraudes
- Proyecto 5: Segmentación de clientes
