SUPERCAT.DEV

Benvenut* sul mio blog

MATH

25 - Ho provato 100 sistemi e uno funziona: il problema della selezione ex post

06-09-2026

Probabilità e combinatoria nei giochi — Estensioni operative

Fonti di approfondimento: Stanford Wong, Sharp Sports Betting, cap. 7, per la separazione fra dati di formulazione e dati di test; Ed Miller e Matthew Davidow, The Logic of Sports Betting, per la distinzione fra pattern osservato e fattore predittivo; Joseph Buchdahl come contesto su regressione verso la media, overconfidence e survivorship bias.

Immaginiamo di avere sviluppato:

100 sistemi di gioco

Li proviamo tutti per:

100 giocate

ciascuno.

Uno dei sistemi mostra:

60 vittorie
40 sconfitte

quindi:

60% di successi

La tentazione è immediata:

Abbiamo trovato il sistema che funziona.

Ma supponiamo di conoscere la verità nascosta del nostro esperimento:

tutti i sistemi hanno davvero
P(vittoria)=50%

Nessuno possiede edge.

La domanda corretta diventa:

Quanto è sorprendente trovare almeno un 60/100 se ne proviamo cento?

Quando cinque valori perfetti suggeriscono la legge sbagliata

Prima ancora dei test statistici esiste una trappola più elementare: vedere pochi valori ordinati e trasformare troppo presto il pattern in una legge.

Un esempio classico discusso da Brian Hopkins, attribuito a Leo Moser, considera n punti su una circonferenza e collega ogni coppia con una corda. Se i punti sono in posizione generale — in questo problema significa evitare che tre corde si incontrino nello stesso punto interno — il numero massimo di regioni comincia così:

Punti $n$ 1 2 3 4 5 6
Regioni 1 2 4 8 16 31

Dopo i primi cinque valori sarebbe naturale congetturare:

$$ R_n=2^{n-1}. $$

Quella formula prevede:

$$ R_6=32, $$

ma il valore massimo corretto è 31.

Una congettura è una proposizione suggerita da esempi o pattern, ma non ancora dimostrata. Gli esempi possono renderla plausibile; non possono trasformarla automaticamente in un teorema.

Questo piccolo caso geometrico anticipa esattamente il problema dei cento sistemi: più libertà abbiamo nel cercare forme interessanti nei dati, più dobbiamo separare scoperta del pattern e verifica indipendente.

Fonte didattica: Brian Hopkins, Hands-On Combinatorics, cap. 1; il problema delle regioni è presentato come cautela contro una generalizzazione troppo rapida dai primi termini.

Due errori che si sommano

In Maîtriser l'incertain, Mathieu Agelou discute due trappole perfette per questo problema.

La prima è la legge dei piccoli numeri: tendiamo a credere che un campione relativamente piccolo debba già rappresentare molto bene la probabilità vera.

La seconda è il problema delle comparazioni multiple: se proviamo abbastanza alternative, diventa probabile trovare almeno un risultato apparentemente straordinario soltanto per caso.

Il libro collega quest'ultimo errore anche al Texas sharpshooter: prima osserviamo dove sono arrivati i colpi, poi disegniamo il bersaglio attorno al risultato migliore.

Nel nostro caso il bersaglio è:

il sistema vincitore

scelto dopo aver visto i risultati di cento sistemi.

Prima guardiamo un solo sistema

Per un sistema realmente equo:

X ~ Binomiale(100, 1/2)

Vogliamo:

$$ P(X \ge 60) $$

quindi:

P(X >= 60)
=
Σ da k=60 a 100
C(100,k) / 2^100

Il risultato è:

$$ \approx 2.844396682% $$

Per un sistema scelto prima del test, 60/100 è quindi abbastanza insolito.

Ora ne proviamo cento

Assumiamo, per rendere il modello didattico completamente calcolabile, che i risultati dei cento sistemi siano indipendenti.

Se:

p60
=
P(un sistema >=60)

allora:

P(nessun sistema >=60)
=
(1-p60)^100

e:

P(almeno un sistema >=60)
=
1-(1-p60)^100

Otteniamo:

$$ \approx 94.418058246% $$

Quindi un risultato che sembrava raro guardando un solo sistema diventa quasi normale dopo cento tentativi.

Dal 2,84% al 94,42%

Le due domande sono diverse:

sistema scelto prima:
P(>=60/100)
≈ 2.8444%
migliore fra 100 sistemi:
P(almeno uno >=60/100)
≈ 94.4181%

Il punteggio osservato può essere lo stesso.

È il protocollo di selezione a cambiare il significato dell'evidenza.

Quanti sistemi apparentemente ottimi ci aspettiamo?

Ogni sistema supera 60 vittorie con probabilità p60.

Su cento sistemi il numero medio che supera la soglia è:

$$ \begin{gathered} 100 \cdot p60 \ \approx 2.8444 \end{gathered} $$

In media ci aspettiamo quasi:

3 sistemi

da almeno 60/100 pur sapendo che nessuno ha un vantaggio reale.

Quanto è forte il migliore?

Chiamiamo:

M

il numero di vittorie del miglior sistema.

Se F(m) è:

$$ P(X \le m) $$

per un singolo sistema, allora:

$$ P(M \le m) = F(m)^{100} $$

Da questa distribuzione otteniamo:

$$ \begin{gathered} E[M] \ \approx 62.48 \end{gathered} $$

e la mediana del massimo è:

62

La mediana è un valore che lascia almeno metà della probabilità a sinistra e almeno metà a destra: qui significa che il massimo dei 100 sistemi è 62 o meno in circa metà degli esperimenti e 62 o più nell'altra metà.

Quindi il migliore dei cento sistemi realmente al 50% mostra tipicamente qualcosa vicino a:

62 o 63 vittorie su 100

sul campione usato per sceglierlo.

Anche 65/100 può emergere per caso

La probabilità che almeno uno dei cento sistemi raggiunga:

65 vittorie

è ancora:

$$ \approx 16.1413% $$

Non è un evento quotidiano, ma nemmeno un miracolo.

Provare molte varianti cambia radicalmente la probabilità di trovare un estremo.

Un evento raro può avere moltissime occasioni per accadere

La selezione ex post ha un parente stretto: dimenticare quante opportunità abbiamo dato al caso.

Codenotti e Resta propongono un esempio elementare. In un'urna ci sono 1000 biglietti e, a ogni estrazione, il biglietto viene rimesso. La probabilità di estrarre un numero specifico, per esempio 13, in una singola prova è:

$$ p=\frac1{1000}=0{,}1%. $$

È un evento raro per una singola estrazione. Ma in 1000 prove indipendenti:

$$ P(\text{mai 13})

\left(\frac{999}{1000}\right)^{1000} \approx36{,}77%, $$

quindi:

$$ P(\text{almeno un 13})

1-\left(\frac{999}{1000}\right)^{1000} \approx63{,}23%. $$

“Una probabilità su mille” non significa quindi “quasi impossibile” se creiamo mille occasioni indipendenti.

È lo stesso errore strutturale che incontriamo con cento sistemi:

una sola opportunità rara
!=
molte opportunità tra cui selezionare quella sorprendente.

Codenotti e Resta collegano questa idea alla cosiddetta legge dei numeri veramente grandi: su un numero enorme di occasioni, eventi molto improbabili possono diventare normali. Va intesa come principio intuitivo, non come sostituto di un calcolo preciso sul modello concreto.

Fonte di contesto: Bruno Codenotti e Giovanni Resta, La logica dell'incertezza, cap. 8. I valori numerici sono ricalcolati direttamente dalla formula del complementare.

Il vero errore: usare gli stessi dati due volte

Supponiamo che il migliore abbia ottenuto:

$$ 62/100 $$

sul campione usato per cercare.

Se diciamo:

Lo scelgo perché ha fatto 62%, e quel 62% dimostra che funziona.

stiamo usando gli stessi dati:

prima per scegliere
poi per confermare

Il campione non è più una validazione indipendente.

Dividiamo TRAIN e TEST

Per ogni sistema immaginiamo:

TRAIN
100 giocate

TEST
100 nuove giocate

Usiamo soltanto TRAIN per scegliere il migliore.

Poi congeliamo la scelta.

Solo a quel punto osserviamo il TEST del sistema selezionato.

Nel nostro esperimento sappiamo che ogni sistema ha veramente:

P(vittoria)=50%

quindi il TEST del sistema scelto rimane:

Binomiale(100, 1/2)

La fortuna che lo ha fatto emergere nel TRAIN non è diventata una proprietà del sistema.

La regola più importante: se un dato ha cambiato l'ipotesi, non può più testarla

Wong propone un esempio estremamente chiaro.

Immaginiamo di usare i dati di un primo periodo per formulare una regola. Guardando un secondo periodo decidiamo poi di restringere la regola perché così “funziona meglio”.

A quel punto entrambi i periodi hanno partecipato alla costruzione della regola.

Non possiamo più usarli come prova indipendente.

Dataset Che cosa abbiamo fatto Può validare la regola finale?
A formulato la prima ipotesi no
B modificato l'ipotesi no
C tenuto completamente fuori fino alla fine sì, come test indipendente

Questa regola è più generale di una semplice divisione TRAIN/TEST:

ogni volta che guardiamo un risultato e, in base a quello, cambiamo la regola, quel risultato entra nel processo di training.

Cambiare soglia, scegliere un sottogruppo, eliminare i casi scomodi o aggiungere una condizione sono tutte forme di adattamento ai dati.

È proprio per questo che un sistema può diventare sempre più bello sul passato e contemporaneamente sempre meno credibile sul futuro.

Fonte di contesto: Stanford Wong, Sharp Sports Betting, cap. 7 “Testing W-L Records for Significance”.

Un nome per l'errore: HARKing

David J. Hand richiama un comportamento noto come HARKing, acronimo di Hypothesizing After the Results are Known: formulare o rifinire l'ipotesi dopo aver visto i risultati e poi presentare quegli stessi risultati come se fossero un test indipendente.

Per esempio:

analizzo molti sottogruppi
→ noto che uno sembra eccezionale
→ invento una spiegazione specifica per quel sottogruppo
→ uso lo stesso campione per dire che la spiegazione è confermata

L'ipotesi può anche essere interessante e meritare un vero test successivo. Il problema non è averla scoperta esplorando: è dimenticare che l'esplorazione ha già consumato quei dati come prova indipendente.

Anche ciò che viene reso visibile può essere selezionato

La selezione può avvenire anche dopo l'analisi, decidendo quali risultati mostrare, pubblicare o ricordare.

Costruiamo un esempio volutamente semplice. Supponiamo che 20 studi indipendenti esaminino un effetto che in realtà non esiste e che ciascuno abbia probabilità del $5%$ di produrre comunque un risultato dichiarato “positivo” per puro caso.

La probabilità che nessuno dei 20 produca un falso positivo è:

$$ 0{,}95^{20}. $$

Quindi la probabilità che ne compaia almeno uno è:

$$ 1-0{,}95^{20} \approx 0{,}641514, $$

ossia circa:

$$ 64{,}15%. $$

Se poi i risultati positivi sono molto più visibili dei risultati nulli, il lettore osserva una raccolta già filtrata.

Questo fenomeno viene chiamato distorsione da pubblicazione (publication bias); una sua rappresentazione intuitiva è il file drawer effect: i risultati non interessanti finiscono nel cassetto mentre quelli sorprendenti emergono.

Il nostro calcolo 64,15% assume, per semplicità, test indipendenti con la stessa probabilità di falso positivo. Nella ricerca reale la struttura può essere molto più complessa, ma il principio di selezione rimane.

Fonte concettuale: David J. Hand, Il caso non esiste, cap. 6, sulla selezione, HARKing e distorsione da pubblicazione. Il caso numerico dei 20 test è costruito e calcolato direttamente per questa serie.

Che cosa ci aspettiamo sul TEST?

Sul TRAIN il migliore ha in media:

62.48 vittorie

Sul TEST nuovo:

E[vittorie]
=
50

E la probabilità che il sistema selezionato faccia di nuovo almeno:

$$ 60/100 $$

torna a:

2.8444%

non al 94%.

Regressione verso la media, senza misteri

Questo è un caso pulito di regressione verso la media.

Abbiamo scelto il sistema proprio perché il suo risultato TRAIN era eccezionalmente alto.

Se la probabilità vera è 50%, il nuovo campione tende a essere meno estremo.

Non esiste una forza che "compensa" il risultato.

Semplicemente la componente di fortuna positiva che ha favorito la selezione non è una caratteristica persistente.

Una simulazione di preparazione

Per controllare il ragionamento ho simulato:

20.000 esperimenti

con:

100 sistemi
100 risultati TRAIN per sistema
100 risultati TEST nuovi per il sistema scelto
seed 42

La simulazione ha prodotto circa:

media miglior TRAIN:
62.465

mediana miglior TRAIN:
62

migliore TRAIN >=60:
94.50%

media TEST selezionato:
49.993

TEST selezionato >=60:
2.79%

I riferimenti teorici restano:

E[max TRAIN] ≈ 62.48
P(max TRAIN >=60) ≈ 94.4181%
E[TEST] = 50
P(TEST >=60) ≈ 2.8444%

La simulazione serve soltanto a rendere visibile il fenomeno.

Il C# calcola prima il caso esatto

Lo standalone C# associato a questo articolo è:

SelezioneExPost.cs

L'esempio allegato usa BigInteger per calcolare la coda binomiale:

BigInteger favorevoli = BigInteger.Zero;

for (int k = 60; k <= 100; k++)
{
    favorevoli += Combinazioni(100, k);
}

BigInteger totali =
    BigInteger.Pow(2, 100);

Poi converte il rapporto a double.

La simulazione arriva dopo.

Nella realtà i sistemi possono essere correlati

Il modello usa cento sistemi indipendenti perché così possiamo derivare in modo pulito:

$$ 1-(1-p)^{100} $$

In un backtest reale molte strategie possono usare gli stessi dati, segnali simili o parametri vicini.

Possono quindi essere correlate.

In quel caso la formula precedente non va usata automaticamente.

Ma il problema di fondo resta:

più alternative proviamo sugli stessi dati, più opportunità diamo al rumore di sembrare segnale.

La dipendenza cambia il calcolo quantitativo, non elimina la selezione ex post.

Più libertà, più bersagli

Il problema peggiora se, oltre ai cento sistemi, proviamo anche:

periodi diversi
mercati diversi
orari diversi
stop diversi
take profit diversi
filtri diversi
parametri diversi

e poi pubblichiamo soltanto la combinazione migliore.

Ogni scelta aggiunta dopo aver visto i dati crea un'altra possibilità di disegnare il bersaglio attorno al colpo.

La soluzione operativa non è smettere di sperimentare

Esplorare molte idee è normale.

Bisogna però distinguere:

esplorazione

da:

validazione

Una pipeline più sana è:

1. esplorare su TRAIN
2. scegliere una regola
3. congelarla
4. testarla su HOLD-OUT mai usato
5. valutare se il risultato persiste

Se dopo aver visto l'HOLD-OUT modifichiamo nuovamente il sistema, quel blocco è ormai entrato nello sviluppo.

Per una nuova validazione serve un altro insieme di dati realmente indipendente.

Un pattern predittivo non è ancora automaticamente una decisione conveniente

Miller e Davidow aggiungono un secondo livello utile.

Supponiamo di aver fatto tutto correttamente:

  1. ipotesi definita prima del test;
  2. validazione su dati nuovi;
  3. effetto statisticamente e praticamente credibile.

Resta ancora una domanda:

l'informazione è già incorporata nel prezzo che dobbiamo pagare?

Un fattore può essere realmente predittivo e tuttavia non creare valore se il mercato lo conosce già.

Per esempio, sapere che una certa condizione porta la probabilità da 50% a 55% è utile soltanto se la quota richiede un break-even inferiore al 55%.

Se la quota richiede:

$$ p_{BE}=57%, $$

anche una previsione corretta al 55% produce valore atteso negativo.

La catena completa diventa quindi:

pattern osservato
-> ipotesi formulata prima del test
-> conferma fuori campione
-> stima dell'effetto
-> confronto con il prezzo
-> decisione

Questo impedisce di confondere predittività e convenienza economica.

Fonte di contesto: Miller e Davidow, The Logic of Sports Betting, sezioni su “Angles”, mercati forti/deboli e prezzi.

Il punto operativo

Per un sistema equo scelto prima:

$$ \begin{gathered} P(\ge 60/100) \ \approx 2.8444% \end{gathered} $$

Per il migliore fra cento sistemi indipendenti tutti equi:

P(almeno uno >=60/100)
≈ 94.4181%

Il migliore mostra mediamente:

circa 62.48 vittorie

sul TRAIN usato per selezionarlo.

Ma sul TEST nuovo:

E[vittorie]=50

e:

$$ \begin{gathered} P(\ge 60/100) \ \approx 2.8444% \end{gathered} $$

La regola pratica è quindi:

i dati usati per trovare il sistema non sono sufficienti per dimostrare che il sistema funziona.

Nel prossimo articolo sommeremo molti piccoli contributi casuali: partiremo da un dado uniforme e vedremo la distribuzione della somma trasformarsi progressivamente in una forma a campana, introducendo operativamente il teorema centrale del limite.