A 05-03 vam projectar els clients de MercaFresh sobre el pla PC1-PC2 i vam obtenir un mapa útil però imperfecte: només el 73% de la variància cabia al dibuix, i dos segments podien solapar-se sobre el paper estant separats en la realitat. La causa és de fàbrica: PCA només sap girar, i hi ha estructures que cap rotació no desplega. Aquesta lliçó tanca el mòdul amb les dues tècniques modernes de visualització no lineal — t-SNE i UMAP — que produeixen mapes 2D on els grups se separen d'una manera sovint espectacular. N'aprendràs la intuïció sense matemàtica pesada, els paràmetres clau (perplexity, n_neighbors, min_dist), com aplicar-les als clients de MercaFresh acolorits pels seus segments de 05-01 i — tan important com tot l'anterior — les regles de prudència per no llegir en aquests mapes coses que no diuen.
Contingut
- Per què el mapa de PCA de vegades no separa
- t-SNE: preservar veïnatges locals
- El paràmetre perplexity i el que t-SNE no preserva
- UMAP: més ràpid i amb millor estructura global
- Els clients MercaFresh amb t-SNE i UMAP
- Regles d'interpretació prudent
- Taula comparativa: PCA vs. t-SNE vs. UMAP
- Tancament del mòdul: el mapa del no supervisat
Per què el mapa de PCA de vegades no separa
PCA tria el pla de projecció que conserva la màxima variància global — però conservar variància no és el mateix que conservar grups:
- Si dos segments es distingeixen en una direcció de poca variància, PCA la descartarà i al mapa apareixeran barrejats.
- Si l'estructura és corba (imagina els clients distribuïts sobre una superfície enrotllada, o les mitges llunes de 05-04), la projecció lineal l'aixafa: punts llunyans al llarg de la corba cauen l'un damunt de l'altre.
- I amb moltes dimensions, un pla és poc espai: PCA reparteix el seu pressupost entre totes les direccions grans, no entre les que separen grups.
La idea que canvia el joc: per visualitzar no necessitem conservar distàncies ni variàncies globals — necessitem que els punts que eren veïns a l'espai original continuïn sent veïns sobre el paper. Renunciar a la fidelitat global a canvi de fidelitat local és el tracte que fan t-SNE i UMAP. Són tècniques de visualització, no de compressió general: produeixen mapes per a ulls humans, no features per a models (hi tornarem).
t-SNE: preservar veïnatges locals
t-SNE (t-distributed Stochastic Neighbor Embedding) opera en tres passos conceptuals:
- A l'espai original, calcula per a cada punt quins altres punts són els seus veïns propers, convertint distàncies en probabilitats de veïnatge: els molt pròxims tenen probabilitat alta de "triar-se" com a veïns; els llunyans, pràcticament nul·la. Nota el que això implica: entre punts llunyans t-SNE ni distingeix — 20 o 200 unitats de distància són totes dues "probabilitat ~0".
- Al pla 2D, col·loca els punts inicialment a l'atzar i defineix les mateixes probabilitats de veïnatge sobre les seves posicions.
- Mou els punts del pla iterativament (descens de gradient, el vell conegut de 04-01) fins que els veïnatges del pla s'assemblin al màxim possible als de l'espai original: atreu els que haurien de ser veïns i separa els que no.
El resultat: cada grupet de veïns de l'espai original apareix com un illot compacte al mapa. D'aquí ve la fama de t-SNE: clústers que a PCA es veien borrosos apareixen com illes nítidament separades.
El paràmetre perplexity i el que t-SNE no preserva
perplexitycontrola la mida efectiva del veïnatge que cada punt considera — intuïtivament, "a quants veïns paro atenció". Valors típics: 5-50 (per defecte 30). Perplexity baixa → atenció molt local: els clústers es fragmenten en molles. Alta → veïnatges amplis: estructures més globals, però els grups petits poden difuminar-se. Ha de ser menor que el nombre de punts, i convé provar 2-3 valors: si l'estructura sobreviu a diversos, és real.- És estocàstic: la inicialització aleatòria i el gradient fan que dues execucions donin mapes diferents (girats, reflectits o amb illes recol·locades). Fixa
random_stateper a la reproduïbilitat. - És lent: la seva versió exacta és $O(n^2)$; l'aproximació de Barnes-Hut el baixa a $O(n \log n)$, però amb centenars de milers de punts encara costa minuts o hores.
I el més crucial — el preu del tracte local:
t-SNE no preserva les distàncies ni l'estructura global. Que dues illes quedin lluny al mapa no significa que aquests grups siguin molt diferents; que una illa sigui gran no significa que aquest clúster sigui dispers. t-SNE reparteix l'espai del paper perquè tot es vegi, expandint zones denses i comprimint-ne de buides.
Això no és un defecte menor: és la propietat que defineix quines preguntes pot respondre el mapa (hi ha grups? quins són veïns de quins?) i quines no (com de lluny estan? quin és més compacte?).
UMAP: més ràpid i amb millor estructura global
UMAP (Uniform Manifold Approximation and Projection) arriba el 2018 amb la mateixa filosofia — preservar veïnatges locals — i una construcció diferent: primer teixeix un graf de veïns sobre les dades (cada punt connectat als seus n_neighbors més propers, la maquinària de 04-05 una altra vegada) i després busca la disposició 2D que millor conserva aquest graf. A la pràctica aporta tres avantatges:
- Velocitat: típicament 10-100 vegades més ràpid que t-SNE; escala a milions de punts.
- Millor estructura global: sense ser-hi fidel del tot, les posicions relatives entre clústers solen ser més significatives que a t-SNE (els grups semblants tendeixen a quedar a prop).
- Pot transformar punts nous: té
transform()per projectar dades no vistes sobre un mapa ja ajustat, cosa que el t-SNE de scikit-learn no ofereix.
Els seus dos comandaments principals:
| Paràmetre | Controla | Valor baix | Valor alt |
|---|---|---|---|
n_neighbors (defecte 15) |
Mida del veïnatge del graf | Focus molt local: molts illots fins | Visió més global: menys grups, més connectats |
min_dist (defecte 0,1) |
Distància mínima entre punts al mapa | Illes denses i atapeïdes (bo per veure clústers) | Punts més repartits (bo per veure topologia) |
n_neighbors és el cosí de perplexity; min_dist és purament estètic, no canvia què és veí de què.
Detall pràctic: UMAP no ve amb scikit-learn; és el paquet a part umap-learn (pip install umap-learn), que s'importa com a umap i segueix l'API fit_transform habitual.
Els clients MercaFresh amb t-SNE i UMAP
Dibuixem el mapa definitiu del mòdul: els clients amb les seves 7 features (matriu X_esc de 05-03, escalada — regla de sempre), acolorits pels segments que K-means va descobrir a 05-01.
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
import umap # pip install umap-learn
# t-SNE (scikit-learn)
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X_esc) # nomes fit_transform: no hi ha transform()
# UMAP (paquet umap-learn)
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
X_umap = reducer.fit_transform(X_esc)
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
for ax, X_2d, titol in [(axes[0], X_tsne, "t-SNE (perplexity=30)"),
(axes[1], X_umap, "UMAP (n_neighbors=15)")]:
sc = ax.scatter(X_2d[:, 0], X_2d[:, 1], c=rfm["segment"],
cmap="tab10", s=12)
ax.set_title(titol)
ax.set_xticks([]); ax.set_yticks([]) # els eixos NO tenen unitats interpretables
fig.colorbar(sc, label="segment K-means (05-01)")
plt.show()Punts del codi que mereixen comentari:
- Els colors venen de
rfm["segment"]: estem superposant el resultat d'un algorisme (K-means) sobre el mapa d'un altre (t-SNE/UMAP). Si cada illa del mapa surt d'un color gairebé pur, dos mètodes independents coincideixen — la mateixa validació creuada de mètodes que vam fer amb el jeràrquic a 05-02, ara visual. - Traiem les marques dels eixos a propòsit: a t-SNE/UMAP les coordenades no signifiquen res (no són "recència" ni "PC1"; són posicions optimitzades per a la llegibilitat).
- Resultat típic a MercaFresh: els quatre segments formen illes més nítides que al PCA de 05-03; els ~70 clients fronterers de la taula de contingència de 05-02 apareixen com a punts de color "equivocat" a les vores de les illes — una altra manera de veure que són casos límit.
Regles d'interpretació prudent
Els mapes de t-SNE/UMAP són tan vistosos que conviden a sobreinterpretar-los. Regles de prudència, totes conseqüència de "local sí, global no":
- Les distàncies entre illes no són proporcionals a res. Dos clústers enganxats no són necessàriament similars; dos d'allunyats no són necessàriament oposats. (UMAP és una mica més fiable aquí, però només una mica.)
- Les mides i densitats de les illes enganyen. t-SNE expandeix els grups densos i encongeix els dispersos perquè tot es vegi: una illa gran no és un segment heterogeni.
- Poden aparèixer clústers on no n'hi ha. Amb perplexity/n_neighbors baixos, t-SNE fragmenta fins i tot el soroll uniforme en aparents grupets. Verifica que l'estructura sobreviu a diversos valors del paràmetre abans de creure-te-la — i contrasta-la amb un mètode de clustering, no només amb l'ull.
- No usis les coordenades com a features d'un model. No són features: no tenen significat, canvien amb la llavor i (a t-SNE) ni tan sols les pots calcular per a una dada nova. Per comprimir de cara a un model, l'eina és PCA (05-03) sobre criteris de variància; t-SNE/UMAP són per comunicar i explorar.
- Executa dues vegades abans de presentar. Si una conclusió depèn d'un detall que canvia amb la llavor, no era cap conclusió.
Taula comparativa: PCA vs. t-SNE vs. UMAP
| Criteri | PCA (05-03) | t-SNE | UMAP |
|---|---|---|---|
| Tipus | Lineal (rotació) | No lineal | No lineal |
| Preserva | Variància global; distàncies grans aproximades | Veïnatges locals | Veïnatges locals + una mica d'estructura global |
| Determinista | Sí | No (llavor) | No (llavor) |
| Velocitat | Molt ràpid | Lent ($O(n\log n)$ amb Barnes-Hut) | Ràpid; escala a milions |
| Eixos interpretables | Sí (loadings) | No | No |
transform() per a dades noves? |
Sí | No | Sí |
| Ús legítim | Compressió + visualització + features per a models | Només visualització | Visualització (i exploració) |
| Paràmetre clau | n_components | perplexity | n_neighbors, min_dist |
| Disponibilitat | scikit-learn | scikit-learn (TSNE) |
Paquet umap-learn |
Flux de treball recomanat i molt comú: PCA primer, t-SNE/UMAP després — reduir p. ex. de 100 dimensions a 20 amb PCA (treu soroll i accelera) i aplicar t-SNE/UMAP sobre aquestes 20 per al mapa final.
Tancament del mòdul: el mapa del no supervisat
Recapitulem el mòdul 5, perquè forma un tot:
- K-means (05-01): la segmentació com a problema sense etiquetes; centroides, colze, silhouette; els quatre segments de MercaFresh amb perfil de negoci.
- Jeràrquic (05-02): l'estructura a totes les escales en un dendrograma; mesures d'enllaç; la coincidència amb K-means com a validació.
- PCA (05-03): la maledicció de la dimensionalitat i el seu antídot lineal; variància explicada, loadings, el primer mapa 2D.
- DBSCAN (05-04): clústers per densitat, de qualsevol forma, amb soroll natiu; les comandes anòmales de MercaFresh.
- t-SNE i UMAP (05-05): els mapes no lineals que comuniquen l'estructura — amb manual de prudència.
El fil comú: sense cap columna y, els algorismes han extret estructura — segments accionables, jerarquies, eixos de significat, anomalies — només de la geometria de les dades. Tot això convergeix en el projecte 09-05, on la segmentació de MercaFresh es farà de cap a cap.
Errors Comuns i Consells
- Usar t-SNE/UMAP sense escalar. Són mètodes de veïnatges, i els veïnatges són distàncies: sense
StandardScaler, el mapa retrata la feature de major magnitud. La regla ha aplicat a tot el mòdul i aquí no hi ha excepció. - Presentar un mapa d'una sola execució amb un sol paràmetre. L'estructura creïble és la que sobreviu a 2-3 perplexities/n_neighbors i a 2 llavors. Un mapa únic és una anècdota.
- Mesurar distàncies sobre el mapa ("el segment VIP està el doble de lluny dels adormits que dels habituals"). Les coordenades no són mètriques; aquesta frase no significa res a t-SNE.
- Usar l'embedding com a entrada d'un clustering o classificador per "millorar resultats". És circular i fràgil: el mapa exagera separacions i depèn de la llavor. Clustering sobre features reals (o PCs); mapa només per mirar.
- Consell: acoloreix el mapa amb variables de negoci a més dels clústers (
c=rfm["despesa_mitjana_comanda"]): si el gradient de color s'organitza espacialment, el mapa t'està explicant quina variable estructura cada zona — una anàlisi exploratòria potentíssima amb una línia de codi.
Exercicis
Exercici 1. Sense codi: per a cada afirmació, digues si un mapa t-SNE li dona suport, i per què. (a) "Hi ha uns 4 grups de clients clarament diferents". (b) "El segment adormit és el més heterogeni, perquè la seva illa és la més gran". (c) "VIP i habituals són els segments més semblants, perquè les seves illes estan enganxades". (d) "Aquests 12 clients de l'illa VIP apareixen acolorits com a habituals: són casos frontera que convé revisar".
Exercici 2. Genera un dataset amb 4 blobs en 10 dimensions (make_blobs(n_samples=600, centers=4, n_features=10, cluster_std=3.0, random_state=1)), escala'l, i compara'l en tres mapes: PCA(2), t-SNE (perplexity 30) i UMAP (si el tens instal·lat; si no, compara els dos primers). Acoloreix amb les etiquetes reals que retorna make_blobs. Quin separa millor? Per què PCA hi pateix?
Exercici 3. Amb el dataset de l'exercici 2, executa t-SNE amb perplexity 2, 30 i 100 (mateixa llavor) i dibuixa els tres mapes. Descriu com canvia l'estructura aparent i extreu-ne la regla pràctica.
Solucions
Exercici 1
(a) Sí: comptar grups i veure quins punts comparteixen illa és exactament el que t-SNE preserva (veïnatges locals). Amb la cautela de confirmar que les 4 illes sobreviuen a altres perplexities. (b) No: t-SNE distorsiona mides i densitats per disseny; per mesurar heterogeneïtat, usa estadístics reals del clúster (desviacions, 02-01) a l'espai original. (c) No: les distàncies entre illes no són proporcionals a la similitud entre grups; verifica-ho amb distàncies entre centroides a l'espai escalat. (d) Sí, com a hipòtesi: la barreja local de colors reflecteix veïnatge real entre aquests punts i els VIP; encaixa amb els silhouettes baixos i els desacords K-means/jeràrquic. "Revisar" és la paraula correcta: el mapa genera la sospita, la confirmació arriba amb les dades originals.
Exercici 2
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
X, y = make_blobs(n_samples=600, centers=4, n_features=10,
cluster_std=3.0, random_state=1)
X_esc = StandardScaler().fit_transform(X)
mapes = {"PCA": PCA(n_components=2).fit_transform(X_esc),
"t-SNE": TSNE(perplexity=30, random_state=0).fit_transform(X_esc)}
fig, axes = plt.subplots(1, len(mapes), figsize=(11, 4))
for ax, (nom, X2) in zip(axes, mapes.items()):
ax.scatter(X2[:, 0], X2[:, 1], c=y, cmap="tab10", s=10)
ax.set_title(nom)
plt.show()Resultat esperat: a PCA els 4 colors es veuen però amb solapaments — el pla PC1-PC2 captura només una part de la variància i amb cluster_std=3.0 els blobs es freguen en la projecció; la separació real viu repartida en les 10 dimensions. t-SNE (i UMAP, amb un dibuix encara més net i en una fracció del temps) mostra 4 illes netes, perquè no projecta: recol·loca els punts preservant qui és veí de qui. És el cas de llibre de "PCA a 2D no separa encara que els grups existeixin".
Exercici 3
Amb perplexity 2, el mapa es fragmenta en desenes de molles: cada punt atén només 2-3 veïns i fins i tot l'interior d'un blob sembla diversos grups — estructura espúria. Amb 30, apareixen les 4 illes correctes. Amb 100, les illes continuen visibles però més difuses i pròximes, perquè cada punt atén veïnatges que ja desborden el seu propi blob. Regla pràctica: perplexity petita inventa clústers, gran els difumina; prova diversos valors i queda't amb l'estructura que persisteix en un rang — aquesta és la real.
Conclusió
Has completat el joc de mapes del no supervisat: t-SNE recol·loca els punts per preservar veïnatges locals al preu de distorsionar distàncies, mides i estructura global; UMAP fa el mateix més ràpid, amb millor geometria de conjunt i capacitat de projectar dades noves; i tots dos exigeixen la prudència que has après — paràmetres contrastats, llavors repetides, res de mesurar sobre el mapa ni de reciclar coordenades com a features. Amb la taula PCA/t-SNE/UMAP saps triar eina segons l'objectiu: comprimir, explorar o comunicar.
I amb això es tanca el mòdul 5: MercaFresh ja té segments de clients amb nom i perfil, una jerarquia que els valida, eixos que els expliquen, un vigilant de comandes anòmales i mapes per explicar-ho tot — extret íntegrament de dades sense ni una sola etiqueta. Però queda un deute pendent amb el mòdul 4: allà vam entrenar set models supervisats i els vam puntuar alegrement amb score() sobre unes dades apartades, sense preguntar-nos si aquella xifra era de fiar, què amagava el percentatge d'encerts quan les classes estan desequilibrades, o quant canviaria amb una altra partició de les dades. Respondre amb rigor la pregunta "és bo de debò el meu model?" és tota una disciplina — divisió de dades, mètriques, validació creuada, corbes ROC, overfitting — i és exactament el mòdul 6.
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
