Saltar al contenido

# machine-learning-clasico-con-python

Machine Learning con scikit-learn y XGBoost

Volver a la portada del curso
Notebook

Notebook: tu primer modelo de punta a punta

Sección 1 · Fundamentos: qué es ML y el flujo de scikit-learn

Tu primer modelo de punta a punta

En este notebook entrenas tu primer clasificador con las canciones de PyRitmo, una app de streaming ficticia: a partir de los rasgos de una canción y de su artista, estimar si entrará al Top 50 semanal en su primer mes. El flujo es el mismo que usarás en todo el curso: explorar, separar X e y, partir, fijar una línea base, entrenar y predecir. Esta guía acompaña al notebook primer-modelo: qué hace cada sección y qué cifra debes encontrar.

0. Entorno

La primera celda imprime las versiones de Python, pandas y scikit-learn con las que se ejecutó el notebook. Si trabajas en tu computadora, crea un entorno virtual para el curso y actívalo antes de abrir Jupyter: python -m venv .venv, luego .venv\Scripts\activate en Windows o source .venv/bin/activate en macOS y Linux, y por último pip install scikit-learn pandas matplotlib jupyter. En Google Colab no hace falta instalar nada.

La misma celda define generar_canciones, que fabrica las 1500 canciones con una semilla fija y sin descargas, y las listas de columnas del curso (NUMERICAS, CATEGORICAS).

1. La API común de scikit-learn

Todo en scikit-learn sigue el mismo contrato:

  • Estimadores: aprenden con fit(X, y). Los modelos predictivos además tienen predict (la clase), predict_proba (la probabilidad de cada clase) y score (accuracy en clasificación, $R^2$ en regresión).
  • Transformadores: aprenden con fit(X) y convierten con transform(X). Un escalador o un imputador son transformadores.
  • Atributos aprendidos: todo lo que se calcula en fit termina en guion bajo: mean_, coef_, classes_. Si el atributo existe, el objeto ya está entrenado.

Qué buscar: StandardScaler aprende mean_ (0.61 de energía y 106.84 bpm) y la regresión logística aprende classes_, coef_ y n_features_in_.

2. Explorar y partir

head, info y describe muestran 1500 canciones, 15 columnas y ningún faltante. Tres datos importan: top50 vale 1 en el 27.5 % de las canciones (clases desbalanceadas), seguidores_miles va de 1.6 a 19863 (escalas muy distintas) y reproducciones_mes1 y popularidad se conocen después del lanzamiento, así que no pueden ser entradas.

from sklearn.model_selection import train_test_split

X = df[NUMERICAS]
y = df["top50"]
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.25, stratify=y, random_state=42)

Train queda con 1125 canciones y test con 375, ambos con 27.5 % de hits gracias a stratify.

3. Línea base y regresión logística

from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression

dummy = DummyClassifier().fit(X_tr, y_tr)
modelo = LogisticRegression(max_iter=2000).fit(X_tr, y_tr)
print(dummy.score(X_te, y_te), modelo.score(X_te, y_te))

El Dummy siempre dice «no entra» y acierta el 72.5 % sin detectar un solo hit: esa es la cifra que hay que superar. La logística con las 9 numéricas llega a 0.816 en test (0.789 en train, así que no memorizó). Para una canción nueva bailable, corta, con colaboración y en playlist editorial, predict_proba da 0.83 de probabilidad de entrar al Top 50.

El notebook no profundiza en métricas ni en preprocesamiento a propósito: la matriz de confusión, precision, recall y AUC se ven en el módulo 3, y los faltantes, el escalado y las categorías en el módulo 2.

4. Errores comunes

  • Evaluar en train. Un árbol sin límite da 1.0 en train y 0.736 en test, casi lo mismo que el Dummy. La cifra que cuenta es la de datos que el modelo no vio.
  • Olvidar stratify con clases desbalanceadas. Sin estratificar (con random_state=0), el test queda con 26.1 % de hits y train con 27.9 %.
  • No fijar random_state. Con 10 particiones distintas, la accuracy de la misma receta va de 0.744 a 0.813. Sin semilla no puedes repetir tu resultado ni comparar modelos con justicia.

5. Ejercicios

Tres ejercicios con cifras esperadas y prueba automática:

  1. Cambiar test_size: con 0.2 se esperan 300 canciones de test y accuracy 0.813.
  2. Agregar una columna es_regueton: la accuracy baja a 0.803. Una sola partición de 375 canciones no basta para decidir si una columna ayuda.
  3. Comparar contra el Dummy: la logística le saca 0.091 de accuracy. Reportar esa ventaja es más honesto que reportar 0.816 a secas.

Las soluciones están al final del notebook. Resuélvelos antes de mirarlas.

Recursos