Uno dei problemi più comuni che si incontrano nel machine learning è quello dello sbilanciamento delle classi, ovvero quando i dati sono distribuiti in modo non uniforme tra le diverse categorie da predire. Ad esempio, se vogliamo costruire un modello per riconoscere se una transazione bancaria è fraudolenta o no, è probabile che la maggior parte dei dati sia relativa a transazioni normali e solo una piccola parte a transazioni fraudolente. Questo può portare il modello a essere poco accurato o a ignorare la classe minoritaria.
Per risolvere questo problema, esistono diverse tecniche che si basano sulla manipolazione dei dati di allenamento per bilanciare le classi. Due delle più note sono l’oversampling e l’undersampling.
L’oversampling consiste nel generare nuovi dati, basandosi su quelli presenti, per la classe minoritaria, in modo da aumentarne la frequenza.
L’undersampling consiste invece nel ridurre il numero di dati per la classe maggioritaria, in modo da diminuirne la frequenza.
Entrambe le tecniche hanno vantaggi e svantaggi: l’oversampling può introdurre rumore o overfitting, mentre l’undersampling può eliminare informazioni utili o sottostimare la variabilità dei dati.
Una delle tecniche di oversampling più popolari è SMOTE (Synthetic Minority Oversampling Technique), proposta da Chawla et al. nel 2002.
SMOTE genera nuovi dati per la classe minoritaria basandosi sui suoi vicini più prossimi, in particolare, per ogni dato della classe minoritaria, SMOTE seleziona uno dei suoi k vicini più prossimi (dove k è un parametro) appartenenti alla stessa classe e crea un nuovo dato lungo il segmento che li collega. Questo permette di creare dati più variati e realistici rispetto a una semplice duplicazione dei dati esistenti.
SMOTE ha diversi vantaggi: aumenta la rappresentatività della classe minoritaria, migliora le prestazioni dei modelli di classificazione e riduce il rischio di overfitting. Tuttavia, SMOTE ha anche alcuni svantaggi: può generare dati irrealistici se i dati sono rumorosi o se le classi sono sovrapposte, può aumentare il tempo di allenamento dei modelli e può richiedere diversi tentativi per trovare un valore del parametro k adeguato.
In KNIME non poteva mancare un nodo che implementa questa tecnica e il suo nome è Smote. Lo trovate seguendo questo link.
Nel mio spazio pubblico trovate un esempio di utilizzo in un problema classico del machine learning che è la predizione del churn.
Buono studio, KNIMErs!