-
1. ¿Por qué conviene StratifiedKFold en lugar de KFold sin barajar para validar el clasificador del Top 50 (27.5 % de positivos)?
Con clases desbalanceadas, un pliegue con muy pocos hits da métricas inestables; con los datos ordenados por el objetivo, KFold sin barajar llegó a dar una accuracy de 0.173 en un pliegue. Ambos usan la misma cantidad de datos, KFold sí funciona con clasificación y estratificar no mejora el modelo, solo la medición.
-
2. Un equipo prueba 40 configuraciones y elige la que mejor sale en el test. ¿Qué problema tiene la cifra que reporta?
Elegir mirando el test es ajustar al test: la mejor de 40 incluye algo de suerte. La elección se hace con validación cruzada sobre train y el test se usa una sola vez al final. El número de configuraciones o la métrica no arreglan el problema.
-
3. ¿Qué controlan max_depth y min_samples_leaf en un árbol de decisión?
Sin límite, el árbol de PyRitmo llega a 1.000 en train con 184 hojas y cae a 0.747 en test. max_depth y min_samples_leaf frenan eso. El número de árboles es de los ensambles, la tasa de aprendizaje es del boosting y las columnas por corte (max_features) son el azar del Random Forest.
-
4. ¿Por qué los árboles de decisión no necesitan escalar las columnas?
Un corte «duración ≤ 300» separa las mismas canciones que «duración en minutos ≤ 5». No hay escalado interno, los árboles aceptan columnas continuas y escalar no les cambia el resultado (aunque tampoco les hace daño).
-
5. ¿Cuál es la diferencia principal entre bagging y boosting?
Random Forest es bagging (muestras bootstrap y promedio); gradient boosting y XGBoost son boosting (cada árbol se ajusta a los residuos). Ambos usan árboles normalmente, el orden paralelo/serie es al revés y los dos sirven para regresión y clasificación.
-
6. ¿Qué agrega Random Forest al bagging simple?
El azar de columnas hace que los árboles sean más distintos entre sí, y promediar árboles distintos reduce más el error. Random Forest sí usa bootstrap, no corrige en serie (eso es boosting) y no limita la profundidad por omisión.
-
7. En gradient boosting, ¿cómo se relacionan learning_rate y n_estimators?
En PyRitmo, el early stopping de XGBoost se detuvo en la ronda 93 con tasa 0.05 y en la 128 con 0.03. Buscarlos por separado o subir n_estimators sin bajar la tasa lleva a sobreajustar. Una tasa mayor necesita menos árboles, y en boosting demasiados árboles sí pueden sobreajustar.
-
8. En XGBoost, ¿para qué sirven reg_lambda y gamma?
La función objetivo de XGBoost suma la pérdida y un término de complejidad; reg_lambda (L2 sobre los valores de hoja) y gamma (costo por hoja nueva) frenan árboles demasiado ajustados. La tasa es learning_rate, el desbalance es scale_pos_weight y las proporciones son subsample y colsample_bytree.
-
9. ¿Qué hace early_stopping_rounds=50 en XGBoost y por qué no se usa el test como eval_set?
El early stopping usa el último conjunto de eval_set para decidir cuándo parar; por eso ese conjunto debe ser una validación separada de train. Usar el test infla la cifra final. No fija 50 árboles, no mide segundos y no elimina árboles.
-
10. En train hay 816 canciones que no entran al Top 50 y 309 que sí. ¿Qué valor se suele usar para scale_pos_weight?
El valor típico es negativos / positivos: así los hits pesan tanto como el resto en la pérdida. Con 2.64 el recall subió de 0.563 a 0.748 con umbral 0.5. 0.38 haría lo contrario, 0.275 tampoco compensa y con 1 no hay compensación. Ojo: no lo combines con bajar el umbral sin medir.
-
11. En XGBoost, seguidores_miles tiene la mayor importancia por weight (217 cortes) pero colaboracion tiene la mayor por gain. ¿Cómo se explica?
Las dos medidas responden preguntas distintas y ninguna es causal: dicen cómo usa el modelo las columnas. No es un error, gain no es tiempo y ninguna de las dos mide causalidad ni correlación directa.
-
12. ¿Cuándo conviene HistGradientBoostingClassifier o LightGBM en lugar del GradientBoostingClassifier clásico?
El binning reduce el costo de buscar cortes, que es lo que domina con muchas filas; con las 1125 canciones de PyRitmo HistGradientBoosting incluso fue más lento. Sirven para clasificación y regresión, y siguen teniendo hiperparámetros que ajustar.
-
13. Se busca con RandomizedSearchCV sobre un Pipeline cuyo paso final se llama xgb. ¿Cómo se escribe el espacio y por qué conviene la búsqueda aleatoria?
scikit-learn ubica cada parámetro con el nombre del paso, dos guiones bajos y el parámetro. Con 7 hiperparámetros, una rejilla de 5 valores cada uno serían 78125 combinaciones; la aleatoria prueba, por ejemplo, 30. No garantiza el óptimo exacto, la sintaxis con punto o guion no funciona y también usa validación cruzada.