Skip to content

Guide

Regole di confronto

Confrontare un candidato con una baseline mostra il flusso di lavoro. Questa pagina è il riferimento per le regole con cui viene deciso un confronto: quali tipi esistono, che cosa chiede ciascuno, in che unità si misura un margine e che cosa sposta l'intervallo da cui vengono lette.

Tre tipi

Una regola di confronto indica un kind e una metrica. Non accetta mai min o max: una differenza non si deduce da una soglia.

TipoChiedeAccetta
superiorityIl candidato è migliore della baseline?nessun margine
non_inferiorityIl candidato non è peggiore della baseline di più del margine?margin, e facoltativamente direction
equivalenceIl candidato è entro il margine dalla baseline, in entrambe le direzioni?margin

Un margine è espresso nelle unità della metrica stessa. Per un tasso, 0.05 corrisponde a cinque punti percentuali; per un quantile di latenza, 5 corrisponde a cinque millisecondi.

version: 1
rules:
  - id: not-worse
    kind: non_inferiority
    metric: exact_label
    margin: 0.05
  - id: same-quality
    kind: equivalence
    metric: exact_label
    margin: 0.05
  - id: better
    kind: superiority
    metric: exact_label
  - id: not-slower
    kind: non_inferiority
    metric: latency_p50
    direction: max
    margin: 5

Le regole di confronto stanno in un file a sé, passato con --policy, perché release.yaml decide una singola esecuzione, e una regola a soglia e una regola di confronto leggono evidenze diverse.

oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yaml

Le stesse regole su due candidati

Duecento domande etichettate. La baseline ne etichetta male venti. Ciascun candidato qui sotto è stato eseguito sulla stessa suite e confrontato con quella baseline usando il file precedente.

Un candidato che si comporta esattamente come la baseline:

Comparison sha256:7d2396c475b94028925930d4e52ae070d9a216a4558e22646169db492757c4de of run_01M3C44TVGT0X067W2H0BZ6GC9 against run_01M3C44SWMXMSQJE17SYHV87PW · 200 paired cases
exact_label: +0.0 points [-2.7, +2.7] · 200 paired · 0 missing · 0 excluded
latency_p50: -0.067 ms [-0.113, -0.001] ms · p50 of per-case differences · 200 paired · 0 missing
Decisions
  not-worse  exact_label  non-inferiority, margin 5.0 points  PASS  lower_bound_above_margin
  same-quality  exact_label  equivalence, margin ±5.0 points  PASS  interval_within_margins
  better  exact_label  superiority  INSUFFICIENT_EVIDENCE  interval_overlaps_zero
  not-slower  latency_p50  maximum increase 5 ms  PASS  lower_bound_above_margin
Gate: BLOCK (exit 3)

Un candidato che corregge i venti:

Comparison sha256:1e36f48662cbbc0af20217a2c69248f90b473bbf0873dc6dd222ccb1895bb33a of run_01M3C44VQ0TFFNW4FRM5Z2D12R against run_01M3C44SWMXMSQJE17SYHV87PW · 200 paired cases
exact_label: +10.0 points [+4.6, +17.9] · 200 paired · 0 missing · 0 excluded
latency_p50: -0.038 ms [-0.089, +0.009] ms · p50 of per-case differences · 200 paired · 0 missing
Decisions
  not-worse  exact_label  non-inferiority, margin 5.0 points  PASS  lower_bound_above_margin
  same-quality  exact_label  equivalence, margin ±5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margins
  better  exact_label  superiority  PASS  difference_above_zero
  not-slower  latency_p50  maximum increase 5 ms  PASS  lower_bound_above_margin
Gate: BLOCK (exit 3)

Leggi i due gate insieme. Entrambi bloccano, per ragioni opposte. Il primo candidato risulta equivalente e non risulta migliore; il secondo risulta migliore e quindi non risulta equivalente. Una policy che contiene tutti e tre i tipi per una stessa metrica pone due domande incompatibili, e una delle due resterà sempre senza risposta. Scegli la regola che esprime l'affermazione che stai facendo.

Direzione

non_inferiority usa per impostazione predefinita direction: min: più alto è meglio, e la regola chiede che il candidato non scenda sotto la baseline di più del margine. direction: max serve per le metriche in cui più basso è meglio, come latenza, token o costo. La regola si legge allora come un tetto a un aumento, ed è così che la stampa il terminale: maximum increase 5 ms.

superiority e equivalence non accettano una direzione. L'equivalenza delimita già entrambi i lati, e la superiorità chiede se la differenza è sopra lo zero nel senso proprio della metrica.

Che cosa sposta l'intervallo

Un confronto è appaiato: il risultato candidato di ciascun caso viene messo a confronto con il proprio risultato di baseline. Due cose allargano l'intervallo che ne risulta, e nessuna delle due è la modifica che hai apportato.

Casi mancanti da uno dei due lati

Un caso andato in errore in una delle due esecuzioni manca dalla coppia, e viene delimitato anziché scartato: l'intervallo ammette che ogni caso mancante possa essere andato in un senso o nell'altro. Una suite più piccola, con un criterio chiamato ok: gli stessi quattro disaccordi su trentaquattro casi appaiati, prima senza casi mancanti e poi con altri quattro andati in errore in entrambe le esecuzioni:

ok: +11.8 points [-7.2, +34.3] · 34 paired · 0 missing · 0 excluded
ok: +11.8 points [-24.8, +44.7] · 34 paired · 4 missing · 0 excluded

La stima è la stessa, perché è calcolata dai casi osservati su entrambi i lati. L'intervallo no, perché quattro casi che nessuno ha visto avrebbero potuto spostare ciascuno la differenza di un caso intero. Correggi gli errori prima di aggiungere casi: più casi con lo stesso tasso di errore non colmano il divario.

Una differenza di ranking appaiata, come la ROC-AUC tra due versioni di un modello, non può delimitare le righe mancanti in questo modo: confronta le righe a cui entrambi i lati hanno dato un punteggio. Una regola su di essa riporta missingness_unbounded finché non dichiara max_missing_fraction, la quota di righe mancanti che accetta come mancanti in modo casuale.

Il metodo

L'intervallo predefinito per una differenza di tassi è un intervallo di media limitata sulle differenze per caso. Una policy può indicare invece il metodo esatto condizionale:

version: 1
difference_method: conditional_exact_paired_difference@1
rules:
  - {id: not-worse, metric: exact_label, kind: non_inferiority, margin: 0.05}

Il candidato precedente, migliore di dieci punti, riporta [+4.6, +17.9] con il metodo predefinito e questo con il metodo esatto:

exact_label: +10.0 points [+3.5, +15.8] · 200 paired · 0 missing · 0 excluded

Nessuno dei due è uniformemente più stretto, ed è per questo che il metodo viene scelto nella policy, prima di leggere qualsiasi evidenza, e mai dal motore in base ai dati. Si applica solo alle differenze di tassi.

Quando una regola non può decidere

Una regola di confronto INSUFFICIENT_EVIDENCE può riportare sotto di sé una riga che dice che cosa la deciderebbe. Il confronto su trentaquattro casi senza nulla di mancante:

Decisions
  not-worse  ok  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
    about 5 more paired cases would decide it, if the difference holds (39 in total at 12% discordance)
Gate: BLOCK (exit 3)

Questa stima presuppone che la differenza e la quota di casi in disaccordo restino invariate all'arrivo di nuovi casi. oloproof plan COMPARISON_ID stampa la stessa riga con il tempo che richiederebbero i casi aggiuntivi.

Quando mancano delle coppie, non viene proposta alcuna dimensione, perché le coppie mancanti sono delimitate al loro caso peggiore e più casi non le risolverebbero. Lo stesso confronto con quattro coppie mancanti non stampa alcuna riga di consiglio, e il piano spiega perché:

oloproof plan COMPARISON_ID
Comparison sha256:22c1aa4fddc4e96ca77e0509ac9835c2a377ed237ca80556bbf1a54a172239bd: no sample size can be computed for a rule that did not decide.
  not-worse: 4 missing pairs are bounded at their worst, and the advice does not size under missingness; resolve them and compare again

E quando la differenza stessa si trova dal lato sbagliato del margine, più casi non farebbero che confermarla, quindi il consiglio dice invece questo:

  overall  ok  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
    no sample size would make this PASS: the difference itself (-5.0 points) is outside the margin, so more cases would move it toward FAIL

Dove andare dopo

lettura di un intervallo.

confronto non decide ancora.

  • Slice tratta le regole limitate a una parte della suite.