Al llarg del curs has fet servir NumPy, pandas, scikit-learn, XGBoost, LightGBM i Keras sense aturar-te a mirar el mapa complet: cada eina apareixia quan la necessitaves. Abans de portar el model de churn de MercaFresh a producció, convé fer aquesta pausa. En aquesta lliçó ordenem l'ecosistema Python d'aprenentatge automàtic per capes, comparem les opcions que competeixen entre elles (TensorFlow davant de PyTorch, les tres biblioteques de boosting), donem criteris per triar amb seny i, sobretot, aprenem a fixar i reproduir l'entorn de treball — perquè un model que només funciona "a la meva màquina" no es pot desplegar, i aquesta és exactament la tasca de la propera lliçó.
Contingut
- L'ecosistema Python de ML, per capes
- La capa base científica: NumPy, pandas, SciPy i matplotlib
- ML clàssic: scikit-learn i statsmodels
- Boosting: XGBoost, LightGBM i CatBoost
- Deep learning: TensorFlow/Keras davant de PyTorch
- NLP i visió per computador: transformers, spaCy i OpenCV
- Taula resum: quina biblioteca per a quina tasca
- Criteris per triar una biblioteca
- Gestió d'entorns: la base de la reproduïbilitat
L'ecosistema Python de ML, per capes
Python domina l'aprenentatge automàtic no pel llenguatge en si, sinó pel seu ecosistema: centenars de biblioteques que es recolzen les unes sobre les altres formant capes. Entendre-les com a capes evita dos errors típics: pensar que cal aprendre-les totes, i no saber quina toca quan apareix un problema nou.
graph BT
subgraph base["Capa 1 · Base cientifica"]
numpy[NumPy]
pandas[pandas]
scipy[SciPy]
mpl[matplotlib]
end
subgraph classic["Capa 2 · ML classic"]
sklearn[scikit-learn]
statsmodels[statsmodels]
end
subgraph boosting["Capa 3 · Boosting especialitzat"]
xgb[XGBoost]
lgbm[LightGBM]
cat[CatBoost]
end
subgraph dl["Capa 4 · Deep learning"]
tf[TensorFlow / Keras]
pt[PyTorch]
end
subgraph domini["Capa 5 · Dominis: NLP i visio"]
hf[Hugging Face transformers]
spacy[spaCy]
cv[OpenCV]
end
base --> classic
base --> boosting
base --> dl
dl --> domini
classic -.API compatible.-> boosting
Lectura del diagrama, de baix a dalt:
- Capa 1 — base científica: arrays, taules, estadística i gràfics. Tota la resta es construeix a sobre.
- Capa 2 — ML clàssic: els algorismes dels mòduls 4 i 5, amb scikit-learn com a estàndard de facto.
- Capa 3 — boosting: biblioteques independents especialitzades en gradient boosting (mòdul 7), que imiten l'API de scikit-learn per integrar-s'hi.
- Capa 4 — deep learning: xarxes neuronals profundes (lliçó 07-04), amb el seu propi motor de còmput (GPU, diferenciació automàtica).
- Capa 5 — dominis: biblioteques per a text i imatge que empaqueten models de deep learning llestos per fer servir.
Per al model de churn de MercaFresh —dades tabulars, desenes de milers de clients— les capes 1 a 3 són suficients. Les capes 4 i 5 entren en joc amb dades no estructurades, com veuràs als projectes de classificació d'imatges (09-02) i anàlisi de sentiments (09-03).
La capa base científica: NumPy, pandas, SciPy i matplotlib
Ja les has fet servir durant tot el curs; aquí només fixem quin paper té cadascuna:
- NumPy: l'array n-dimensional i les operacions vectoritzades. És la lingua franca: quan scikit-learn, XGBoost o Keras reben dades, per sota són arrays de NumPy. La seva velocitat ve del fet que el bucle passa en C, no en Python.
- pandas: el
DataFrame, una taula amb columnes tipades i etiquetades. És l'eina de les fases de neteja i exploració (mòdul 3): carregar CSV, agrupar, unir taules, calcular l'RFM de cada client. - SciPy: estadística i enginyeria sobre NumPy. La vas fer servir al mòdul 2 (distribucions, tests d'hipòtesis amb
scipy.stats) i la reutilitzaràs a la lliçó 08-03 per detectar drift amb el test de Kolmogorov-Smirnov. - matplotlib (i seaborn a sobre): visualització. Histogrames, corbes ROC, matrius de confusió — tots els gràfics del curs surten d'aquí.
Una conseqüència pràctica: quan una biblioteca de capa superior falla amb un error estrany de tipus o dimensions, la causa acostuma a ser en aquesta capa (un DataFrame amb una columna object inesperada, un array amb NaN). Saber baixar a la capa base a depurar és una habilitat, no un fracàs.
ML clàssic: scikit-learn i statsmodels
scikit-learn: una API com a filosofia de disseny
Scikit-learn és la biblioteca que més has fet servir, i val la pena fer explícit per què resulta tan còmoda: tota la biblioteca comparteix tres verbs.
| Verb | Què fa | Qui el té |
|---|---|---|
fit(X, y) |
Aprèn de les dades (paràmetres del model, o estadístiques del preprocessador) | Tots els estimadors |
predict(X) |
Genera prediccions amb el que ha après | Models (classificadors, regressors, clustering) |
transform(X) |
Transforma les dades amb el que ha après a fit |
Preprocessadors (escaladors, codificadors, PCA) |
Aquesta coherència és el que fa possible el Pipeline que vas construir al mòdul 3: com que tot objecte respon als mateixos verbs, es poden encadenar peces intercanviables, i GridSearchCV (07-05) pot optimitzar qualsevol combinació sense codi especial.
# La mateixa estructura serveix per a QUALSEVOL model de scikit-learn:
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
for Model in [LogisticRegression, RandomForestClassifier]:
model = Model() # 1. instanciar amb hiperparametres
model.fit(X_entrenament, y_entrenament) # 2. aprendre
y_pred = model.predict(X_prova) # 3. predirCanviar de regressió logística a Random Forest és canviar una línia. Aquesta uniformitat —que en altres ecosistemes no existeix— és la raó per la qual scikit-learn és el punt de partida recomanat per a gairebé qualsevol problema tabular.
statsmodels: quan importa la inferència, no només la predicció
Scikit-learn respon "què prediu el model?"; statsmodels respon "què diu el model sobre les dades?": p-valors per coeficient, intervals de confiança, tests d'hipòtesis (tot l'aparell del mòdul 2). Si a MercaFresh la pregunta fos "el nombre d'incidències de lliurament té un efecte estadísticament significatiu sobre el churn, controlant per antiguitat?", statsmodels és l'eina adequada; per predir quins clients abandonaran, scikit-learn. Predicció i inferència són objectius diferents i cada biblioteca està optimitzada per al seu.
Boosting: XGBoost, LightGBM i CatBoost
A la lliçó 07-03 vas veure que el gradient boosting domina els problemes tabulars, i vas treballar amb XGBoost i LightGBM. Les tres biblioteques principals implementen la mateixa idea amb èmfasis diferents:
| Biblioteca | Punt fort | Quan triar-la |
|---|---|---|
| XGBoost | La més veterana i documentada; regularització molt completa | Punt de partida segur; abundant material d'ajuda |
| LightGBM | Velocitat i memòria (creixement per fulles, histogram-based) | Datasets grans (centenars de milers de files o més) |
| CatBoost | Maneig natiu de variables categòriques sense codificació prèvia | Moltes categòriques d'alta cardinalitat; menys tuning inicial |
Les tres ofereixen una interfície compatible amb scikit-learn (XGBClassifier, LGBMClassifier, CatBoostClassifier amb fit/predict), així que encaixen al pipeline del churn sense tocar la resta del codi. A la pràctica, amb dades tabulars mitjanes les tres rendeixen de manera semblant ben ajustades; la tria acostuma a decidir-la la velocitat d'entrenament i la comoditat amb les teves dades concretes.
Deep learning: TensorFlow/Keras davant de PyTorch
Per a xarxes profundes (07-04) hi ha dos ecosistemes dominants, i convé una comparació honesta:
| Aspecte | TensorFlow + Keras | PyTorch |
|---|---|---|
| Corba d'aprenentatge | Molt suau amb Keras (API d'alt nivell) | Una mica més de codi, però molt transparent |
| Estil | Declaratiu: descrius la xarxa i Keras la gestiona | Imperatiu: escrius el bucle d'entrenament, és "Python normal" |
| Recerca | Minoritari als papers actuals | Estàndard de facto en recerca |
| Indústria i desplegament | Tooling madur (TF Serving, TFLite per a mòbil) | Dominant i creixent; TorchServe, ONNX |
| Depuració | Més opaca en errors interns | Més fàcil: els errors són errors de Python |
Quin triar? Per aprendre i per a models estàndard, Keras (com vas fer a 07-04) continua sent la via més ràpida de la idea al model entrenat. Si has de llegir i implementar papers recents, o vols control fi de l'entrenament, PyTorch és avui l'opció majoritària. La bona notícia: els conceptes (capes, funcions d'activació, descens de gradient, èpoques) són idèntics; canviar de framework és qüestió de dies, no de mesos. No és una decisió irreversible ni la més important del teu projecte.
NLP i visió per computador: transformers, spaCy i OpenCV
Presentació breu — els faràs servir de debò al mòdul 9:
- Hugging Face
transformers: el punt d'accés a models preentrenats de llenguatge (BERT, i les famílies que vas veure al final de 07-04) i visió. El seu patrópipeline("sentiment-analysis")dona un classificador de sentiments funcional en tres línies; serà central al projecte 09-03. - spaCy: NLP "industrial" clàssic: tokenització, entitats anomenades, lematització. Ràpid i pensat per a producció; ideal per preprocessar text abans de vectoritzar-lo.
- OpenCV: processament d'imatge (llegir, redimensionar, filtrar, detectar contorns). Acostuma a ser la capa de preparació abans d'una CNN; apareixerà al projecte 09-02.
Mereix menció a part l'AutoML (auto-sklearn, FLAML, i serveis al núvol): eines que automatitzen la selecció de model i hiperparàmetres que tu vas fer a mà a 07-05. Útils com a baseline ràpid, però no substitueixen entendre què passa — tot el que automatitzen és exactament el que has après als mòduls 6 i 7.
Taula resum: quina biblioteca per a quina tasca
| Tasca | Primera opció | Alternatives |
|---|---|---|
| Manipulació de dades tabulars | pandas | polars (datasets molt grans) |
| Estadística i tests | SciPy, statsmodels | — |
| Classificació/regressió tabular | scikit-learn | — |
| Màxim rendiment tabular | LightGBM / XGBoost | CatBoost |
| Inferència estadística (p-valors) | statsmodels | — |
| Clustering i reducció de dimensió | scikit-learn | UMAP (biblioteca pròpia) |
| Deep learning genèric | Keras (aprendre) / PyTorch (recerca) | — |
| NLP modern | Hugging Face transformers | spaCy (pipeline clàssic) |
| Visió per computador | PyTorch/Keras + OpenCV | — |
| Visualització | matplotlib + seaborn | plotly (interactiu) |
Criteris per triar una biblioteca
Davant d'una biblioteca nova i brillant, aplica tres filtres abans d'adoptar-la:
- Maduresa i manteniment: té anys de versions estables, documentació acurada, i commits recents? Una biblioteca abandonada és deute tècnic: quedarà lligada a versions velles de NumPy o Python.
- Comunitat: hi ha respostes a Stack Overflow, issues atesos, tutorials de tercers? Quan alguna cosa falli a les onze de la nit, la comunitat és el teu suport tècnic.
- Necessitat real: resol un problema que les teves eines actuals no resolen, o només és novetat? Per al churn de MercaFresh, canviar scikit-learn + LightGBM pel framework de moda no milloraria res i afegiria risc. L'eina avorrida i provada acostuma a ser la decisió professional correcta.
Un corol·lari important per a la propera lliçó: cada biblioteca que afegeixes és una dependència que hauràs d'instal·lar, versionar i mantenir en producció. La factura d'una dependència no es paga en instal·lar-la, sinó en desplegar-la i mantenir-la durant anys.
Gestió d'entorns: la base de la reproduïbilitat
Aquí passem de les biblioteques a com gestionar-les, i és la part més important de la lliçó de cara al desplegament. El problema: entrenes el model amb scikit-learn 1.5 al teu portàtil; el servidor té la 1.2; el model es carrega malament o es comporta diferent. Aquesta mena de fallada silenciosa és una de les causes més comunes d'errors en producció.
La solució té dues peces:
1. Entorns virtuals aïllats — cada projecte amb les seves pròpies versions, sense contaminar el Python del sistema ni altres projectes:
# Amb venv (inclos a Python):
python -m venv .venv # crea l'entorn a la carpeta .venv
source .venv/bin/activate # l'activa (a Windows: .venv\Scripts\activate)
pip install scikit-learn lightgbm # nomes dins de l'entorn
# Amb conda (alternativa; gestiona tambe la versio de Python):
conda create -n mercafresh python=3.12
conda activate mercafresh2. Versions fixades per escrit — un requirements.txt que declara exactament què necessita el projecte:
# requirements.txt del projecte 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.txtaboca les versions exactes de l'entorn actual.pip install -r requirements.txtreconstrueix el mateix entorn en una altra màquina.- El
==(fixar la versió exacta, pinning) és deliberat: en producció no vols que unpip installde demà porti una versió diferent de la d'avui. La reproduïbilitat val més que anar a l'última.
Aquest fitxer és un contracte: "el model es va entrenar amb exactament això". A la propera lliçó el farem servir dues vegades: per carregar el model serialitzat amb les mateixes versions amb què es va desar, i com a peça central del Dockerfile.
Errors Comuns i Consells
- Col·leccionar frameworks en lloc de dominar-ne un. Saltar de biblioteca en biblioteca produeix coneixement superficial. Domina scikit-learn a fons: els seus conceptes (pipeline, CV, mètriques) es transfereixen a tota la resta.
- Triar deep learning per a dades tabulars per defecte. Per a problemes com el churn, el boosting sobre arbres acostuma a igualar o superar les xarxes amb molt menys cost (ho vas veure al mòdul 7). Tria la capa del diagrama que el problema demana, no la més alta.
- Treballar sense entorn virtual. Instal·lar-ho tot al Python del sistema acaba en conflictes de versions entre projectes. Un entorn per projecte, sempre, des del primer dia.
requirements.txtsense versions (scikit-learna seques). Funciona avui i falla d'aquí a sis mesos, quan una versió nova canviï un comportament. Fixa versions exactes per a tot allò que toqui el model.- Confondre statsmodels i scikit-learn. Si necessites p-valors i intervals de confiança, scikit-learn no te'ls donarà (no és el seu objectiu); si necessites pipelines i predicció a escala, statsmodels no és el camí. Són complementaris.
- Consell: abans d'adoptar una dependència nova, mira el seu repositori: data de l'últim commit, nombre d'issues oberts sense resposta, i si té versions estables numerades. Cinc minuts que estalvien mesos.
Exercicis
Exercici 1. Classifica en la seva capa de l'ecosistema cada eina que necessitaria MercaFresh per a aquests tres encàrrecs, i anomena la biblioteca concreta que faries servir: (a) predir el churn amb dades tabulars d'RFM; (b) classificar automàticament les fotos que els clients pugen a les reclamacions ("producte danyat" / "producte correcte"); (c) determinar si l'efecte del retard mitjà de lliurament sobre el churn és estadísticament significatiu.
Exercici 2. Un company proposa reescriure el model de churn (actualment scikit-learn + LightGBM) amb un framework de deep learning aparegut fa vuit mesos, "perquè és el futur". Escriu una avaluació en tres punts fent servir els criteris de tria d'aquesta lliçó, i una recomanació final.
Exercici 3. A la teva màquina, crea un entorn virtual nou, instal·la scikit-learn i joblib, i genera el seu requirements.txt amb versions fixades. Després, escriu les ordres que executaria un company per reproduir el teu entorn a partir d'aquest fitxer.
Solucions
Solució 1.
(a) Capes 1–3: pandas per a les dades, scikit-learn per al pipeline i LightGBM (o XGBoost) com a model. No cal pujar més: és un problema tabular clàssic.
(b) Capes 1, 4 i 5: OpenCV per llegir i preparar les imatges, i una CNN amb Keras o PyTorch — o millor, un model preentrenat de visió via Hugging Face, ajustat a les dues classes. (Es desenvolupa al projecte 09-02.)
(c) Capa 2, statsmodels: la pregunta és d'inferència (significativitat d'un coeficient controlant per altres variables), no de predicció. Un p-valor i el seu interval de confiança responen; predict no.
Solució 2. (1) Maduresa: vuit mesos de vida implica API inestable, bugs per descobrir i risc d'abandonament; el model de churn ha de viure anys en producció. (2) Comunitat: escassa per definició — sense respostes acumulades ni tutorials, cada problema es resol en solitari. (3) Necessitat real: cap — el problema és tabular, i al mòdul 7 vam comprovar que el boosting és l'eina adequada; no hi ha cap mancança que el framework nou cobreixi. Recomanació: mantenir scikit-learn + LightGBM; si de cas, provar el framework nou en un experiment aïllat sense ruta a producció, i reavaluar-lo quan maduri.
Solució 3.
# Crear i reproduir un entorn
python -m venv .venv
source .venv/bin/activate
pip install scikit-learn joblib
pip freeze > requirements.txt # fixa les versions exactes de l'entorn
# El company, a la seva maquina:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt # reprodueix exactament les mateixes versionsEl punt clau és que pip freeze escriu ==versió per a cada paquet (incloses les dependències transitives, com NumPy), de manera que la reconstrucció és exacta i no "l'última versió disponible aquell dia".
Conclusió
Ja tens el mapa: una base científica comuna (NumPy, pandas, SciPy, matplotlib), scikit-learn com a columna vertebral del ML clàssic amb la seva API fit/predict/transform, statsmodels per a inferència, el trio de boosting per esprémer les dades tabulars, dos grans ecosistemes de deep learning entre els quals triar sense dramatisme, i les biblioteques de domini que esperen al mòdul 9. I una regla transversal: cada dependència es declara, es fixa i s'aïlla al seu entorn, perquè la reproduïbilitat no és una virtut acadèmica sinó un requisit de desplegament. Amb l'entorn del model de churn de MercaFresh congelat en un requirements.txt, estem a punt per a la pregunta central del mòdul: com treure aquest model del notebook i posar-lo a respondre peticions reals. Això és la propera lliçó: serialització, APIs, contenidors — implementació de models en producció.
Curs de Machine Learning
Mòdul 1: Introducció al Machine Learning
- Què és el Machine Learning?
- Història i evolució del Machine Learning
- Tipus de Machine Learning
- Aplicacions del Machine Learning
- El flux de treball d'un projecte de Machine Learning
Mòdul 2: Fonaments d'Estadística i Probabilitat
- Conceptes bàsics d'estadística
- Distribucions de probabilitat
- Correlació i covariància
- Inferència estadística
- Teorema de Bayes
Mòdul 3: Preprocessament de Dades
- Neteja de dades
- Gestió de dades mancants
- Transformació de dades
- Codificació de variables categòriques
- Normalització i estandardització
- Enginyeria de característiques
Mòdul 4: Algorismes de Machine Learning Supervisat
- Regressió lineal
- Regressió logística
- Arbres de decisió
- Màquines de suport vectorial (SVM)
- K veïns més propers (K-NN)
- Naive Bayes
- Xarxes neuronals
Mòdul 5: Algorismes de Machine Learning No Supervisat
- Clustering: K-means
- Clustering jeràrquic
- Anàlisi de components principals (PCA)
- Anàlisi d'agrupament DBSCAN
- Visualització de dades amb t-SNE i UMAP
Mòdul 6: Avaluació i Validació de Models
- Divisió de dades: entrenament, validació i prova
- Mètriques d'avaluació
- Validació creuada
- Corba ROC i AUC
- Overfitting i underfitting
Mòdul 7: Tècniques Avançades i Optimització
- Regularització: Ridge, Lasso i Elastic Net
- Ensemble Learning
- Gradient Boosting
- Xarxes neuronals profundes (Deep Learning)
- Optimització d'hiperparàmetres
Mòdul 8: Implementació i Desplegament de Models
- Frameworks i biblioteques populars
- Implementació de models en producció
- Manteniment i monitoratge de models
- Consideracions ètiques i de privadesa
Mòdul 9: Projectes Pràctics
- Projecte 1: Predicció de preus d'habitatges
- Projecte 2: Classificació d'imatges
- Projecte 3: Anàlisi de sentiments a les xarxes socials
- Projecte 4: Detecció de fraus
- Projecte 5: Segmentació de clients
