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

  1. Per què el mapa de PCA de vegades no separa
  2. t-SNE: preservar veïnatges locals
  3. El paràmetre perplexity i el que t-SNE no preserva
  4. UMAP: més ràpid i amb millor estructura global
  5. Els clients MercaFresh amb t-SNE i UMAP
  6. Regles d'interpretació prudent
  7. Taula comparativa: PCA vs. t-SNE vs. UMAP
  8. 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:

  1. 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".
  2. Al pla 2D, col·loca els punts inicialment a l'atzar i defineix les mateixes probabilitats de veïnatge sobre les seves posicions.
  3. 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

  • perplexity controla 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_state per 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 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? No
Ú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) : 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

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