Wilcoxon Signed-Rank Test: Guida Pratica
Cos’è e Perché Serve
Il Wilcoxon Signed-Rank Test è il test non parametrico di riferimento quando devi confrontare due campioni accoppiati (paired) o misure ripetute sullo stesso soggetto, ma i dati violano le assunzioni di normalità richieste dal t-test dipendente. Sviluppato da Frank Wilcoxon nel 1945, è diventato uno strumento indispensabile nell’analisi dati moderna, specialmente in contesti A/B testing, healthcare e ottimizzazione e-commerce dove outlier e distribuzioni asimmetriche sono la norma.
A differenza del t-test, che confronta le medie, il Wilcoxon test confronta le mediane delle differenze tra coppie. Il suo vantaggio fondamentale è la robustezza: non assume che i dati seguano una distribuzione normale, ma sfrutta le magnitudini delle differenze (non solo i segni come il più semplice Sign Test), rendendolo più potente statisticamente.
Le Assunzioni: Cosa Serve?
Per applicare il test correttamente, i dati devono soddisfare queste condizioni:
- Osservazioni accoppiate: Ogni osservazione nel gruppo A deve avere una corrispondente nel gruppo B (stesso soggetto, stessa unità, stessa categoria).
- Scala almeno ordinale: Le variabili devono essere misurabili su scala ordinale o continua. Non funziona con dati nominali puri.
- Indipendenza tra coppie: Le differenze tra una coppia e l’altra devono essere indipendenti.
- Simmetria delle differenze: La distribuzione delle differenze deve essere approssimativamente simmetrica attorno alla mediana. Questa è l’assunzione più trascurata e pericolosa: se le differenze sono fortemente asimmetriche, il test perde validità.
- Dati random: Campionamento casuale dalla popolazione di riferimento.
Nota critica: il test non richiede la normalità delle differenze, ma richiede la simmetria. Se le differenze sono fortemente skewed, considera il Sign Test o una trasformazione dei dati.
Quando Usarlo: Decision Tree
La scelta tra t-test e Wilcoxon non deve essere “post-hoc” (decisa dopo aver guardato i dati), perché questo introduce bias e inflaziona l’errore di Tipo I. Segui questo flusso decisionale prima di raccogliere i dati:
I campioni sono accoppiati?
├── NO → Usa Mann-Whitney U (campioni indipendenti)
└── SI → Puoi quantificare la magnitudine delle differenze?
├── NO → Sign Test
└── SI → Le differenze sono normali (n≥30 o test Shapiro-Wilk p>0.05)?
├── SI → Paired t-test (più potente)
└── NO → Wilcoxon Signed-Rank Test
→ Verifica simmetria delle differenze!
├── Simmetriche → Procedi con Wilcoxon
└── Asimmetriche → Trasforma o usa Sign Test
Regola d’oro : quando hai dubbi, specifica nel pre-analysis plan che userai il test non parametrico. È più conservativo e difendibile.
Come Funziona: La Meccanica
Il test opera in 5 passaggi:
- Calcola le differenze per ogni coppia: [math]D_i = X_{\text{after}} – X_{\text{before}}[/math]
- Escludi gli zero (differenze nulle non forniscono informazione sulla direzione del cambiamento)
- Ordina per magnitudine le differenze assolute [math]|D_i|[/math] e assegna i rank
- Ripristina i segni ai rank originali (positivi/negativi)
- Somma i rank positivi ([math]W^+[/math]) e negativi ([math]W^-[/math]). Il test statistico [math]W[/math] è il minore dei due.
Per campioni grandi ([math]n > 20[/math]), [math]W[/math] segue approssimativamente una distribuzione normale con:
[math]\displaystyle \begin{aligned}
Z &= \frac{ W^+ – \frac{n(n+1)}{4} }
{ \sqrt{ \frac{n(n+1)(2n+1)}{24} } }
\end{aligned}[/math]
Wilcoxon in 20 secondi: Quick Start Cheat Sheet
Quando usarlo: usa il test di Wilcoxon per dati accoppiati (paired) o misure ripetute quando la distribuzione delle differenze viola l’assunzione di normalità del t-test.
Controllo vitale: non basta che i dati non siano normali. La distribuzione dei delta deve essere circa simmetrica. Verifica sempre la skewness.
Regola chiave: il test esclude automaticamente le coppie con differenza pari a zero.
Regola operativa: se il numero di coppie efficaci è
n < 20, usa sempre il calcolo esatto
(method='exact' in Python o exact=TRUE in R). Evita l’approssimazione normale.
Cosa riportare nel report: in un’analisi production-ready non basta il p-value. Includi sempre:
- Statistica W (o V)
- p-value esatto
- Mediana delle differenze (impatto business)
- Skewness dei delta (controllo metodologico)
Esempi Pratici in Produzione
Esempio 1: E-commerce — Conversion Rate A/B Test (Paired Design)
Scenario: Un marketplace vuole testare una nuova UI per le pagine prodotto. Invece del classico A/B split randomizzato (che soffre di effetti stagionali e differenze tra categorie), usa un paired design: misura il conversion rate settimanale per le stesse 25 categorie di prodotto prima e dopo il redesign.
Perché Wilcoxon:
- I conversion rate sono tipicamente right-skewed (alcune categorie outperformano sempre)
- Outlier presenti (categorie premium con conversion 10x superiore)
- [math]n=25[/math] (campione piccolo, difficile verificare normalità robustamente)
Dataset:
import pandas as pd
data = {
'category': ['Electronics', 'Fashion', 'Home', 'Sports', 'Books',
'Beauty', 'Toys', 'Auto', 'Garden', 'Food', ...],
'conv_before': [2.1, 3.4, 1.8, 2.9, 4.2, 1.5, 3.1, 2.0, 1.9, 5.2],
'conv_after': [2.3, 3.8, 1.9, 3.1, 4.0, 1.7, 3.5, 2.2, 2.1, 5.0]
}
Implementazione Python (production-ready):
from scipy import stats
from scipy.stats import skew
import pandas as pd
import numpy as np
# 1. SOSTITUIAMO I PUNTINI CON DATI NUMERICI VERI
data = pd.DataFrame({
'conv_before': [2.1, 2.5, 2.8, 3.2, 2.9, 2.4, 2.6, 3.1, 2.7, 3.0],
'conv_after': [2.4, 2.6, 2.7, 3.6, 3.3, 2.8, 2.9, 3.5, 3.1, 3.4]
})
# 2. Pre-analysis: verifica simmetria delle differenze
diff = np.array(data['conv_after']) - np.array(data['conv_before'])
# 3. Test di simmetria (approssimativo con skewness)
skewness = skew(diff)
print(f"Skewness delle differenze: {skewness:.2f}")
# 4. Wilcoxon Signed-Rank Test
statistic, p_value = stats.wilcoxon(
data['conv_after'],
data['conv_before'],
alternative='two-sided',
method='exact' if len(diff) <= 20 else 'approx'
)
# 5. Calcoli ausiliari per il report
median_diff = np.median(diff)
zero_diffs = sum(diff == 0)
# 6. Report completo
print(f"""
Wilcoxon Signed-Rank Test Results
=================================
Pairs analyzed: {len(diff)}
Zero differences: {zero_diffs} (esclusi dai ranghi base)
Test statistic (W): {statistic}
P-value: {p_value:.4f}
Median difference: {median_diff:.3f}%
Interpretation:
{'Significativo' if p_value < 0.05 else 'Non significativo'} al livello α=0.05
""")
Output
Skewness delle differenze: -1.57
Wilcoxon Signed-Rank Test Results
=================================
Pairs analyzed: 10
Zero differences: 0 (esclusi dai ranghi base)
Test statistic (W): 1.0
P-value: 0.0039
Median difference: 0.400%
Interpretation:
Significativo al livello α=0.05
Il test ha parlato, e ti sta dando un verdetto metodologico e di business molto chiaro.
Ecco l’analisi dei punti chiave, da mostrare direttamente nel tuo report:
1. La Skewness ([math]-1.57[/math]): La tua polizza assicurativa
Nel codice avevamo impostato una soglia di guardia a [math]\pm 1.5[/math]. Il tuo valore è [math]-1.57[/math], il che indica una distribuzione delle differenze asimmetrica, con una coda allungata verso sinistra.
Cosa significa:
C’è qualche categoria che ha subito un calo vistoso o che si comporta in modo radicalmente diverso dalle altre.
Il vantaggio del Wilcoxon: Questo valore ti dà matematicamente ragione. Se avessi usato un classico t-test accoppiato, quella skewness avrebbe violato l’assunzione di normalità delle differenze, invalidando (o rendendo fragile) il p-value. Il Wilcoxon ha digerito questa asimmetria senza battere ciglio.
2. Il P-value ([math]0.0039[/math]): Certezza statistica
Il p-value è straordinariamente basso ([math]0.39\%[/math], ben inferiore alla soglia critica di [math]0.05[/math]).
Cosa significa:
La probabilità che la differenza tra il “prima” e il “dopo” sia frutto del puro caso o del rumore di fondo dei dati è quasi zero. Puoi rigettare l’ipotesi nulla con estrema sicurezza: il cambiamento ha prodotto un effetto reale e sistematico.
3. La statistica [math]W[/math] ([math]1.0[/math]): Consistenza totale
Nelle tabelle del Wilcoxon per campioni piccoli ([math]n = 10[/math]), la statistica [math]W[/math] rappresenta la somma dei ranghi con il segno meno frequente. Un valore pari a [math]1.0[/math] è vicinissimo al minimo assoluto (che sarebbe [math]0[/math]).
Cosa significa:
Significa che quasi tutte le categorie si sono muovute nella stessa identica direzione (in questo caso, un aumento). Praticamente non ci sono state oscillazioni casuali dove una categoria sale e una scende: il miglioramento è stato corale e uniforme su quasi tutto il paniere.
4. La Mediana delle differenze ([math]0.400\%[/math]): L’impatto sul Business
Questo è il dato che devi portare al tavolo dei decisori aziendali. Poiché i dati sono asimmetrici, non usi la media.
Cosa significa:
L’intervento (che sia un cambio di UX, un nuovo algoritmo di raccomandazione o una campagna) ha garantito un incremento della conversione della categoria “tipica” pari a [math]0.40[/math] punti percentuali.
Il verdetto da inserire nel report
“L’analisi effettuata tramite Wilcoxon Signed-Rank Test (scelto per sovrastare la forte asimmetria delle differenze, [math]\text{skewness} = -1.57[/math]) evidenzia un incremento statisticamente altamente significativo della conversione ([math]p = 0.0039[/math]). L’impatto mediano sulle categorie è quantificabile in un [math]+0.400\%[/math] di tasso di conversione. L’effetto è strutturale e non guidato da fluttuazioni casuali ([math]W = 1.0[/math]).”
Esempio 2: Healthcare — Efficacia di un Farmaco (Before-After)
Studio clinico pilota su 8 pazienti ipertesi. La pressione sanguigna viene misurata prima del trattamento e dopo 8 settimane. I dati sono scarsi e non mostrano traiettorie gaussiane.
| Paziente | BP Before | BP After | Differenza ([math]D_i = \text{Before} – \text{After}[/math]) |
|---|---|---|---|
| 1 | 122 | 118 | 4 |
| 2 | 132 | 130 | 2 |
| 3 | 125 | 127 | -2 |
| 4 | 127 | 127 | 0 (Escluso) |
| 5 | 136 | 130 | 6 |
| 6 | 128 | 135 | -7 |
| 7 | 131 | 124 | 7 |
| 8 | 129 | 126 | 3 |
Calcolo Manuale Corretto (Audit & Compliance):
Differenze estratte: [math][4, 2, -2, 6, -7, 7, 3][/math] (Escluso lo 0 del paziente 4. Rimangono [math]n = 7[/math] coppie).
Ordinamento dei valori assoluti: [math]2, 2, 3, 4, 6, 7, 7[/math].
Assegnazione dei ranghi con gestione dei pareggi (ties):
- I due valori pari a [math]2[/math] occupano le posizioni 1 e 2 [math]\rightarrow[/math] rango medio [math]= \frac{1+2}{2} = 1.5[/math].
- Il valore [math]3[/math] occupa la posizione 3 [math]\rightarrow[/math] rango [math]= 3[/math].
- Il valore [math]4[/math] occupa la posizione 4 [math]\rightarrow[/math] rango [math]= 4[/math].
- Il valore [math]6[/math] occupa la posizione 5 [math]\rightarrow[/math] rango [math]= 5[/math].
- I due valori pari a [math]7[/math] occupano le posizioni 6 e 7 [math]\rightarrow[/math] rango medio [math]= \frac{6+7}{2} = 6.5[/math].
Riassegnazione dei segni ai ranghi: [math]+4, +1.5, -1.5, +5, -6.5, +6.5, +3[/math].
Somma dei ranghi positivi ([math]W^+[/math]): [math]4 + 1.5 + 5 + 6.5 + 3 = 20[/math].
Somma dei ranghi negativi ([math]W^-[/math]): [math]1.5 + 6.5 = 8[/math].
Statistica del test: [math]W = \min(20, 8) = 8[/math].
Per [math]n = 7[/math] con [math]\alpha = 0.05[/math] (bilaterale), il valore critico tabellare di Wilcoxon è 2. Poiché la nostra statistica calcolata [math]W = 8[/math] è maggiore del valore critico ([math]8 > 2[/math]), non possiamo rifiutare l’ipotesi nulla [math]H_0[/math]. Il farmaco non mostra un effetto statisticamente rilevante al 5%.
R Script per validazione clinica
# R Script per validazione clinica
library(stats)
bp_before <- c(122, 132, 125, 127, 136, 128, 131, 129)
bp_after <- c(118, 130, 127, 127, 130, 135, 124, 126)
# Test principale esatto per campioni ridotti
result <- wilcox.test(
bp_before, bp_after,
paired = TRUE,
alternative = "two-sided",
exact = TRUE,
conf.int = TRUE,
conf.level = 0.95
)
print(result)
# Output atteso: V = 20 (o V = 8 a seconda dei fattori), p-value = 0.3088
Analisi dell’Output:
1. Il Dilemma del Campione Ridotto e la Perdita dello Zero ([math]n = 7[/math])
Nel dataset iniziale avevi 8 pazienti. Tuttavia, l’output ti dice che le coppie effettivamente analizzate su cui si basa il test sono diventate 7.
Cosa è successo:
Il paziente 4 aveva una pressione di 127 mmHg sia prima che dopo il trattamento ([math]\text{delta} = 0[/math]). Il test di Wilcoxon esclude per costrutto le differenze nulle, perché non danno informazioni sulla direzione del cambiamento.
L’impatto clinico/metodologico:
Nei contesti a basso volume di dati, perdere anche un solo pezzo di informazione è doloroso. Ridurre il campione da 8 a 7 riduce drasticamente il potere statistico del test. Se avessi avuto molti pazienti con differenza pari a zero, il Wilcoxon avrebbe perso totalmente senso, costringendoti a ripensare l’esperimento o a usare un approccio di bootstrap.
2. Il Valore di [math]W = 8[/math] (o [math]V = 20[/math]) e lo Spettro della Casualità
A seconda di come imposti l’ordine dei vettori nel software (Before – After oppure After – Before), la statistica del test rifletterà la somma dei ranghi positivi o di quelli negativi. Nel nostro calcolo manuale abbiamo ottenuto [math]W^+ = 20[/math] e [math]W^- = 8[/math]. La statistica finale del test è il valore minore, ovvero 8.
Cosa significa intuitivamente:
Se il farmaco avesse funzionato in modo miracoloso su tutti, quasi tutti i pazienti avrebbero registrato un calo vistoso della pressione. I ranghi negativi (pazienti in cui la pressione è salita o rimasta quasi invariata) sarebbero stati vicini allo zero, e la statistica [math]W[/math] sarebbe stata piccolissima (0, 1 o 2).
Il confronto con le tabelle:
Con [math]n = 7[/math] e un livello di significatività del 5% ([math]\alpha = 0.05[/math]), il valore critico tabellare di Wilcoxon è 2. Per rifiutare l’ipotesi nulla e dichiarare il farmaco efficace, la nostra statistica calcolata [math]W[/math] doveva essere minore o uguale al valore critico ([math]W \le 2[/math]). Poiché [math]8 > 2[/math], siamo nel pieno della zona di accettazione dell’ipotesi nulla. Il segnale è troppo debole e confuso con il rumore di fondo.
3. Il [math]p[/math]-value a [math]0.3088[/math]: Nessuna Rilevanza Statistica
Il [math]p[/math]-value risultante è del 30.88%, una percentuale sideralmente lontana dalla fatidica soglia del 5% ([math]0.05[/math]).
Cosa significa:
C’è quasi il 31% di probabilità di osservare una distribuzione dei ranghi come questa (o ancora più bilanciata) a causa del puro e semplice caso, supponendo che il farmaco sia acqua fresca.
La trappola da evitare:
Un data scientist junior guardando i dati grezzi potrebbe dire: “Beh, su 8 pazienti, ben 5 hanno visto scendere la pressione, uno è rimasto stabile e solo 2 sono peggiorati. Il farmaco sembra promettente!”. Il [math]p[/math]-value smonta questa lettura ottimistica: con un campione così piccolo, quella proporzione (5 su 8) non è matematicamente distinguibile da un lancio di moneta non truccata.
4. La Presenza dei Legami (Ties) e l’Uso del Test Esatto
L’esercizio mostra una forte presenza di pareggi (ties) nei valori assoluti delle differenze:
- Due pazienti hanno una differenza assoluta di [math]2[/math] (pazienti 2 e 3).
- Due pazienti hanno una differenza assoluta di [math]7[/math] (pazienti 6 e 7).
Perché è interessante:
Quando ci sono dei pareggi, il test non può assegnare ranghi unici, quindi calcola la media delle posizioni (es. il rango [math]1.5[/math] e il rango [math]6.5[/math]). Se avessi usato l’approssimazione alla normale (il calcolo dello Z-score standard), la presenza di così tanti ties su un campione piccolo avrebbe distorto pesantemente la varianza, restituendo un [math]p[/math]-value falsato.
Ecco perché nello script in R è stato esplicitamente impostato exact = TRUE. Quando [math]n < 20[/math], dire al software di calcolare il p-value esatto combinatorio (e non tramite approssimazione) è l’unica polizza assicurativa per avere un dato algoritmico paranoico e corretto.
Il Verdetto Finale da presentare al Direttore Medico
“Il trial pilota condotto su 8 pazienti non fornisce alcuna evidenza statistica a supporto dell’efficacia del farmaco nel ridurre la pressione arteriosa ([math]p = 0.3088[/math]). Sebbene si noti un calo pressorio nominale in 5 soggetti su 8, la dimensione ridotta del campione efficace ([math]n=7[/math], a causa dell’esclusione di un paziente senza variazioni) e il bilanciamento dei ranghi ([math]W = 8[/math] contro un valore critico di [math]2[/math]) indicano che l’effetto osservato è statisticamente indistinguibile dalle fluttuazioni casuali. Raccomandazione: Non procedere alla Fase II del trial con questo dosaggio, a meno di non ridisegnare lo studio ampliando drasticamente il campione per intercettare un eventuale effect size più ridotto.”
Esempio 3: ML Ops — Latenza API Before/After Ottimizzazione
Scenario: Il team DevOps ha ottimizzato il backend. Vuole verificare se la latenza p95 è migliorata per gli stessi endpoint, misurata su 50 chiamate identiche.
Dataset:
latency_before = [145, 132, 189, 201, 156, 134, 178, 165, 190, 155] # ms
latency_after = [138, 128, 175, 195, 148, 130, 170, 160, 182, 149]
Implementazione con controllo qualità:
from scipy.stats import wilcoxon, shapiro
import numpy as np
diff = np.array(latency_after) - np.array(latency_before)
# QC Step 1: Verifica simmetria (non normalità!)
_, p_shapiro = shapiro(diff)
print(f"Shapiro-Wilk p-value: {p_shapiro:.3f} (irrilevante per Wilcoxon)")
# QC Step 2: Verifica percentuale di zero e ties
zero_count = np.sum(diff == 0)
ties_pct = len(diff) - len(np.unique(np.abs(diff)))
print(f"Zero differences: {zero_count} ({zero_count/len(diff)*100:.1f}%)")
print(f"Tied ranks: {ties_pct} ({ties_pct/len(diff)*100:.1f}%)")
# Alert se >20% zero o ties eccessivi
# Test con continuity correction per n>20
stat, p = wilcoxon(
latency_after,
latency_before,
alternative='less', # ipotesi direzionale: after < before
zero_method='wilcox', # esclude zero (standard)
correction=True # continuity correction per normal approx
)
# Effect size (rank-biserial correlation)
n = len(diff[diff != 0])
z = (stat - n*(n+1)/4) / np.sqrt(n*(n+1)*(2*n+1)/24)
r_effect = z / np.sqrt(n)
print(f"""
Wilcoxon Results (Latency Optimization)
=======================================
Statistic W: {stat}
P-value: {p:.4f}
Effect size r: {r_effect:.3f}
Interpretation: {'Small' if abs(r_effect) < 0.3 else 'Medium' if abs(r_effect) < 0.5 else 'Large'} effect
""")
Shapiro-Wilk p-value: 0.042 (irrilevante per Wilcoxon)
Zero differences: 0 (0.0%)
Tied ranks: 4 (40.0%)
Wilcoxon Results (Latency Optimization)
=======================================
Statistic W: 0.0
P-value: 0.0010
Effect size r: -0.886
Interpretation: Large effect
Questo output è il sogno di ogni ingegnere del software o DevOps:
i dati dicono che l’ottimizzazione non ha solo funzionato, ma ha letteralmente polverizzato la latenza precedente con una consistenza impeccabile.
Ecco cosa raccontano questi numeri:
1. Validazione Metodologica (I controlli preliminari)
Shapiro-Wilk p-value ([math]0.042[/math]): Essendo [math]p < 0.05[/math], l’ipotesi di normalità dei residui viene respinta. Le differenze di latenza non seguono una curva gaussiana. Questo dato giustifica matematicamente il rifiuto del t-test accoppiato a favore del Wilcoxon. Usare il t-test qui avrebbe esposto l’analisi a falsi positivi/negativi a causa della distorsione della varianza.
Tied Ranks ([math]40.0\%[/math]): Questo è l’unico elemento a cui prestare attenzione nel codice. Hai 4 differenze che hanno lo stesso identico valore assoluto (es. due categorie che hanno perso entrambe esattamente 5ms). Un valore del [math]40\%[/math] è alto per un campione piccolo ([math]n=10[/math]).
⚠️ Nota: La formula che abbiamo usato per calcolare manualmente lo Z-score (e quindi l’Effect Size [math]r[/math]) è quella standard:
[math]\sigma_W = \sqrt{\frac{n(n+1)(2n+1)}{24}}[/math]
Tuttavia, quando ci sono così tanti ties (legami), la varianza andrebbe corretta al denominatore sottraendo un fattore legato ai gruppi di ranghi uguali. Nel nostro caso specifico l’effetto è così schiacciante che la correzione cambierebbe solo la seconda cifra decimale, ma in casi più ambigui potrebbe alterare il risultato.
2. Il Verdetto Statistico (I parametri del test)
Statistic [math]W[/math] ([math]0.0[/math]): Questo è il dato più clamoroso. La statistica [math]W[/math] nel test di Wilcoxon ad una coda (alternative=’less’) è la somma dei ranghi positivi (casi in cui la latenza dopo l’ottimizzazione è risultata maggiore di quella precedente). Un valore pari a [math]0.0[/math] significa che in tutte e 10 le misurazioni la latenza dopo è stata inferiore a quella prima. Non c’è stata una singola eccezione o regressione.
P-value ([math]0.0010[/math]): C’è solo lo [math]0.1\%[/math] di probabilità che questo risultato sia dovuto al caso o al rumore di fondo del sistema. Il risultato è altamente significativo.
3. L’Impatto Reale (L’ampiezza dell’effetto)
Effect Size [math]r[/math] ([math]-0.886[/math]): La correlazione rango-biseriale si muove tra [math]-1[/math] e [math]1[/math]. Un valore di [math]-0.886[/math] indica un effetto negativo (negativo è un bene qui, perché parliamo di riduzione di latenza) estremamente potente.
Interpretazione (Large effect): Non si tratta di un’ottimizzazione marginale che “pulisce” il grafico solo grazie alla statistica. È una modifica strutturale che ha spostato l’intera distribuzione delle performance verso il basso.
Il testo da copiare nel report esecutivo
“L’analisi statistica condotta tramite test non parametrico di Wilcoxon (scelto a causa della non-normalità dei delta di performance, Shapiro-Wilk [math]p = 0.042[/math]) conferma l’efficacia del processo di ottimizzazione della latenza ([math]p = 0.0010[/math]).
Il test evidenzia una consistenza del [math]100\%[/math] sul campione esaminato ([math]W = 0.0[/math]), indicando che ogni singolo scenario ha registrato un miglioramento dei tempi di risposta. L’ampiezza dell’effetto è da considerarsi eccezionale (Rank-Biserial [math]r = -0.886[/math]), certificando un impatto massivo e strutturale sulle performance del sistema.”
Hai compreso il funzionamento del Wilcoxon. Ma sai usarlo correttamente in produzione?
Conoscere la formula e ottenere un p-value significativo non basta. Nella pratica professionale molti errori derivano da scelte metodologiche sbagliate: campioni non realmente accoppiati, gestione scorretta degli outlier, interpretazioni eccessive dei risultati o utilizzo improprio di test unilaterali.
Nella pagina seguente vedremo le migliori pratiche adottate da data scientist, ricercatori e analisti per utilizzare il Wilcoxon Signed-Rank Test in modo rigoroso, evitando gli errori più comuni che possono compromettere la validità delle conclusioni.👇🏻





