L’Overplotting è il fenomeno in cui i data points o i labels si sovrappongono durante la loro visualizzazione in un grafico, generando confusione che potrebbe portare ad errori di interpretazione.
Imparare a distinguere e gestire questo fenomeno è cruciale per ogni Data Scientis.
Overplotting: cause
Parlando di data points, le due grandi cause di overplotting sono:
- eccessivo numero di data point visualizzati contemporanemente sullo stesso grafico
- variazione bassa di una delle variabili visualizzate (ergo, il numero di valori unici è limitato)
Troppi data points con valori simili
![](https://www.andreaprovino.it/wp-content/uploads/2019/01/DiamondOverplottingRStudio_solution_soluzione_machine_learning_data_science.png)
Il grafico, che fa riferimento al dataset diamonds della libreria ggplot2 di R, mostra il fenomeno di Overplotting che risulta particolarmente evidente quando il valore ‘Carat’ è inferiore a circa 1.2.
Ci sono troppi valori simili.
Ora ti chiedo: “Quanti diamanti hanno un valore ‘Carat’ inferiore a 1?”
Rispondere, anche in modo approsimativo, è impossibile.
Il problema è che non riusciamo a visualizzare il numero di diamanti con quei valori. Potrebbero anche essere milioni, sovrapposti l’uno sull’altro.
E’ un’evenienza che non possiamo trascurare.
Variazione eccessivamente ridotta
![](https://www.andreaprovino.it/wp-content/uploads/2019/01/Overplotting_RStudio_age_income_machine_learning_data_science_soluzione_r.png)
Il grafico a dispersione mette in relazione l’età in funzione del salario di alcuni campioni di un dataset.
Il problema è analogo a quello precedente.
Non possiamo stabilire quante persone di età pari a 60 anni guadagnino 50.000$. Potrebbe essere una o 150 milioni.
Il fenomeno dell’Overplotting è distinguibile dal fatto che i dati visualizzati sono organizzati in righe e colonne nette.
In questo caso la causa potrebbe essere legata al modo in cui i dati sono stati raccolti: è stato ridotto in modo eccessivo la variazione della variabile ‘Income’.
Ad esempio, l’età di persone comprese tra i 61 e i 70 anni è potrebbe essere stata fissata a 75.
Soluzioni all’Overplotting
Vediamo insieme alcune soluzioni.
Dimensioni
![](https://www.andreaprovino.it/wp-content/uploads/2019/01/DiamondOverplottingRStudio_solution_soluzione_machine_learning_data_science_small.png)
Il grafico è simile al precedente. L’unica differenza è la dimensione dei punti rappresentanti i data points.
Ti faccio notare che, sebbene la situazione sia leggermente migliorata, l’overplotting è ancora presente: limitarsi a modifcare l’estetica del grafio , cambiando la dimensione dei data points, non è una soluzione definitiva.
Trasparenza
![](https://www.andreaprovino.it/wp-content/uploads/2019/01/DiamondOverplottingRStudio_solution_soluzione_machine_learning_data_science_trasparent.png)
Modifcare la trasparenza dei punti rappresentanti i data points è una strategia efficace, poiché è visivamente immediato verificarne l’esito: le regioni più dense, quindi scure, sono causate da sovrapposizioni multiple.
Resta comunque difficile cogliere la grandezza dell’overplotting.
Jittering
![](https://www.andreaprovino.it/wp-content/uploads/2019/01/Overplotting_RStudio_age_income_machine_learning_data_science_soluzione_r_jitter.png)
Risolvere l’overplotting creando ‘rumore‘ nel dataset.
Aggiungere dei numeri generati casualmente ai valori di un dataset è utile quando la variazione è bassa.
Potrebbe sembrare controintuitivo manipoalre in questo modo i dati, che di fatto sono falsati.; su piccola scala il grafico è meno accurato, ma in grande scala la rilevanza aumenta.
Tiles | Best Solution for small variation
![](https://www.andreaprovino.it/wp-content/uploads/2019/01/Overplotting_RStudio_age_income_machine_learning_data_science_soluzione_r_jitter_tiles.png)
La migliore soluzione, a mio avviso, per gestire il fenomeno di Overplotting quando la variazione è bassa è quella di creare dei grafici in cui l’area dei punti rappresentanti i dati è proporzionale al loro numero.
Spero di averti aiutato almeno un po’!
Io e te ci vediamo alla prossima!
Un caldo abbraccio, Andrea.