
Data Science: definizione e applicazioni pratiche
La data science è un campo di studio relativamente recente ma in rapida crescita e dalle molte sfaccettature, utilizzato in numerosi ambiti. Sfrutta varie tecniche avanzate di analisi e algoritmi di modellazione predittiva per estrarre insight significativi dai dati e aiutare a rispondere a domande strategiche di business o scientifiche. La data science combina un ampio ventaglio di competenze, da quelle tecniche (programmazione, algebra lineare, statistica e modellazione) a quelle non tecniche (rappresentazione efficace e comunicazione dei risultati). Inoltre, a seconda del settore in cui è applicata, è necessario possedere una solida conoscenza del dominio per interpretare correttamente le informazioni disponibili e gli insight ottenuti.
Gli algoritmi di data science possono essere applicati con successo in contesti diversi in cui molti dati sono o possono essere raccolti: finanza, commercio, marketing, project management, assicurazioni, medicina, istruzione, manifattura, HR, linguistica, sociologia, ecc. In pratica, qualsiasi settore o scienza può trarre grande beneficio dalla raccolta, dall'analisi e dalla modellazione dei propri dati.
Che cos'è un caso d'uso di data science?
Un caso d'uso di data science è un compito concreto del mondo reale da risolvere utilizzando i dati disponibili. Nel contesto di un'azienda specifica, molte variabili vengono analizzate con tecniche di data science nel quadro dello specifico settore dell'azienda. I casi d'uso possono essere un problema da risolvere, un'ipotesi da verificare o una domanda a cui rispondere. In sostanza, fare data science significa risolvere casi d'uso reali.
Sebbene i contenuti di ciascun caso d'uso siano probabilmente molto diversi, ci sono alcuni aspetti comuni da tenere sempre a mente:
- La pianificazione di un caso d'uso di data science consiste nel: definire un obiettivo chiaro e i risultati attesi, comprendere l'ambito di lavoro, valutare le risorse disponibili, fornire i dati necessari, valutare i rischi e definire KPI come misura del successo.
- Gli approcci più comuni per risolvere casi d'uso di data science sono: forecasting, classificazione, rilevamento di pattern e anomalie, raccomandazioni e riconoscimento di immagini.
- Alcuni casi d'uso rappresentano compiti tipici trasversali a diversi campi e puoi fare affidamento su approcci simili per risolverli, come la previsione del churn dei clienti, la segmentazione dei clienti, il rilevamento delle frodi, i sistemi di raccomandazione e l'ottimizzazione dei prezzi.
Come risolvo un case study di data science?
La risposta è molto specifica al caso, guidata dalla strategia aziendale e dipendente dal nucleo del case study stesso. Tuttavia, può essere utile delineare una roadmap generale da seguire per qualsiasi caso d'uso di data science:
- Formulare la domanda giusta. Questo primo passaggio è molto importante e include la revisione della letteratura disponibile e dei case study esistenti, la rassegna delle best practice, l'elaborazione di teorie pertinenti e ipotesi di lavoro, e la colmatura di eventuali lacune di conoscenza del dominio. Il risultato dovrebbe essere una domanda chiara a cui rispondere nel case study di interesse.
- Raccolta dei dati. In questo passaggio, effettuiamo un inventario e una raccolta dei dati. Nella realtà, spesso abbiamo dati non rappresentativi, incompleti, difettosi e non strutturati, cioè lontani dall'essere una tabella completa e pronta per l'analisi. Pertanto, dobbiamo cercare e identificare tutte le possibili fonti dati utili per il nostro tema. I dati necessari possono trovarsi negli archivi aziendali, essere ottenuti con web scraping o acquisiti da uno sponsor, ecc.
- Data wrangling. Di solito è la parte più dispendiosa in termini di tempo e risorse di qualsiasi progetto di data science. Si valuta la qualità e la rappresentatività dei dati raccolti e si conduce un'esplorazione iniziale. I dati vengono puliti, preprocessati, trasformati, manipolati e mappati dalla loro forma grezza in un formato più adatto.
- Analisi e modellazione dei dati. I dati puliti vengono analizzati dal punto di vista del loro stato attuale, quindi inseriti in un modello statistico predittivo selezionato. Si valuta l'accuratezza del modello e, se non soddisfacente, si provano altri approcci di modellazione. Questo si ripete finché non si ottiene il modello che prevede gli scenari futuri con la massima precisione. Anche questo processo, come i precedenti, può essere piuttosto iterativo.
- Comunicazione dei risultati. Rispetto ai passaggi precedenti, questo richiede più capacità comunicative e soft skill che programmazione e competenze tecniche. Include la condivisione dei risultati più importanti e delle conclusioni finali con il management, gli azionisti e le altre parti coinvolte. Gli insight sono comunemente rappresentati sotto forma di report, articoli e presentazioni, delineando i possibili passi successivi.
Casi d'uso di data science per settore
I casi d'uso di data science possono riguardare praticamente qualsiasi settore in cui una grande quantità di dati è o può essere accumulata. In questo capitolo parleremo di alcuni casi d'uso tipici nei seguenti ambiti più richiesti: logistica, sanità e telecomunicazioni. Alcuni dei casi che prenderemo in considerazione sono interdisciplinari e possono essere facilmente riscontrati in molte altre sfere. Questo li rende più universali e applicabili, quindi vale la pena conoscere un approccio generale per risolverli. Inoltre, per ciascuno dei settori selezionati, delineeremo altri possibili temi modellabili con metodi di data science.
Data science nella sanità
Nei tre capitoli precedenti abbiamo discusso come i metodi di data science possano aiutare aziende di diversi settori ad aumentare i ricavi. Quando si parla di sanità, il corretto uso e l'interpretazione dei dati disponibili non solo possono essere utili per i marketer del settore, ma possono anche aiutare a diagnosticare in tempo patologie gravi e persino salvare vite.
La medicina e i fornitori di servizi sanitari raccolgono una quantità enorme di dati da numerose fonti: sistemi di cartella clinica elettronica (EHR), dati da dispositivi indossabili, studi di ricerca medica e documenti di fatturazione. Sfruttare tecniche innovative di data science e analisi dei dati sta gradualmente rivoluzionando l'intero settore sanitario, offrendo le soluzioni più promettenti e di maggiore impatto per il suo sviluppo futuro. In particolare, alcuni campi altamente specializzati come genetica, medicina riproduttiva, oncologia, biotecnologia, radiografia, diagnostica predittiva e farmaceutica sono passati a un livello completamente nuovo grazie alla piena valorizzazione dei loro dati.
Per comprendere meglio come la data science possa essere utile in medicina, concentriamoci su uno dei casi d'uso più classici.
Caso d'uso nella sanità: previsione del cancro al seno
Secondo il World Cancer Research Fund International, il cancro al seno è il tipo di tumore più comune tra le donne e il secondo più comune in assoluto. Diagnosticare in tempo una patologia mammaria, benigna o maligna, è estremamente importante poiché aumenta significativamente le probabilità di un trattamento efficace e il tasso di sopravvivenza. È qui che la data science viene in aiuto.
Il progresso dei metodi di data mining in combinazione con gli algoritmi di machine learning ha reso possibile prevedere il rischio di cancro al seno, rilevare eventuali anomalie nelle fasi iniziali, stimarne la dinamica e quindi sviluppare un piano ottimale per combattere la malattia. In sostanza, è un tipico problema di classificazione del machine learning. La buona notizia è che, poiché questo tipo di oncologia è piuttosto comune ovunque, sono stati condotti molti studi approfonditi in tutto il mondo e, di conseguenza, sono stati accumulati enormi volumi di dati da pazienti di tutto il globo.
Il principale problema nell'uso di tali dataset per i classificatori è che possono essere fortemente sbilanciati. Ad esempio, nel caso in cui l'esito sia rappresentato in forma cancro / non cancro, la probabilità di avere una patologia (le voci del dataset che appartengono alla classe minoritaria) è significativamente inferiore rispetto alla probabilità di non averne (le voci della classe maggioritaria). Di conseguenza, l'algoritmo tende a classificare i nuovi casi come non patologici. Pertanto, per valutare l'accuratezza di tali modelli in modo più efficiente, ha senso applicare l'F1-score come metrica di valutazione, poiché stima i falsi positivi (errore di tipo I) e i falsi negativi (errore di tipo II) piuttosto che i casi in cui l'algoritmo ha classificato correttamente le voci.
Diamo un'occhiata a un dataset reale sul cancro al seno da uno degli stati degli USA. Le feature sono descritte in dettaglio nella documentazione ma, in breve, sono la media, l'errore standard e i valori massimi degli attributi di ciascuna immagine digitalizzata che mostra i nuclei cellulari della massa mammaria di una donna. Ogni riga del dataset corrisponde a una donna con un tumore maligno o benigno (cioè, tutte le donne in questione hanno qualche tipo di tumore). Gli attributi includono raggio cellulare, tessitura, levigatezza, compattezza, concavità, simmetria, ecc.
import pandas as pd
cancer_data = pd.read_csv('data.csv')
pd.options.display.max_columns = len(cancer_data)
print(f'Number of entries: {cancer_data.shape[0]:,}\n'
f'Number of features: {cancer_data.shape[1]:,}\n\n'
f'Number of missing values: {cancer_data.isnull().sum().sum()}\n\n'
f'{cancer_data.head(2)}')
Number of entries: 569
Number of features: 33
Number of missing values: 569
id diagnosis radius_mean texture_mean perimeter_mean area_mean \
0 842302 M 17.99 10.38 122.8 1001.0
1 842517 M 20.57 17.77 132.9 1326.0
smoothness_mean compactness_mean concavity_mean concave points_mean \
0 0.11840 0.27760 0.3001 0.14710
1 0.08474 0.07864 0.0869 0.07017
symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se \
0 0.2419 0.07871 1.0950 0.9053 8.589
1 0.1812 0.05667 0.5435 0.7339 3.398
area_se smoothness_se compactness_se concavity_se concave points_se \
0 153.40 0.006399 0.04904 0.05373 0.01587
1 74.08 0.005225 0.01308 0.01860 0.01340
symmetry_se fractal_dimension_se radius_worst texture_worst \
0 0.03003 0.006193 25.38 17.33
1 0.01389 0.003532 24.99 23.41
perimeter_worst area_worst smoothness_worst compactness_worst \
0 184.6 2019.0 0.1622 0.6656
1 158.8 1956.0 0.1238 0.1866
concavity_worst concave points_worst symmetry_worst \
0 0.7119 0.2654 0.4601
1 0.2416 0.1860 0.2750
fractal_dimension_worst Unnamed: 32
0 0.11890 NaN
1 0.08902 NaN
Eliminiamo l'ultima colonna che contiene solo valori mancanti:
cancer_data = cancer_data.drop('Unnamed: 32', axis=1)
Quante donne, in %, hanno un cancro confermato (un tumore maligno al seno)?
round(cancer_data['diagnosis'].value_counts()*100/len(cancer_data)).convert_dtypes()
B 63
M 37
Name: diagnosis, dtype: Int64
Il 37% di tutte le intervistate ha un cancro al seno, quindi il dataset è in realtà piuttosto bilanciato.
Poiché i valori della variabile diagnosis sono categoriali, dobbiamo codificarli in forma numerica per l'uso nel machine learning. Prima di farlo, separiamo i dati tra feature predittive e variabile target diagnosis:
X = cancer_data.iloc[:, 2:32].values
y = cancer_data.iloc[:, 1].values
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
Ora creiamo i set di train e test e poi scaliamo le feature:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Per modellare i nostri dati, applichiamo i seguenti algoritmi con i loro parametri di default: k-nearest neighbors (KNN) e regressione logistica:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
# KNN
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
knn_predictions = knn.predict(X_test)
# Logistic regression
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr_predictions = lr.predict(X_test)
Abbiamo visto prima che il nostro dataset è piuttosto bilanciato, quindi possiamo usare l'accuracy come metrica di valutazione per identificare il modello più accurato:
from sklearn.metrics import accuracy_score
print(f'Accuracy scores:\n'
f'KNN model:\t\t {accuracy_score(y_test, knn_predictions):.3f}\n'
f'Logistic regression model: {accuracy_score(y_test, lr_predictions):.3f}')
Accuracy scores:
KNN model: 0.956
Logistic regression model: 0.974
In base ai nostri dati, il modello di regressione logistica offre le performance migliori nella previsione di un tumore al seno maligno/benigno per una donna con una patologia mammaria di qualsiasi natura.
Come possibili passi successivi, considerando che l'algoritmo di regressione logistica non ha parametri critici da regolare, possiamo sperimentare diversi approcci di suddivisione train/test e/o varie tecniche di modellazione predittiva.
Altri casi d'uso comuni nella sanità:
- monitoraggio dei dati in tempo reale da dispositivi indossabili
- analisi predittiva
- analisi di immagini mediche
- scoperta di farmaci
- ricerca genetica
- assistenti virtuali
- gestione dei dati dei clienti
Data science in trasporti e logistica
La logistica è l'organizzazione del processo di consegna del prodotto da un punto a un altro, mentre il trasporto implica l'atto di trasferire clienti o beni. A seconda del profilo dell'attività dell'azienda (ad esempio consegna di pranzi, servizio postale, spedizioni internazionali, compagnie aeree e servizi taxi o bus), le fonti dati possono essere rappresentate da orari, timesheet, dettagli dei percorsi, inventario di magazzino, report, contratti, accordi, documenti legali e feedback dei clienti. I dati stessi possono essere strutturati o non strutturati e includere informazioni su tempi, itinerari, percorsi, coordinate, dati dei clienti, dettagli delle merci, costi e prezzi.
L'efficienza del business nella supply chain e nei trasporti non è sempre lineare e dipende da numerosi fattori: imprevisti di traffico, qualità dei percorsi, condizioni meteo, emergenze, fluttuazioni del prezzo del carburante, carenze di stock di magazzino, danni tecnici, ritardi nelle spedizioni legati alla sicurezza, regolamentazioni e sanzioni governative e molti altri. Inoltre, negli ultimi anni sono nate molte nuove aziende sul mercato e la concorrenza in questo settore è diventata piuttosto agguerrita. Pertanto, per tenere il passo con i competitor e aumentare la produttività operativa, per ogni azienda di logistica/trasporti è diventato indispensabile analizzare big data e trasformarli in insight significativi.
In che modo, concretamente, la data science può aiutare i settori trasporti e logistica? Ecco un elenco, lungi dall'essere completo, delle sue potenziali applicazioni:
- tracciamento end-to-end dell'intero processo di trasporto,
- automazione e trasparenza di tutte le attività,
- consegne puntuali,
- ottimizzazione dei percorsi,
- pricing dinamico,
- mantenimento delle scorte di approvvigionamento,
- protezione delle merci deperibili,
- monitoraggio delle condizioni dei veicoli,
- miglioramento delle reti produttive,
- miglioramento del servizio clienti.
Caso d'uso in trasporti e logistica: identificare il posizionamento ottimale dei taxi
Uber Technologies Inc., o Uber, è un'azienda statunitense che fornisce vari servizi di logistica e trasporto. In questo case study, raggrupperemo i dati GPS del ride-sharing Uber per identificare il posizionamento ottimale dei taxi. In particolare, può essere utile per i seguenti scopi:
- Ogni nuova richiesta di corsa viene assegnata al cluster più vicino, così Uber invia l'auto più vicina da quel cluster alla posizione del cliente.
- Analizzando i cluster identificati dal punto di vista del loro carico di lavoro, opzionalmente per ora o giorno della settimana, Uber può redistribuire in anticipo le auto e inviarle nelle posizioni più strategiche, più richieste dai clienti.
- A seconda del rapporto domanda/offerta nei diversi cluster, l'azienda può regolare dinamicamente le tariffe.
Useremo un dataset di FiveThirtyEight sui viaggi Uber a New York nell'aprile 2014:
import pandas as pd
uber_data = pd.read_csv('uber-raw-data-apr14.csv')
print(f'Number of trips: {uber_data.shape[0]:,}\n\n'
f'{uber_data.head()}')
Number of trips: 564,516
Date/Time Lat Lon Base
0 4/1/2014 0:11:00 40.7690 -73.9549 B02512
1 4/1/2014 0:17:00 40.7267 -74.0345 B02512
2 4/1/2014 0:21:00 40.7316 -73.9873 B02512
3 4/1/2014 0:28:00 40.7588 -73.9776 B02512
4 4/1/2014 0:33:00 40.7594 -73.9722 B02512
Visualizziamo schematicamente tutti i punti di pickup, tenendo conto che la longitudine corrisponde all'asse x e la latitudine all'asse y:
import matplotlib.pyplot as plt
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.show()
Per raggruppare questi dati, utilizziamo un algoritmo di machine learning non supervisionato chiamato k-means clustering. L'idea è dividere tutti i campioni in diversi gruppi a varianza uguale. In sostanza, il metodo riceve in input il numero di cluster n_clusters (8 di default) e separa i dati di conseguenza. Per capire il numero ottimale di cluster, si usa il metodo grafico del gomito (elbow). Include i seguenti passaggi:
- Addestrare diversi modelli con un numero differente di cluster e raccogliere i valori di WCSS (Within Cluster Sum of Squares) per ciascuno, ossia la somma delle distanze al quadrato delle osservazioni dal centroide del cluster più vicino.
- Rappresentare graficamente i valori di WCSS in funzione del corrispondente numero di cluster.
- Selezionare il numero più basso di cluster in cui avviene una diminuzione significativa del WCSS.
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, random_state=1)
kmeans.fit(uber_data[['Lat', 'Lon']])
wcss.append(kmeans.inertia_)
plt.figure(figsize=(12, 5))
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method', fontsize=25)
plt.xlabel('Number of clusters', fontsize=18)
plt.ylabel('WCSS', fontsize=18)
plt.xticks(ticks=list(range(1, 11)),
labels=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
plt.show()

Nel nostro caso, il numero di cluster più appropriato sembra essere 7. Usiamo questo valore per addestrare un modello e prevedere il numero di cluster per ciascun punto di pickup. Inoltre, illustreremo nuovamente graficamente i dati, questa volta aggiungendo le posizioni dei sette centroidi dei cluster:
kmeans = KMeans(n_clusters=7, random_state=1)
kmeans.fit_predict(df[['Lat', 'Lon']])
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.scatter(kmeans.cluster_centers_[:, 1], kmeans.cluster_centers_[:, 0], s=100, c='lime')
plt.show()
Ora estraiamo le coordinate esatte di tutti i centroidi e visualizziamole separatamente, senza i dati stessi:
centroids = pd.DataFrame(kmeans.cluster_centers_)
centroids.columns = ['Lat', 'Lon']
print(centroids)
plt.scatter(centroids['Lon'], centroids['Lat'])
plt.show()
Lat Lon
0 40.688588 -73.965694
1 40.765423 -73.973165
2 40.788001 -73.879858
3 40.656997 -73.780035
4 40.731074 -73.998644
5 40.700541 -74.201673
6 40.971229 -73.611288
Sarebbe più illustrativo mostrare questi centroidi su una mappa di New York City:
import folium
centroids_values = centroids.values.tolist()
nyc_map = folium.Map(location=[40.79659011772687, -73.87341741832425], zoom_start=50000)
for point in range(0, len(centroids_values)):
folium.Marker(centroids_values[point], popup=centroids_values[point]).add_to(nyc_map)
nyc_map

Con il nostro modello, possiamo prevedere il cluster più vicino per qualsiasi posizione di New York espressa in coordinate geografiche. In termini pratici, significa che Uber invierà un taxi disponibile dalla posizione più vicina e servirà il cliente più rapidamente.
Troviamo il cluster più vicino per il Lincoln Center for the Performing Arts nel borough di Manhattan:
lincoln_center = [(40.7725, -73.9835)]
kmeans.predict(lincoln_center)
array([1])
E per Howard Beach nel borough del Queens:
howard_beach = [(40.6571, -73.8430)]
kmeans.predict(howard_beach)
array([3])
Come possibili passi successivi, possiamo considerare l'applicazione di altri algoritmi di clustering di machine learning, l'analisi di diversi segmenti di dati (per ora/giorno della settimana/mese), l'individuazione dei cluster più e meno carichi o l'esplorazione delle relazioni tra i cluster identificati e la variabile Base del dataframe.
Altri casi d'uso comuni nei trasporti e nella logistica:
- pricing dinamico in base al bilanciamento domanda-offerta
- previsione della domanda
- automazione delle operazioni manuali
- veicoli a guida autonoma
- visibilità della supply chain
- rilevamento dei danni
- gestione del magazzino
- analisi del sentiment dei clienti
- chatbot per il servizio clienti
Data science nelle telecomunicazioni
Nell'ultimo paio di decenni, le tecnologie di telecomunicazione sono cresciute a un ritmo incredibilmente veloce ed entrate in una nuova fase del loro sviluppo. Oggi siamo circondati da dispositivi elettronici di ogni tipo e molte persone sono diventate letteralmente dipendenti da Internet, in particolare dai social network e dai messenger. A volte questa dipendenza dai dispositivi viene criticata perché sostituisce la comunicazione faccia a faccia. Tuttavia, dobbiamo ammettere che le telecomunicazioni hanno reso la nostra vita significativamente più semplice, permettendoci di entrare in contatto con persone in tutto il mondo in pochi secondi.
Ciò è stato particolarmente vero nel periodo della pandemia di COVID-19, quando molte aziende e scuole hanno adottato schemi di lavoro o apprendimento a distanza. In una realtà che cambia così rapidamente, la qualità e la fluidità della connettività digitale hanno assunto un'importanza senza precedenti in tutte le sfere. I periodi di lockdown hanno reso necessario per le persone chiamare e scrivere a colleghi, parenti e amici molto più spesso di prima. Tutte queste nuove tendenze hanno portato a un'enorme escalation dei volumi di telecomunicazioni, che a sua volta ha generato quantità immense di dati in questo settore.
L'uso di metodi di data science per elaborare i dati accumulati può aiutare l'industria delle telecomunicazioni in molti modi:
- snellire le operazioni,
- ottimizzare la rete,
- filtrare lo spam,
- migliorare le trasmissioni dati,
- eseguire analisi in tempo reale,
- sviluppare strategie aziendali efficaci,
- creare campagne di marketing di successo,
- aumentare i ricavi.
Esploriamo più nel dettaglio un compito comune nelle telecomunicazioni, relativo al rilevamento e al filtraggio dei messaggi indesiderati.
Caso d'uso nelle telecomunicazioni: creare un filtro antispam
Il filtraggio dello spam è una funzione vitale di tutti i moderni canali di comunicazione scritta, poiché ci protegge dall'essere bombardati quotidianamente da email che cercano di truffarci. Tecnicamente, è un altro esempio di problema di classificazione: in base ai dati storici, ogni nuovo messaggio in ingresso viene etichettato come ham (cioè un messaggio normale), e quindi arriva direttamente al destinatario, oppure come spam, e quindi viene bloccato o finisce nella cartella spam.
Un algoritmo di machine learning supervisionato popolare per questo scopo è il classificatore Naive Bayes. Si basa sull'omonimo teorema della teoria della probabilità, mentre "naive" si riferisce all'assunzione sottostante che tutte le parole in ciascun messaggio siano reciprocamente indipendenti. Questa assunzione non è esattamente corretta, poiché ignora l'inevitabile esistenza di word embedding naturali e del contesto. Tuttavia, nella maggior parte dei compiti di classificazione di testi con pochi dati, questo approccio sembra funzionare bene e produrre previsioni accurate.
Esistono diverse versioni del classificatore Naive Bayes, ciascuna con i propri casi di applicabilità: multinomiale, Bernoulli, gaussiano e flexible Bayes. Il tipo migliore per il nostro caso (rilevamento dello spam) è il Naive Bayes multinomiale. Si basa su conteggi di frequenza discreti delle feature categoriali o continue che rappresentano i conteggi delle parole in ciascun messaggio.
Applichiamo il filtro antispam Naive Bayes multinomiale al SMS Spam Collection Data Set dell'UCI Machine Learning Repository.
import pandas as pd
sms_data = pd.read_csv('SMSSpamCollection', sep='\t', header=None, names=['Label', 'SMS'])
print(f'Number of messages: {sms_data.shape[0]:,}\n\n'
f'{sms_data.head()}')
Number of messages: 5,572
Label SMS
0 ham Go until jurong point, crazy.. Available only ...
1 ham Ok lar... Joking wif u oni...
2 spam Free entry in 2 a wkly comp to win FA Cup fina...
3 ham U dun say so early hor... U c already then say...
4 ham Nah I don't think he goes to usf, he lives aro...
Ci sono 5.572 messaggi classificati da persone. Quanti di loro (in %) sono spam?
round(sms_data['Label'].value_counts()*100/len(sms_data)).convert_dtypes()
ham 87
spam 13
Name: Label, dtype: Int64
Il 13% degli SMS è stato identificato manualmente come spam.
Per preparare i dati alla classificazione Naive Bayes multinomiale, dobbiamo prima completare i seguenti passaggi:
- Codificare le etichette da stringa a formato numerico. Nel nostro caso le etichette sono binarie, quindi le codificheremo come 0/1.
- Estrarre le variabili predittive e target.
- Dividere i dati in set di train e test.
- Vettorializzare le stringhe dalla colonna SMS dei set predittivi di train e test per ottenere matrici CSR (compressed sparse row).
Il quarto passaggio richiede una spiegazione più dettagliata. Qui creiamo un oggetto matrice, lo addestriamo con il dizionario del vocabolario (tutte le parole uniche di tutti i messaggi del set predittivo di train con le corrispondenti frequenze) e poi trasformiamo i set predittivi di train e test in matrici. Il risultato saranno due matrici per i set predittivi di train e test, in cui le colonne corrispondono a ciascuna parola unica di tutti i messaggi del set di train, le righe ai messaggi stessi e i valori nelle celle al conteggio di frequenza delle parole per ciascun messaggio.
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
# Encoding labels
sms_data = sms_data.replace('ham', 0).replace('spam', 1)
X = sms_data['SMS'].values
y = sms_data['Label'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Vectorizing strings from the 'SMS' column
cv = CountVectorizer(max_df=0.95)
cv.fit(X_train)
X_train_csr_matrix = cv.transform(X_train)
X_test_csr_matrix = cv.transform(X_test)
Successivamente costruiremo un classificatore Naive Bayes multinomiale con i parametri di default e ne verificheremo l'accuratezza:
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, f1_score
clf = MultinomialNB()
clf.fit(X_train_csr_matrix, y_train)
predictions = clf.predict(X_test_csr_matrix)
print(f'Model accuracy:\n'
f'Accuracy score: {accuracy_score(y_test, predictions):.3f}\n'
f'F1-score: {f1_score(y_test, predictions):.3f}\n')
Model accuracy:
Accuracy score: 0.990
F1-score: 0.962
Abbiamo quindi ottenuto un filtro antispam altamente accurato.
I possibili passi successivi includono provare altri metodi di suddivisione train/test, migliorare il processo di vettorializzazione regolando alcuni dei suoi numerosi parametri (ad esempio la soglia per le parole troppo frequenti sia nei messaggi spam sia in quelli ham) e verificare quei casi molto rari in cui il classificatore ha rilevato erroneamente un messaggio, cercando di capire perché sia accaduto. Inoltre, possiamo visualizzare le parole più frequenti nei messaggi spam e ham usando un metodo come la word cloud (dopo una pulizia preliminare dei dati ed escludendo tutte le stopword o le parole poco informative). Infine, possiamo applicare altri algoritmi di machine o deep learning (support vector machine, alberi decisionali, reti neurali) e confrontare i risultati con l'approccio Naive Bayes.
Altri casi d'uso comuni nelle telecomunicazioni:
- segmentazione dei clienti
- sviluppo prodotto
- analisi dei Call Detail Record
- sistemi di raccomandazione
- previsione del churn dei clienti
- marketing mirato
- rilevamento delle frodi
- gestione e ottimizzazione della rete
- maggiore sicurezza della rete
- ottimizzazione dei prezzi
- previsione del valore del ciclo di vita del cliente
Case study di data science: corsi
Abbiamo fatto molta strada finora ed esplorato in dettaglio numerose applicazioni della data science in diversi campi. Se ora ti senti ispirato a scoprire altri casi d'uso basati su dataset reali e a poter applicare le tue nuove conoscenze e competenze tecniche per risolvere compiti pratici nel tuo ambito, potresti trovare utili i seguenti corsi brevi per principianti su vari case study di data science:
- Case Study: School Budgeting with Machine Learning in Python. In questo corso basato su un case study di una competizione di machine learning su DrivenData, esplorerai un problema legato al budgeting dei distretti scolastici e a come rendere più facile e veloce per le scuole confrontare le proprie spese con quelle altrui. Applicando alcune tecniche di elaborazione del linguaggio naturale, preparerai i budget scolastici e costruirai un modello per classificare automaticamente le loro voci, partendo da una versione semplice e procedendo gradualmente a una più avanzata. Inoltre, potrai vedere e analizzare la soluzione del vincitore della competizione, nonché consultare le submission degli altri partecipanti.
- Analyzing Marketing Campaigns with pandas. Pandas è la libreria più popolare di Python, e sviluppare solide competenze con i suoi strumenti è un must per qualsiasi data scientist. In questo corso altamente pratico, farai leva sui fondamenti di Python e pandas (aggiungere nuove colonne, unire/suddividere dataset, lavorare con colonne data, visualizzare risultati in matplotlib) utilizzando un finto dataset di marketing su un business di abbonamenti online. Metterai in pratica la traduzione di tipiche domande di marketing in valori misurabili. Alcune delle domande a cui risponderai sono: "Come ha performato questa campagna?", "Perché un particolare canale sta sotto-performando?", "Quale canale sta portando più abbonati?", ecc.
- Analyzing US Census Data in Python. In questo corso imparerai a orientarti facilmente nel Censimento decennale e nell'American Community Survey annuale ed estrarne vari dati demografici e socioeconomici, come reddito familiare, pendolarismo, razza e struttura familiare. Userai Python per richiedere i dati per diverse geografie dall'API del Census e la libreria pandas per manipolare i dati raccolti e ricavarne insight significativi. Inoltre, praticherai la mappatura con la libreria geopandas.
- Case Study: Exploratory Data Analysis in R. Questo corso breve sarà ideale se hai già una conoscenza di base degli strumenti di manipolazione e visualizzazione dati in R. Studiando i materiali del corso, metterai alla prova le tue abilità su un dataset reale per esplorare i dati storici di voto dell'Assemblea Generale delle Nazioni Unite. In particolare, analizzerai le tendenze di voto tra paesi, nel tempo e tra questioni internazionali. Questo case study ti permetterà di condurre un'analisi esplorativa dei dati end-to-end, fare più pratica con i pacchetti dplyr e ggplot2 e imparare nuove competenze.
- Human Resources Analytics: Exploring Employee Data in R. R è noto per essere più adatto all'analisi statistica rispetto a Python. In questo corso, sfrutterai questo vantaggio di R per manipolare, visualizzare ed eseguire test statistici su una serie di case study di HR analytics. Le tecniche di data science sono apparse relativamente di recente nel settore delle risorse umane. Tuttavia, oggi rappresentano una direzione molto promettente, poiché molte aziende contano sempre di più sui propri reparti HR per fornire insight e raccomandazioni azionabili utilizzando il database dei loro dipendenti.
- Data-Driven Decision Making in SQL. In questo corso imparerai a usare SQL per supportare il decision making e riportare i risultati al management. Il case study di interesse è incentrato su un'azienda di noleggio di film online con un database su dati dei clienti, valutazioni dei film, informazioni sugli attori, ecc. Alcuni compiti consisteranno nell'applicare query SQL per studiare le preferenze dei clienti, il loro coinvolgimento e lo sviluppo delle vendite. Imparerai le estensioni SQL per l'online analytical processing che aiutano a ottenere insight chiave da dati multidimensionali complessi.
Che tu voglia diventare un esperto di alto livello in data science o semplicemente imparare utili competenze di coding per estrarre preziosi insight data-driven nel tuo campo di studio, le risorse sopra sono un ottimo punto di partenza.
Conclusione
In sintesi, in questo articolo abbiamo indagato che cos'è la data science da molte angolazioni, come differisce dalla data analytics, in quali ambiti è applicabile, cosa sia un caso d'uso di data science e una roadmap generale da seguire per risolverlo con successo. Abbiamo discusso in che modo la data science possa essere utile per compiti reali in alcuni settori richiesti. Pur delineando molte applicazioni esistenti e potenziali, ci siamo concentrati sui casi d'uso più comuni in ciascuno di questi ambiti popolari e abbiamo mostrato come risolverli con algoritmi di data science e data analytics. Se vuoi saperne di più su casi d'uso in altri settori, dai un'occhiata ai nostri articoli sui casi d'uso nella banca, nel marketing e nelle vendite. Infine, abbiamo passato in rassegna alcuni corsi online utili per approfondire altri case study di data science.
Un'ultima curiosa osservazione: nessuno dei settori che abbiamo considerato in questo lavoro è del tutto nuovo. Anzi, alcuni di essi, come la medicina e le vendite, esistono da secoli. Nel corso della loro storia, molto prima che iniziasse la nostra nuova era di digitalizzazione globale, i dati di questi settori venivano comunque raccolti in una forma o nell'altra; scritti in libri e documenti, e conservati in archivi e biblioteche. Ciò che è davvero cambiato drasticamente negli ultimi anni, con l'avvento delle nuove tecnologie, è la comprensione fondamentale dell'immenso potenziale nascosto in qualsiasi dato e l'importanza vitale di registrarlo, raccoglierlo e conservarlo adeguatamente. Applicare questi sforzi e migliorare costantemente i sistemi di gestione dei dati ha reso possibile accumulare big data in tutti i settori per ulteriori analisi e previsioni.


