Divisió, barreja i augmentació de conjunts de dades
Dividir les dades per reduir el biaix
Al llarg d'aquest bloc s'ha treballat el valor d'identificar, avaluar i mitigar el biaix. Reduir el biaix del dataset és un dels objectius principals de la preparació de dades: amb dades equilibrades, el model es pot centrar en els patrons rellevants del conjunt de dades en lloc del soroll inherent que hi pugui haver.
Una estratègia habitual per aconseguir un dataset equilibrat i fiable és dividir les dades en subconjunts diferenciats per a entrenament, prova i validació. Aquesta pàgina cobreix el valor i els conceptes bàsics de les tècniques de divisió de dades, juntament amb dues tècniques addicionals de preparació final: la barreja (shuffling) i l'augmentació (augmentation) de dades.
Entrenament, prova, validació: un enfocament tripartit
El procés de preparació de dades sol implicar dividir el dataset en tres subconjunts principals:
Dataset d'entrenament (training)
- És la pedra angular del desenvolupament del model.
- Permet que el model aprengui els patrons i les relacions subjacents a les dades.
- Comprèn la majoria del dataset, proporcionant prou exemples perquè el model en pugui extreure coneixement.
Dataset de prova (testing)
- Avalua el rendiment del model sobre dades que no ha vist mai, per valorar la seva capacitat de generalització.
- Proporciona un conjunt d'exemples amb els quals el model no s'ha trobat durant l'entrenament.
- Permet obtenir informació valuosa sobre la capacitat del model de fer prediccions sobre dades noves i desconegudes.
Dataset de validació (validation)
- Permet ajustar els paràmetres del model sense introduir el biaix que suposaria fer servir el propi conjunt de prova per a aquest ajust.
- Permet fer ajustos iteratius a la configuració del model fins a aconseguir el rendiment òptim.
Per què calen tres conjunts i no només dos
Si s'ajusten els paràmetres del model mirant repetidament el rendiment sobre el conjunt de prova, el conjunt de prova deixa de ser realment "no vist": el model (o, més exactament, qui ajusta el model) acaba "memoritzant" indirectament les seves característiques. El conjunt de validació serveix exactament per evitar aquest problema: és l'espai on es prova i s'erra durant l'ajust, mentre el conjunt de prova es reserva intacte per a l'avaluació final.
Una proporció habitual (no l'única vàlida) és 80% entrenament / 10% validació / 10% prova, encara que la proporció òptima depèn de la mida total del dataset: amb datasets molt grans, fins i tot un 2-5% per a validació i prova ja proporciona prou exemples.
Tècniques de divisió de dades
Existeixen diverses tècniques de divisió de dades, i la pràctica es complica encara més durant la fase d'entrenament del model dins el cicle de vida del Machine Learning. En aquest bloc es tracten dos enfocaments habituals: el hold-out simple i la validació creuada.
Tècnica 1 — Hold-out simple
Aquesta tècnica divideix el dataset aleatòriament en dos subconjunts: un per a l'entrenament i un per a la prova. Normalment, la majoria de les dades s'assignen al conjunt d'entrenament, mentre que una porció més petita es reserva per a la prova.
from sklearn.model_selection import train_test_split
import pandas as pd
df = pd.read_csv("sol_licituds_prestec.csv")
X = df.drop(columns=["resultat"])
y = df["resultat"]
# Hold-out simple: 80% entrenament, 20% prova
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42,
stratify=y, # manté la proporció de classes igual als dos subconjunts
)
print(f"Entrenament: {len(X_train)} files | Prova: {len(X_test)} files")
Avantatges:
- Implementació senzilla i directa.
- Proporciona una estimació ràpida del rendiment del model.
Limitacions:
- L'estimació del rendiment pot tenir variància, ja que depèn dels exemples concrets que han acabat al conjunt de prova.
- No és adequada per a datasets petits, on pot provocar sobreajust (overfitting) o infraajust (underfitting).
El paràmetre stratify
Quan el dataset té desequilibri de classes (vegeu Desequilibri de classes), és important fer servir stratify=y perquè la proporció de cada classe es mantingui igual al conjunt d'entrenament i al de prova. Sense estratificació, una divisió aleatòria podria deixar, per pur atzar, gairebé tots els exemples d'una classe minoritària en un sol dels dos subconjunts.
Tècnica 2 — Validació creuada (Cross-validation)
Aquesta tècnica divideix el dataset aleatòriament en múltiples subconjunts o folds. La validació creuada proporciona una avaluació més completa del rendiment del model en comparació amb el hold-out simple.
Avantatges:
- Aprofita tot el dataset tant per a l'entrenament com per a la prova, maximitzant l'ús de les dades.
- Redueix la variància de l'estimació del rendiment, ja que es calcula com la mitjana dels resultats de diverses iteracions.
Limitacions:
- És computacionalment més costosa, especialment amb datasets grans (cal entrenar el model k vegades en lloc d'una).
- Pot ser sensible al desequilibri de classes si no s'estratifica correctament.
Validació creuada k-fold
Una tècnica habitual de validació creuada és la validació creuada k-fold (sovint els dos termes es fan servir com a sinònims). Cada fold (k) s'utilitza tant per a entrenament com per a prova, i les iteracions cobreixen totes les combinacions possibles.
En aquest mètode, les dades disponibles es divideixen en k subconjunts de mida igual. El model s'entrena i s'avalua k vegades. Cada divisió, o fold, serveix una vegada com a conjunt de prova, mentre que els k-1 folds restants s'usen per a l'entrenament.
Exemple: un dataset d'entrenament es pot dividir en cinc subconjunts diferents (k=5). Els primers quatre subconjunts s'usen com a dades d'entrenament, i després es calculen les mètriques sobre l'últim tros de prova. Aquest enfocament s'aplica de manera rotatòria a les quatre combinacions restants, per a un total de cinc vegades, o cinc folds. D'aquesta manera, totes les dades d'entrenament s'utilitzen, i el model acaba sent provat sobre cinc subconjunts de prova diferents, arribant a avaluar-se sobre tots els punts de dades.
flowchart TD
subgraph Iteracio1["Iteració 1"]
A1["Fold 1"]:::test
A2["Fold 2"]:::train
A3["Fold 3"]:::train
A4["Fold 4"]:::train
A5["Fold 5"]:::train
end
subgraph Iteracio2["Iteració 2"]
B1["Fold 1"]:::train
B2["Fold 2"]:::test
B3["Fold 3"]:::train
B4["Fold 4"]:::train
B5["Fold 5"]:::train
end
classDef test fill:#f97316,color:#fff
classDef train fill:#2563eb,color:#fff
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.ensemble import RandomForestClassifier
X = df.drop(columns=["resultat"]).select_dtypes(include="number")
y = df["resultat"]
model = RandomForestClassifier(random_state=42)
# Validació creuada estratificada amb k=5
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
puntuacions = cross_val_score(model, X, y, cv=skf, scoring="f1_macro")
print(f"F1 per fold: {puntuacions.round(3)}")
print(f"F1 mitjà: {puntuacions.mean():.3f} (± {puntuacions.std():.3f})")
StratifiedKFold vs KFold
StratifiedKFold garanteix que cada fold conservi aproximadament la mateixa proporció de classes que el dataset complet —la mateixa lògica que stratify a train_test_split—, mentre que KFold simplement divideix les dades en blocs sense tenir en compte la distribució de classes. Amb dades desequilibrades, StratifiedKFold és gairebé sempre la millor opció.
Barreja del dataset (Shuffling)
La barreja de dades (data shuffling) consisteix a reordenar aleatòriament els punts de dades d'un dataset abans d'utilitzar-los per entrenar un model. Barrejar les dades ajuda a garantir que els exemples d'entrenament es presenten al model en un ordre aleatori, en lloc d'una seqüència fixa.
Exemple: imagina un dataset d'imatges de gossos i gats, on totes les imatges de gossos apareixen primer, seguides de totes les imatges de gats. Si el model aprèn a classificar la primera meitat dels exemples com a gossos i la segona meitat com a gats, és possible que no generalitzi bé en situacions on les imatges de gossos i gats estiguin barrejades. En barrejar el dataset, el model es veu obligat a aprendre característiques i patrons més robustos, capaços de generalitzar a diferents distribucions de dades.
Beneficis de la barreja de dades
La barreja del dataset té un paper crucial a l'hora de mitigar els biaixos que puguin sorgir de l'estructura inherent de les dades. En introduir aleatorietat mitjançant la barreja, el model s'exposa a una gamma més diversa d'exemples durant l'entrenament.
Tècniques de barreja de dades
Permutació aleatòria (Random permutation): la tècnica més senzilla; consisteix a barrejar el dataset intercanviant aleatòriament la posició dels punts de dades.
Barreja per èpoques (Epoch-based shuffling): divideix el dataset en èpoques (passades completes pel dataset) i barreja els punts de dades entre cada època, de manera que el model no veu mai exactament el mateix ordre dos cops.
Barreja per mini-lots (Mini-batch shuffling): barreja els punts de dades dins de cada mini-lot (mini-batch) abans de presentar el lot al model —habitual en l'entrenament de xarxes neuronals amb descens del gradient per mini-lots.
Aleatorització
Quan les dades es barregen aleatòriament, l'exposició del model a exemples diferents varia, cosa que evita que memoritzi l'ordre de les mostres. En lloc d'això, el model se centra a aprendre els patrons significatius inherents a les dades. Aquesta aleatorietat ajuda a trencar dependències o correlacions que puguin existir entre exemples adjacents, garantint que l'aprenentatge del model no estigui influenciat per la disposició concreta de les dades.
Barreja i fuita de dades temporals (data leakage)
Si les dades tenen una component temporal (per exemple, sèries temporals o transaccions ordenades cronològicament), barrejar-les abans de dividir-les en entrenament/prova pot introduir fuita de dades (data leakage): el model "veuria" indirectament informació del futur durant l'entrenament. En aquests casos, la divisió ha de respectar l'ordre temporal (entrenar amb el passat, provar amb el futur) en lloc d'aplicar una barreja aleatòria pura.
Augmentació de dades (Data Augmentation)
A la pàgina Desequilibri de classes ja s'ha vist que l'augmentació de dades ajuda a corregir el biaix del model quan s'aplica específicament a la classe minoritària. L'augmentació de dades funciona creant exemples d'entrenament nous i realistes que amplien la comprensió del model sobre la distribució de les dades. Consisteix a expandir artificialment la mida i la diversitat d'un dataset aplicant un seguit de transformacions i modificacions a les mostres de dades existents. Aquestes transformacions introdueixen variacions a les dades tot preservant les característiques essencials rellevants per a la tasca d'aprenentatge.
Les tècniques d'augmentació de dades redueixen el risc de sobreajust a un conjunt d'entrenament limitat i milloren la capacitat del model de generalitzar a exemples no vistos. En implementar l'augmentació de dades, és habitual aplicar les transformacions sobre la marxa (on the fly) durant el procés d'entrenament, en lloc de generar i emmagatzemar prèviament les dades augmentades. Aquest enfocament garanteix un ús eficient de la memòria i permet generar, potencialment, variacions infinites de les dades augmentades.
Les tècniques generals d'augmentació inclouen barrejar o combinar mostres de dades existents, interpolar o extrapolar punts de dades, i aplicar transformacions específiques del domini de cada tipus de dada.
L'augmentació basada en imatges inclou:
- Girar (flip), rotar, escalar o inclinar (shear) imatges.
- Afegir soroll o aplicar variacions de color (color jittering).
- Combinar o barrejar imatges per crear exemples sintètics nous (per exemple, la tècnica mixup, que combina dues imatges i les seves etiquetes de manera proporcional).
L'augmentació basada en text inclou:
- Substitució de sinònims: canviar paraules per sinònims sense alterar-ne el significat.
- Inserció, eliminació o intercanvi aleatori de paraules (tècnica coneguda com EDA, Easy Data Augmentation).
- Retrotraducció (back-translation): traduir el text a un altre idioma i tornar-lo a traduir a l'idioma original, generant una variant amb una redacció lleugerament diferent però el mateix significat.
- Paràfrasi automàtica amb models de llenguatge generatiu, per crear reformulacions naturals d'una mateixa frase.
L'augmentació de sèries temporals inclou:
- Jittering: afegir soroll aleatori petit als valors de la sèrie.
- Scaling: multiplicar tota la sèrie per un factor d'escala aleatori, simulant variacions de magnitud.
- Time warping: estirar o comprimir lleugerament l'eix temporal de la sèrie, simulant variacions de velocitat.
- Window slicing / cropping: extreure finestres més curtes de la sèrie original com a mostres addicionals.
- Permutació de segments: dividir la sèrie en segments i reordenar-los lleugerament, quan l'ordre estricte no és crític per al patró que s'estudia.
Quina tècnica d'augmentació triar?
L'augmentació sempre ha de preservar el significat o la naturalesa essencial de la dada. Una rotació de 180° pot tenir sentit per a imatges de productes en un catàleg, però no per a imatges de dígits manuscrits (un 6 girat 180° sembla un 9). De la mateixa manera, la retrotraducció pot canviar subtilment el to d'un text, cosa que pot ser o no acceptable segons la tasca. Avalua sempre alguns exemples augmentats manualment abans d'aplicar la tècnica a tot el dataset.
AC5074/08/06 — Miniactivitat
Disposes d'un dataset de 600 transaccions bancàries etiquetades com a frau (40 casos) o legítima (560 casos), ordenades cronològicament de gener a desembre de 2026.
Respon:
- Faries servir hold-out simple o validació creuada k-fold per avaluar un model entrenat amb aquest dataset? Justifica la resposta tenint en compte la mida del dataset.
- Barrejaries aquest dataset abans de dividir-lo en entrenament i prova? Per què sí o per què no?
- Si decideixes fer servir
train_test_splitde scikit-learn, quin paràmetre hauries d'afegir per garantir que la proporció de transaccions fraudulentes es manté igual als dos subconjunts? Per què és especialment important en aquest cas concret? - Proposa una tècnica d'augmentació de dades adequada per ampliar els 40 casos de frau disponibles, justificant per què aquesta tècnica preserva el significat essencial de les dades.
Bloc 8 | Mòdul M5074 Sistemes de Big Data | Institut Sa Palomera (Blanes) | Curs CEIABD 2026-2027