Causal Discovery
La scoperta causale ricava dai dati grafi di causa ed effetto. Come funzionano l'algoritmo PC e i suoi successori, quali ipotesi fanno e un esempio eseguibile.
La scoperta causale consiste nell'inferire dai dati quali variabili causano quali effetti, producendo un grafo diretto in cui una freccia da X a Y significa che X influenza direttamente Y. Il machine learning standard apprende associazioni sufficienti per la modellazione predittiva. La scoperta causale chiede quali di queste associazioni reggerebbero a un intervento, come cambiare l'impostazione di una macchina o il programma di un semaforo. Il risultato è un insieme di strutture causali candidate, spesso con alcuni archi non orientati, che esperti del dominio ed esperimenti perfezionano in seguito.
Quando è possibile apprendere una struttura causale#
I grafi causali sono di solito grafi aciclici diretti (DAG), la stessa struttura usata da una rete bayesiana, interpretata in termini causali: ogni freccia rappresenta un effetto diretto. Gli algoritmi di scoperta si basano su tre ipotesi standard. In base alla condizione di Markov causale, una volta note le cause dirette di una variabile, questa è indipendente da ogni variabile che non sia un suo effetto. La fedeltà afferma che ogni indipendenza nei dati deriva dalla struttura del grafo, non da effetti che si annullano casualmente. La sufficienza causale afferma che nessuna variabile non misurata causa due variabili misurate.
Anche se valgono tutte e tre le ipotesi, i dati osservazionali non sempre consentono di determinare la direzione dei legami. La catena X → Y → Z, la catena inversa X ← Y ← Z e la struttura a forcella X ← Y → Z implicano tutte lo stesso schema di indipendenza: X e Z diventano indipendenti una volta noto Y. Perciò, nessuna quantità di dati osservazionali permette di distinguerle. Il collider X → Y ← Z è diverso. X e Z sono indipendenti da soli, ma diventano dipendenti una volta noto Y: una caratteristica che determina la direzione di entrambe le frecce.
Gli algoritmi restituiscono quindi una classe di equivalenza di Markov: un grafo parzialmente diretto i cui archi orientati sono certi e i cui archi non orientati potrebbero puntare in una direzione o nell'altra. La stessa caratteristica spiega una classica fonte di distorsione del dataset: filtrare o correggere per un collider crea una dipendenza tra le sue cause che non esiste nella popolazione completa.
Algoritmi di scoperta#
Tre famiglie coprono la maggior parte dei metodi. Gli algoritmi basati su vincoli, come PC, dal nome di Peter Spirtes e Clark Glymour, che lo pubblicarono nel 1991, partono da un grafo non orientato completamente connesso, eliminano gli archi tra variabili che risultano condizionalmente indipendenti ai test e poi orientano i collider. FCI estende questo approccio ai casi con confondenti nascosti. Gli algoritmi basati su punteggio, come la ricerca di equivalenze greedy (GES), esplorano i grafi alla ricerca del punteggio migliore, per esempio il criterio informativo bayesiano; NOTEARS riformula l'assenza di cicli come vincolo differenziabile, consentendo di eseguire la ricerca come ottimizzazione continua con discesa del gradiente. I metodi funzionali come LiNGAM presuppongono relazioni lineari con rumore non gaussiano, il che rende identificabile la direzione di ogni arco, anche tra sole due variabili.
Le librerie per la scoperta causale accettano anche l'ordine temporale, vincoli fisici e conoscenze esperte come regole di fondo che vietano o richiedono archi specifici, restringendo la ricerca e orientando archi che i soli dati non consentono di orientare. La libreria open source causal-learn implementa tutte e tre le famiglie. Questo esempio genera dati a partire da un collider noto e lo recupera con PC:
import numpy as np
from causallearn.search.ConstraintBased.PC import pc
rng = np.random.default_rng(0)
n = 5000
# Verità di riferimento: pioggia ed evento allo stadio causano entrambi congestione
rain = rng.normal(size=n)
event = rng.normal(size=n)
congestion = rain + event + rng.normal(scale=0.5, size=n)
# PC verifica l'indipendenza condizionale per recuperare il grafo basandosi solo sui dati
data = np.column_stack([rain, event, congestion])
result = pc(data, alpha=0.05, node_names=["rain", "event", "congestion"], show_progress=False)
print(result.G)L'output elenca due archi orientati, rain --> congestion ed event --> congestion. PC orienta entrambi perché pioggia ed evento sono indipendenti, ma diventano dipendenti una volta nota la congestione. Se la verità fosse stata una catena da pioggia a congestione a ritardi, gli archi sarebbero risultati non orientati.
Applicazioni della scoperta causale#
La biologia ha fornito uno dei primi risultati di riferimento. Nel 2005, Karen Sachs e colleghi hanno appreso una rete di segnalazione proteica tra 11 proteine e fosfolipidi a partire da misurazioni di singole cellule, recuperando la maggior parte delle connessioni note; gli autori hanno poi confermato in esperimenti di laboratorio una nuova connessione prevista. Nelle scienze climatiche, metodi per serie temporali come PCMCI, sviluppato da Jakob Runge e implementato nel pacchetto Tigramite, individuano legami causali tra variabili climatiche gestendo ritardi e autocorrelazione, un approccio naturale per l'analisi delle serie temporali. L'ecosistema PyWhy affianca gli strumenti di scoperta a DoWhy per il passaggio successivo: stimare l'entità di un effetto una volta fissato il grafo.
La visione artificiale può fornire le variabili. Il conteggio degli oggetti con Ultralytics YOLO26 conta i veicoli e i pedoni che attraversano una linea o una regione nei filmati del traffico; i conteggi registrati per intervallo temporale possono essere combinati con meteo, calendari degli eventi e temporizzazione dei semafori prima di eseguire un algoritmo di scoperta.
Scoperta causale e termini correlati#
- Apprendimento di rappresentazioni causali: apprende le variabili causali stesse a partire da input grezzi come i pixel, insieme al grafo che le collega. La scoperta causale parte da variabili già misurate.
- AI spiegabile (XAI): spiega quali input hanno determinato la previsione di un modello, senza affermare che modificare un input cambierebbe il risultato nel mondo reale.
- Feature engineering: seleziona e costruisce input che migliorano la previsione, incluse variabili solo correlate al target. Un grafo causale identifica le variabili la cui modifica sposterebbe il target.










