X
    Categories: blog

Big Data: la materia prima della Data Science

Questo articolo è la parte 2 di 4 contenuti nella serie Data Science


memoria magnetica in uso tra gli anni ’50 e ’60 del XX secolo

La Data Science come la intendiamo oggi, ovvero l’uso di metodi scientifici per l’estrazione di conoscenza dai dati, acquista autonomia dall’informatica e dal machine learning solo verso la fine del XX secolo, come abbiamo visto nella parte precedente di questa serie. Il motivo principale è che mancavano i Big Data.

Il termine “Data Science” viene usato per la prima volta nel 1960. A farlo è Peter Naur, programmatore danese creatore del linguaggio ALGOL60. All’epoca il termine era ambiguo e totalmente intercambiabile con “computer science”  dal momento che la ricerca era ancora molto focalizzata su come aumentare la capacità di registrazione dei dati nei supporti di memoria. Il programma che nel 1969 portò sulla luna l’Apollo 11 girava su un computer con 100Kb di memoria, sembra incredibile che cinquant’anni dopo viviamo nell’epoca dei Big Data.

Big Data in pillole

La parola “Big Data” appare per la prima volta nel 1998 e in pochi anni diventa un concetto centrale nelle società informatizzate.  Quando si parla di Big Data si menziona sempre il fatto che hanno permesso di incrementare le “4 V” in modo molto rapido:

  • Volume: si stima che nel 1986 tutta l’informazione immagazzinata in tutti i supporti di memoria (all’epoca il 99% era su supporti analogici) fosse poco più di 2 exabytes, nel 2013 erano 280 exabytes, e per il 94% in digitale.
  • Velocità: l’aumento esponenziale del volume dei dati prodotti ha richiesto capacità di elaborazione e gestione dei dati in real-time.
  • Varietà: l’aumento dei supporti digitali ha reso disponibili sempre più formati di dati, come testi, immagini, musica, video, tabelle, mappe, programmi eseguibili, e tanti altri..
  • Veracità: l’aumento esponenziale del volume dei dati in circolazione è dovuto anche all’accumulo di dati personali e transazionali nei database di tutto il mondo. Questi dati possono descrivere persone o essere il risultato di azioni da loro compiute.

Cos’è la Data Science


Posizione della data science tra conoscenze matematico-statistiche, capacità di hacking e conoscenza empirica di dominio

Se i Big Data sono una miniera di conoscenze, la Data Science è la cassetta degli attrezzi per scavare ed estrarne il prezioso valore. La Data Science ha due scopi principali, ai quali verranno dedicati i due prossimi post: La Business Intelligence e il Machine Learning. La Business Intelligence comprende una serie di tecniche per l’estrazione di conoscenza dai dati orientata agli umani. Il fine è di spiegare fenomeni di causalità o di correlazione (che sono due cose molto diverse da non confondere) e permettere di prendere decisioni sulla base di informazioni significative. Ad esempio tramite la Business Intelligence è possibile rispondere a domande del tipo “quali sono i fattori che hanno fatto aumentare il fatturato dell’azienda quest’anno?”. Il Machine Learning invece comprende una serie di tecniche per  l’estrazione di modelli dai dati orientata a far prendere decisioni alle macchine, così da automatizzare processi di gestione e flussi di dati, anche in real-time. Si dice che la Data Science sia quella materia che sta tra approfondite conoscenze informatiche (hacking skills, che servono per recuperare e pulire i dati), solide basi di statistica e matematica (math & stats, che servono per analizzare i dati e fare esperimenti) e una buona conoscenza del dominio di applicazione dei dati (expertise, che serve per interpretare i dati). Tendenzialmente chi frequenta il territorio della data science ha esperienza come ricercatore, studioso di Machine Learning o come hacker. Questo succede perché gli strumenti tecnici, come la statistica e l’informatica, non sono sufficienti. Serve anche una buona dose di capacità interpretativa e conoscenza di dominio per comprendere il senso nascosto nei dati. Per iniziare ad approcciare la materia è dunque necessario definire alcuni concetti chiave riguardo ai dati:

  • La struttura: i dati possono essere strutturati,  ovvero messi in relazione, come in tabelle o matrici, o non-strutturati, come post sui social media o commenti nei blogs. Tendenzialmente i dati si trovano in forma non strutturata, ma per poterli trattare sarà necessario farli diventare strutturati.
  • Il livello di rappresentazione: i dati  possono rappresentare dimensioni continue, come il tempo, discrete, come i colori, quantitative, come il peso, o qualitative, come i nomi di animali. Il livello quantitativo tendenzialmente è molto più informativo perché può rappresentare sia dimensioni continue sia dimensioni discrete, nonché ordini e rapporti di grandezza. Il livello qualitativo invece esprime perfettamente entità discrete.
  • La Tipologia:  i dati tendenzialmente si trovano in precise tipologie. Ci sono numeri (descrittori discreti o continui che formalizzano grandezze e rapporti), nominali (etichette discrete qualitative di cui un caso particolare sono i booleani  true e false), date (descrittori quantitativi ordinati) e stringhe (descrittori simbolici testuali che possono essere trasformati in valori nominali o in numeri tramite tecniche di Natural Language Processing).

esempio di matrice

Una volta che i dati sono strutturati e pronti per l’elaborazione è importante memorizzare la terminologia e capire i seguenti concetti chiave:

  • Dataset/corpus/sample/campione: è l’insieme dei dati osservabili, formalmente è una matrice.
  • Istanza/esempio/punto dei dati: ciascun singolo esempio presente nei dati e descritto da uno o più attributi. è una riga della matrice.
  • Attributi/features/variabili: descrittori delle istanze, hanno tipologie e assumono valori. sono le colonne della matrice.
  • Valori/eventi: stati variabili degli attributi. ciascun punto della colonna è un valore di un attributo. I valori rappresentano eventi.
  • Target class/target score: attributo di cui si vuole studiare o apprendere il comportamento tramite un modello.
  • Feature space/spazio di attributi/dimensioni: numero di attributi che descrivono le istanze. Il numero di colonne nella matrice.
  • Modello: generalizzazione del comportamento della target class osservato nel dataset, può automatizzare processi di elaborazione o classificazione della target class.

Strumenti del mestiere

Gli strumenti più utilizzati in data science e scaricabili gratuitamente sono due: Python e Weka. Python è il linguaggio di programmazione che si sta affermando più velocemente perché possiede ottime librerie di machine learning (scikit-learn), di statistica (scipy), moduli per importare e trattare i dati (pandas), per la visualizzazione (seaborn, matplotlib) e per il deep learning (tensorflow, keras). Python utilizza principalmente il formato .csv come input, ha una flessibilità estrema per l’incrocio degli attributi da diverse sorgenti e per il deployment, ma non un’interfaccia grafica. Weka è invece una libreria di algoritmi per il machine learning in java. Si tratta di un archivio .jar molto facilmente portabile da un sistema a un altro e mantenuta da una comunità che fa capo  all’Università del Waikato, in Nuova Zelanda. Contiene molti più algoritmi di machine learning rispetto a Python e ha una repository dalla quale è possibile aggiornare e scaricare nuovi algoritmi. Weka può processare dati in formato .csv e .json, ma ha un formato specifico chiamato .arff che permette di definire la tipologia degli attributi. Weka ha un’interfaccia grafica molto utile per esplorare i dati velocemente ma può essere richiamato anche da riga di comando per il deployment.

L’utilizzo di questi strumenti in casi reali è legato a diverse fasi:

  • Scraping: questa fase ha come scopo il reperimento di dati non strutturati e la sua trasformazione in formati strutturati. Immaginiamo ad esempio che una startup stia raccogliendo dati sull’utilizzo delle app Android da Google Play Store perché vuole lanciare una propria app e ha interesse a fare analisi della concorrenza. In questa fase entrano in gioco soprattutto le conoscenze di hacking, che servono a intercettare dati all’interno del codice .html delle pagine del Google Play Store, come il nome dell’app, il numero di download, il numero di reviews, il rating medio delle reviews o il prezzo, e strutturarli in una matrice, tendenzialmente in formato .csv. Si dice che questa fase occupi circa l’80% del tempo di un data scientist,  perché tipicamente è una fase che richiede molta inventiva e lo sviluppo di codice ad hoc. In questa fase serve la flessibilità di Python, ma qualsiasi altro linguaggio che gestisca bene le espressioni regolari può servire allo stesso scopo.

interfaccia dell’Explorer di Weka, pagina di preprocessing
  • Preprocessing: questa fase ha lo scopo di ottenere gli attributi desiderati nella forma ottimizzata per l’analisi ed è probabilmente quella che richiede le maggiori conoscenze informatiche. Ad esempio potrebbe essere necessario unire in uno stesso dataset attributi estratti da tabelle o documenti separati, cambiare la tipologia dei dati trasformando numeri in categorie nominali o rendendo omogenei dati numerici con la standardizzazione o la normalizzazione. Qui Python è utile soprattutto per l’unione di attributi da diverse matrici, mentre per la trasformazione degli attributi Weka è molto più intuitivo, specialmente se usato con interfaccia grafica. Sia Python che Weka assegnano in automatico la tipologia ai dati quando li importano. Python tende a leggere come stringhe tutti gli attributi che non siano numerici, Weka invece tenta di assegnare classi nominali e spesso richiede di dichiarare manualmente il tipo di dato rappresentato da ogni attributo.
  • Analisi: Questa è sicuramente la fase più interessante e richiede conoscenze di statistica, di machine learning e expertise di dominio. Essendo la fase più importante le sarà dedicato  molto spazio, soprattutto nei prossimi post. Quello che possiamo notare subito è che l’interfaccia grafica dell’explorer di Weka ci permette di avere un riassunto completo sulle caratteristiche dei dati e di ciascun attributo, mentre con Python è necessario richiamare ciascuna informazione o grafico separatamente.

Un’altra grande differenza tra Python e Weka è la capacità di elaborare small e Big Data. Weka, specialmente nella sua versione con interfaccia grafica, ha una maggiore richiesta di memoria mentre Python è molto più versatile.

Big Data o small data?

La scelta di lavorare con Big o small data deve sempre essere presa con consapevolezza. I Big Data tendono a essere una popolazione statistica, ovvero la totalità dei dati esistenti o disponibili per rispondere a specifiche domande. Trattare dataset di Big Data è tecnicamente complesso e può richiedere l’uso di database distribuiti. Gli small data invece tendono verso il concetto di campione statistico, ovvero un dataset di dimensioni facilmente gestibili ma di distribuzione simile a quella della popolazione statistica. Spesso l’opzione di lavorare con gli small data è una scelta obbligata dalla difficoltà o dal costo di accesso ai dati, ma se si hanno a disposizione dei Big Data è sempre possibile trasformarli in small data con diverse tecniche di campionamento. Le più usate sono:


Esempio di systematic sampling
  • Random sampling: (campionamento casuale) ogni esempio della popolazione (Big data) ha uguale probabilità di essere campionato e inserito nel dataset degli small data. Riproduce la popolazione in modo significativo e può essere applicato in ogni situazione, ma tende a non campionare valori rari e a sbilanciare gli attributi.
  • Systematic sampling: (campionamento sistematico) consiste nel mettere in ordine sequenziale la popolazione e quindi campionare gli esempi con una cadenza fissa, ad esempio se i dati hanno un ordine temporale si possono campionare i valori che accadono ogni primo giorno del mese. Questo metodo può ottenere campioni rappresentativi nel caso la popolazione sia omogenea, ma è molto sensibile a variazioni periodiche, e una periodicità irregolare (ad esempio un evento che accade più frequentemente dopo una certa data) può rendere sbilanciati i valori annullando rappresentatività e significatività del campione.
  • Stratified sampling: (campionamento per allocazione) se si hanno a disposizione dati sulla distribuzione degli attributi nella popolazione,  si possono campionare istanze con gli attributi desiderati in quantità proporzionali a quella della popolazione. Questo metodo bilancia sia le istanze che gli attributi e rappresenta bene la popolazione, ma richiede che esista un modello descrittivo della popolazione prima del campionamento.
    Cluster sampling: (campionamento per gruppi) consiste nel prendere istanze in maniera casuale da un numero variabile di sottogruppi della popolazione, definiti da simili valori di uno o più attributi, ad esempio campionati in una determinata area geografica, in uno specifico periodo, o per determinate fasce di età. Questo metodo permette di avere una buona varietà negli attributi ma tende a rappresentare bene solo dei sottogruppi della popolazione, non necessariamente l’intera popolazione.

Esistono anche altri metodi di campionamento, come quello a palla di neve (snowball sampling), ma forse più importante della tecnica di campionamento è capire i concetti e le metodologie per non pregiudicare la qualità della conoscenza che è possibile estrarre dai dati:

  • Campione rappresentativo: contiene più informazione possibile e tenta di riprodurre in una popolazione statistica il fenomeno campionato. L’informazione è strettamente legata al concetto di entropìa, ovvero alla sparsità degli eventi nel fenomeno osservato. Più un fenomeno ha eventi infrequenti, più sarà difficile campionarli, e dunque sarà opportuno scegliere le giuste strategie e la giusta grandezza del campione.
  • Campione significativo: ottimizza la capacità di generalizzazione. Per avere un campione significativo occorre che la probabilità degli eventi di essere campionati sia diversa da 0. Ad esempio un campionamento casuale genera un campione significativo perché ogni evento del fenomeno osservato ha la stessa probabilità di essere campionato, anche se non ha la stessa probabilità di accadere.
  • Statistica descrittiva: tendenzialmente si applica su popolazioni  statistiche rappresentative, che comprendono o rappresentano tutti  gli eventi del fenomeno osservato, ad esempio tutte le transazioni di un sito e-commerce, o tutta la documentazione prodotta su un caso giuridico. Questa metodologia statistica comprende una serie di tecniche che descrivono i dati e che vedremo trattando la Business Intelligence.
  • Statistica predittiva: tendenzialmente si applica su campioni significativi di dati, quasi sempre small data, e permette di estrarne analisi e modelli validi anche su scala molto più grande, con un certo margine di errore. L’esempio tipico è quello delle previsioni del tempo: poiché non è possibile campionare i dati delle future piogge, il concetto di popolazione viene a cadere e si usa un campione di esempi passati per predire esempi futuri.

Il campionamento casuale è il più utilizzato, specialmente in statistica predittiva, perché è il più versatile e permette di avere campioni significativi in tutte le condizioni. Gli altri metodi di campionamento tendono a ottimizzare la rappresentatività del campione e sono adatti per la statistica descrittiva. Il campionamento per gruppi è una buona via di mezzo per tentare di ottimizzare rappresentatività e significatività del campione.

Tutta una questione di attributi

Le tecniche di campionamento si focalizzano principalmente sulla selezione delle istanze, a volte usando gli attributi come guida per trovare le istanze di interesse. In realtà però lo strumento della Data Science che permette veramente di estrarre conoscenza dai dati sono gli attributi. Essi rappresentano allo stesso tempo la teoria (o il pregiudizio) e il livello di dettaglio con cui osserviamo i dati. Esiste però una maledizione su chi tenta di osservare i dati troppo nel dettaglio, è la maledizione della dimensionalità (curse of dimensionality):


esempio di maledizione della dimensionalità: più attributi ci sono, più le istanze diventano sparse e dissimili tra loro. Gli attributi vengono rappresentati come dimensioni del piano cartesiano.

più si aggiungono colonne nella matrice, più i valori delle righe diventano sparsi e le istanze appaiono dissimili tra loro. Nei dataset colpiti da questa maledizione è difficile fare modelli, ovvero trovare generalizzazioni. Immaginiamo per esempio un’azienda che abbia raccolto 1000 reviews, 500 positive e 500 negative, di un proprio prodotto e voglia trovare una generalizzazione di cosa dicono di positivo e negativo gli utenti. Hanno dunque una matrice di 1000 istanze per 2 attributi, ovvero il testo (che è un dato di tipo stringa) e una classe (positivo/negativo, un dato di tipo nominale). Non potendo usare le 1000 stringhe testuali così come sono, i data scientists dell’azienda estraggono 10000 singole parole dalle stringhe (trasformandole in dati di tipo nominale) e si ritrovano con una matrice di 1000 righe e 10001 colonne. A quel punto il dataset ha una dimensionalità troppo grande, ci saranno un sacco di parole usate solo in poche istanze e sarà impossibile estrarre un buon modello.

La dimensionalità del dataset, ovvero il numero degli attributi che in esso vogliamo includere, va selezionata con cura. Una regola pratica in uso tra i data scientists propone di usare come minimo un numero di istanze 5 volte superiore a quello degli attributi. Esistono poi tecniche di riduzione della dimensionalità per sanare la maledizione della dimensionalità, ma conoscere con cura gli attributi del proprio dataset equivale ad avere più controllo sull’interpretazione dei fenomeni e sui risultati delle analisi, come vedremo nei prossimi post.

Approfondimenti

https://en.wikipedia.org/wiki/Data_science
https://en.wikipedia.org/wiki/Big_data

John R. Mashey (1998).
“Big Data … and the Next Wave of InfraStress”. Slides from invited talk. Usenix. Retrieved 28 September 2016.

https://www.cs.waikato.ac.nz/~ml/weka/
https://en.wikipedia.org/wiki/Entropy
https://en.wikipedia.org/wiki/Sampling_(statistics)
https://en.wikipedia.org/wiki/Statistical_population
https://en.wikipedia.org/wiki/Curse_of_dimensionality

Fabio Celli: Dopo un dottorato in Natural Language Processing ho fatto ricerca sul riconoscimento automatico di personalità all’università di Trento, per poi approdare a Maggioli nel 2018. Mi occupo di Data Science e Machine Learning da prima che fossero al centro dell’attenzione.
Related Post