Incremento, significatività e controlli di sicurezza in SQL
Calcolo dell'incremento della conversione e dei controlli sui dati che segnalano un esperimento compromesso.
Incremento, significatività e controlli di sicurezza in SQL è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
Dalle metriche a una decisione
La conversione per variante è solo l'inizio. La domanda del colloquio è: la variante treatment ha davvero vinto? Ciò significa calcolare il lift, valutare se la differenza è reale o rumore e verificare le metriche guardrail che rilevano un esperimento non riuscito.
Non eseguirà un intero pacchetto statistico in SQL, ma può calcolare i dati necessari e un indicatore approssimativo di significatività, che è ciò che gli intervistatori vogliono vedere.
La CTE riepilogativa per variante
Tutto ciò che segue si basa su un unico riepilogo ordinato: per ogni variante, il numero di utenti n, il numero di utenti convertiti c e il tasso di conversione p. Lo calcoli una volta in una CTE e lo riutilizzi.
WITH summary AS (
SELECT
variant,
COUNT(DISTINCT user_id) AS n,
COUNT(DISTINCT converted_user) AS c
FROM experiment_flat
GROUP BY variant
)
SELECT
variant, n, c,
1.0 * c / n AS p
FROM summary;Lift assoluto e relativo
Esistono due definizioni di lift e, per impostazione predefinita, gli intervistatori si aspettano quella relativa:
- Lift assoluto = p_treatment - p_control (punti percentuali).
- Lift relativo = (p_treatment - p_control) / p_control (un miglioramento percentuale).
Dire «un aumento di 2 punti» oppure «un lift relativo del 20%» può descrivere lo stesso risultato. Sia esplicito.
Calcolare il lift con un self-pivot
Per confrontare due varianti su un'unica riga, porti control e treatment affiancati usando un'aggregazione condizionale, quindi esegua il calcolo aritmetico.
In questo modo evita un self-join fragile e mantiene leggibile la formula del lift.
WITH s AS (
SELECT variant,
COUNT(DISTINCT user_id) AS n,
COUNT(DISTINCT converted_user) AS c
FROM experiment_flat GROUP BY variant
),
rates AS (
SELECT
MAX(CASE WHEN variant='control' THEN 1.0*c/n END) AS p_ctrl,
MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p_trt
FROM s
)
SELECT
p_ctrl, p_trt,
p_trt - p_ctrl AS abs_lift,
ROUND(100.0 * (p_trt - p_ctrl) / p_ctrl, 2) AS rel_lift_pct
FROM rates;Perché una differenza potrebbe essere rumore
Un tasso più elevato per treatment potrebbe essere dovuto alla casualità del campionamento. La significatività chiede: quanto è probabile osservare una differenza di queste dimensioni se le varianti fossero realmente identiche?
L'elemento fondamentale è l'errore standard di ciascun tasso, che diminuisce all'aumentare della dimensione del campione. Campioni numerosi rendono affidabili anche piccoli lift; campioni ridotti rendono sospetti persino lift elevati.
Errore standard di una proporzione
Per un tasso di conversione p su n utenti, l'errore standard è sqrt(p * (1 - p) / n). Lo calcoli direttamente in SQL per ogni variante.
In questo modo quantifica l'oscillazione di ciascun tasso prima di confrontarli.
WITH s AS (
SELECT variant,
COUNT(DISTINCT user_id) AS n,
COUNT(DISTINCT converted_user) AS c
FROM experiment_flat GROUP BY variant
)
SELECT
variant, n,
1.0 * c / n AS p,
SQRT( (1.0*c/n) * (1 - 1.0*c/n) / n ) AS std_err
FROM s;Uno z-score per due proporzioni
Un indicatore approssimativo di significatività è lo z-score per due proporzioni: la differenza tra i tassi divisa per l'errore standard di tale differenza. Un valore assoluto superiore a circa 1.96 corrisponde alla soglia comune del 95%.
Specifichi chiaramente che si tratta di un'approssimazione, non di un sostituto di un test appropriato, ma che in SQL risponde alla domanda «è plausibile che questa differenza sia reale?».
WITH r AS (
SELECT
MAX(CASE WHEN variant='control' THEN 1.0*c/n END) AS p1,
MAX(CASE WHEN variant='control' THEN n END) AS n1,
MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p2,
MAX(CASE WHEN variant='treatment' THEN n END) AS n2
FROM (
SELECT variant, COUNT(DISTINCT user_id) n,
COUNT(DISTINCT converted_user) c
FROM experiment_flat GROUP BY variant
) s
)
SELECT
p2 - p1 AS abs_lift,
(p2 - p1) / SQRT( p1*(1-p1)/n1 + p2*(1-p2)/n2 ) AS z_score
FROM r;Interpretare lo z-score
Trasformi il numero in un verdetto, così l'intervistatore percepirà competenza aziendale e non soltanto matematica:
|z| >= 1.96: la differenza è significativa con un livello di confidenza di circa il 95%.|z| < 1.96: non ci sono prove sufficienti; il lift potrebbe essere rumore.
Racchiuda il risultato in un CASE per produrre un'etichetta leggibile e associ sempre la significatività all'entità pratica del lift.
SELECT
z_score,
CASE WHEN ABS(z_score) >= 1.96
THEN 'significant at 95%'
ELSE 'not significant' END AS verdict
FROM (
SELECT 2.3 AS z_score
) t;Mismatch del rapporto campionario (SRM)
Il primo controllo guardrail che gli intervistatori verificano è il seguente: gli utenti sono stati effettivamente suddivisi come previsto? Un esperimento 50/50 che, con milioni di utenti, produce una suddivisione 53/47 è un segnale d'allarme: la randomizzazione o la registrazione non funzionano.
Confronti i conteggi osservati con la suddivisione prevista. Una deviazione significativa rende non valido l'intero test, prima ancora di esaminare la metrica.
WITH cnt AS (
SELECT variant, COUNT(DISTINCT user_id) AS n
FROM experiment_flat GROUP BY variant
),
tot AS (SELECT SUM(n) AS total FROM cnt)
SELECT
c.variant, c.n,
ROUND(100.0 * c.n / t.total, 2) AS observed_pct,
50.0 AS expected_pct
FROM cnt c CROSS JOIN tot t;Metriche guardrail
Una metrica guardrail è una metrica che non deve peggiorare, anche se la metrica principale migliora. Esempi classici di metriche guardrail: latenza della pagina, tasso di rimborso, tasso di disiscrizione e tasso di errore.
Le riporti per variante insieme alla metrica vincente. Un trattamento che aumenta la conversione ma raddoppia i rimborsi non è una vittoria. Calcolare spontaneamente le metriche guardrail dimostra capacità di valutazione del prodotto.
SELECT
variant,
AVG(load_ms) AS avg_latency_ms,
ROUND(100.0 * SUM(refunded) / COUNT(*), 2) AS refund_rate_pct,
ROUND(100.0 * SUM(errored) / COUNT(*), 2) AS error_rate_pct
FROM experiment_flat
GROUP BY variant;Il report completo
Un report completo dell'esperimento, apprezzato dagli intervistatori, combina quattro elementi in un unico risultato: tassi per variante, lift relativo, verdetto sulla significatività e controllo SRM. Costruisca una serie di CTE e presenti il tutto in un'unica tabella pronta per supportare una decisione.
Concluda dichiarando: risultato significativo, entità del lift accettabile, metriche guardrail sane, suddivisione equilibrata; quindi procedere con il rilascio o attendere.
WITH s AS (
SELECT variant, COUNT(DISTINCT user_id) n,
COUNT(DISTINCT converted_user) c
FROM experiment_flat GROUP BY variant
),
r AS (
SELECT
MAX(CASE WHEN variant='control' THEN 1.0*c/n END) p1,
MAX(CASE WHEN variant='control' THEN n END) n1,
MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) p2,
MAX(CASE WHEN variant='treatment' THEN n END) n2
FROM s
)
SELECT
ROUND(100.0*(p2-p1)/p1, 2) AS rel_lift_pct,
CASE WHEN ABS((p2-p1)/SQRT(p1*(1-p1)/n1 + p2*(1-p2)/n2)) >= 1.96
THEN 'significant' ELSE 'not significant' END AS verdict,
CASE WHEN ABS(1.0*n2/(n1+n2) - 0.5) > 0.02
THEN 'SRM warning' ELSE 'split ok' END AS srm_check
FROM r;Verifica rapida
La variante treatment mostra un lift relativo del 25%, ma ogni variante ha soltanto 40 utenti. Qual è la conclusione corretta?
Riepilogo: lift, significatività e metriche guardrail
Ora può trasformare le metriche grezze delle varianti in una decisione:
- Distingua il lift assoluto (in punti) dal lift relativo (in percentuale).
- Calcoli l'errore standard di ciascun tasso e uno z-score per due proporzioni come indicatore approssimativo di significatività (|z| >= 1.96 ~ 95%).
- Esegua il controllo SRM per verificare che la suddivisione corrisponda al progetto.
- Riporti le metriche guardrail, così una vittoria non nasconderà una regressione.
- Presenti un unico report pronto per supportare una decisione e associ sempre la significatività all'entità pratica del lift.
Con questo si completa l'analisi dei funnel e dei test A/B in SQL.
Domande Frequenti
La lezione «Incremento, significatività e controlli di sicurezza in SQL» è gratuita?
Sì — il testo completo di «Incremento, significatività e controlli di sicurezza in SQL» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Incremento, significatività e controlli di sicurezza in SQL»?
Calcolo dell'incremento della conversione e dei controlli sui dati che segnalano un esperimento compromesso. Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Incremento, significatività e controlli di sicurezza in SQL»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?
Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creare un funnel a più passaggi
- Eventi ordinati e finestre temporali
- Assegnazione e metriche dei test A/B
- Incremento, significatività e controlli di sicurezza in SQL