ELAI S.r.l.

Difetti rari: come un’AUC di 0,94755 può convivere con il 91,74% di falsi allarmi

Un esempio esatto con tre score collega ROC, prevalenza e precisione: soglie, capacità di revisione, costi e limiti delle stime sui difetti rari.

Difetti rari: come un’AUC di 0,94755 può convivere con il 91,74% di falsi allarmi

Ricerca applicata · Valutazione AI · 24 settembre 2026

Abstract: un’AUC alta non determina quanti allarmi siano corretti

Costruiamo un classificatore con tre livelli di score e AUROC esatta 0,94755. Mantenendo identiche le distribuzioni degli score nelle due classi, la precisione di una soglia passa dal 90,91% all’8,26% quando la prevalenza dei difetti scende dal 10% allo 0,1%. Non peggiora il ranking: cambia la composizione della popolazione. L’articolo deriva questo risultato, confronta due soglie e mostra perché la scelta operativa richiede capacità di revisione e costi degli errori, oltre alle metriche aggregate.

Si tratta di un esperimento sintetico deterministico, calcolato con Python: nessun modello addestrato, nessuna immagine di produzione e nessun cliente EL-AI. Il contesto è il controllo qualità industriale, ma la distinzione fra probabilità condizionate vale più in generale. Sono richiesti probabilità elementari, teorema di Bayes e interpretazione della matrice di confusione. Le quantità sono note per costruzione; l’incertezza di una stima reale viene discussa separatamente.

1. Tre denominatori, tre domande

Definiamo positivo un pezzo difettoso. TP sono difetti segnalati, FN difetti non segnalati, FP pezzi buoni segnalati e TN pezzi buoni non segnalati. La sensibilità TPR divide TP per tutti i difetti. Il tasso di falsi positivi FPR divide FP per tutti i pezzi buoni. La precisione PPV divide TP per tutti i pezzi segnalati. Confondere questi denominatori trasforma un buon test condizionato sulla classe in una promessa ingiustificata sugli allarmi.

TPR = TP/(TP+FN) FPR = FP/(FP+TN) PPV = TP/(TP+FP) π = P(defect) PPV = π·TPR / [π·TPR + (1−π)·FPR]

L’ultima formula si ottiene scrivendo la probabilità congiunta di difetto e allarme come π·TPR, e la probabilità di allarme come somma dei due casi disgiunti: difetto segnalato e pezzo buono segnalato. È Bayes applicato a una soglia fissata. Se non ci sono allarmi, il denominatore è zero e la precisione non è definita. Dichiararla uguale a uno renderebbe vincente un sistema che non segnala mai nulla, anche quando perde tutti i difetti.

2. Un ranking completo, non un solo punto ROC

Per calcolare un’AUC dobbiamo specificare più di sensibilità e FPR a una soglia. Introduciamo tre score ordinati H>M>L. Fra i difetti, il 60% riceve H, il 30% M e il 10% L. Fra i pezzi buoni, lo 0,1% riceve H, lo 0,9% M e il 99% L. Una soglia stretta segnala solo H; una più permissiva segnala H e M. I valori sono inventati come popolazione matematica dichiarata, non presentati come dati osservati.

P(score | defect) = (0.600, 0.300, 0.100) P(score | good) = (0.001, 0.009, 0.990) ROC: (0,0) → (0.001,0.6) → (0.01,0.9) → (1,1)

Con la convenzione standard di mezzo credito ai pareggi, l’AUC è la probabilità che un difetto scelto a caso abbia score maggiore di un pezzo buono, più metà della probabilità di uguaglianza. Qui i confronti strettamente vincenti pesano 0,6×0,999+0,3×0,99=0,8964. I pareggi pesano 0,6×0,001+0,3×0,009+0,1×0,99=0,1023. Quindi AUC=0,8964+0,1023/2=0,94755. Lo script verifica anche l’area trapezoidale della ROC: le due costruzioni coincidono.

I segmenti fra i punti rappresentano la convenzione sui pareggi o una randomizzazione delle decisioni dentro un livello, non nuovi score che il modello possiede. Ordinare arbitrariamente gli esempi con lo stesso score può produrre curve a gradini diverse. Per questo la gestione dei pareggi deve essere esplicita, soprattutto quando uno score discreto o quantizzato genera molti valori uguali. In questo esempio il contributo dei pareggi all’AUC è superiore a 0,05: ignorarlo non è un dettaglio trascurabile.

3. Cambiare la prevalenza lasciando ferma la ROC

Scegliamo N=1.000.000 di pezzi come scala di conteggio. Non abbiamo ispezionato un milione di oggetti: moltiplichiamo probabilità esatte per un totale convenzionale. Alla soglia H+M, TPR=0,9 e FPR=0,01. Con prevalenza 0,1% ci sono 1.000 difetti: 900 segnalati e 100 persi. Fra 999.000 pezzi buoni, 9.990 vengono segnalati per errore. Gli allarmi totali sono 10.890, dei quali soltanto 900 corretti.

PrevalenzaSogliaTPFPFNPrecisione
10%H600009004000098.52%
10%HM9000090001000090.91%
1%H6000990400085.84%
1%HM90009900100047.62%
0.1%H60099940037.52%
0.1%HM90099901008.26%

La ROC resta identica perché TPR e FPR condizionano ciascuno su una classe. La precisione cambia perché condiziona sull’allarme, che mescola le due classi in proporzioni dipendenti da π. Questa invarianza è valida solo se le distribuzioni degli score condizionate alla classe restano ferme: è un’ipotesi di cambiamento della prevalenza, non una proprietà garantita quando cambiano telecamera, materiale, illuminazione o tipo di difetto. Se cambia anche lo score entro le classi, può cambiare la ROC.

Sopra: ROC del classificatore sintetico, con convenzione di mezzo credito ai pareggi. Sotto: precisione delle due soglie al variare della prevalenza, mantenendo ferme le distribuzioni condizionate. Probabilità esatte, non risultati di una linea industriale.
Sopra: ROC del classificatore sintetico, con convenzione di mezzo credito ai pareggi. Sotto: precisione delle due soglie al variare della prevalenza, mantenendo ferme le distribuzioni condizionate. Probabilità esatte, non risultati di una linea industriale.

4. Dall’obiettivo di precisione al requisito sui falsi allarmi

Supponiamo di volere almeno l’80% di allarmi corretti conservando TPR=0,9. Risolvendo Bayes rispetto a FPR, otteniamo un requisito quantitativo. Con π=0,001 e precisione richiesta p*=0,8, FPR deve essere al massimo circa 0,0002252, cioè 0,02252%. Il valore 1% della soglia H+M è oltre quaranta volte più grande. Una differenza che sembra piccola sul grafico ROC cambia completamente il carico di revisione quando i negativi sono quasi tutta la popolazione.

PPV ≥ p* FPR ≤ π·TPR·(1−p*) / [p*·(1−π)] π=0.001, TPR=0.9, p*=0.8 FPR ≤ 0.000225225…

Stringere a H riduce FPR a 0,001, ma abbassa TPR a 0,6: la precisione raggiunge soltanto il 37,52%. Non possiamo inserire il vecchio TPR nella formula dopo aver cambiato soglia. In questo classificatore a tre livelli, nemmeno selezionare casualmente una frazione degli H migliora la precisione attesa: riduce TP e FP nello stesso rapporto. Per raggiungere l’80% servirebbe nuova informazione discriminante, un’altra popolazione o un secondo controllo efficace, non una soglia magica.

5. Una soglia con più precisione può essere la scelta peggiore

Con π=0,001, H genera 1.599 allarmi e perde 400 difetti; H+M genera 10.890 allarmi e perde 100 difetti. Se la capacità di revisione è 2.000 pezzi per periodo, soltanto H rispetta il limite fra queste due scelte. Ma se ogni difetto perso pesa 100 unità di penalità e ogni falso allarme una unità, H costa 40.999 contro 19.990 per H+M. Queste penalità sono ipotetiche e adimensionali: servono a rendere esplicito il compromesso, non sono prezzi o danni reali.

Alerts = N[π·TPR+(1−π)·FPR] Cost = C_FN·Nπ(1−TPR) + C_FP·N(1−π)FPR

La precisione descrive la composizione degli allarmi; non assegna un valore ai difetti mancati. La capacità descrive un vincolo; non dimostra che una soglia sia economicamente preferibile. Una decisione coerente deve specificare prima quale obiettivo minimizzare e quali vincoli rispettare. Se una coda satura ritarda anche i veri positivi, il costo statico sopra non basta: occorre un modello temporale della revisione. Aggiungere un operatore umano senza considerare il volume non elimina il problema statistico.

6. Che cosa dimostra un test bilanciato

Un test con molti difetti può stimare sensibilità per tipologia in modo più efficiente di un campione casuale che ne contiene pochissimi. Il problema nasce se la sua precisione viene trasferita direttamente in produzione. Con prevalenza artificiale 50%, la soglia H+M ha PPV=0,9/(0,9+0,01)≈98,90%, molto lontano dall’8,26% del nostro scenario raro. La ricchezza di positivi nel test è utile per studiare il modello, ma non rappresenta la frequenza degli eventi nel flusso reale.

Nel nostro esperimento i tassi sono esatti; su dati reali sono stimati. Zero falsi positivi su 1.000 negativi non prova FPR=0. Con prove indipendenti e un tasso fisso f, la probabilità di osservarne zero è (1−f)^1000. Ponendola a 0,05 si ottiene il limite superiore unilaterale binomiale al 95%, circa 0,00299: molto più alto del requisito 0,0002252 calcolato sopra. Servono negativi sufficienti e rappresentativi, non soltanto una percentuale arrotondata a zero.

Indipendenza e rappresentatività non sono formalità: fotogrammi quasi identici dello stesso pezzo non valgono quanto pezzi indipendenti, e una linea pulita in laboratorio non riproduce necessariamente una linea usurata. La soglia va scelta sui dati di sviluppo e valutata su un test separato. Continuare ad aggiustarla dopo aver visto gli errori del test trasforma il test in parte dell’ottimizzazione. Neppure una formula di Bayes corretta recupera un FPR stimato con dati contaminati.

7. Fonti, riproducibilità e interpretazione

Saito e Rehmsmeier (PLOS ONE, 2015) analizzano ROC e precision-recall con simulazioni e dati applicativi; abbiamo consultato fondamenti, metodi e risultati. Il loro lavoro aiuta a distinguere ranking e affidabilità delle predizioni positive. Qui usiamo una popolazione discreta originale e calcoli esatti, non replichiamo i loro dataset. Il punto non è abolire la ROC: è abbinarla alla domanda che può rispondere, senza usarla come sostituto di prevalenza, soglia e carico operativo.

Il pacchetto eseguito usa Python 3.14.0, libreria standard e nessuna casualità; Matplotlib 3.11.2 produce quattro figure localizzate. Salva probabilità, conteggi, AUC verificata con due metodi e curve di sensibilità alla prevalenza. I conteggi sono esatti per la popolazione costruita, salvo rappresentazione floating point. Il frammento seguente ricostruisce l’effetto principale e il limite binomiale; non addestra un classificatore.

for pi in [.1, .01, .001]:
    precision = pi*.9/(pi*.9+(1-pi)*.01)
    print(pi, precision)
print(1-.05**(1/1000))

Nelle applicazioni AI che EL-AI intende approfondire, questo è un criterio di valutazione tecnica, non una dichiarazione di risultati industriali già ottenuti. La conclusione è verificabile: AUC=0,94755 e precisione=8,26% possono coesistere senza alcun errore matematico. Per interpretarle occorre sapere quale soglia è stata scelta, quale popolazione arriva al sistema e quale conseguenza produce ogni decisione. La competenza non consiste nel mostrare il numero più alto, ma nel rendere esplicito che cosa quel numero misura.

Saito T., Rehmsmeier M. (2015), The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets, PLOS ONE 10(3): e0118432.

Codice, risultati e istruzioni. Risultati JSON. Fonte consultata il 24 settembre 2026. Analisi con assistenza AI, senza dichiarare peer review. Copertina ImageGen illustrativa, non fotografia di una linea EL-AI o di un cliente.