Un servizio di assistenza riceve in media 3 ticket l'ora. Quanto è probabile che in un'ora non ne arrivi nessuno? E che ne arrivino 8? Un server registra in media 2 errori al giorno: 7 errori in un giorno sono normale variabilità o un segnale da indagare? Per rispondere serve un modello per il conteggio di eventi in un intervallo, e il più semplice e diffuso è la distribuzione di Poisson.
Quando si applica
La distribuzione di Poisson descrive il numero di eventi che si verificano in un intervallo di tempo, di spazio o di volume quando:
- gli eventi accadono uno alla volta, non a gruppi;
- il numero di eventi in intervalli che non si sovrappongono è indipendente;
- il tasso medio λ è costante nell'intervallo considerato.
Esempi tipici sono le chiamate a un centralino, le richieste a un servizio web in un minuto tranquillo, i refusi per pagina di un libro, i difetti per metro di un cavo. Un esempio storico molto citato è lo studio di Ladislaus von Bortkiewicz sulle morti per calcio di cavallo nei corpi di cavalleria prussiani, che seguivano bene questa distribuzione.
La formula
Se X ~ Poisson(λ), la probabilità di osservare esattamente k eventi è:
P(X = k) = e^(−λ) · λᵏ / k!
Una proprietà notevole è che media e varianza coincidono e valgono entrambe λ.
L'esempio dei ticket
Con λ = 3 ticket l'ora:
| k | P(X = k) |
|---|---|
| 0 | circa 0,050 |
| 1 | circa 0,149 |
| 2 | circa 0,224 |
| 3 | circa 0,224 |
| 4 | circa 0,168 |
| 5 | circa 0,101 |
| 6 o più | circa 0,084 |
Un'ora senza ticket accade circa una volta su venti. Sei o più ticket in un'ora, il doppio della media, capitano circa l'8% delle ore: in una giornata lavorativa di otto ore è facile che accada almeno una volta. Pianificare il personale solo sulla media significa trovarsi regolarmente in affanno.
Il legame con la binomiale
La Poisson nasce come limite della binomiale quando il numero di prove n è molto grande, la probabilità p è molto piccola e il prodotto λ = n · p resta moderato. Se un sito riceve 10.000 visite al giorno e ogni visita ha una probabilità dello 0,02% di generare un errore, il numero di errori è binomiale con n = 10.000 e p = 0,0002, ma è praticamente indistinguibile da una Poisson con λ = 2. La Poisson è più comoda perché richiede un solo parametro.
Cambiare intervallo
Se gli eventi seguono un processo di Poisson, il tasso si riscala con l'intervallo. Con 3 ticket l'ora, in mezz'ora il numero di ticket è Poisson con λ = 1,5, in una giornata di otto ore con λ = 24. Inoltre la somma di conteggi di Poisson indipendenti è ancora di Poisson: se due code ricevono in media 3 e 2 ticket l'ora, insieme ne ricevono in media 5, sempre con distribuzione di Poisson.
Il tempo tra un evento e il successivo segue invece una distribuzione esponenziale con media 1/λ: con 3 ticket l'ora, l'attesa media tra due ticket è di 20 minuti.
Usarla per le soglie di allarme
Torniamo al server con 2 errori medi al giorno. La probabilità di osservarne 7 o più, se il tasso fosse davvero 2, è circa 0,0045, cioè meno di una volta ogni duecento giorni. Osservarlo è quindi un buon motivo per indagare.
Si può fissare una soglia ragionata: scegliamo il valore k tale che P(X ≥ k) sia sotto una probabilità accettabile di falso allarme. In Python:
from scipy.stats import poisson
lam = 2
for k in range(4, 10):
print(k, poisson.sf(k - 1, lam)) # P(X >= k)
Così l'allarme non scatta per le normali fluttuazioni, ma segnala gli scostamenti davvero insoliti.
Quando il modello non regge
Sovradispersione
Nei dati reali capita spesso che la varianza osservata sia molto più grande della media. Si parla di sovradispersione, e indica che le ipotesi della Poisson non valgono: il tasso cambia nel tempo, oppure gli eventi arrivano a grappoli. Gli errori di un'applicazione, per esempio, si concentrano dopo un rilascio o durante un picco di traffico. In questi casi un modello come la binomiale negativa, o semplicemente un tasso diverso per fasce orarie, descrive meglio i dati.
Tasso variabile
Le richieste a un sito non hanno lo stesso tasso alle tre di notte e alle undici del mattino. Applicare un'unica Poisson all'intera giornata produce soglie troppo basse di notte e troppo alte di giorno. Conviene stimare λ separatamente per ogni fascia.
Eventi non indipendenti
Un utente che riceve un errore spesso riprova subito, generando altri errori. Questi eventi non sono indipendenti e gonfiano i conteggi. Prima di modellare, conviene chiedersi se ogni evento è davvero un caso a sé o la conseguenza di un altro.
Un controllo rapido
Prima di usare la Poisson su un conteggio reale:
- calcola media e varianza dei conteggi per intervallo;
- se sono simili, la Poisson è un buon punto di partenza;
- se la varianza è molto maggiore, cerca cause di eterogeneità o raggruppamento;
- verifica che il tasso sia stabile nel periodo considerato.
In sintesi
- La Poisson modella il numero di eventi indipendenti in un intervallo con tasso costante.
- Media e varianza sono entrambe uguali a λ.
- È il limite della binomiale con molte prove e probabilità piccola.
- Permette di fissare soglie di allarme basate su una probabilità di falso allarme scelta.
- Varianza molto maggiore della media segnala che il modello non è adeguato.