Rúbrica PR5072/01: Pipeline ML amb scikit-learn
Mòdul: 5072 Sistemes d'Aprenentatge Automàtic
Pràctica: PR5072/01 — Pipeline de ML amb scikit-learn i Docker
Hores estimades: 8 hores
Lliurament: Notebook .ipynb + model .pkl + informe PDF
Criteris d'avaluació
| Criteri | Pes | Excel·lent (9-10) | Notable (7-8) | Aprovat (5-6) | Insuficient (<5) |
|---|---|---|---|---|---|
| Configuracio Docker | 10% | Dockerfile funcional, contenidor arrencat correctament, volums muntats, healthcheck present | Contenidor funcional sense healthcheck | Contenidor arrencat manualment sense Dockerfile | Docker no usat o no funcional |
| EDA i preprocés | 20% | EDA exhaustiu: distribucions, correlacions, valors nuls, target balance; visualitzacions clares i comentades; preprocés complet i justificat amb ColumnTransformer | EDA correcte amb les visualitzacions principals; preprocés adequat | EDA basic amb 1-2 grafics; preprocés funcional sense justificacio | EDA absent o incorrecte; preprocés inexistent o trencat |
| Entrenament i comparacio | 25% | 3 models implementats com a Pipeline sklearn; cross-validation StratifiedKFold(5); AUC-ROC i F1 correctament calculats i comparats; grafic comparatiu | 3 models, cross-val correcte, 1-2 metriques | 2 models, avaluacio basica sense cross-val | Menys de 2 models; sense Pipeline; metriques absents |
| Optimitzacio d'hiperparametres | 20% | Optuna implementat correctament (>=30 trials), visualitzacio de convergencia, millora demostrada respecte al model base, justificacio dels hiperparametres triats | Optuna o GridSearchCV implementat, millora present | Optimitzacio parcial (menys de 10 trials o parametres insuficients) | Sense cap optimitzacio d'hiperparametres |
| Qualitat del codi | 15% | Codi net, comentat en catala, funcions reutilitzables, variables ALUMNE/ALUMNE_ID usades a tot arreu, reproducible amb random_state=42 | Codi llegible, comentat, Pipeline sklearn present, pocs problemes estilistics | Codi funcional amb comentaris basics, alguns random_state absents | Codi desordenat, sense comentaris, no reproducible |
| Informe i conclusions | 15% | Resum executiu clar, metodologia descrita, taula comparativa de resultats, recomanacio de negoci concreta i justificada, preguntes de reflexio completament resposes | Conclusions correctes, resultats clars, 5-6 preguntes resposes | Conclusions basiques, resultats presents, 3-4 preguntes resposes | Sense conclusions; preguntes de reflexio no resposes |
| Personalitzacio (nom alumne) | 5% | Nom visible a: variable ALUMNE, tots els fitxers de sortida (.pkl, .json, .png), noms del contenidor Docker, cel·la de titol del notebook | Nom visible als fitxers principals i variable ALUMNE | Nom parcialment present (manquen alguns fitxers) | Sense personalitzacio del nom |
Detall dels criteris
Configuració Docker (10%)
Per obtenir la maxima nota en aquest criteri cal:
- Dockerfile correcte basat en
jupyter/scipy-notebook:python-3.11 - Fitxer
requirements.txtamb totes les dependencies i versions fixades - Ordre
docker runamb--name sklearn-[nom-alumne] - Volums muntats per a notebooks i dades
- Healthcheck configurat al Dockerfile
- Evidencia d'execucio (captures de pantalla o logs al notebook)
Consell
Inclou una cel·la al notebook que executi !docker ps o que mostri la versio de Python i les biblioteques instal·lades per demostrar que treballes dins el contenidor.
EDA i preprocés (20%)
L'EDA ha d'incloure com a minim:
- Shape del dataset i tipus de cada columna
- Recompte i tractament de valors nuls
- Distribucio de la variable target (grafic i percentatges)
- Distribucio de les variables numeriques (histogrames o boxplots)
- Analisi de les variables categoriques (grafics de barres)
- Matriu de correlacio
- Almenys una visualitzacio de relacio entre features i target
El ColumnTransformer ha d'estar justificat: per que escalar les numeriques? per que OneHotEncoder i no LabelEncoder per a les categoriques?
Entrenament i comparació (25%)
- Els 3 models han d'estar encapsulats dins un
Pipelinede scikit-learn (preprocessor + model) - La validacio creuada ha de ser
StratifiedKFold(n_splits=5)per respectar el desbalanceig - S'han de reportar com a minim: AUC-ROC i F1
- La comparacio ha d'incloure intervals de confianca (mitja +/- desviacio estandard del CV)
# Exemple de com hauria de ser la comparacio
for nom, pipeline in models.items():
scores = cross_val_score(pipeline, X_train, y_train,
cv=StratifiedKFold(5), scoring='roc_auc')
print(f"{nom}: {scores.mean():.4f} +/- {scores.std():.4f}")
Optimització d'hiperparàmetres (20%)
- Optuna (preferit) o GridSearchCV sobre el millor model
- Minim 30 trials si s'usa Optuna
- La funcio objectiu ha d'incloure el preprocessor (Pipeline complet)
- S'ha de demostrar millora respecte al model base (AUC-ROC)
- Visualitzacio de la convergencia de l'optimitzacio
Qualitat del codi (15%)
Aspectes valorats:
| Aspecte | Excellent | Insuficient |
|---|---|---|
| Comentaris | En catala, cada bloc explicat | Absents |
Variables ALUMNE i ALUMNE_ID |
Usades a tot arreu | Absents |
random_state=42 |
A tots els elements estocastics | Absent |
| Funcions | Codi encapsulat en funcions reutilitzables | Tot al nivell global |
| Reproduibilitat | Executa sense errors de dalt a baix | Errors en executar |
Informe i conclusions (15%)
L'informe (cel·les Markdown del notebook) ha de tenir:
- Resum executiu (3-5 frases): quin problema, quin model, quin resultat
- Metodologia aplicada (preprocés, algoritmes, validacio)
- Taula comparativa de tots els models amb les metriques
- Analisi de les features importants: quines son mes predictores?
- Recomanacio de negoci concreta: quin umbral usar en produccio? quins clients prioritzar?
- Respostes a les 7 preguntes de reflexio (desenvolupa, no respostes d'una linia)
Taula de puntuació
| Nota | Descripció |
|---|---|
| 9-10 | Excel·lent: supera els requisits en tots els criteris. Codi net, analisi profunda, recomanacions de negoci solides. |
| 7-8 | Notable: compleix tots els requisits basics correctament. Pot tenir algunes mancances menors. |
| 5-6 | Aprovat: els elements principals son presents i funcionals pero amb mancances significatives. |
| 3-4 | Insuficient: manca algun element clau (un model, l'optimitzacio, les conclusions). |
| 0-2 | No presentat o no funcional: el notebook no executa o manca mes de la meitat dels continguts. |
Penalitzacions
| Situació | Penalització |
|---|---|
| AUC-ROC del model final < 0.75 | -1 punt |
| Notebook no executat de dalt a baix | -2 punts |
| Nom de l'alumne absent als fitxers | -1 punt |
| Lliurament fora de termini (1-3 dies) | -1 punt per dia |
| Plagi detectat | 0 (cas academic) |
Rúbrica de les preguntes de reflexió (part de l'informe)
Cada pregunta resolta correctament aporta fins a 1,43 punts dins el criteri "Informe i conclusions" (7 preguntes x 1,43 ≈ 10 punts).
| Pregunta | Resposta insuficient | Resposta acceptable | Resposta excel·lent |
|---|---|---|---|
| 1. XGBoost vs Regressio Logistica | "XGBoost es millor" | Menciona arbres de decisio i boosting | Explica bias-variance tradeoff, capacitat de modelar no-linealitats, handling de valors nuls |
| 2. Gestio del desbalanceig | "Usem class_weight" | Explica que significa i quan aplicar-ho | Compara class_weight, SMOTE, umbral de decisio, PR-AUC vs ROC-AUC |
| 3. Interpretacio AUC-ROC | "Es la corba ROC" | Explica TP rate vs FP rate | Interpreta en context de negoci: probabilitat que un positiu tingui score > negatiu |
| 4. Ordre d'operacions al Pipeline | "Perque si" | Menciona que imputer va primer | Explica data leakage si l'ordre fos incorrecte |
| 5. Data drift | "Monitoritzar el model" | Menciona distribucio de prediccions | Proposa metriques especifiques (PSI, KL-divergence), eines (Evidently, WhyLogs) |
| 6. Biaixos del model | "Podria tenir biaixos" | Menciona variables sensibles | Identifica variables proxy, proposa analisi de subgrups, equitat algorismica |
| 7. Accions preventives | "Oferir descomptes" | Proposa accio especifica | Analitza cost/benefici, falsos positius, segmentacio de la resposta |
Exemple de fitxers de lliurament correctes
churn_joan_garcia.ipynb <- Notebook principal
model_churn_joan_garcia.pkl <- Model serialitzat
metadata_model_joan_garcia.json <- Metadata en JSON
informe_churn_joan_garcia.pdf <- Notebook exportat a PDF
eda_joan_garcia.png <- (opcional) grafics exportats
comparativa_models_joan_garcia.png <- (opcional)
avaluacio_final_joan_garcia.png <- (opcional)
Nom correcte dels fitxers
Tots els fitxers han d'incloure el cognom (o nom complet) de l'alumne. Fitxers amb noms genèrics com notebook.ipynb o model.pkl no seran acceptats.
Rubrica PR5072/01 | Modul 5072 Sistemes d'Aprenentatge Automatic | Institut Sa Palomera (Blanes) | Curs IABD 2026-2027