
Data lake monitoring e data quality
Monitorare freschezza, completezza e qualità dei dati su data lake.
Cosa imparerai
- Comprendere il problema analitico e il contesto decisionale
- Applicare esempi, metriche e controlli a casi reali
Collegamenti
import pandas as pd
Data lake monitoring e data quality
Un lake continua a ricevere file anche quando arrivano in ritardo, con schema cambiato o con volumi anomali, e il problema spesso si nota solo a valle, in un report business già sbagliato. Monitorare un data lake significa trasformare questi silenzi pericolosi in segnali osservabili: file attesi, partizioni mancanti, qualità dei dati e costi fuori soglia. Vale la pena leggere la lezione come la costruzione di un sistema di allarme che intercetta freshness, completezza, duplicati e drift prima che diventino una decisione presa sui dati sbagliati.
Il problema concreto
Il problema non è conoscere il monitoring in astratto, ma decidere cosa fare quando il team lavora con dati incompleti, metriche ambigue e vincoli tecnici. Una lezione utile separa il segnale dal rumore, dice rispetto a quale baseline interpretare un numero e indica quale azione diventa difendibile dopo l’analisi.
Un caso tipico: una partizione giornaliera arriva con metà dei file attesi e uno schema leggermente diverso, ma il job successivo continua senza fallire. Il monitoring e la data quality servono proprio a controllare volume, freshness, schema e valori anomali prima che i dati finiscano in analytics.
Come ragionare sulla decisione
Conviene tenere a mente una sequenza, dalla decisione all’azione misurabile.
| Passaggio | Domanda da fare | Output atteso |
|---|---|---|
| Decisione | Che cosa cambia se capiamo meglio il monitoring? | Scelta esplicita |
| Segnale | Quale dato osservabile riduce l’incertezza? | Metrica o evento |
| Baseline | Rispetto a cosa interpretiamo il risultato? | Confronto credibile |
| Vincolo | Che cosa puo falsare la lettura? | Assunzione da dichiarare |
| Azione | Quale passo operativo segue? | Raccomandazione controllabile |
La sequenza evita che una nozione tecnica diventi un rituale vuoto. La prima domanda non è “quale metrica calcolo?”, ma quale decisione dovrà essere presa grazie a questa analisi. Se il risultato non cambia una scelta, è documentazione, non monitoring.
Formalizzare evidenza e rischio
Leggi la lezione come una relazione tra decisione, evidenza e rischio. La tabella rende esplicite le assunzioni, così uno stakeholder può discutere il criterio invece di fidarsi del risultato per autorità.
| Elemento | Definizione operativa | Controllo minimo |
|---|---|---|
| Unita di analisi | Oggetto su cui misuri il fenomeno | Utente, account, evento, ordine o periodo |
| Variabile osservata | Segnale che rappresenta il comportamento | Definizione stabile e tracciabile |
| Baseline | Stato contro cui confronti il segnale | Periodo, segmento, controllo o benchmark |
| Soglia decisionale | Punto in cui cambia l’azione | Criterio scritto prima della lettura |
| Rischio residuo | Errore che puo restare anche dopo l’analisi | Sensitivity check o revisione qualitativa |
La formalizzazione è solida quando un altro analista può riprodurre la logica, criticare le assunzioni e arrivare alla stessa decisione partendo dagli stessi dati. L’unità di lavoro è il bucket, la partizione, il file, la tabella o la policy. La metrica osservabile è il costo di scansione, la latenza, l’affidabilità, la freshness o il rischio di accesso.
Metriche di monitoring essenziali
| Metrica | Tool | Alert se |
|---|---|---|
| Freschezza partizioni | Glue/Athena query su MAX(partition) | Ultima partizione >24 ore fa |
| Volume righe per partizione | Athena COUNT(*) per partizione | Volume <50% della media mobile 7gg |
| File size anomalo | S3 inventory | File <10MB o >5GB |
| Schema validity | Glue Schema Registry | Nuovo file non matcha lo schema atteso |
| Cost anomalies | AWS Cost Explorer | Costo Athena >budget mensile |
Implementare data quality checks
-- Check freschezza: ultima partizione caricata
SELECT MAX(CONCAT(year, '-', LPAD(month,2,'0'))) AS last_partition
FROM information_schema.partitions
WHERE table_name = 'orders';
-- Check volume: confronto con media 7 giorni
SELECT COUNT(*) AS today_rows
FROM orders WHERE year=2024 AND month=3 AND day=15;
-- Alert se today_rows < avg_7gg * 0.5
Questi check vanno integrati in un workflow Airflow o Prefect che gira ogni ora e invia un alert su Slack o via email quando qualcosa non torna.
Caso reale: Netflix e la disciplina delle metriche
Netflix è un esempio utile perché ha costruito molte decisioni di prodotto intorno a segnali comportamentali osservabili: completamento degli episodi, tempo di ricerca prima della riproduzione, abbandono dopo pochi minuti, ritorno nella settimana successiva, efficacia delle raccomandazioni. Il punto non è che ogni azienda debba copiare Netflix. È metodologico: il dato non viene trattato come ornamento, ma come infrastruttura decisionale.
Quando Netflix valuta una modifica all’esperienza, per esempio una nuova riga di raccomandazioni o un diverso algoritmo di ranking, non misura solo il click immediato. Controlla anche se l’utente guarda davvero il contenuto, se torna nei giorni successivi, se riduce il tempo speso a cercare. Questa disciplina impedisce di ottimizzare vanity metric che sembrano positive nel breve ma erodono valore nel lungo periodo. Lo stesso vale qui: il monitoring deve essere collegato a un outcome, altrimenti l’analisi resta incompleta.
Esempio SQL: una vista di controllo
Il pattern è generico ma eseguibile nella maggior parte dei warehouse moderni. Serve a creare una base analitica con metrica, segmento e finestra temporale, così da confrontare periodi e gruppi senza riscrivere la logica ogni volta.
WITH base_events AS (
SELECT
user_id,
account_id,
event_type,
event_time,
DATE_TRUNC('week', event_time) AS week,
source,
device_type
FROM events
WHERE event_time >= CURRENT_DATE - INTERVAL '180 days'
AND user_id IS NOT NULL
),
weekly_user_metrics AS (
SELECT
week,
user_id,
COALESCE(source, 'unknown') AS source,
COALESCE(device_type, 'unknown') AS device_type,
COUNT(*) AS total_events,
COUNT(DISTINCT DATE(event_time)) AS active_days,
COUNT(DISTINCT event_type) AS event_diversity,
MAX(CASE WHEN event_type IN ('purchase', 'subscribe', 'activation') THEN 1 ELSE 0 END) AS reached_key_outcome
FROM base_events
GROUP BY week, user_id, source, device_type
)
SELECT
week,
source,
device_type,
COUNT(DISTINCT user_id) AS users,
ROUND(AVG(active_days), 2) AS avg_active_days,
ROUND(AVG(event_diversity), 2) AS avg_event_diversity,
ROUND(AVG(reached_key_outcome) * 100, 2) AS key_outcome_rate
FROM weekly_user_metrics
GROUP BY week, source, device_type
ORDER BY week, source, device_type;
La query non è la risposta finale. Crea una superficie di osservazione fatta di trend, segmenti, differenze tra canali e variazioni nel tempo, da cui formulare ipotesi più precise.
Esempio Python: stabilità e anomalie
Una metrica deve essere stabile abbastanza da orientare le decisioni e sensibile abbastanza da segnalare cambiamenti reali. In Python puoi controllare le variazioni anomale settimana su settimana.
# df contiene: week, segment, users, key_outcome_rate
# key_outcome_rate espresso in percentuale, es. 12.4
df = df.sort_values(['segment', 'week']).copy()
df['previous_rate'] = df.groupby('segment')['key_outcome_rate'].shift(1)
df['wow_change_pp'] = df['key_outcome_rate'] - df['previous_rate']
df['rolling_mean'] = df.groupby('segment')['key_outcome_rate'].transform(
lambda s: s.rolling(4, min_periods=2).mean()
)
df['rolling_std'] = df.groupby('segment')['key_outcome_rate'].transform(
lambda s: s.rolling(4, min_periods=2).std()
)
df['z_score'] = (df['key_outcome_rate'] - df['rolling_mean']) / df['rolling_std']
anomalies = df[df['z_score'].abs() >= 2].sort_values('z_score')
print(anomalies[['week', 'segment', 'key_outcome_rate', 'wow_change_pp', 'z_score']])
Il controllo evita di reagire a ogni oscillazione casuale e segnala quando una variazione merita un’indagine. In azienda alimenta alert, review settimanali e retrospettive di prodotto.
Lab in tre livelli
Al livello base, scrivi in cinque righe quale decisione concreta dovrebbe migliorare grazie al monitoring. Indica metrica, unità di analisi, baseline e rischio principale. Se non riesci a nominare la decisione, la lezione è ancora troppo astratta.
Al livello intermedio, costruisci una tabella con quattro colonne: segnale osservato, interpretazione prudente, controllo necessario, azione consigliata. Inserisci almeno un caso in cui il segnale non basta per decidere.
Al livello research-grade, trasforma l’esercizio in un memo decisionale con assunzioni, criteri di esclusione, soglia di intervento, sensitivity check e una proposta di monitoraggio dopo la decisione. Come materiale usa S3, Parquet, Iceberg, Delta, Athena, Glue e dataset lakehouse. Se non hai dati reali, crea un dataset sintetico con almeno 200 righe, una dimensione temporale, una dimensione segmento e una metrica di outcome.
Errori da evitare
L’errore tipico è usare il monitoring come etichetta tecnica invece che come criterio di scelta. Succede quando il team presenta un numero senza dire quale decisione cambia, quale baseline lo rende interpretabile e quale rischio resta aperto.
Tre errori ricorrono spesso. Il primo è lavorare su dati aggregati troppo presto, perché una media globale può nascondere due segmenti che si muovono in direzioni opposte. Il secondo è non controllare la qualità del dato, dato che eventi duplicati, tracking incompleto e timezone incoerenti producono conclusioni false. Il terzo è confondere correlazione e causalità: se gli utenti che usano una feature convertono di più, potrebbero farlo perché sono già più motivati, non perché la feature causi la conversione.
Checkpoint
Prima di chiudere, prova a rispondere:
- Quale decisione concreta dovrebbe migliorare questa lezione?
- Quale unità di analisi rende il problema misurabile?
- Quale baseline useresti per evitare una lettura isolata?
- Quale assunzione, se falsa, cambierebbe la conclusione?
- Quale output consegneresti a uno stakeholder non tecnico?
Riepilogo
Il monitoring e la data quality vanno trattati come uno strumento decisionale, non come un argomento da manuale. Il valore nasce dal collegare problema, dati, metrica, segmentazione e azione. Una buona analisi non termina con “il numero è salito” o “il numero è sceso”: termina con una frase operativa, cioè quale decisione prendiamo, con quale confidenza, e quale metrica useremo per sapere se avevamo ragione.
Percorso collegato
Lezioni da leggere insieme
Questi collegamenti portano la lezione dentro il resto del corso: basi da riprendere, passaggi successivi e connessioni tematiche tra moduli.