Scienza dei dati
Mi scuseranno i puristi, questa breve nota è scritta assolutamente di getto.
Oggi si fa un gran parlare di 'Data Science'; tecnicamente, un mix di statistica e matematica con un'aggiunta di un minimo di logica e di un pò di sana, vecchia euristica.
Qualcuno sorriderà, nel sentire parlare di 'euristica'. Ovviamente, molto più che nel sentir parlare di Support Vector Machines, piuttosto che di McCulloch & Pitts, Reti Neurali, Algoritmi Genetici, Programmazione Lineare, Programmazione Dinamica, Ricerca Operativa, Piani di taglio, Test KS, Test Chi-Quadro, ... e chi più ne ha più ne metta.
In realtà esiste una branca della matematica, quella computazionale, la quale asserisce che esistono dei problemi 'intrinsecamente' difficili ( in gergo gli NP-Completi ) in cui - in pratica - non esistono metodi efficienti per ridurre la complessità del problema iniziale, che cresce esponenzialmente con le sue dimensioni. La cosa di per sé non è particolarmente fastidiosa, per problemi limitati. Però, al crescere delle loro dimensioni ( scegliete voi di volta in volta quella che più vi aggrada ), questi problemi divengono rapidamente intrattabili a causa del tempo che richiedono per ottenerne una soluzione. Volete un esempio abbastanza semplice e pratico ? Dato un numero intero, individuarne tutti i divisori. Facile, no ? Basta un semplice ciclo iterativo ed il problema è risolto. Peccato che, per numeri 'grandi', la cosa richieda un pò troppo tempo, persino con le enormi potenze di calcolo che oggi abbiamo a disposizione, impensabili solo fino a pochi anni fa. Scrivere un algoritmo che fattorizza con certezza numeri di 200 o più cifre è praticamente impossibile. Su questa semplice considerazione si basa molta della teoria che sta alla base della cifratura con chiave pubblica.
Come può aiutarci, allora, la tanto bistrattata euristica di inizio articolo ? Tanto per dare uno spunto su quanto sopra, qualcuno, nel recente passato, ha abbandonato l'idea di cercare un algoritmo - per così dire - scolastico che fornisse in maniera deterministica l'indicazione di primalità di un numero ed ha cercato di affrontare lo stesso problema con tecniche probabilistiche ottenendo risultati impressionanti. Una derivazione del Test di Rabin-Miller, che opera in questo senso, è in media largamente superiore al famosissimo Test AKS ( alla base del celeberrimo articolo 'Prime is P' ) che, pur polinomiale nella teoria, nella pratica ha un rendimento ancora largamente perfettibile.
Ma potremmo continuare con algoritmi come il Simplesso che, esponenziali in teoria, nei casi pratici hanno comportamente praticamente lineari con il numero dei vincoli ( in media tre volte tale dimensione ).
Cosa si ricava da quanto sopra ? il messaggio giusto, ponendo in essere un pò di meta-mining, è certamente quello che nella Data Science non vi sono certezze. E se qualcuno ci chiedesse di affrontare un problema che sappiamo in partenza essere NP-completo ci faremo una ragione della cosa cercando tecniche di ottimizzazione imperfette ma funzionali. Certamente molto di più di un algoritmo che, ad esempio, per determinare la soluzione ottima di un problema con poche centinaia di variabili ( il cui valore, magari, non fosse distante oltre pochi punti percentuali da quella sopra ricavata), impiegherebbe più del tempo di vita residuo del nostro attuale Universo. Meglio accontentarsi.
Ecco, questo potrebbe essere uno spunto per la ricerca: trovare un compromesso matematicamente giusto fra il costo ( in termini di risorse - tempo compreso ) ed il rendimento ( una stima della distanza tra la soluzione trovata e quella effettivamente ottima ).
Ma torniamo in argomento. Da quanto sopra non si ricava certamente qualcosa di pratico, soltanto una prima considerazione circa la non ottimalità del mondo in cui viviamo e della perenne necessità di riottimizzare gli obbiettivi mano a mano che acquisiamo nuovi dati o ne perdiamo di vecchi, oppure che aggiungiamo un pò di conoscenza a quanto già modellizzato per apportare conseguenti modifiche a variabili e/o vincoli.
Ed a questo punto non possiamo non parlare dei due importantissimi - e distinti - processi che dovranno essere attuati:
- il primo, di analisi, in cui si procederà ad identificare dati elementari, relazioni, vincoli, workflow, e quant'altro necessiterà per costruire le 'fondamenta' del nostro apparato logico funzionale
- il secondo, di sintesi, con cui i dati saranno sempre più 'piramidati' per evolvere in strutture superiori come : fenomeni, comportamenti, sistemi. In questa sede potranno e dovranno essere evidenziate le esistenti anomalie statistiche piuttosto che la ciclicità di certi fenomeni cercando di eliminare quello che nell'analisi delle serie storiche viene chiamato 'Noise', cioè una variabile casuale che - normalmente - viene assunta come centrata sullo zero.
Non ci sarà desueta, nel primo processo, la conoscenza delle principali distribuzioni statistiche in base alla quale fare opportune ipotesi che ci permetteranno, laddove ci fosse richiesto, di fare anche analisi di simulazione. Con ciò intendendo quel processo statistico-matematico che ci permette di ricreare, come in un laboratorio, esattamente il comportamento di un sistema comunque complesso. Pensate ad esempio a simulare il comportamento di un sistema di traffico di una piccola città, con diecine di semafori, ipotizzando che - tutt'ad un tratto - una strada principale sia chiusa al traffico. Con le tecniche opportune la cosa è fattibilissima.
Vabbè, chiudiamo qui. Si è fin troppo parlato di dati e di tecniche per la loro lavorazione, magari non evidenziando opportunamente la componente di livello più alto e, probabilmente, più importante, ovvero il modello matematico sottostante.
Ma non è che fin qui abbiamo parlato di un modello ?