# machine-learning-clasico-con-python
Machine Learning con scikit-learn y XGBoost
Volver a la portada del cursoNotebook: 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 tienenpredict(la clase),predict_proba(la probabilidad de cada clase) yscore(accuracy en clasificación, $R^2$ en regresión). - Transformadores: aprenden con
fit(X)y convierten contransform(X). Un escalador o un imputador son transformadores. - Atributos aprendidos: todo lo que se calcula en
fittermina 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
stratifycon clases desbalanceadas. Sin estratificar (conrandom_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:
- Cambiar
test_size: con 0.2 se esperan 300 canciones de test y accuracy 0.813. - 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. - 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.