Vai al contenuto principale

Introduzione alla Causal AI con la libreria DoWhy in Python

Questo tutorial offre un'introduzione alla causal AI usando la libreria DoWhy in Python. Tratta i principi fondamentali e include esempi di codice.
Aggiornato 29 set 2026  · 14 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Quando si tratta di prendere decisioni basate sui dati, molti professionisti del settore hanno il dubbio persistente che gli algoritmi di previsione comunemente usati non siano sempre affidabili. Ad esempio, la quantità di cioccolato consumato pro capite è altamente predittiva del numero di vincitori del Premio Nobel in un paese, e c'è una correlazione tra le vendite di gelati e gli attacchi di squali. Tuttavia, questo non significa che abbia senso attirare un gran numero di squali sulla spiaggia per far decollare il nostro business dei gelati.

Qui entra in gioco, ovviamente, il concetto ben noto secondo cui "correlazione non implica causalità". Solo perché due variabili sono correlate non significa che possiamo usare una per influenzare l'altra. Entrambi gli eventi potrebbero essere guidati da una terza variabile, come il "bel tempo" nell'esempio degli squali e delle vendite di gelati, che agisce come causa comune di entrambi. Allo stesso tempo, comprendere le cause profonde dei fenomeni e usare l'analisi dei dati per promuovere il cambiamento è un compito cruciale per qualsiasi azienda. Ecco perché molti leader del settore, come Microsoft, Amazon, Uber, Spotify, McKinsey e molti altri, hanno iniziato a investire pesantemente nelle loro capacità di causal AI.

Questo tutorial copre alcuni dei concetti e delle idee fondamentali della causal AI utilizzando la libreria DoWhy in Python. L'inferenza causale è concettualmente piuttosto diversa dal machine learning standard, quindi la maggior parte delle persone parte con conoscenze di base limitate. Tuttavia, è utile avere nozioni di base sull'analisi di regressione e sulla modellazione statistica per seguire al meglio. Se sei alle prime armi con l'analisi di regressione o hai bisogno di un ripasso, valuta il corso di DataCamp Introduction to Linear Modeling in Python.

Puoi anche esplorare le differenze tra modelli predittivi e causali nel corso DataCamp Machine Learning for Business.

I mattoni della Causal AI

Quando si parla di inferenza causale, dobbiamo adottare un mindset diverso dal machine learning standard e dalla predictive analytics.

La filosofa Nancy Cartwright ha coniato l'espressione: "No causes in, no causes out." Significa che per ottenere risposte causali dobbiamo fare assunzioni sulla struttura causale alla base del fenomeno che stiamo studiando. Un approccio puramente data-driven non è sufficiente.

Può sembrare circolare a prima vista, ma non lo è.

Se vogliamo sapere se la correlazione tra consumo di cioccolato e premi Nobel è causale, dobbiamo escludere spiegazioni alternative. Queste spiegazioni alternative costituiscono conoscenza causale che non sempre troviamo nei dati stessi, ma che dobbiamo integrare con informazioni esterne.

Poniamo di voler introdurre una nuova policy di lavoro da casa (WFH) e di voler capire se inciderà sulla produttività dei dipendenti. Un'analisi iniziale ha mostrato che chi lavora da casa completa più task quotidianamente.

Tuttavia, possiamo essere certi che questa correlazione resterà tale una volta applicata la policy a tutti? In altre parole, possiamo essere sicuri che la relazione tra WFH e produttività sia causale?

Graph created by causalfusion.net

Nota: grafico creato da causalfusion.net

Un semplice modello causale per questo contesto potrebbe apparire così.

Supponiamo che lavorare da casa abbia un effetto sulla produttività, ma non conosciamo la direzione o l'intensità dell'effetto. Allo stesso tempo, potrebbero esserci altre ragioni per cui osserviamo livelli di produttività più alti per chi lavora da casa.

Dipendenti con figli o persone molto introverse, che non tollerano bene il rumore dei nostri grandi open space, potrebbero decidere di lavorare più spesso da casa perché per loro è più comodo. Queste variabili potrebbero a loro volta essere collegate alla produttività, rendendole possibili cause comuni che potrebbero essere anche la fonte della correlazione.

Per rendere esplicite tutte queste assunzioni, le rappresentiamo in quello che viene chiamato grafo causale, una rappresentazione grafica usata per modellare le relazioni tra variabili in un sistema, concentrandosi specificamente sulle relazioni causali.

Scoprirai che alcune di queste assunzioni possono essere piuttosto forti in scenari reali. Il grande vantaggio è che i grafi causali rendono molto esplicite assunzioni e conoscenze pregresse, ma dobbiamo essere sempre pronti a metterle in discussione e a perfezionarle per dare credibilità alle nostre analisi.

Prime mosse con DoWhy in Python

La libreria DoWhy di Microsoft, sviluppata in collaborazione con Amazon Web Services come parte dell'ecosistema PyWhy, sta rapidamente diventando lo standard di settore per l'analisi causale nel mondo Python. Possiamo usare DoWhy per simulare un dataset in base al modello causale sopra, illustrando alcuni passaggi fondamentali della pipeline di inferenza causale. Per prima cosa, dobbiamo installare DoWhy nel nostro ambiente.

!pip install git+https://github.com/microsoft/dowhy.git

Una volta fatto, possiamo caricare le librerie necessarie.

import numpy as np
import pandas as pd
import dowhy

Ora, creiamo noi stessi un dataset. Il grande vantaggio di lavorare con dati simulati quando si studia la causal AI è che abbiamo il pieno controllo sul processo di generazione dei dati e conosciamo la "ground truth", cosa che non avverrebbe con dati reali.

Impostiamo l'effetto causale vero uguale a uno (beta=1), specifichiamo due cause comuni e creiamo diecimila campioni secondo relazioni lineari semplici tra le variabili del modello.

La variabile che esaminiamo come trattamento è impostata come binaria, cioè può essere zero o uno.

In precedenza abbiamo fissato un punto di origine per la generazione di numeri casuali - using np.random.seed(1) - per poter riprodurre esattamente il nostro dataset.

from dowhy import CausalModel
import dowhy.datasets

# Set seed to enable exact replication
np.random.seed(1)

# Simulate sample data
data = dowhy.datasets.linear_dataset(
    beta=1,
    num_common_causes=2,
    num_discrete_common_causes=1,
    num_instruments=1,
    num_samples=10000,
    treatment_is_binary=True)

df = data['df']

DoWhy assegna le seguenti etichette:

Tabella 1

Etichetta

Variabile

Tipo

Media

v0

La variabile di trattamento, ovvero la principale variabile di interesse nella nostra analisi (lavoro da casa)

Binaria

0.608

y

L'outcome di interesse (produttività)

Continua

1.583

W0

Introversione

Continua

-0.148

W1

Numero di figli

Categorica

1.5

Z0

Una variabile strumentale che influisce solo su v0 ma non su y (chiusura della metropolitana)

Binaria

0.281

Qui abbiamo implicitamente definito un grafo causale impostando il tipo di trattamento e il numero di cause comuni. DoWhy memorizza gli oggetti grafo nel linguaggio DOT, che ci offre un modo pratico per specificare il nostro grafo causale diretto (digraph) quando lavoriamo con dati reali.

digraph {v0->y;W0-> v0; W1-> v0;Z0-> v0;W0-> y; W1-> y;}

Infine, combiniamo tutte queste informazioni in un unico modello causale.

# Create a causal model from the data and given graph.
model=CausalModel(
        data = df,
        treatment=data['treatment_name'],
        outcome=data['outcome_name'],
        graph=data['gml_graph']
        )

Sbloccare la potenza della Causal AI

Prima di condurre la nostra analisi causale, facciamo un benchmark rispetto a ciò che ci direbbe un approccio ingenuo basato su un semplice algoritmo di previsione lineare.

# Run a linear regression of column y on v0 in df
import statsmodels.api as sm

X = df['v0'].astype(float)
y = df['y'].astype(float)

X = sm.add_constant(X)

ols = sm.OLS(y, X).fit()

# Display a more parsimonious results summary
print(ols.summary().tables[1])

Il coefficiente angolare in una regressione bivariata è pari a 1.298. Tuttavia, sappiamo che il vero effetto causale è in realtà pari a uno, dato che abbiamo generato i dati in questo modo.

Ciò implica che le due cause comuni, introversione e avere figli, che influenzano sia la produttività sia la probabilità di lavorare da casa, portano in questo caso a una sovrastima di quasi il 30%.

Fortunatamente, finché abbiamo dati su queste variabili, possiamo affrontare facilmente questo bias includendo le cause comuni in un'analisi multivariata.

Nella letteratura sulla causal AI, questo è noto come criterio del backdoor. Vogliamo controllare tutte le variabili nel grafo causale che puntano alla variabile di trattamento. Entrano "dalla porta di servizio" e possono quindi creare una correlazione spuriosa tra trattamento e outcome che non è causale. Nel nostro esempio, ciò vale per introversione e numero di figli.

WFH <— Introversione —> Produttività

WFH <— Figli —> Produttività

DoWhy offre una serie di algoritmi che possono essere utilizzati per determinare se un effetto causale desiderato è identificabile dato un particolare modello causale.

# Check whether causal effect is identified and return target estimands
identified_estimand = model.identify_effect()

Non sorprende che, nel nostro semplice modello causale per l'effetto del lavoro da casa, l'identificazione causale sia possibile.

Successivamente, possiamo concentrarci sulla stima, ovvero il processo di quantificazione dell'effetto target utilizzando i dati disponibili.

DoWhy offre diversi algoritmi tra cui scegliere, tra cui regressione, matching, stratificazione e metodi di ponderazione. Poiché i dati sottostanti che abbiamo simulato si basavano su relazioni lineari, una semplice regressione sarebbe sufficiente. Se ti serve un ripasso, il corso di DataCamp Intro to Regression with statsmodels in Python può aiutarti.

Tuttavia, per rendere la nostra analisi più generale, useremo il ponderamento per probabilità inversa, che è in grado di gestire anche dati non lineari.

# Estimate the causal effect using inverse probability weighting
estimate = model.estimate_effect(identified_estimand,
                                 method_name="backdoor.propensity_score_weighting")

DoWhy restituisce una stima dell'effetto causale pari a 1.001. Ovviamente, i numeri in sé non sono molto significativi in questo contesto simulato. Ciò che conta, però, è che siamo molto vicini alla ground truth pari a uno. Rispetto alla regressione eseguita prima, il bias è stato ridotto di un incredibile 99,6%.

Mettere alla prova i tuoi risultati

Tutto molto impressionante, ma non dovremmo fermarci qui.

Il principio "no causes in, no causes out" ci dice che qualsiasi analisi causale può essere valida solo quanto le assunzioni che portiamo al tavolo.

Ad esempio, come possiamo essere sicuri che siano solo introversione e figli a influenzare il WFH, come stabilisce il nostro semplice modello causale?

Per aumentare la fiducia nelle nostre assunzioni, DoWhy ci mette a disposizione un'intera suite di test di confutazione che ci consentono di stressare la nostra analisi, inclusi, ma non solo, test con sottocampioni o trattamenti placebo.

# Check sensitivity of obtained estimate to unobserved confounders
refute_results = model.refute_estimate(identified_estimand, estimate,
                                       method_name="add_unobserved_common_cause")

Vediamo cosa succede se aggiungiamo un'altra causa comune oltre a introversione e figli.

Questa volta non abbiamo dati su questa variabile, quindi per noi resterà non osservabile. Quanto sono affidabili le nostre stime? Purtroppo, la risposta non è molto rassicurante.

Il grafico in Figura 2 illustra l'influenza sostanziale che le cause comuni non osservate possono avere sull'effetto causale stimato, variando da -0,222 a 1,003. Questo intervallo è talmente ampio da poter potenzialmente raddoppiare l'effetto stimato.

Figure 2

Non è però molto sorprendente. Meccanismi causali alternativi che coinvolgono variabili non osservate e che non possiamo considerare nell'analisi rappresenteranno sempre un problema negli studi causali.

Fortunatamente, in questo contesto esiste un modo alternativo per ottenere l'identificazione, e DoWhy è abbastanza intelligente da individuarlo per noi.

Trovare strategie causali alternative

Anche se i dipendenti introversi e quelli con figli potrebbero lavorare da casa più spesso, potrebbero esserci altri determinanti del WFH che non sono collegati alla produttività.

Poniamo di aver avuto una grossa interruzione del trasporto pubblico e che una delle linee della metropolitana della nostra città sia stata chiusa per tre mesi. Di conseguenza, i dipendenti che vivevano in quartieri vicini alla linea hanno lavorato più spesso da casa, anche se altrimenti avrebbero preferito venire in ufficio.

Possiamo illustrare così questo modello causale ampliato.

Augmented causal model

In questo caso, la chiusura della metropolitana funge da cosiddetta variabile strumentale.

Intuitivamente, la chiusura agisce come uno shock sugli orari di pendolarismo delle persone, creando una sorta di esperimento naturale.

Per tre mesi, chi vive vicino alla linea interrotta lavorerà più spesso da casa, ma ciò non ha altra relazione con la loro produttività. Avrai notato che abbiamo già incluso una variabile strumentale, Z0, nella creazione del dataset simulato sopra impostando l'opzione num_instruments=1. La funzione identify_effect() di DoWhy è quindi in grado di trovare automaticamente variabili strumentali adatte nel grafo causale.

iv_estimate = model.estimate_effect(identified_estimand,
                                    method_name="iv.instrumental_variable")

Dopo la stima, troviamo che l'effetto causale è 0.920. È leggermente meno accurato della strategia backdoor, ma comunque molto più accurato della previsione ingenua.

La stima con variabili strumentali è vantaggiosa perché non si basa su assunzioni sul numero di cause comuni non osservate del WFH e della produttività.

Quindi, anche se le nostre stime possono essere meno precise, sono più robuste grazie alle assunzioni più deboli. Questo è un trade-off comune nell'analisi causale.

E adesso?

DoWhy è un ottimo punto di partenza per la causal AI. È una potente libreria end-to-end che offre una pipeline di inferenza causale versatile, guidando l'utente attraverso i passaggi essenziali.

Una volta compreso il workflow di base, puoi passare a temi più avanzati come la scoperta causale e potenziare la tua analisi con librerie aggiuntive come DoubleML o daggity, ggdag e pcalg in R. Quando ti sentirai a tuo agio con le basi, potresti esplorare argomenti più avanzati di inferenza causale. Il corso di DataCamp Advanced Causal Inference with R è un ottimo passo successivo.

L'inferenza causale offre una prospettiva nuova sull'analisi dei dati. La maggior parte degli approcci dipende dalla comprensione del grafo causale o da altre assunzioni causali. Il trucco sta nello scegliere le tecniche e le assunzioni adatte alla tua situazione specifica. Questo richiede conoscenza esterna ed esperienza nel dominio.

Perciò, è una buona idea confrontarti con i tuoi esperti di marketing o con gli specialisti HR per avere la loro opinione su un problema specifico e vedere se possono aiutarti a costruire un modello adeguato.

La conoscenza causale è cruciale in molti contesti di business. Dobbiamo capire, ad esempio, se il lancio di un nuovo prodotto è efficace o quanto è valida la nostra strategia pubblicitaria.

Ottenere risposte causali dai dati può essere più difficile che addestrare un semplice algoritmo predittivo, ma ne vale la pena. E librerie come DoWhy ti mettono a disposizione un ottimo set di strumenti per trovare le soluzioni più adatte alle tue esigenze.

Se hai trovato questo tutorial illuminante e non vedi l'ora di applicare tecniche di causal AI ai tuoi progetti, non c'è momento migliore per approfondire. Nel corso completo Machine Learning for Business imparerai non solo i modelli predittivi ma anche quelli causali che possono aiutarti a prendere decisioni di business migliori.


Paul Hünermund 's photo
Author
Paul Hünermund
LinkedIn
Twitter
Paul Hünermund è Professore assistente di Strategia e Innovazione presso la Copenhagen Business School. Nella sua ricerca, il dott. Hünermund studia come le aziende possano sfruttare le nuove tecnologie nell’ambito del machine learning e dell’intelligenza artificiale per creare valore e ottenere un vantaggio competitivo. Il suo lavoro esplora il potenziale di bias nei processi decisionali organizzativi e i modi in cui i manager possono contrastarli. In questo modo, fa luce sulle origini di strategie aziendali efficaci in mercati caratterizzati da un elevato grado di competizione tecnologica e sulle conseguenti implicazioni per la crescita economica e la sostenibilità ambientale. 
 
Il suo lavoro è stato pubblicato, tra gli altri, su The Journal of Management Studies, Econometrics Journal, Research Policy, Journal of Product Innovation Management, International Journal of Industrial Organization, MIT Sloan Management Review e Harvard Business Review. I suoi studi sono stati ripresi da Frankfurter Allgemeine Zeitung, Süddeutsche Zeitung, Politiken e Neue Zürcher Zeitung. Il dott. Hünermund fa parte del comitato editoriale del Journal of Causal Inference ed è membro del team esecutivo della divisione Technology and Innovation Management presso l’Academy of Management. Ha conseguito un dottorato in economia aziendale alla KU Leuven in Belgio e si è laureato all’Università di Mannheim in Germania con un master in economia.

Jermain Kaminski's photo
Author
Jermain Kaminski
Jermain Kaminski è ricercatore universitario in Imprenditorialità e Innovazione presso la Maastricht University. Nelle sue ricerche combina machine learning e elaborazione del linguaggio naturale, con un focus specifico su dati testuali, audio e video in ambito imprenditoriale. In particolare, le sue ricerche attuali si concentrano sul decision-making strategico, approfondendo l’impatto del causal machine learning sui processi decisionali. I suoi lavori, in coautorato, sono stati pubblicati su Journal of Business Venturing, Journal of Business Venturing Insights, Journal of Product Innovation Management, Small Business Economics, ACM Conference on Human Factors in Computing Systems, Harvard Business Review, tra gli altri. 
 
Jermain ha studiato alla Witten/Herdecke University, in Germania, e al Massachusetts Institute of Technology, negli Stati Uniti. Al MIT è stato visiting student e ricercatore presso il MIT Center for Collective Intelligence della Sloan School of Management e il MIT Media Lab. Jermain ha conseguito il dottorato di ricerca alla RWTH Aachen University. È co-fondatore e co-chair del Causal Data Science Meeting (causalscience.org).
Argomenti
Intelligenza artificiale
Python
Correlato

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro