01 · Definizione
Cos'è la Data Science?
In tre parole: trovare significato nei dati. Un Data Scientist è come un detective: usa i dati come indizi per rispondere a domande di business, prevedere il futuro o automatizzare decisioni.
💡 Analogia del quotidiano
Immagina di gestire un negozio. Ogni giorno entrano clienti, comprano cose, tornano o spariscono. Se tieni un registro di tutto questo, puoi rispondere a domande come: «Chi rischia di non tornare?» o «Quale prodotto venderò di più il prossimo mese?». Questo è esattamente ciò che fa un Data Scientist — ma con milioni di "negozi" e miliardi di righe di dati.
Analisi Descrittiva
Risponde alla domanda: «Cosa è successo?»
Si guardano i dati storici per capire pattern, tendenze e anomalie.
Analisi Predittiva
Risponde alla domanda: «Cosa succederà?»
Si usano i dati passati per fare previsioni sul futuro.
Analisi Prescrittiva
Risponde alla domanda: «Cosa dovremmo fare?»
Il modello suggerisce la migliore azione da intraprendere.
Machine Learning
Il computer impara dai dati senza essere programmato caso per caso. Trova da solo le regole che descrivono il fenomeno.
«Un Data Scientist non inventa la verità: la trova dentro i dati che già esistono.»
— Principio fondamentale della Data Science02 · Vocabolario
Il Dizionario del Data Scientist
Il settore usa molti termini tecnici in inglese. Ecco i 12 più importanti, spiegati come se avessi 10 anni.
Una tabella con righe (osservazioni) e colonne (caratteristiche). Come un foglio Excel ma con migliaia o milioni di righe.
→ Il file CSV con 800 clienti è il nostro dataset.
Una singola colonna del dataset: un'informazione su ogni riga. Sono le variabili di input che il modello usa per imparare.
→ Età, fatturato, regione sono tutte feature.
La colonna che vogliamo prevedere. È il "voto" che il modello cerca di indovinare per ogni riga.
→ churn (0=rimane, 1=abbandona) è il nostro target.
Un algoritmo addestrato sui dati. Prende le feature in input e restituisce una previsione. È la "ricetta" che il computer ha imparato.
→ Random Forest è un tipo di modello.
La fase in cui il modello studia i dati storici per imparare le regole. Come studiare per un esame.
→ Usiamo l'80% dei dati per il training.
La porzione di dati nascosta durante il training. Serve a verificare quanto il modello sa generalizzare su dati mai visti.
→ Il 20% dei dati tenuto da parte per testare.
Il modello ha "memorizzato" i dati di training ma non sa generalizzare. Va benissimo sui dati noti, malissimo sui nuovi.
→ Come uno studente che impara tutto a memoria ma non capisce.
Il modello è troppo semplice e non riesce a cogliere i pattern nei dati. Va male sia sul training che sul test.
→ Come uno studente che non ha studiato abbastanza.
Una cella vuota nel dataset: l'informazione non c'è. Bisogna decidere come gestirla (rimuoverla, sostituirla con la media, ecc.).
→ Nel CSV: alcune celle di "score_soddisfazione" sono vuote.
Un valore estremo che si discosta molto dagli altri. Può essere un errore di inserimento o un dato reale ma raro.
→ Un fatturato di €50.000.000 in un dataset di PMI è un outlier.
Percentuale di previsioni corrette sul totale. Attenzione: non è sempre la metrica giusta, soprattutto su classi sbilanciate.
→ 85% accuracy = 85 su 100 previsioni corrette.
Una sequenza di passi trasformazione dati → modello automatizzata in modo che nessuno step venga "saltato" o applicato nel posto sbagliato.
→ Carica → Pulisci → Trasforma → Addestra → Valuta.
03 · Processo
La Pipeline: i 7 passi di ogni progetto
Ogni progetto Data Science, dal più semplice al più complesso, segue sempre la stessa sequenza. Questi sono i passi che farai in ogni esercizio del corso.
Caricamento dati
Si legge il file (CSV, Excel, database, API) e si trasforma in una struttura tabellare leggibile da Python. In questa fase si scopre quante righe, colonne e tipi di dati ci sono.
Analisi Esplorativa (EDA)
Si "guarda" il dataset con statistiche e grafici. Quanti NaN ci sono? Ci sono outlier? Le distribuzioni hanno senso? È la fase del detective: si raccolgono informazioni prima di agire.
Data Cleaning
Si sistemano i problemi trovati: si riempiono i valori mancanti, si eliminano i duplicati, si correggono i valori impossibili. I dati sporchi producono modelli bugiardi.
Costruzione delle Feature
Si creano nuove colonne più informative a partire da quelle esistenti. Per esempio: dalla data di acquisizione si calcola "quanti giorni è cliente?" — informazione molto più utile di una data grezza.
Preprocessing
Si trasformano i dati nel formato che gli algoritmi capiscono: le variabili testuali diventano numeri (encoding), le variabili numeriche vengono portate sulla stessa scala (scaling).
Addestramento del Modello
Si sceglie un algoritmo (es. Random Forest), gli si mostrano i dati di training e "impara" i pattern. Il modello ora sa fare previsioni su dati nuovi.
Valutazione
Si misura quanto bene il modello funziona sui dati di test (che non ha mai visto). Si usano metriche specifiche per il tipo di problema. Se non funziona bene, si torna al passo 4 o 5.
04 · Tipologie
Capire i Tipi di Dati
Non tutti i dati sono uguali. Riconoscere il tipo di dato è fondamentale perché ogni tipo richiede un trattamento diverso.
| Tipo | Cos'è | Esempio nel CSV | Come si tratta | In Python |
|---|---|---|---|---|
| Numerico Continuo | Può assumere qualsiasi valore reale | fatturato_annuo, score_soddisfazione | Scaling, normalizzazione, gestione outlier | float64 |
| Numerico Intero | Solo numeri interi, spesso contatori | numero_acquisti, eta, num_reclami | Spesso ok così; attenzione a range anomali | int64 |
| Categorico Nominale | Categorie senza ordine tra loro | regione, settore, genere | Label Encoding o One-Hot Encoding | object / category |
| Categorico Ordinale | Categorie con ordine preciso | livello_fidelizzazione (Junior→Senior) | Label Encoding con mappa numerica esplicita | object / category |
| Data / Tempo | Istante temporale specifico | data_acquisizione, data_ultimo_acquisto | Estrarre anno, mese, giorno, differenza tra date | datetime64 |
| Binario / Booleano | Solo due valori: 0/1 oppure Vero/Falso | churn, campagna_attiva, vip | Spesso è il target; usare class_weight se sbilanciato | int64 / bool |
💡 Perché lo scaling è importante?
Immagina di confrontare l'altezza di una persona (170 cm) con il suo stipendio (2.500 €). Se dai queste due variabili "crude" a un algoritmo, lo stipendio domina semplicemente perché ha numeri più grandi. Lo scaling porta tutto sulla stessa "taglia". È come convertire mele e arance in una scala comune prima di confrontarle.
05 · Algoritmi ML
I Principali Algoritmi Spiegati Semplicemente
Ogni algoritmo ha una "logica umana" dietro. Capire questa logica aiuta a scegliere quello giusto per ogni problema.
Regressione Logistica
Trova la "linea di confine" che separa due gruppi. Semplice, veloce, interpretabile. Il punto di partenza ideale per la classificazione.
Albero Decisionale
Una serie di domande Sì/No sui dati che porta a una decisione finale. Come un diagramma di flusso imparato dai dati.
Random Forest
Crea centinaia di alberi decisionali su porzioni casuali del dataset e li mette ai voti. La risposta è quella della maggioranza.
XGBoost
Crea alberi in sequenza: ogni albero corregge gli errori del precedente. Uno dei modelli più potenti per dati tabellari.
K-Means Clustering
Raggruppa automaticamente i dati in K gruppi simili tra loro. Non ha un target: trova pattern senza supervisione.
Regressione Lineare / Ridge
Prevede un numero continuo (non una categoria). Trova la relazione lineare tra feature e target. Ridge aggiunge una "penalità" per evitare overfitting.
| Algoritmo | Tipo problema | Pro | Contro | Quando usarlo |
|---|---|---|---|---|
| Logistic Regression | Classificazione | Veloce, interpretabile | Solo relazioni lineari | Baseline, dati limitati |
| Random Forest | Classificazione / Regressione | Robusto, gestisce NaN | Lento su dataset enormi | Primo modello serio |
| XGBoost | Classificazione / Regressione | Molto preciso | Più parametri da ottimizzare | Massimizzare performance |
| K-Means | Clustering (non supervisionato) | Semplice, veloce | K va scelto a mano | Segmentazione clienti |
| Ridge Regression | Regressione | Stabile, evita overfitting | Solo numeri in output | Prevedere valori continui |
06 · Metriche
Come si valuta un modello?
L'accuracy (precisione) non basta. Serve sapere come e dove sbaglia il modello, non solo quante volte sbaglia.
💡 Il paradosso dell'accuracy
Supponi che su 100 clienti, 95 non abbandonano e solo 5 abbandonano. Un modello che risponde sempre "non abbandona" ha il 95% di accuracy ma non trova mai chi abbandona davvero. È inutile. Per questo esistono metriche migliori.
Precision (Precisione)
Delle previsioni "abbandona" che ho fatto, quante erano corrette?
Recall (Recupero)
Di tutti quelli che veramente abbandonano, quanti ne ho trovati?
F1 Score
La media armonica tra Precision e Recall. Un unico numero che bilancia entrambe le metriche.
AUC-ROC
Misura quanto bene il modello separa le due classi. Va da 0.5 (casuale) a 1.0 (perfetto).
RMSE (per regressione)
Root Mean Squared Error: l'errore medio delle previsioni numeriche, nella stessa unità del target.
Cross-Validation
Si dividono i dati in 5 blocchi (fold). Si addestra 5 volte, ogni volta usando un blocco diverso come test. La media è più affidabile di una singola prova.
07 · Python
I Primi 10 Comandi Python da Conoscere
Non serve sapere programmare. Questi 10 comandi coprono il 90% delle operazioni che farai nel corso.
import pandas as pd # Carica il file CSV in una tabella (DataFrame) df = pd.read_csv("ds_esercizi_800.csv") # Quante righe e colonne? print(df.shape) # → (800, 24) # Mostra le prime 5 righe print(df.head()) # Mostra i tipi di dati print(df.dtypes)
# Statistiche base (media, min, max, ecc.) df.describe() # Contare i valori mancanti per colonna df.isnull().sum() # Quanti clienti per ogni regione? df["regione"].value_counts() # Tasso medio di churn per settore df.groupby("settore")["churn"].mean()
# Solo clienti che hanno abbandonato (churn=1) df_churned = df[ df["churn"] == 1 ] # Clienti del Nord con fatturato > 100.000 filtro = (df["regione"] == "Nord") & (df["fatturato_annuo"] > 100_000) df_nord_vip = df[filtro] # Selezionare solo alcune colonne df_mini = df[["id_cliente", "eta", "churn"]]
import numpy as np from datetime import date # Calcolo anzianità cliente in giorni oggi = pd.Timestamp(date.today()) df["anzianita_giorni"] = (oggi - df["data_acquisizione"]).dt.days # Flag clienti VIP (sopra 80° percentile) soglia = df["fatturato_annuo"].quantile(0.80) df["vip"] = (df["fatturato_annuo"] >= soglia).astype(int)
from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report # Scegli le colonne di input e quella da prevedere X = df[["eta", "numero_acquisti", "tasso_retention"]] y = df["churn"] # Dividi: 80% training, 20% test X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.20, random_state=42 ) # Addestra il modello modello = RandomForestClassifier(n_estimators=100, random_state=42) modello.fit(X_train, y_train) # Valuta sul test set y_pred = modello.predict(X_test) print(classification_report(y_test, y_pred))
08 · Attenzione
Gli Errori che Fanno Tutti all'Inizio
Non è una lista di colpe: sono le trappole in cui cade chiunque cominci. Saperle riconoscere è già metà della soluzione.
Guardare solo l'accuracy
Un dataset sbilanciato (es. 95% non-churn, 5% churn) fa sembrare ottimo un modello che risponde sempre "non-churn". Usare sempre anche F1 e AUC-ROC.
Data Leakage
Usare il test set per addestrare (anche indirettamente, es. calcolando la media su tutto il dataset prima dello split). Il modello "imbroglia" e sembra migliore di quanto è davvero.
Non fissare il random_state
Senza un seed fisso ogni esecuzione dà risultati diversi. Non si riesce a riprodurre l'esperimento né a confrontare due modelli in modo equo.
Eliminare i NaN senza pensare
Cancellare tutte le righe con valori mancanti sembra la soluzione più semplice, ma se il 30% dei dati ha almeno un NaN, si perde troppe informazioni. Meglio imputare con la mediana.
Usare subito il modello più complesso
XGBoost non è sempre la risposta migliore. Iniziare sempre con un modello semplice come baseline. Se il semplice già funziona bene, non serve il complesso.
Non capire i dati prima di modellarli
Saltare l'EDA per "arrivare subito al modello" è l'errore più costoso. Un'ora di esplorazione dati evita settimane di debug sui modelli.
09 · Percorso
La Roadmap: da Zero a Data Scientist
Un percorso realistico in 4 fasi. Non è una corsa: la comprensione profonda di ogni fase vale più della velocità.
Fase 1 · Fondamenta
Python & Dati
- Python base (variabili, loop, funzioni)
- pandas: DataFrame, filtraggio, groupby
- numpy: array, operazioni vettoriali
- matplotlib / seaborn: grafici base
- CSV, Excel, JSON: leggere file
- Statistica descrittiva
Fase 2 · Machine Learning
Modelli Base
- sklearn: Pipeline, split, metriche
- Classificazione: Logistic, RF
- Regressione: Linear, Ridge
- Clustering: K-Means
- Feature Engineering
- Cross-validation
Fase 3 · Avanzato
Performance
- XGBoost, LightGBM
- Hyperparameter tuning (GridSearch)
- SHAP: interpretabilità modelli
- Imbalanced data (SMOTE)
- Feature selection
- SQL per l'analisi dati
Fase 4 · Professionale
Produzione
- ML in produzione con API (FastAPI)
- Docker e ambienti virtuali
- MLflow: tracking esperimenti
- Dashboard (Streamlit, Plotly)
- Cloud: AWS / GCP / Azure base
- Portfolio su GitHub
10 · Verifica
Quiz di Autoverifica
Testa quello che hai capito. Rispondi senza rileggere: se sbagli, torna alla sezione corrispondente.
📝 Verifica di Comprensione · Livello 0
D1. Hai un dataset con 1.000 clienti: 950 non fanno churn, 50 sì. Il tuo modello prevede "non-churn" per tutti. Qual è l'accuracy?
D2. Cosa significa "data leakage"?
D3. Qual è la differenza tra Precision e Recall?
D4. Perché si usa lo scaling (StandardScaler) sulle feature numeriche?
D5. Cos'è K-Means?