Teorema di Bayes e Valutazione dei Fornitori: 6 Esercizi Svolti dal Livello Base ad Avanzato

Cerca:

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

 

Scegliere un fornitore basandosi solo sull’ultimo lotto consegnato è uno degli errori più frequenti (e costosi) nella gestione della supply chain. Un campione perfetto può nascondere un processo produttivo instabile, così come un singolo pezzo difettoso può essere solo un’anomalia statistica in uno stabilimento d’eccellenza.

Per evitare decisioni pancia-a-pancia, chi analizza i dati si affida all’inferenza bayesiana. Il motivo è semplice: il Teorema di Bayes permette di partire da quello che già sappiamo su un fornitore (la conoscenza a priori) e di correggerlo man mano che arrivano i risultati dei test sul campo (l’evidenza empirica).

Si ottiene così una misura dinamica della fiducia, capace di adattarsi senza sobbalzi né ingenuità.

In questo articolo affrontiamo (6 + 1) problemi di valutazione dei fornitori a complessità crescente.

Non troverai solo formule: per ogni scenario analizziamo la logica decisionale e il motivo per cui certi numeri cambiano la percezione del rischio in azienda.

Pubblicità

 

Esercizio 1: Il Fornitore Sconosciuto (Livello Facile)

Testo

La tua azienda, LogiTech Srl, sta valutando due nuovi potenziali fornitori di componenti elettronici: Alpha e Beta. Da dati di settore, sai che la probabilità che un fornitore sia “affidabile” (cioè con un tasso di difetti < 1%) è del 60%. Inoltre, per i fornitori affidabili, la probabilità di superare un controllo qualità a campione è del 95%, mentre per quelli non affidabili è solo del 40%.

Scegli un fornitore a caso e sottoponi i suoi componenti a un controllo qualità: supera il test.

Qual è la probabilità che il fornitore scelto sia affidabile?

Risoluzione

Dati del problema

[math]P(A)=0.60[/math] – Probabilità a priori che un fornitore sia affidabile

[math]P(\bar{A})=0.40[/math] – Probabilità a priori che un fornitore NON sia affidabile

[math]P(S|A)=0.95[/math] – Probabilità di superare il test se il fornitore è affidabile

[math]P(S|\bar{A})=0.40[/math] – Probabilità di superare il test se il fornitore NON è affidabile

[math]S[/math] = Evento “supera il test”

Passo 1: Calcolo della probabilità totale di superare il test

Per il teorema della probabilità totale:

[math]\displaystyle P(S)=P(S|A)\cdot P(A)+P(S|\bar{A})\cdot P(\bar{A})[/math]

[math]\displaystyle P(S)=0.95\cdot 0.60+0.40\cdot 0.40=0.57+0.16=0.73[/math]

Passo 2: Applicazione del Teorema di Bayes

[math]\displaystyle P(A|S)=\frac{P(S|A)\cdot P(A)}{P(S)}=\frac{0.95\cdot 0.60}{0.73}=\frac{0.57}{0.73}\approx 0.7808[/math]

Risultato: La probabilità che il fornitore sia affidabile, dato che ha superato il test, è circa 78.08%.

 

💡 Osservazioni strategiche

  • La probabilità a posteriori (78.08%) è maggiore della probabilità a priori (60%) perché il test fornisce un’evidenza positiva.
  • La differenza è moderata perché il test non è perfetto: c’è un 40% di falsi positivi tra i fornitori non affidabili.
  • In produzione, questo calcolo potrebbe essere implementato come una funzione che aggiorna automaticamente la fiducia in un fornitore dopo ogni controllo.

❓ Domanda di riflessione

Quale proprietà del Teorema di Bayes hai utilizzato per combinare le probabilità dei due scenari (affidabile e non affidabile) al denominatore?


Esercizio 2: Due Fornitori a Confronto (Livello Medio-Facile)

Testo

LogiTech Srl ha ora due fornitori in prova: Gamma e Delta. Dalle valutazioni iniziali:

  • Gamma: proviene da un settore con alta affidabilità. Probabilità a priori di essere affidabile = 85%.
  • Delta: proviene da un settore con bassa affidabilità. Probabilità a priori di essere affidabile = 35%.

Entrambi i fornitori vengono sottoposti a un test di qualità. I test hanno caratteristiche diverse:

Fornitore Probabilità di superare il test se affidabile Probabilità di superare il test se non affidabile
Gamma 98% 15%
Delta 90% 25%

Entrambi i fornitori superano il test.

Quale fornitore è più probabile che sia affidabile? Calcola le probabilità a posteriori per entrambi.

Risoluzione

Fornitore Gamma

Dati:

[math]P(A_G)=0.85[/math], [math]P(\bar{A}_G)=0.15[/math]

[math]P(S_G|A_G)=0.98[/math], [math]P(S_G|\bar{A}_G)=0.15[/math]

Passo 1: Probabilità totale di superare il test per Gamma

[math]\displaystyle P(S_G)=0.98\cdot 0.85+0.15\cdot 0.15=0.833+0.0225=0.8555[/math]

Passo 2: Teorema di Bayes per Gamma

[math]\displaystyle P(A_G|S_G)=\frac{0.98\cdot 0.85}{0.8555}=\frac{0.833}{0.8555}\approx 0.9737[/math]

Fornitore Delta

Dati:

[math]P(A_D)=0.35[/math], [math]P(\bar{A}_D)=0.65[/math]

[math]P(S_D|A_D)=0.90[/math], [math]P(S_D|\bar{A}_D)=0.25[/math]

Passo 1: Probabilità totale di superare il test per Delta

[math]\displaystyle P(S_D)=0.90\cdot 0.35+0.25\cdot 0.65=0.315+0.1625=0.4775[/math]

Passo 2: Teorema di Bayes per Delta

[math]\displaystyle P(A_D|S_D)=\frac{0.90\cdot 0.35}{0.4775}=\frac{0.315}{0.4775}\approx 0.6597[/math]

Confronto

Fornitore Probabilità a priori Probabilità a posteriori
Gamma 85.00% 97.37%
Delta 35.00% 65.97%

Risultato: Gamma rimane più probabile come fornitore affidabile (97.37% vs 65.97%).

💡 Osservazioni strategiche

  • La probabilità a posteriori di Delta è quasi raddoppiata (da 35% a 66%) grazie al test positivo, ma rimane inferiore a quella di Gamma.
  • Questo esempio mostra come il Teorema di Bayes permetta di combinare in modo ottimale:
    • Conoscenza pregressa (prior) sul settore di provenienza
    • Evidenza empirica (likelihood) dal test
  • In un sistema di production-ready, si potrebbe implementare un punteggio di fiducia che si aggiorna dopo ogni lotto di prodotti ricevuto.

❓ Domanda di riflessione

Cosa succederebbe se per Delta il test avesse un tasso di falso positivo molto più basso (es. 5% invece di 25%)? Cambierebbe la decisione finale?


Esercizio 3: Il Test Imperfetto con Più Risultati (Livello Medio)

Testo

L’azienda EcoPack valuta i fornitori di imballaggi sostenibili. Un fornitore può essere in tre stati:

  • A: Alta qualità (tasso di difetti < 0.5%)
  • M: Media qualità (tasso di difetti tra 0.5% e 2%)
  • B: Bassa qualità (tasso di difetti > 2%)

Le probabilità a priori sono:

[math]P(A)=0.50[/math], [math]P(M)=0.30[/math], [math]P(B)=0.20[/math]

Un test di qualità può dare tre esiti:

  • Verde (supera con eccellenza)
  • Giallo (supera con riserva)
  • Rosso (non supera)

Le probabilità condizionate sono:

Stato P(Verde|Stato) P(Giallo|Stato) P(Rosso|Stato)
A 0.80 0.15 0.05
M 0.30 0.50 0.20
B 0.05 0.30 0.65

Un fornitore viene testato e ottiene esito Giallo.

Calcola le probabilità a posteriori per i tre stati.

Risoluzione

Passo 1: Calcolo della probabilità totale di ottenere Giallo

[math]\displaystyle P(Giallo)=P(Giallo|A)\cdot P(A)+P(Giallo|M)\cdot P(M)+P(Giallo|B)\cdot P(B)[/math]

[math]\displaystyle P(Giallo)=0.15\cdot 0.50+0.50\cdot 0.30+0.30\cdot 0.20=0.075+0.15+0.06=0.285[/math]

Passo 2: Applicazione del Teorema di Bayes per ogni stato

Per A:

[math]\displaystyle P(A|Giallo)=\frac{0.15\cdot 0.50}{0.285}=\frac{0.075}{0.285}\approx 0.2632[/math]

Per M:

[math]\displaystyle P(M|Giallo)=\frac{0.50\cdot 0.30}{0.285}=\frac{0.15}{0.285}\approx 0.5263[/math]

Per B:

[math]\displaystyle P(B|Giallo)=\frac{0.30\cdot 0.20}{0.285}=\frac{0.06}{0.285}\approx 0.2105[/math]

Verifica: somma = 1

[math]0.2632+0.5263+0.2105=1.0000[/math]

Tabella riassuntiva

Stato Prior Likelihood (Giallo) Posterior
A 50% 15% 26.32%
M 30% 50% 52.63%
B 20% 30% 21.05%

💡 Osservazioni strategiche

  • L’esito “Giallo” ha ridotto la probabilità di A (da 50% a 26.3%) e aumentato quella di M (da 30% a 52.6%).
  • Questo è un esempio di classificazione bayesiana con più di due classi.
  • In un sistema reale, si potrebbe assegnare un “punteggio di rischio” basato sulla probabilità a posteriori e decidere se accettare, ispezionare ulteriormente o rifiutare il lotto.

❓ Domanda di riflessione

Perché la somma delle probabilità a posteriori è sempre 1? Quale proprietà fondamentale della probabilità garantisce questo risultato?

Pubblicità

Esercizio 4: Aggiornamento Sequenziale (Livello Medio-Difficile)

Testo

GreenEnergy riceve componenti dal fornitore Zeta. Sulla base di esperienze pregresse, la probabilità che Zeta sia affidabile è del 70%.

Vengono eseguiti due test indipendenti in sequenza:

  • Test 1: probabilità di superarlo se affidabile = 90%, se non affidabile = 30%. Zeta lo supera.
  • Test 2: probabilità di superarlo se affidabile = 85%, se non affidabile = 20%. Zeta lo supera anche.

Qual è la probabilità che Zeta sia affidabile dopo entrambi i test?

Risoluzione

Metodo 1: Aggiornamento sequenziale

Dopo il Test 1:

[math]\displaystyle P(S_1)=0.90\cdot 0.70+0.30\cdot 0.30=0.63+0.09=0.72[/math]

[math]\displaystyle P(A|S_1)=\frac{0.90\cdot 0.70}{0.72}=\frac{0.63}{0.72}=0.875[/math]

Dopo il Test 2 (usando la posterior del Test 1 come nuova prior):

[math]\displaystyle P(S_2|S_1)=0.85\cdot 0.875+0.20\cdot 0.125=0.74375+0.025=0.76875[/math]

[math]\displaystyle P(A|S_1\cap S_2)=\frac{0.85\cdot 0.875}{0.76875}=\frac{0.74375}{0.76875}\approx 0.9675[/math]

Metodo 2: Unico aggiornamento (con indipendenza)

Per test indipendenti condizionatamente allo stato:

[math]P(S_1\cap S_2|A)=0.90\cdot 0.85=0.765[/math]

[math]P(S_1\cap S_2|\bar{A})=0.30\cdot 0.20=0.06[/math]

[math]\displaystyle P(S_1\cap S_2)=0.765\cdot 0.70+0.06\cdot 0.30=0.5355+0.018=0.5535[/math]

[math]\displaystyle P(A|S_1\cap S_2)=\frac{0.765\cdot 0.70}{0.5535}=\frac{0.5355}{0.5535}\approx 0.9675[/math]

Risultato: La probabilità che Zeta sia affidabile dopo due test positivi è 96.75%.

💡 Osservazioni strategiche

  • L’aggiornamento sequenziale è equivalente all’aggiornamento unico se i test sono indipendenti condizionatamente allo stato.
  • In produzione, l’approccio sequenziale è più flessibile: permette di fermarsi dopo ogni test e di integrare nuovi test in tempo reale.
  • Attenzione: l’indipendenza condizionata è un’assunzione forte. In realtà, test simili potrebbero avere errori correlati.

Grafico dell’evoluzione della probabilità

Probabilità di affidabilità
    100% |                                         ● (96.75%)
     95% |                                    ●
     90% |                               ●
     85% |                          ●
     80% |                     ●
     75% |                ●
     70% |           ● (prior)
         +-----------------------------------------
            Prima   Dopo T1   Dopo T2

❓ Domanda di riflessione

Perché il risultato è lo stesso nei due metodi? Quale proprietà del Teorema di Bayes viene utilizzata nell’aggiornamento sequenziale?


Esercizio 5: Fornitore con Dati Continui (Livello Difficile)

Testo

MedTech valuta fornitori di dispositivi medici. La qualità di un fornitore è misurata dal parametro [math]\theta \in [0,1][/math] che rappresenta il tasso di difetti. La distribuzione a priori per [math]\theta[/math] è una Beta:

[math]\theta \sim \text{Beta}(\alpha=2,\beta=8)[/math]

Questa prior riflette l’opinione che il tasso di difetti sia probabilmente basso (media [math]\frac{2}{10}=0.20[/math]).

Viene testato un campione di 10 dispositivi e si osservano 2 difetti.

Calcola la distribuzione a posteriori di [math]\theta[/math] e la probabilità che [math]\theta < 0.15[/math].

Risoluzione

Passo 1: Identificazione della famiglia coniugata

La distribuzione Beta è coniugata alla verosimiglianza Binomiale.

Forse potrebbe interessarti anche:  Validare gli output dei LLM: un framework quantitativo per data team e workflow aziendali

Se:

  • Prior: [math]\theta \sim \text{Beta}(\alpha,\beta)[/math]
  • Dati: [math]k[/math] successi (difetti) su [math]n[/math] prove

Allora:

[math]\theta|\text{dati} \sim \text{Beta}(\alpha+k,\beta+n-k)[/math]

Passo 2: Calcolo dei parametri a posteriori

[math]\alpha=2[/math], [math]\beta=8[/math]

[math]k=2[/math] difetti su [math]n=10[/math] test

[math]\alpha_{post}=2+2=4[/math]

[math]\beta_{post}=8+10-2=16[/math]

Quindi:

[math]\theta|\text{dati} \sim \text{Beta}(4,16)[/math]

Passo 3: Calcolo della probabilità richiesta

La media a posteriori è:

[math]\displaystyle E[\theta|\text{dati}]=\frac{4}{4+16}=\frac{4}{20}=0.20[/math]

Calcoliamo [math]P(\theta < 0.15)[/math] usando la CDF della [math]\text{Beta}(4,16)[/math].

Per [math]\alpha,\beta[/math] interi positivi, vale la relazione con la distribuzione Binomiale:

[math]\displaystyle P(\theta < x) = I_x(\alpha,\beta) = \sum_{j=\alpha}^{\alpha+\beta-1} \binom{\alpha+\beta-1}{j} x^j (1-x)^{\alpha+\beta-1-j}[/math]

Nel nostro caso: [math]\alpha=4[/math], [math]\beta=16[/math], quindi [math]\alpha+\beta-1=19[/math].

Per [math]x=0.15[/math]:

[math]\displaystyle P(\theta < 0.15)=\sum_{j=4}^{19} \binom{19}{j} (0.15)^j (0.85)^{19-j}[/math]

Svolgendo la somma (o usando una tabella/software) si ottiene:

[math]P(\theta < 0.15) \approx 0.3162[/math]

Risultato: [math]P(\theta < 0.15) \approx 31.62\%[/math]

💡 Osservazioni strategiche

  • L’uso di prior coniugate (Beta-Binomiale) semplifica enormemente i calcoli: la posterior è nella stessa famiglia della prior.
  • In un sistema production-ready, si potrebbe mantenere una distribuzione Beta per ogni fornitore e aggiornarla dopo ogni lotto ricevuto.
  • La probabilità [math]P(\theta < 0.15)=31.62\%[/math] è il bayesian credible interval per la soglia di qualità. 31.6% indica che i 2 difetti su 10, sebbene compatibili con un tasso del 20%, non forniscono evidenza sufficiente per spingere la coda sinistra sotto il 15% con alta probabilità.

Grafico delle distribuzioni

❓ Domanda di riflessione

Come cambierebbe la probabilità [math]P(\theta < 0.15)[/math] se la prior fosse più forte (es. Beta(20,80) invece di Beta(2,8))? E se il campione fosse più grande (n=100 con 20 difetti)?


Esercizio 6: Rete Bayesiana Completa (Livello Esperto)

Testo

SmartChain gestisce una rete di fornitori. La qualità di un fornitore dipende da due fattori latenti:

  • Tecnologia ([math]T[/math]): all’avanguardia (A) o obsoleta (O), con prior [math]P(T=A)=0.40[/math]
  • Controllo qualità interno ([math]C[/math]): rigoroso (R) o lasco (L), con prior [math]P(C=R)=0.70[/math]

La probabilità che un fornitore sia affidabile ([math]A_f[/math]) dipende da [math]T[/math] e [math]C[/math] secondo questa tabella:

Tecnologia Controllo P(Affidabile|T,C)
A R 0.95
A L 0.70
O R 0.60
O L 0.10

Un fornitore viene testato e risulta affidabile (supera tutti i controlli).

Calcola:

  1. La probabilità a posteriori che il fornitore abbia tecnologia all’avanguardia
  2. La probabilità a posteriori che abbia controllo qualità rigoroso
  3. La probabilità congiunta a posteriori per tutte e 4 le combinazioni

Risoluzione

Passo 1: Definizione della struttura bayesiana

Abbiamo una rete con:

  • [math]T[/math] e [math]C[/math] come nodi padre (indipendenti a priori)
  • [math]A_f[/math] come nodo figlio (dipende da [math]T[/math] e [math]C[/math])

La probabilità congiunta a priori è:

[math]P(T,C,A_f)=P(A_f|T,C)\cdot P(T)\cdot P(C)[/math]

Passo 2: Calcolo delle probabilità congiunte a priori

T C P(T)·P(C) P(A_f|T,C) P(T,C,A_f)
A R 0.40·0.70 = 0.28 0.95 0.2660
A L 0.40·0.30 = 0.12 0.70 0.0840
O R 0.60·0.70 = 0.42 0.60 0.2520
O L 0.60·0.30 = 0.18 0.10 0.0180
Totale 0.6200

Passo 3: Calcolo della probabilità totale di essere affidabile

[math]\displaystyle P(A_f)=\sum_{T,C} P(T,C,A_f)=0.6200[/math]

Passo 4: Probabilità a posteriori congiunte

[math]\displaystyle P(T,C|A_f)=\frac{P(T,C,A_f)}{P(A_f)}[/math]

T C P(T,C|A_f)
A R 0.2660/0.6200 = 0.4290
A L 0.0840/0.6200 = 0.1355
O R 0.2520/0.6200 = 0.4065
O L 0.0180/0.6200 = 0.0290
Totale 1.0000

Passo 5: Probabilità marginali a posteriori

Tecnologia all’avanguardia:

[math]\displaystyle P(T=A|A_f)=P(T=A,C=R|A_f)+P(T=A,C=L|A_f)=0.4290+0.1355=0.5645[/math]

Controllo rigoroso:

[math]\displaystyle P(C=R|A_f)=P(T=A,C=R|A_f)+P(T=O,C=R|A_f)=0.4290+0.4065=0.8355[/math]

Risultati finali

  • [math]P(T=A|A_f)=56.45\%[/math]
  • [math]P(C=R|A_f)=83.55\%[/math]
  • Tabella congiunta a posteriori (già calcolata sopra)

💡 Osservazioni strategiche

  • La probabilità di tecnologia all’avanguardia è aumentata da 40% a 56.45% (evidenza positiva).
  • La probabilità di controllo rigoroso è aumentata da 70% a 83.55%.
  • La combinazione più probabile a posteriori è “All’avanguardia e Rigoroso” (42.9%).
  • In un sistema di production-ready, questa rete potrebbe essere estesa con più nodi (costi, tempi di consegna, sostenibilità) e aggiornata con dati in tempo reale.

Diagramma della Rete Bayesiana

❓ Domanda di riflessione

Quale sarebbe l’impatto sulla probabilità a posteriori di [math]P(T=A|A_f)[/math] se la prior di [math]P(T=A)[/math] fosse 0.70 invece di 0.40? E se l’evidenza fosse “non affidabile” invece di “affidabile”?


Risposte alle Domande di Riflessione

Pubblicità

Risposta Esercizio 1

Domanda: Quale proprietà del Teorema di Bayes hai utilizzato per combinare le probabilità dei due scenari (affidabile e non affidabile) al denominatore?

Risposta:

Al denominatore del Teorema di Bayes abbiamo utilizzato il Teorema della Probabilità Totale (o Legge della Probabilità Totale). Questa proprietà afferma che per un insieme di eventi mutuamente esclusivi ed esaustivi [math]A_1, A_2, …, A_n[/math]:

[math]\displaystyle P(B)=\sum_{i=1}^{n} P(B|A_i)\cdot P(A_i)[/math]

Nel nostro caso, gli eventi mutuamente esclusivi ed esaustivi sono “affidabile” e “non affidabile”. La probabilità totale di superare il test è data dalla somma dei contributi di entrambi gli scenari, pesati per le rispettive probabilità a priori.

Questa proprietà è fondamentale perché:

  • Garantisce che il denominatore sia la probabilità marginale dell’evidenza
  • Assicura che le probabilità a posteriori sommino a 1
  • Permette di normalizzare i contributi dei vari scenari

Risposta Esercizio 2

Domanda: Cosa succederebbe se per Delta il test avesse un tasso di falso positivo molto più basso (es. 5% invece di 25%)? Cambierebbe la decisione finale?

Risposta:

Ricalcoliamo per Delta con [math]P(S_D|\bar{A}_D)=0.05[/math] invece di 0.25:

[math]\displaystyle P(S_D)=0.90\cdot 0.35+0.05\cdot 0.65=0.315+0.0325=0.3475[/math]

[math]\displaystyle P(A_D|S_D)=\frac{0.90\cdot 0.35}{0.3475}=\frac{0.315}{0.3475}\approx 0.9065[/math]

Confronto:

Fornitore Prior Posterior (originale) Posterior (nuovo)
Gamma 85% 97.37% 97.37%
Delta 35% 65.97% 90.65%

Analisi:

  • La probabilità a posteriori di Delta salirebbe al 90.65%
  • Sarebbe ancora inferiore a Gamma (97.37%), ma il divario si ridurrebbe drasticamente
  • In un contesto reale, altri fattori come costo e tempi di consegna potrebbero far preferire Delta

Lezione: La qualità del test (in particolare il tasso di falsi positivi) ha un impatto enorme sulle conclusioni. Test con pochi falsi positivi forniscono evidenze molto forti, specialmente quando la prior è bassa.


Risposta Esercizio 3

Domanda: Perché la somma delle probabilità a posteriori è sempre 1? Quale proprietà fondamentale della probabilità garantisce questo risultato?

Risposta:

La somma delle probabilità a posteriori è sempre 1 perché le probabilità sono definite su uno spazio campionario esaustivo di eventi mutuamente esclusivi.

La proprietà fondamentale è la normalizzazione:

[math]\displaystyle \begin{aligned}
\sum_{i} P(A_i|B) &= \sum_{i} \frac{P(B|A_i)\cdot P(A_i)}{P(B)} \\
&= \frac{\sum_{i} P(B|A_i)\cdot P(A_i)}{P(B)} \\
&= \frac{P(B)}{P(B)} = 1
\end{aligned}[/math]

Questa proprietà deriva da tre assiomi fondamentali della probabilità:

  • Non negatività: [math]P(A)\ge 0[/math]
  • Normalizzazione: [math]P(\Omega)=1[/math] (lo spazio campionario ha probabilità 1)
  • Additività: per eventi mutuamente esclusivi, [math]P(\cup A_i)=\sum P(A_i)[/math]

Implicazione pratica: La somma a 1 ci permette di interpretare le probabilità a posteriori come un bilanciamento tra le ipotesi: più probabilità viene assegnata a un’ipotesi, meno ne rimane per le altre.


Risposta Esercizio 4

Domanda: Perché il risultato è lo stesso nei due metodi? Quale proprietà del Teorema di Bayes viene utilizzata nell’aggiornamento sequenziale?

Risposta:

Il risultato è lo stesso perché entrambi i metodi applicano correttamente il Teorema di Bayes. La proprietà chiave è la composizione di Bayes, che deriva dalla proprietà associativa della probabilità condizionata.

Dimostrazione:

[math]\displaystyle P(A|S_1\cap S_2)=\frac{P(S_2|A)\cdot P(S_1|A)\cdot P(A)}{P(S_1\cap S_2)}[/math]

Nell’aggiornamento sequenziale:

[math]\displaystyle P(A|S_1)=\frac{P(S_1|A)\cdot P(A)}{P(S_1)}[/math]

[math]\displaystyle P(A|S_1\cap S_2)=\frac{P(S_2|A)\cdot P(A|S_1)}{P(S_2|S_1)}[/math]

Per l’indipendenza condizionata dei test:

[math]\displaystyle P(S_2|S_1)=P(S_2|A)\cdot P(A|S_1)+P(S_2|\bar{A})\cdot P(\bar{A}|S_1)[/math]

Sostituendo:

[math]\displaystyle \begin{aligned}
P(A|S_1\cap S_2) &= \frac{
P(S_2|A)\cdot P(S_1|A)\cdot P(A)/P(S_1)
}{
P(S_2|A)\cdot P(S_1|A)\cdot P(A)/P(S_1) + P(S_2|\bar{A})\cdot P(S_1|\bar{A})\cdot P(\bar{A})/P(S_1)
} \\
&= \frac{
P(S_2|A)\cdot P(S_1|A)\cdot P(A)
}{
P(S_2|A)\cdot P(S_1|A)\cdot P(A) + P(S_2|\bar{A})\cdot P(S_1|\bar{A})\cdot P(\bar{A})
}
\end{aligned}[/math]

Che è esattamente il risultato dell’aggiornamento unico.

In pratica: L’aggiornamento sequenziale è più flessibile e permette di:

  • Fermarsi quando la certezza è sufficiente
  • Integrare evidenze in tempo reale
  • Gestire dati che arrivano in momenti diversi

Risposta Esercizio 5

Domanda: Come cambierebbe la probabilità [math]P(\theta < 0.15)[/math] se la prior fosse più forte (es. Beta(20,80) invece di Beta(2,8))? E se il campione fosse più grande (n=100 con 20 difetti)?

Risposta:

 

Caso 1: Prior più forte (Beta(20,80) invece di Beta(2,8))

La media della prior è ancora [math]20/(100)=0.20[/math], ma con varianza molto minore (prior più informativa).

Con [math]k=2[/math] difetti su [math]n=10[/math]:

[math]\alpha_{post}=20+2=22, \quad \beta_{post}=80+10-2=88[/math]

[math]\theta|\text{dati} \sim \text{Beta}(22,88)[/math]

Calcoliamo [math]P(\theta < 0.15)[/math] usando la relazione Beta-Binomiale:

[math]\displaystyle P(\theta < 0.15) = P(\text{Bin}(109, 0.15) \ge 22)[/math]

Dove [math]109 = \alpha_{post} + \beta_{post} – 1 = 22 + 88 – 1[/math].

La media di [math]\text{Bin}(109, 0.15)[/math] è [math]109 \cdot 0.15 = 16.35[/math]. La probabilità di osservare almeno 22 successi (difetti) è molto bassa.

Usando un’approssimazione normale con correzione di continuità:

Deviazione standard: [math]\sqrt{109 \cdot 0.15 \cdot 0.85} \approx 3.73[/math]

[math]\displaystyle z = \frac{21.5 – 16.35}{3.73} \approx 1.38[/math]

[math]P(Z > 1.38) \approx 0.084[/math]

Risultato: [math]P(\theta < 0.15) \approx 8.4\%[/math].

La prior forte “resiste” all’evidenza dei 2 difetti su 10, mantenendo la distribuzione più concentrata attorno a 0.20, riducendo drasticamente la probabilità che [math]\theta[/math] sia inferiore a 0.15.


Caso 2: Campione più grande (n=100, k=20) con prior originale

Con prior [math]\text{Beta}(2,8)[/math] e dati [math]k=20[/math] difetti su [math]n=100[/math]:

[math]\alpha_{post}=2+20=22, \quad \beta_{post}=8+100-20=88[/math]

Si ottiene esattamente la stessa posterior del Caso 1: [math]\text{Beta}(22,88)[/math].

Risultato: [math]P(\theta < 0.15) \approx 8.4\%[/math] (identico al Caso 1).


Lezione chiave

Scenario Prior Dati Posterior [math]P(\theta < 0.15)[/math]
Originale Beta(2,8) 2/10 Beta(4,16) 31.6%
Prior forte Beta(20,80) 2/10 Beta(22,88) ~8.4%
Campione grande Beta(2,8) 20/100 Beta(22,88) ~8.4%

La tabella mostra che:

  • Prior più forti richiedono evidenze più consistenti per essere modificate.
  • Campioni più grandi riducono l’influenza della prior, ma se la proporzione osservata è identica (20% in entrambi i casi), la posterior può coincidere esattamente.
  • In un sistema reale, è cruciale documentare la scelta della prior: una prior forte può nascondere segnali deboli, mentre una prior debole può dare troppo peso a campioni piccoli.
Forse potrebbe interessarti anche:  Teorema di Bayes e Rischio Credito: 6 Esercizi Pratici per Prevedere l'Insolvenza

Risposta Esercizio 6

Domanda: Quale sarebbe l’impatto sulla probabilità a posteriori di [math]P(T=A|A_f)[/math] se la prior di [math]P(T=A)[/math] fosse 0.70 invece di 0.40? E se l’evidenza fosse “non affidabile” invece di “affidabile”?

Risposta:

Caso 1: Prior [math]P(T=A)=0.70[/math]

Ricalcoliamo le probabilità congiunte:

T C P(T)·P(C) P(A_f|T,C) P(T,C,A_f)
A R 0.70·0.70 = 0.49 0.95 0.4655
A L 0.70·0.30 = 0.21 0.70 0.1470
O R 0.30·0.70 = 0.21 0.60 0.1260
O L 0.30·0.30 = 0.09 0.10 0.0090

[math]\displaystyle P(A_f)=0.4655+0.1470+0.1260+0.0090=0.7475[/math]

[math]\displaystyle P(T=A|A_f)=\frac{0.4655+0.1470}{0.7475}=\frac{0.6125}{0.7475}\approx 0.8194[/math]

Risultato: [math]P(T=A|A_f)[/math] passa da 56.45% a 81.94%. La prior più alta rende l’evidenza meno sorprendente e il posterior si avvicina alla prior.

Caso 2: Evidenza “non affidabile”

Dobbiamo calcolare [math]P(T,C|\bar{A}_f)[/math]:

Prima calcoliamo le congiunte per “non affidabile”:

T C P(T)·P(C) P(¬A_f|T,C) P(T,C,¬A_f)
A R 0.28 0.05 0.0140
A L 0.12 0.30 0.0360
O R 0.42 0.40 0.1680
O L 0.18 0.90 0.1620

[math]\displaystyle P(\bar{A}_f)=0.0140+0.0360+0.1680+0.1620=0.3800[/math]

[math]\displaystyle P(T=A|\bar{A}_f)=\frac{0.0140+0.0360}{0.3800}=\frac{0.0500}{0.3800}\approx 0.1316[/math]

Risultato: [math]P(T=A|\bar{A}_f)=13.16\%[/math], molto più bassa della prior del 40% e del posterior per “affidabile” (56.45%).

Interpretazione

Evidenza P(T=A|evidenza)
Nessuna (prior) 40.00%
Affidabile 56.45%
Non affidabile 13.16%

Osservazione: L’evidenza “non affidabile” è molto informativa: riduce la probabilità di tecnologia all’avanguardia a quasi un terzo della prior. Questo perché i fornitori non affidabili sono molto più probabili se hanno tecnologia obsoleta e controllo lasco (90% di probabilità di essere non affidabili).


Riepilogo Finale: Strategie per il Data Scientist

Concetto Applicazione pratica
Aggiornamento sequenziale Implementare un sistema che aggiorna la fiducia in un fornitore dopo ogni lotto, con soglie di intervento predefinite
Prior coniugate Usare distribuzioni Beta per tassi di difetti: facilita l’aggiornamento in tempo reale
Rete bayesiana Modellare relazioni complesse tra fattori (tecnologia, controllo, costi, tempi)
Credible intervals Fornire intervalli di confidenza per le stime, non solo valori puntuali
Sensitivity analysis Testare come cambiano le decisioni al variare delle prior e delle assunzioni

In produzione: Questi modelli possono essere implementati con librerie come PyMC, TensorFlow Probability, o sistemi custom che aggiornano le distribuzioni in streaming, permettendo decisioni automatiche sull’accettazione dei lotti.


Dal Teorema di Bayes alla decisione data-driven

Caso finale — Dalla probabilità alla decisione

Dopo aver visto come il Teorema di Bayes consente di aggiornare la probabilità di affidabilità di un fornitore, possiamo fare un passo ulteriore: utilizzare queste probabilità per prendere una decisione economica.

Immaginiamo che l’azienda debba scegliere tra tre fornitori di un componente critico.

Fornitore Prior affidabilità P(superamento test | affidabile) P(superamento test | non affidabile) Costo acquisto Lead time
Alpha 80% 95% 10% €105 7 gg
Beta 55% 90% 15% €90 12 gg
Gamma 40% 85% 20% €75 18 gg

Tutti e tre i fornitori superano il controllo qualità.

La domanda non è più semplicemente:

“Quale fornitore è più affidabile?”

ma:

“Quale fornitore rappresenta la scelta migliore considerando affidabilità, costo e conseguenze di un eventuale fallimento?”

1. Aggiorniamo le probabilità con Bayes

Per ogni fornitore calcoliamo:

[math]\displaystyle P(A|S)=\frac{P(S|A)P(A)}{P(S|A)P(A)+P(S|\bar{A})P(\bar{A})}[/math]

dove:

  • [math]A[/math] = fornitore affidabile;
  • [math]S[/math] = test superato.

Alpha

[math]\displaystyle P(S)=0.95(0.80)+0.10(0.20)[/math]

[math]\displaystyle P(S)=0.76+0.02=0.78[/math]

Quindi:

[math]\displaystyle P(A|S)=\frac{0.95(0.80)}{0.78}=\frac{0.76}{0.78}\approx 0.9744[/math]

Alpha ha una probabilità a posteriori di affidabilità del 97,44%.

Beta

[math]\displaystyle P(S)=0.90(0.55)+0.15(0.45)[/math]

[math]\displaystyle P(S)=0.495+0.0675=0.5625[/math]

[math]\displaystyle P(A|S)=\frac{0.495}{0.5625}\approx 0.88[/math]

Beta raggiunge l’88,00%.

Gamma

[math]\displaystyle P(S)=0.85(0.40)+0.20(0.60)[/math]

[math]\displaystyle P(S)=0.34+0.12=0.46[/math]

[math]\displaystyle P(A|S)=\frac{0.34}{0.46}\approx 0.7391[/math]

Gamma raggiunge il 73,91%.

Il quadro dopo il test è quindi:

Fornitore Prior Posterior dopo test
Alpha 80,00% 97,44%
Beta 55,00% 88,00%
Gamma 40,00% 73,91%

Se guardassimo soltanto alla probabilità di affidabilità, Alpha sarebbe il vincitore.

Ma questa non è ancora una decisione di business.


2. Probabilità ≠ decisione

Supponiamo ora che un componente difettoso generi un costo complessivo di €400 tra sostituzione, gestione del reso, fermo operativo e costi logistici.

Per semplicità, definiamo:

[math]C_{\text{failure}} = €400[/math]

Il costo atteso diventa:

[math]\displaystyle E(C) = C_{\text{purchase}} + P(\text{failure}|S) \times C_{\text{failure}}[/math]

Poiché:

[math]P(\text{failure}|S) = 1 – P(A|S)[/math]

possiamo calcolare il costo atteso per ciascun fornitore.

Alpha

[math]P(F|S)=1-0.9744=0.0256[/math]

[math]\displaystyle E(C_{\text{Alpha}})=105+0.0256(400)[/math]

[math]E(C_{\text{Alpha}}) \approx €115.26[/math]

Beta

[math]P(F|S)=1-0.88=0.12[/math]

[math]\displaystyle E(C_{\text{Beta}})=90+0.12(400)[/math]

[math]E(C_{\text{Beta}})=€138[/math]

Gamma

[math]P(F|S)=1-0.7391=0.2609[/math]

[math]\displaystyle E(C_{\text{Gamma}})=75+0.2609(400)[/math]

[math]E(C_{\text{Gamma}}) \approx €179.35[/math]

Otteniamo quindi:

Fornitore Costo acquisto Rischio posteriore Costo atteso
Alpha €105 2,56% €115,26
Beta €90 12,00% €138,00
Gamma €75 26,09% €179,35

La decisione

Alpha è contemporaneamente:

  • il fornitore con maggiore affidabilità posteriore;
  • quello con il minore rischio residuo;
  • quello con il minore costo atteso.

In questo scenario la decisione è quindi relativamente semplice:

Alpha è la scelta economicamente più conveniente nonostante abbia il prezzo di acquisto più elevato.

Il prezzo unitario più basso di Gamma, infatti, nasconde un rischio significativamente maggiore.


3. Ma cosa succede se cambia il costo del fallimento?

Qui il problema diventa molto più interessante.

Il valore del modello bayesiano non consiste nel produrre una singola classifica immutabile. Possiamo studiare come cambia la decisione al variare delle condizioni economiche.

Consideriamo:

[math]C_{\text{failure}} \in [50, 500][/math]

Per ogni possibile costo del fallimento possiamo calcolare il costo atteso dei tre fornitori.

Questo produce una analisi di sensibilità.

Per esempio, il costo atteso di Alpha è:

[math]E(C_A)=105+0.0256C_{\text{failure}}[/math]

mentre quello di Gamma è:

[math]E(C_G)=75+0.2609C_{\text{failure}}[/math]

Alpha diventa preferibile a Gamma quando:

[math]105+0.0256C < 75+0.2609C[/math]

da cui:

[math]30 < 0.2353C[/math]

e quindi:

[math]C > 127.5[/math]

Se il costo di un fallimento supera circa €128, Alpha diventa economicamente preferibile a Gamma.

Questo è un risultato molto più interessante della semplice classifica delle probabilità.


4. Il Data Scientist non sceglie il fornitore: costruisce il modello decisionale

Questa è la conclusione che enfatizzerei nell’articolo.

Il Teorema di Bayes ci permette di passare da:

[math]\text{dati} \rightarrow \text{probabilità}[/math]

ma una decisione aziendale richiede un ulteriore passaggio:

[math]\boxed{ \text{Dati} \rightarrow \text{Bayes} \rightarrow \text{Rischio} \rightarrow \text{Costo atteso} \rightarrow \text{Decisione} }[/math]

Ed è proprio qui che il problema diventa Data Science applicata.

Il Data Scientist non dovrebbe limitarsi a dire:

“Alpha ha il 97,44% di probabilità di essere affidabile.”

Dovrebbe poter dire:

“Dato ciò che sappiamo, il rischio residuo di Alpha è del 2,56%. Considerando il costo di un eventuale fallimento, il suo costo atteso è €115,26. Possiamo inoltre determinare quale soglia di costo del fallimento rende conveniente scegliere Alpha rispetto alle alternative.”

Questa è una decisione quantitativa, trasparente e auditabile.

Dal modello matematico al modello computazionale

Finora abbiamo calcolato le probabilità a posteriori manualmente. Ma in un contesto reale un’azienda non deve valutare soltanto tre fornitori una volta sola: potrebbe dover analizzare decine o centinaia di fornitori e aggiornare continuamente le stime man mano che arrivano nuovi dati.

È qui che entra in gioco il modello computazionale.

L’obiettivo non è semplicemente automatizzare i calcoli. Un buon modello computazionale deve tradurre in modo esplicito la logica decisionale:

[math]\boxed{ \text{Prior} \rightarrow \text{Evidenza} \rightarrow \text{Posterior} \rightarrow \text{Rischio} \rightarrow \text{Costo atteso} }[/math]

In altre parole, il codice deve rappresentare il modello statistico, non sostituirlo.

1. Definiamo gli input

Per ogni fornitore abbiamo bisogno di quattro informazioni:

  • prior: probabilità iniziale che il fornitore sia affidabile;
  • p_s_a: probabilità di superare il test se il fornitore è affidabile;
  • p_s_na: probabilità di superare il test se il fornitore non è affidabile;
  • cost: costo di acquisto del componente.

A queste informazioni aggiungiamo una variabile globale:

  • failure_cost: costo economico associato a un eventuale fallimento.

Nel nostro esempio:

suppliers = {
    "Alpha": {
        "prior": 0.80,
        "p_s_a": 0.95,
        "p_s_na": 0.10,
        "cost": 105
    },
    "Beta": {
        "prior": 0.55,
        "p_s_a": 0.90,
        "p_s_na": 0.15,
        "cost": 90
    },
    "Gamma": {
        "prior": 0.40,
        "p_s_a": 0.85,
        "p_s_na": 0.20,
        "cost": 75
    }
}

failure_cost = 400

La struttura dati è intenzionalmente semplice: ogni fornitore è rappresentato da un insieme di parametri che il modello può elaborare automaticamente.


2. Calcoliamo la probabilità dell’evidenza

Il primo passaggio computazionale consiste nel calcolare la probabilità che un fornitore superi il test:

[math]\displaystyle P(S)=P(S|A)P(A)+P(S|\bar A)P(\bar A)[/math]

In Python:

for name, s in suppliers.items():

    p_s = (
        s["p_s_a"] * s["prior"]
        + s["p_s_na"] * (1 - s["prior"])
    )

    posterior = (
        s["p_s_a"] * s["prior"]
        / p_s
    )

    failure_probability = 1 - posterior

    expected_cost = (
        s["cost"]
        + failure_probability * failure_cost
    )

    print(
        name,
        f"Posterior = {posterior:.2%}",
        f"Rischio = {failure_probability:.2%}",
        f"Expected Cost = €{expected_cost:.2f}"
    )
Alpha Posterior = 97.44% Rischio = 2.56% Expected Cost = €115.26
Beta Posterior = 88.00% Rischio = 12.00% Expected Cost = €138.00
Gamma Posterior = 73.91% Rischio = 26.09% Expected Cost = €179.35

Cosa abbiamo fatto:

 Calcoliamo la probabilità a posteriori

Applichiamo quindi il Teorema di Bayes:

[math]\displaystyle P(A|S)=\frac{P(S|A)P(A)}{P(S)}[/math]

Nel modello:

posterior = (
    s["p_s_a"] * s["prior"]
    / p_s
)

La variabile posterior rappresenta quindi la nostra nuova stima dell’affidabilità del fornitore dopo aver osservato il risultato positivo del test.

Questo è il cuore del modello bayesiano: la conoscenza iniziale viene aggiornata alla luce dell’evidenza.

Dalla probabilità al rischio

Una probabilità di affidabilità del 97,44% può essere trasformata nella probabilità complementare di fallimento:

[math]\displaystyle P(F|S)=1-P(A|S)[/math]

Nel codice:

failure_probability = 1 - posterior

Per Alpha:

Forse potrebbe interessarti anche:  Python Bokeh Tutorial: 3 Esercizi Pratici per Creare Grafici Interattivi

[math]\displaystyle P(F|S)=1-0.9744=0.0256[/math]

quindi il rischio residuo stimato è circa 2,56%.

Questa trasformazione è fondamentale perché la probabilità di fallimento è direttamente collegabile a una conseguenza economica.

Dal rischio al costo atteso

Introduciamo ora il concetto di Expected Cost:

[math]\displaystyle E(C)=C_{purchase}+P(F|S)\times C_{failure}[/math]

Il primo termine rappresenta il costo certo di acquisto.

Il secondo rappresenta invece il costo atteso del rischio.

In Python:

expected_cost = (
    s["cost"]
    + failure_probability * failure_cost
)

Per Alpha:

[math]\displaystyle E(C)=105+0.0256\times400[/math]

[math]\displaystyle E(C)\approx115.26[/math]

Il modello non sta dicendo che l’azienda spenderà necessariamente €115,26. Si tratta di un valore atteso utilizzato per confrontare alternative caratterizzate da diversi livelli di rischio.

Il modello conferma quindi quanto calcolato manualmente.


Rendiamo il modello riutilizzabile

Un modello di Data Science non dovrebbe essere costruito intorno a un singolo esercizio. Conviene trasformare la logica in una funzione.

def evaluate_supplier(
    prior,
    p_s_a,
    p_s_na,
    purchase_cost,
    failure_cost
):
    """
    Valuta un fornitore usando un aggiornamento bayesiano
    e calcola il costo atteso.
    """

    p_s = (
        p_s_a * prior
        + p_s_na * (1 - prior)
    )

    posterior = (
        p_s_a * prior
        / p_s
    )

    failure_probability = 1 - posterior

    expected_cost = (
        purchase_cost
        + failure_probability * failure_cost
    )

    return {
        "posterior": posterior,
        "failure_probability": failure_probability,
        "expected_cost": expected_cost
    }

A questo punto possiamo valutare qualsiasi fornitore senza riscrivere la logica matematica:

result = evaluate_supplier(
    prior=0.80,
    p_s_a=0.95,
    p_s_na=0.10,
    purchase_cost=105,
    failure_cost=400
)

print(result)

Il vantaggio è importante: la matematica viene incapsulata in una funzione riutilizzabile.


Trasformiamo il risultato in una tabella

In un progetto reale non vogliamo stampare semplicemente tre righe di testo. Vogliamo ottenere una struttura analizzabile.

import pandas as pd

results = []

for name, s in suppliers.items():

    result = evaluate_supplier(
        prior=s["prior"],
        p_s_a=s["p_s_a"],
        p_s_na=s["p_s_na"],
        purchase_cost=s["cost"],
        failure_cost=failure_cost
    )

    results.append({
        "Fornitore": name,
        "Prior": s["prior"],
        "Posterior": result["posterior"],
        "Rischio": result["failure_probability"],
        "Costo acquisto": s["cost"],
        "Costo atteso": result["expected_cost"]
    })

df = pd.DataFrame(results)

df.sort_values("Costo atteso")

Il risultato può essere interpretato come una vera tabella di Supplier Risk Analytics:

Fornitore Prior Posterior Rischio Costo acquisto Costo atteso
Alpha 80,00% 97,44% 2,56% €105 €115,26
Beta 55,00% 88,00% 12,00% €90 €138,00
Gamma 40,00% 73,91% 26,09% €75 €179,35

Ora il risultato del modello può essere utilizzato da altri processi analitici: dashboard, ranking dei fornitori, sistemi di alert o modelli di ottimizzazione.


Il modello non decide automaticamente: supporta la decisione

Questo punto è essenziale.

Il modello identifica Alpha come alternativa con il costo atteso più basso nelle condizioni ipotizzate.

Non significa però che Alpha debba essere automaticamente scelto.

Una decisione reale potrebbe considerare anche:

  • lead time;
  • capacità produttiva;
  • concentrazione del rischio;
  • dipendenza geografica;
  • sostenibilità;
  • condizioni contrattuali;
  • volatilità dei prezzi;
  • criticità del componente;
  • possibilità di avere un secondo fornitore.

Possiamo quindi rappresentare il processo come:

[math]\boxed{ \text{Bayesian Model} + \text{Business Constraints} \rightarrow \text{Decisione} }[/math]

Questo distingue un semplice esercizio di probabilità da un vero modello di supporto alle decisioni.


Il passaggio successivo: analisi di sensibilità

Una volta costruito il modello computazionale possiamo porci una domanda ancora più interessante:

la scelta di Alpha rimane valida se cambia il costo del fallimento?

Possiamo modificare failure_cost e ricalcolare automaticamente il costo atteso.

failure_costs = [50, 100, 150, 200, 300, 400, 500]

for cost in failure_costs:

    print(f"\nCosto fallimento: €{cost}")

    for name, s in suppliers.items():

        result = evaluate_supplier(
            prior=s["prior"],
            p_s_a=s["p_s_a"],
            p_s_na=s["p_s_na"],
            purchase_cost=s["cost"],
            failure_cost=cost
        )

        print(
            name,
            f"€{result['expected_cost']:.2f}"
        )
Costo fallimento: €50
Alpha €106.28
Beta €96.00
Gamma €88.04

Costo fallimento: €100
Alpha €107.56
Beta €102.00
Gamma €101.09

Costo fallimento: €150
Alpha €108.85
Beta €108.00
Gamma €114.13

Costo fallimento: €200
Alpha €110.13
Beta €114.00
Gamma €127.17

Costo fallimento: €300
Alpha €112.69
Beta €126.00
Gamma €153.26

Costo fallimento: €400
Alpha €115.26
Beta €138.00
Gamma €179.35

Costo fallimento: €500
Alpha €117.82
Beta €150.00
Gamma €205.43

A questo punto possiamo costruire un grafico con:

  • asse (x): costo del fallimento;
  • asse (y): costo atteso;
  • una curva per ciascun fornitore.

Il grafico ci permette di individuare i punti di break-even, cioè i valori del costo del fallimento oltre i quali cambia la scelta ottimale.

Ed è proprio qui che il modello diventa realmente interessante per un Data Scientist: non produce soltanto una risposta, ma permette di esplorare quanto la decisione sia robusta rispetto alle ipotesi.

import pandas as pd
import matplotlib.pyplot as plt

# 1. Definizione dei dati
suppliers = {
    "Alpha": {"prior": 0.80, "p_s_a": 0.95, "p_s_na": 0.10, "cost": 105},
    "Beta":  {"prior": 0.55, "p_s_a": 0.90, "p_s_na": 0.15, "cost": 90},
    "Gamma": {"prior": 0.40, "p_s_a": 0.85, "p_s_na": 0.20, "cost": 75}
}

# 2. Funzione di valutazione (con Type Hinting)
def evaluate_supplier(prior: float, p_s_a: float, p_s_na: float, 
                      purchase_cost: float, failure_cost: float) -> dict:
    
    p_s = (p_s_a * prior) + (p_s_na * (1 - prior))
    posterior = (p_s_a * prior) / p_s
    failure_probability = 1 - posterior
    expected_cost = purchase_cost + (failure_probability * failure_cost)
    
    return {
        "posterior": posterior,
        "failure_probability": failure_probability,
        "expected_cost": expected_cost
    }

# 3. Costruzione del DataFrame per l'analisi di sensitività
failure_costs = range(0, 501, 10)  # Intervallo più granulare (da 0 a 500, step 10)
sensitivity_data = []

for cost in failure_costs:
    for name, s in suppliers.items():
        res = evaluate_supplier(s["prior"], s["p_s_a"], s["p_s_na"], s["cost"], cost)
        sensitivity_data.append({
            "Failure Cost": cost,
            "Supplier": name,
            "Expected Cost": res["expected_cost"]
        })

df_sensitivity = pd.DataFrame(sensitivity_data)

# Pivot per facilitare il plotting: righe=Failure Cost, colonne=Supplier
df_plot = df_sensitivity.pivot(index="Failure Cost", columns="Supplier", values="Expected Cost")

# 4. Generazione del Grafico
plt.figure(figsize=(10, 6))

# Plot delle linee per ogni fornitore
plt.plot(df_plot.index, df_plot['Gamma'], label='Gamma (Basso costo base, Alto Rischio)', color='#e74c3c', linewidth=2.5)
plt.plot(df_plot.index, df_plot['Beta'], label='Beta (Opzione Intermedia)', color='#f39c12', linewidth=2.5)
plt.plot(df_plot.index, df_plot['Alpha'], label='Alpha (Alto costo base, Basso Rischio)', color='#2ecc71', linewidth=2.5)

# Personalizzazione del grafico
plt.title('Analisi di Sensitività: Costo Atteso vs Costo di Fallimento', fontsize=14, pad=15)
plt.xlabel('Costo di Fallimento Stimato (€)', fontsize=12)
plt.ylabel('Costo Atteso Totale (€)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(title="Fornitori", fontsize=10)

# Aggiunta di un marker per evidenziare visivamente l'area di break-even
plt.axvline(x=120, color='gray', linestyle=':', alpha=0.5)
plt.text(125, 80, 'Area di Break-Even\n(Cambio scelta ottimale)', color='gray', fontsize=9)

plt.tight_layout()
plt.show()

Oltre il Grafico: Calcolare algebricamente i Punti di Break-Even

L’analisi visiva offre un’ottima intuizione direzionale, ma un algoritmo di supporto alle decisioni necessita di soglie numeriche esatte. Poiché l’equazione del costo atteso è lineare, possiamo calcolare i punti esatti di intersezione (break-even) in cui la convenienza passa da un fornitore all’altro semplicemente eguagliando le loro funzioni di costo.

Ponendo come incognita [math]X[/math] il costo di fallimento stimato, l’equazione di base per ogni fornitore è:

[math]\displaystyle E(C) = C_{\text{acquisto}} + P(\text{Fallimento}|\text{Test}) \cdot X[/math]

Il sorpasso tra Gamma e Beta (La soglia del basso rischio)

Gamma parte avvantaggiato grazie al suo costo di acquisto contenuto (75€), ma sconta un rischio a posteriori elevato (circa 26.09%). Beta costa di più all’inizio (90€) ma dimezza il rischio (12.00%). Per trovare il punto esatto in cui Beta diventa più conveniente di Gamma, imponiamo l’uguaglianza tra i loro costi attesi:

[math]\displaystyle 75 + 0.2609 \cdot X = 90 + 0.1200 \cdot X[/math]

[math]\displaystyle 0.2609 \cdot X – 0.1200 \cdot X = 90 – 75[/math]

[math]\displaystyle 0.1409 \cdot X = 15[/math]

[math]\displaystyle X = \frac{15}{0.1409} \approx 106.46[/math]

Appena il costo associato a un componente difettoso supera i 106.46€, il risparmio iniziale garantito da Gamma viene interamente eroso dal costo atteso delle sue rotture. Da questo punto in poi, Beta diventa l’opzione ottimale.

Il sorpasso tra Beta e Alpha (L’ingresso nella zona Mission Critical)

Beta resta l’opzione dominante per una fascia intermedia di rischio. Tuttavia, se le conseguenze di un fallimento diventano critiche, la “polizza assicurativa” offerta dall’altissima affidabilità di Alpha (rischio a posteriori di appena il 2.56%) giustifica il suo prezzo premium (105€). Cerchiamo il punto di intersezione tra Beta e Alpha:

[math]\displaystyle 90 + 0.1200 \cdot X = 105 + 0.0256 \cdot X[/math]

[math]\displaystyle 0.1200 \cdot X – 0.0256 \cdot X = 105 – 90[/math]

[math]\displaystyle 0.0944 \cdot X = 15[/math]

[math]\displaystyle X = \frac{15}{0.0944} \approx 158.90[/math]

Quando il danno economico di un fallimento oltrepassa i 158.90€, l’altissima qualità di Alpha smette di essere un costo superfluo e diventa un investimento matematicamente necessario.

La Regola Decisionale Finale

L’algoritmo di Vendor Selection si riduce quindi a una policy netta e codificabile:

  • Se il danno per fallimento è inferiore a 106.46€, scegli Gamma.
  • Se il danno per fallimento è tra 106.46€ e 158.90€, scegli Beta.
  • Se il danno per fallimento è superiore a 158.90€, scegli Alpha.

In questo modo, la matematica non si limita a fornire una probabilità astratta, ma definisce i confini esatti della strategia di approvvigionamento aziendale.

📚 Per approfondire: Teorema di Bayes, rischio e decisioni data-driven

Se vuoi approfondire come probabilità, inferenza bayesiana, valutazione del rischio e KPI possono supportare decisioni più solide, questi articoli propongono spiegazioni ed esercizi applicati a diagnostica, assicurazioni, clienti, modelli predittivi e supply chain:

👉 Capire il teorema di Bayes passo a passo

👉 Teorema di Bayes: applicazione iterativa nella diagnostica di macchinari industriali

👉 Teorema di Bayes spiegato: 3 esercizi pratici su assicurazioni, rischi e test clinici

👉 Teorema di Bayes spiegato: 6 esercizi pratici su valutazione clienti e modelli predittivi

👉 Valutazione fornitori: metodi efficaci, KPI ed esempi pratici

👉 Calcolo KPI Supply Chain: guida completa con esercizi pratici

 

 

Pubblicità