Una previsione diventa utile quando cambia una decisione
Un impianto deve completare lo stesso ciclo di raffreddamento in una di due finestre disponibili. Un modello prevede il prezzo dell’elettricità, un altro il consumo. Moltiplicare le due medie sembra il passo naturale per scegliere quando lavorare. Ma prezzo e consumo possono cambiare insieme: uno scenario economico può essere anche quello in cui serve più energia. Come evitare che due previsioni corrette, combinate nel modo sbagliato, producano la scelta sbagliata?
Abstract. Analizziamo una decisione discreta con due scenari sintetici. Calcoliamo prima il costo in ogni scenario e poi il costo atteso, ricavando il ruolo della covarianza. Confrontiamo una scelta basata sulle medie, una sul valore atteso e una prudente rispetto all’incertezza sulle probabilità. Infine quantifichiamo quanto varrebbe conoscere lo scenario prima di decidere. Non addestriamo un modello né usiamo prezzi reali: isoliamo il passaggio tra previsione e ottimizzazione, spesso nascosto dietro una dashboard apparentemente precisa.
Prima le unità e le alternative ammissibili
Chiamiamo A e B le due finestre. Il lavoro deve essere eseguito una sola volta e ciascuna finestra è sufficiente a completarlo. A può richiedere energia diversa da B per condizioni operative differenti, ma il servizio finale è assunto equivalente: non confrontiamo quantità diverse di lavoro. Prezzi in euro per megawattora e consumi in kilowattora richiedono una conversione: un megawattora contiene mille kilowattora. Il costo variabile del ciclo è prezzo × energia / 1000. Escludiamo costi fissi, avviamento, penalità, manutenzione e vincoli termici dinamici; aggiungerli cambierebbe il modello.
I due scenari S1 e S2 hanno inizialmente probabilità 1/2 ciascuno. Uno scenario è una descrizione congiunta di ciò che può accadere, non una previsione indipendente per ogni colonna. In S1 la finestra A costa 30 euro/MWh e richiede 4 kWh; in S2 costa 90 e richiede 1 kWh. B costa sempre 55 euro/MWh e richiede 2 kWh. Sono numeri didattici scelti per rendere il calcolo controllabile, non dati di mercato, misure di un compressore o risparmi attribuiti a EL-AI.
| Finestra / scenario | Prezzo EUR/MWh | Energia kWh | Costo EUR |
|---|---|---|---|
| A / S1 | 30 | 4 | 0.120 |
| A / S2 | 90 | 1 | 0.090 |
| B / S1 | 55 | 2 | 0.110 |
| B / S2 | 55 | 2 | 0.110 |
La media del conto non è il conto delle medie
La tabella mostra che A costa 12 centesimi in S1 e 9 in S2. La media è 10,5 centesimi, inferiore agli 11 di B. Se però calcoliamo prima le medie degli ingressi otteniamo per A un prezzo di 60 euro/MWh e un consumo di 2,5 kWh: il prodotto dà 15 centesimi. Questa procedura sceglierebbe B. Non ha sbagliato nessuna delle due medie; ha perso l’informazione su quali prezzi si presentano insieme a quali consumi.
Per descrivere esattamente questa differenza usiamo l’aspettativa E, cioè la media pesata dalle probabilità, e la covarianza Cov, che misura come due quantità si discostano insieme dalle proprie medie. P indica il prezzo, Q l’energia. Espandendo il prodotto degli scarti si ottiene l’identità seguente: non è un’approssimazione né richiede distribuzioni gaussiane, soltanto momenti finiti.
Nel nostro A gli scarti sono −30 e +1,5 in S1, +30 e −1,5 in S2. Entrambi i prodotti valgono −45, quindi la covarianza è −45 nelle unità composte EUR/MWh × kWh. Dividendo per mille correggiamo il costo di −0,045 euro: 0,150 − 0,045 = 0,105. Quando il prezzo sale, qui il consumo scende; perciò il prodotto delle medie sovrastima il costo. Con dipendenza positiva l’errore cambierebbe segno. Se Q fosse fisso, oppure la covarianza fosse zero, il prodotto delle medie sarebbe invece corretto per questo obiettivo lineare.
La decisione deve precedere lo scenario
Introduciamo due variabili x_A e x_B: valgono uno se scegliamo la finestra e zero altrimenti. Il vincolo x_A + x_B = 1 impone una sola esecuzione. Per ogni scenario s il costo è c_As x_A + c_Bs x_B; il costo atteso pesa questo valore per la probabilità π_s e somma sugli scenari. L’obiettivo è scegliere la coppia ammissibile con costo atteso minimo. Con due finestre basta enumerare le due alternative: non serve un risolutore sofisticato.
La stessa x deve valere in entrambi gli scenari perché la prenotazione avviene prima di sapere quale si realizzerà. Questa è la non anticipatività: una decisione non può usare informazioni non ancora disponibili. Se permettessimo una scelta diversa per ogni scenario, B vincerebbe in S1 e A in S2. Otterremmo 0,5 × 0,11 + 0,5 × 0,09 = 0,10 euro. È inferiore a 0,105, ma risponde a una domanda diversa: quanto spenderemmo conoscendo il futuro prima della prenotazione?
La differenza di 0,005 euro è il valore dell’informazione perfetta in questo piccolo modello, non il guadagno garantito di una previsione AI. È un limite superiore al miglioramento ottenibile dalla sola informazione sullo scenario, a parità di azioni, costi e tempi decisionali. Una previsione imperfetta può valere meno; un sensore costoso può annullare il beneficio; una prenotazione non modificabile può impedire di usare l’informazione. Il codice non simula nessuna di queste estensioni.
Quanto deve cambiare la probabilità per cambiare scelta?
Finora abbiamo assunto scenari equiprobabili. Chiamiamo ora p la probabilità di S1, lasciando 1 − p a S2. A costa in media 0,12p + 0,09(1 − p) = 0,09 + 0,03p; B resta a 0,11. Risolvendo 0,09 + 0,03p = 0,11 troviamo p = 2/3. Sotto questa soglia conviene A secondo il criterio del costo atteso; sopra conviene B; sulla soglia sono equivalenti. Questa sensibilità è più utile di un’unica raccomandazione priva del margine che la sostiene.
![Il costo atteso di A cresce con la probabilità di S1; quello di B è costante. L’intersezione è p = 2/3. La fascia evidenzia l’intervallo ipotetico [0,4; 0,8], che attraversa la soglia: la scelta dipende da quanto crediamo alla probabilità stimata.](/api/media/file/elai-20260929-scheduling-figure-it.png)
Supponiamo di non voler fissare p esattamente, ma di considerare plausibile un intervallo da 0,4 a 0,8. Una decisione robusta rispetto a questo intervallo minimizza il peggiore costo atteso tra le probabilità ammesse. Per A il caso peggiore è p = 0,8 e costa 0,114 euro; B costa sempre 0,110. Questo criterio sceglie B. L’intervallo è assunto per il confronto, non stimato dai dati né presentato come intervallo di confidenza. Cambiarne gli estremi può cambiare il risultato.
Non confondiamo questo criterio con minimizzare il peggiore scenario singolo. In quel caso confrontiamo 0,120 per A e 0,110 per B: vince ancora B, ma per una ragione diversa. Nel primo caso conserviamo un insieme di distribuzioni probabilistiche; nel secondo ci prepariamo al singolo esito più costoso. L’accordo sulla scelta in questo esempio non rende equivalenti i criteri. Un decisore che accetta variabilità per ridurre il costo medio può scegliere A con p = 0,5 senza commettere un errore matematico.
Che cosa deve produrre il sistema di previsione
Per collegare un modello AI a questa decisione non basta esportare due numeri medi. Servono scenari congiunti, o una rappresentazione equivalente della dipendenza, e una descrizione di quando ciascuna informazione diventa disponibile. Rimescolare separatamente le colonne dei prezzi e dei consumi distruggerebbe proprio l’associazione che ha cambiato la scelta. La qualità del previsore va quindi letta anche rispetto alla decisione: errori piccoli vicino alla soglia 2/3 possono contare più di errori grandi in regioni dove la scelta resta invariata. Questo articolo non propone una loss di addestramento né dimostra che un particolare modello AI sappia generare scenari affidabili.
Il margine tra A e B a probabilità 1/2 è appena mezzo centesimo per ciclo. Non lo trasformiamo in un risparmio annuale moltiplicando arbitrariamente per milioni di cicli: mancano frequenza, capacità, costi accessori e validazione delle ipotesi. Allo stesso modo, meno euro non significa meno energia o emissioni. Per una valutazione ambientale servirebbero un altro obiettivo e dati coerenti sull’intensità emissiva. Le variabili che scegliamo di ottimizzare determinano il significato della parola “migliore”.
Risultato, limiti e riproduzione
Il prezzo medio da solo non basta quando anche l’energia varia e le due quantità sono correlate. Nel nostro esempio eseguito, il prodotto delle medie suggerisce B; il costo atteso con scenari equiprobabili suggerisce A; il criterio robusto sull’intervallo scelto torna a B. Non sono risposte contraddittorie: la prima perde dipendenza, le altre due esprimono obiettivi e ipotesi diversi. Prima di chiedere al sistema “quando conviene lavorare?”, dobbiamo specificare quale costo vogliamo ridurre, quali scenari crediamo plausibili e che cosa sapremo al momento della scelta.
Tutti i costi sono calcolati con frazioni razionali in Python e convertiti in decimali soltanto per l’output. Non esiste un seed perché non campioniamo: enumeriamo esattamente due scenari e due azioni. Il grafico ripete il calcolo su 101 valori di p. Per K azioni e S scenari l’enumerazione diretta richiede O(KS) valutazioni; molti lavori con vincoli condivisi possono invece generare un numero combinatorio di piani. In quel caso occorre un modello di ottimizzazione più ampio, senza rinunciare alla coerenza dell’informazione tra scenari.
Il riferimento PySP illustra la distinzione tra decisioni prese prima e dopo la scoperta dell’incertezza attraverso un modello agricolo. Abbiamo letto il modello e la struttura degli scenari; non ne riproduciamo i risultati e non eseguiamo PySP. L’esempio energetico e i calcoli di covarianza, sensibilità e informazione perfetta sono costruiti qui. Il frammento seguente mostra il passaggio decisivo: moltiplicare costo e probabilità dentro ciascuno scenario, poi sommare. L’archivio include anche i confronti robusti e tutte le verifiche numeriche.
from fractions import Fraction as F
cost = {'A': [F(30*4,1000), F(90*1,1000)],
'B': [F(55*2,1000), F(55*2,1000)]}
for probability in [F(1,2), F(2,3), F(4,5)]:
expected = {k: probability*v[0]+(1-probability)*v[1]
for k,v in cost.items()}
print(float(probability), {k: float(v) for k,v in expected.items()})
Codice, dati e istruzioni · JSON. Calcoli didattici eseguiti con Python 3.14.0; figure con Matplotlib 3.11.2. Analisi con assistenza AI, senza dichiarare peer review o revisione umana. Copertina originale ImageGen, illustrativa: non documenta persone, sedi o installazioni EL-AI. Fonti consultate il 29 settembre 2026.

