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

  1. L'ecosistema Python de ML, per capes
  2. La capa base científica: NumPy, pandas, SciPy i matplotlib
  3. ML clàssic: scikit-learn i statsmodels
  4. Boosting: XGBoost, LightGBM i CatBoost
  5. Deep learning: TensorFlow/Keras davant de PyTorch
  6. NLP i visió per computador: transformers, spaCy i OpenCV
  7. Taula resum: quina biblioteca per a quina tasca
  8. Criteris per triar una biblioteca
  9. 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. predir

Canviar 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:

  1. 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.
  2. 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.
  3. 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 mercafresh

2. 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.2
  • pip freeze > requirements.txt aboca les versions exactes de l'entorn actual.
  • pip install -r requirements.txt reconstrueix el mateix entorn en una altra màquina.
  • El == (fixar la versió exacta, pinning) és deliberat: en producció no vols que un pip install de 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.txt sense versions (scikit-learn a 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 versions

El 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

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algorismes de Machine Learning Supervisat

Mòdul 5: Algorismes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2026. Tots els drets reservats