Statistica per Data Science 2026: Probabilità, Test delle Ipotesi e Domande di Colloquio

Guida ai concetti statistici nei colloqui di data science: distribuzioni di probabilità, test delle ipotesi, intervalli di confidenza e domande frequenti presso Google, Meta e Netflix.

Statistica per Data Science 2026: Probabilità, Test delle Ipotesi e Domande di Colloquio

La statistica costituisce la base matematica di ogni ruolo nel campo della data science. Gli intervistatori presso aziende come Google, Meta e Netflix valutano il ragionamento statistico perché distingue i candidati capaci di costruire modelli da quelli che comprendono perché quei modelli funzionano.

Cosa cercano gli intervistatori

Le domande di statistica valutano tre capacità: tradurre problemi aziendali in framework statistici, scegliere il test appropriato per i dati e interpretare i risultati senza trarre conclusioni affrettate.

Distribuzioni di Probabilità che ogni Data Scientist deve conoscere

Le distribuzioni di probabilità descrivono come i punti dati si distribuiscono tra i valori possibili. Gli intervistatori si aspettano familiarità con queste distribuzioni perché sono alla base del campionamento, dei test A/B e delle assunzioni dei modelli.

La distribuzione normale (gaussiana) appare ovunque: errori di misurazione, altezza, punteggi dei test. La sua curva a campana si centra sulla media, con il 68% dei dati entro una deviazione standard e il 95% entro due. Quando le dimensioni del campione superano 30, il Teorema del Limite Centrale garantisce che le medie campionarie seguano una distribuzione normale indipendentemente dalla forma della popolazione originale.

La distribuzione binomiale modella prove di successo/fallimento. Tassi di click-through, eventi di conversione e controlli qualità con esito superato/non superato seguono pattern binomiali. Per n prove con probabilità di successo p, il valore atteso è np e la varianza è np(1-p).

La distribuzione di Poisson conta eventi rari su intervalli fissi: visite al sito web per minuto, difetti per lotto, chiamate per ora. Il suo unico parametro λ rappresenta sia la media che la varianza. Quando gli eventi si verificano indipendentemente a un tasso medio costante, Poisson si adatta perfettamente.

python
# distributions_demo.py
import numpy as np
from scipy import stats

# Normal: customer spend follows N(μ=50, σ=15)
normal_samples = stats.norm.rvs(loc=50, scale=15, size=1000)
prob_above_80 = 1 - stats.norm.cdf(80, loc=50, scale=15)  # P(X > 80)

# Binomial: 100 users, 5% conversion rate
binom_samples = stats.binom.rvs(n=100, p=0.05, size=1000)
prob_at_least_10 = 1 - stats.binom.cdf(9, n=100, p=0.05)  # P(X >= 10)

# Poisson: 3 support tickets per hour on average
poisson_samples = stats.poisson.rvs(mu=3, size=1000)
prob_zero_tickets = stats.poisson.pmf(0, mu=3)  # P(X = 0)

Queste tre distribuzioni coprono la maggior parte degli scenari pratici. Gli intervistatori chiedono spesso quale distribuzione si adatti a un dato contesto aziendale, quindi è importante esercitarsi a mappare problemi reali al modello corretto.

Test delle Ipotesi: Il Framework dietro i Test A/B

Il test delle ipotesi fornisce una struttura formale per prendere decisioni basate sui dati. Il framework inizia con un'ipotesi nulla (H₀) che rappresenta nessun effetto o nessuna differenza, e un'ipotesi alternativa (H₁) che rappresenta ciò che l'esperimento mira a rilevare.

Un'ipotesi nulla tipica di un test A/B afferma: "La nuova funzionalità non ha effetto sul tasso di conversione." L'alternativa sostiene che un effetto esiste. Il test calcola quanto probabili sarebbero i dati osservati se l'ipotesi nulla fosse vera.

Il p-value quantifica questa probabilità. Un p-value di 0.03 significa che c'è una probabilità del 3% di vedere risultati così estremi se l'ipotesi nulla è valida. Quando il p-value scende sotto il livello di significatività (comunemente α = 0.05), l'ipotesi nulla viene rifiutata.

python
# ab_test_analysis.py
import numpy as np
from scipy import stats

# A/B test data: control vs treatment conversion rates
control_conversions = 120
control_visitors = 2000
treatment_conversions = 145
treatment_visitors = 2000

# Proportions
p_control = control_conversions / control_visitors  # 0.060
p_treatment = treatment_conversions / treatment_visitors  # 0.0725

# Pooled proportion under null hypothesis
p_pooled = (control_conversions + treatment_conversions) / (control_visitors + treatment_visitors)

# Standard error
se = np.sqrt(p_pooled * (1 - p_pooled) * (1/control_visitors + 1/treatment_visitors))

# Z-statistic
z_stat = (p_treatment - p_control) / se

# Two-tailed p-value
p_value = 2 * (1 - stats.norm.cdf(abs(z_stat)))

print(f"Z-statistic: {z_stat:.3f}")  # Z-statistic: 1.681
print(f"P-value: {p_value:.4f}")  # P-value: 0.0928

Con un p-value di 0.0928, questo test non rifiuta l'ipotesi nulla a α = 0.05. La differenza osservata potrebbe essere variazione casuale. Sarebbero necessari più dati o una dimensione dell'effetto maggiore per raggiungere la significatività statistica.

Errori di Tipo I e Tipo II: I Compromessi esaminati dagli Intervistatori

I test statistici bilanciano due tipi di errori. Un errore di Tipo I (falso positivo) si verifica quando si rifiuta un'ipotesi nulla vera. Un errore di Tipo II (falso negativo) si verifica quando non si rifiuta un'ipotesi nulla falsa.

Il livello di significatività α controlla direttamente la probabilità dell'errore di Tipo I. Impostare α = 0.05 significa accettare una probabilità del 5% di falsi positivi. Abbassare α a 0.01 riduce i falsi positivi ma aumenta i falsi negativi.

La potenza statistica (1 - β) misura la probabilità di rifiutare correttamente un'ipotesi nulla falsa. La potenza dipende dalla dimensione dell'effetto, dalla dimensione del campione e dal livello di significatività. Lo standard industriale mira all'80% di potenza, il che significa una probabilità del 20% di non rilevare effetti reali.

Trappola da colloquio

I candidati spesso confondono "nessuna differenza significativa" con "non esiste alcuna differenza". Non rifiutare l'ipotesi nulla non prova che l'ipotesi nulla sia vera. Il test potrebbe non avere sufficiente potenza per rilevare un effetto piccolo ma reale.

I calcoli della dimensione del campione bilanciano queste preoccupazioni. Per un test A/B che mira a un incremento del 2% nella conversione (dal 5% al 7%) con potenza dell'80% e α = 0.05:

python
# sample_size_calculation.py
from statsmodels.stats.power import zt_ind_solve_power

# Baseline conversion: 5%, expected lift: 2 percentage points
baseline = 0.05
expected = 0.07
effect_size = (expected - baseline) / np.sqrt(baseline * (1 - baseline))  # Cohen's h

# Required sample size per group
n_per_group = zt_ind_solve_power(
    effect_size=effect_size,
    alpha=0.05,
    power=0.80,
    alternative='two-sided'
)

print(f"Sample size per group: {int(np.ceil(n_per_group))}")  # ~1,570 per group

I test sottopotenziati sprecano risorse eseguendo esperimenti che non possono rilevare effetti realistici.

Intervalli di Confidenza: Quantificare l'Incertezza

Un intervallo di confidenza al 95% significa: se lo stesso processo di campionamento fosse ripetuto molte volte, il 95% degli intervalli costruiti conterrebbe il parametro vero. Gli intervalli di confidenza comunicano l'incertezza meglio delle sole stime puntuali.

Per le medie con varianza della popolazione nota, l'intervallo utilizza la distribuzione z. Per piccoli campioni o varianza sconosciuta, si applica la distribuzione t. La distribuzione t ha code più pesanti rispetto alla normale, producendo intervalli più ampi che tengono conto dell'incertezza aggiuntiva.

python
# confidence_intervals.py
import numpy as np
from scipy import stats

# Sample data: response times in milliseconds
response_times = np.array([245, 312, 278, 299, 256, 334, 287, 301, 265, 289])

n = len(response_times)
mean = np.mean(response_times)  # 286.6
std_err = stats.sem(response_times)  # Standard error of the mean

# 95% confidence interval using t-distribution (df = n-1)
t_critical = stats.t.ppf(0.975, df=n-1)
margin_of_error = t_critical * std_err

ci_lower = mean - margin_of_error
ci_upper = mean + margin_of_error

print(f"Mean: {mean:.1f}ms")  # Mean: 286.6ms
print(f"95% CI: [{ci_lower:.1f}, {ci_upper:.1f}]ms")  # 95% CI: [265.4, 307.8]ms

Intervalli più stretti indicano stime più precise. La dimensione del campione determina la precisione: quadruplicare n dimezza il margine di errore.

Pronto a superare i tuoi colloqui su Data Science & ML?

Pratica con i nostri simulatori interattivi, flashcards e test tecnici.

Bayesiano vs Frequentista: Domande di Colloquio sulla Filosofia Statistica

Gli intervistatori a volte esplorano la comprensione dei paradigmi statistici concorrenti. La statistica frequentista tratta la probabilità come frequenza a lungo termine: i parametri sono fissi e i dati variano attraverso esperimenti ripetuti. P-value e intervalli di confidenza derivano da questa tradizione.

La statistica bayesiana tratta la probabilità come grado di credenza: la conoscenza a priori si combina con i dati per produrre credenze a posteriori. Il framework permette di incorporare l'esperienza del dominio e produce direttamente dichiarazioni di probabilità sui parametri.

I test A/B utilizzano sempre più metodi bayesiani perché rispondono alla domanda che gli stakeholder effettivamente pongono: "Qual è la probabilità che il trattamento B superi il trattamento A?" piuttosto che "Quanto sono sorprendenti questi dati se non ci fosse differenza?"

python
# bayesian_ab_test.py
import numpy as np
from scipy import stats

# Prior: Beta(1, 1) = uniform prior for conversion rate
# Posterior: Beta(alpha + successes, beta + failures)

control_successes, control_failures = 120, 1880
treatment_successes, treatment_failures = 145, 1855

# Posterior distributions
posterior_control = stats.beta(1 + control_successes, 1 + control_failures)
posterior_treatment = stats.beta(1 + treatment_successes, 1 + treatment_failures)

# Monte Carlo estimation: P(treatment > control)
samples_control = posterior_control.rvs(100000)
samples_treatment = posterior_treatment.rvs(100000)
prob_treatment_better = np.mean(samples_treatment > samples_control)

print(f"P(treatment > control): {prob_treatment_better:.2%}")  # ~95%

I risultati bayesiani comunicano direttamente: "C'è una probabilità del 95% che il tasso di conversione del trattamento superi quello del controllo." I risultati frequentisti richiedono un'interpretazione più attenta.

Domande di Colloquio Comuni sull'Inferenza Statistica

Queste domande appaiono frequentemente nei colloqui di data science presso le aziende tecnologiche. Ciascuna testa un concetto statistico specifico.

"Spiegare il Teorema del Limite Centrale e perché è importante."

Il TLC afferma che le medie campionarie da qualsiasi popolazione (con varianza finita) si avvicinano a una distribuzione normale man mano che la dimensione del campione aumenta. Questo è importante perché le assunzioni di normalità nei test delle ipotesi valgono per grandi campioni indipendentemente dalla distribuzione sottostante. Dimensioni del campione di 30+ sono tipicamente sufficienti.

"Cos'è il p-hacking e come si previene?"

Il p-hacking gonfia i tassi di falsi positivi testando multiple ipotesi fino a trovare significatività, o interrompendo la raccolta dati quando i risultati diventano significativi. Strategie di prevenzione: pre-registrare i piani di analisi, applicare correzioni per confronti multipli (Bonferroni, FDR) e fissare le dimensioni del campione prima di raccogliere i dati.

"Quando si userebbe un t-test rispetto a un test Mann-Whitney U?"

Il t-test assume dati normalmente distribuiti (o grandi campioni tramite TLC) e confronta le medie. Il Mann-Whitney U è un'alternativa non parametrica che confronta le distribuzioni senza assunzioni di normalità. Si usa Mann-Whitney per piccoli campioni con dati chiaramente non normali o quando si confrontano misurazioni ordinali.

"Come si gestiscono i confronti multipli nei test A/B?"

Testare multiple varianti gonfia l'errore di Tipo I. Con 20 confronti a α = 0.05, la probabilità di almeno un falso positivo supera il 60%. La correzione di Bonferroni divide α per il numero di test. La procedura di Benjamini-Hochberg controlla il tasso di false scoperte mantenendo più potenza rispetto a Bonferroni.

Il Paradosso di Simpson: Un Argomento Preferito nei Colloqui

Il paradosso di Simpson si verifica quando i trend nei dati aggregati si invertono a livello di sottogruppo. Gli intervistatori amano questo argomento perché testa il ragionamento causale, non solo la meccanica statistica.

Un esempio classico: l'Ospedale A ha un tasso di mortalità complessivo più alto dell'Ospedale B. Ma l'Ospedale A ha una mortalità inferiore sia per i casi lievi che per quelli gravi. Il paradosso sorge perché l'Ospedale A tratta più casi gravi, che hanno una mortalità più alta indipendentemente dalla qualità dell'ospedale.

python
# simpsons_paradox.py
import pandas as pd

# Hospital mortality data
data = {
    'Hospital': ['A', 'A', 'B', 'B'],
    'Severity': ['Mild', 'Severe', 'Mild', 'Severe'],
    'Patients': [200, 800, 800, 200],
    'Deaths': [10, 160, 48, 50]
}
df = pd.DataFrame(data)
df['Mortality'] = df['Deaths'] / df['Patients']

# Subgroup mortality
print(df[['Hospital', 'Severity', 'Mortality']])
# Hospital A: Mild 5%, Severe 20%
# Hospital B: Mild 6%, Severe 25%

# Aggregate mortality
agg = df.groupby('Hospital').agg({'Deaths': 'sum', 'Patients': 'sum'})
agg['Mortality'] = agg['Deaths'] / agg['Patients']
print(agg['Mortality'])
# Hospital A: 17%, Hospital B: 9.8%

La risoluzione richiede l'identificazione della variabile confondente (gravità) e l'analisi separata dei sottogruppi. L'analisi aggregata fuorvia quando le proporzioni dei sottogruppi differiscono.

Concetti Statistici per il Feature Engineering

La conoscenza statistica migliora direttamente il feature engineering. La comprensione delle distribuzioni guida le trasformazioni; la comprensione delle relazioni guida la creazione delle feature.

L'asimmetria (skewness) misura l'asimmetria della distribuzione. I dati con asimmetria positiva (reddito, prezzi) beneficiano di trasformazioni logaritmiche che normalizzano la distribuzione e migliorano le prestazioni del modello. I dati con asimmetria negativa usano trasformazioni quadratiche o esponenziali.

La correlazione quantifica le relazioni lineari. La correlazione di Pearson assume normalità e linearità. La correlazione di Spearman gestisce relazioni monotone non lineari. Feature altamente correlate causano multicollinearità nei modelli lineari, quindi tipicamente una viene rimossa.

Gli outlier influenzano medie e deviazioni standard in modo sproporzionato. Le statistiche robuste (mediana, IQR) resistono all'influenza degli outlier. Decisione: rimuovere, limitare o trasformare gli outlier a seconda che rappresentino errori o valori estremi genuini.

Per ulteriori informazioni sull'applicazione di questi concetti ai modelli di machine learning, consultare la guida ai colloqui sul feature engineering ed esplorare il modulo di pratica sulla statistica inferenziale.

Inizia a praticare!

Metti alla prova le tue conoscenze con i nostri simulatori di colloquio e test tecnici.

Cosa Distingue i Candidati Forti nelle Domande di Statistica

La competenza statistica nei colloqui di data science richiede più delle definizioni da manuale. I candidati forti dimostrano queste capacità:

  • Collegare la statistica ai risultati aziendali: formulare i risultati dei test A/B in termini di impatto sui ricavi o sul coinvolgimento degli utenti, non solo p-value
  • Conoscere le assunzioni: ogni test ha condizioni (indipendenza, normalità, varianza uguale) e i candidati dovrebbero indicare quando queste condizioni potrebbero non essere soddisfatte
  • Quantificare l'incertezza: le stime puntuali senza intervalli di confidenza o intervalli credibili lasciano gli stakeholder a indovinare sull'affidabilità
  • Riconoscere i limiti della causalità: i dati osservazionali mostrano correlazione, e i candidati dovrebbero articolare quale design sperimentale stabilirebbe la causalità
  • Scegliere il test giusto: abbinare il tipo di dato (continuo vs categorico), la dimensione del campione e la domanda di ricerca al metodo statistico appropriato
  • Comunicare i risultati chiaramente: tradurre i risultati statistici in raccomandazioni attuabili che gli stakeholder non tecnici possano comprendere e su cui possano agire
Sfida del giorno

Sapresti trovare il bug in Data Science & ML?

Uno snippet reale, un bug nascosto, un tentativo al giorno. Senza account per provare.

Anthony Fillion-Maillet

Scritto da

Anthony Fillion-Maillet

Fondatore di SharpSkill

Sviluppatore fullstack da oltre 10 anni. Guida SharpSkill e risponde di tutto ciò che vi viene pubblicato.

Aggiornato il 21 agosto 2026

Condividi

Articoli correlati