Guide
Slice
Un tasso globale può restare stabile mentre una parte della suite crolla. Una slice è una parte dichiarata della suite, misurata a sé, così il crollo diventa visibile. Le slice hanno due discipline, perché guardare molte parti di una suite è il modo in cui una valutazione trova rumore e lo chiama scoperta.
Dichiarare le slice
Una slice si indica in oloproof.yaml. Il tipo più comune legge una chiave dal metadata di ciascun caso:
slices: [metadata.lang, metadata.topic]
min_slice_support: 30{"id": "c000", "input": {"lang": "en", "topic": "billing", "hard": false, "n": 0}, "expected": {"label": "yes"}, "metadata": {"lang": "en", "topic": "billing"}}Ogni tipo di slice accettato dal file:
| Slice | Raggruppa i casi per | Richiede |
|---|---|---|
| metadata.<key> | il valore di quella chiave nel metadata del caso | la chiave sui casi |
| relevant_position | dove è stato recuperato il primo passaggio rilevante: top_k, beyond_top_k o not_retrieved | un sistema RAG e expected.relevant |
| context_truncated | se un budget di token ha scartato passaggi dal contesto | un sistema RAG con un token_budget |
| first_tool | lo strumento che un agente ha chiamato per primo | un record agent_trajectory/v1 |
| repeated_action | se un agente ha ripetuto una chiamata identica | un record agent_trajectory/v1 |
| route | gli agenti che hanno avuto il controllo, scritti triage>billing | un record agent_trajectory/v1 i cui passi indicano i propri agenti |
| trajectory_length:4,8 | numero di passi, suddiviso in fasce ai limiti che dichiari | un record agent_trajectory/v1 |
| confidence:0.5 | il punteggio che un modello ha dato alla riga, suddiviso in fasce ai limiti che dichiari | un blocco predictive: |
Un nome che il file non riconosce viene rifiutato prima che venga eseguito qualsiasi cosa:
Configuration error: unknown slice 'lang'; declare metadata.<key>, relevant_position, context_truncated, first_tool, repeated_action, route, trajectory_length:<bounds> or confidence:<bounds>Le slice riportano e non fanno mai da gate
Un'esecuzione stampa le proprie slice sotto un'intestazione dedicata. Un candidato che ha corretto l'inglese e rotto il francese:
│ metadata.lang=de │ ok │ 100.0% │ [95.4%, 100.0%] │ 80 / 80 observed · 0 missing · 0 excluded · exploratory · support 80 │
│ metadata.lang=en │ ok │ 100.0% │ [95.4%, 100.0%] │ 80 / 80 observed · 0 missing · 0 excluded · exploratory · support 80 │
│ metadata.lang=fr │ ok │ 32.5% │ [22.4%, 43.9%] │ 26 / 80 observed · 0 missing · 0 excluded · exploratory · support 80 │
│ metadata.topic=account │ ok │ 88.3% │ [81.2%, 93.5%] │ 106 / 120 observed · 0 missing · 0 excluded · exploratory · support 120 │
│ metadata.topic=billing │ ok │ 66.7% │ [57.4%, 75.1%] │ 80 / 120 observed · 0 missing · 0 excluded · exploratory · support 120 │Il titolo della tabella dice Slices (exploratory; never gated), e lo intende davvero. Il tasso globale di quell'esecuzione era 77,5% e il suo gate ha consentito il rilascio, con il francese a un terzo di quel valore. Una regola di rilascio su un'esecuzione indica una metrica globale, e una regola limitata a una slice di una singola esecuzione viene rifiutata:
Configuration error: release rule 'fr-floor' targets slice/metadata.lang=fr; a run's slice results are exploratory, and only a comparison rule gates a slice, inside a family with a correctionQuesta è la prima disciplina. Una suite suddivisa in dieci modi ha dieci occasioni di mostrare una differenza per caso, e un gate che leggesse le slice bloccherebbe i rilasci sul rumore. Le slice servono a capire dove guardare.
Quali slice spiccano
L'esecuzione classifica anche le proprie slice rispetto al tasso dell'esecuzione stessa e contrassegna quelle che se ne discostano, con la procedura di Benjamini-Yekutieli, così la quota di contrassegni falsi resta controllata comunque si sovrappongano le slice. La tabella delle slice nel terminale mostra ciascuna nella colonna BY mark — marked, not marked, o vuota per una slice troppo esigua per essere testata — con il p-value in base al quale è stata classificata. Sono anche memorizzate nell'esecuzione ed esportate nel run.json del suo bundle:
jq -c '.run.slice_metrics[] | {scope, estimate, fdr_marked, fdr_p_value}' .oloproof/bundles/RUN_ID/run.json{"scope":"slice/metadata.lang=de","estimate":1.0,"fdr_marked":true,"fdr_p_value":0.0001}
{"scope":"slice/metadata.lang=en","estimate":1.0,"fdr_marked":true,"fdr_p_value":0.0001}
{"scope":"slice/metadata.lang=fr","estimate":0.325,"fdr_marked":true,"fdr_p_value":0.0001}
{"scope":"slice/metadata.topic=account","estimate":0.8833333333333333,"fdr_marked":true,"fdr_p_value":0.0037003540039062493}
{"scope":"slice/metadata.topic=billing","estimate":0.6666666666666666,"fdr_marked":true,"fdr_p_value":0.008582189941406249}Una slice non contrassegnata non è dimostrata in linea con l'esecuzione; semplicemente non è segnalata. Un contrassegno indirizza l'attenzione e non raggiunge alcun gate.
Supporto
min_slice_support è il numero minimo di casi di cui una slice ha bisogno per ottenere un intervallo. Al di sotto, la stima viene mostrata e l'intervallo viene omesso. Da un progetto che lo ha impostato a 4:
│ metadata.topic=account │ answer_correct │ 100.0% │ │ 1 / 1 observed · 0 missing · 0 excluded · exploratory · support 1 │
│ │ │ │ │ < 4, no interval │Il valore predefinito è 30. Una suite piccola che lo abbassa ottiene intervalli su slice esigue, e quegli intervalli sono abbastanza ampi da dirlo da soli.
Gating su una slice, in un confronto
Dove una slice non deve davvero regredire, una regola di confronto può essere limitata a essa. L'ambito è il nome della slice preceduto da slice/, e la regola dichiara il supporto di cui ha bisogno prima che venga letta qualsiasi evidenza:
version: 1
rules:
- {id: overall, metric: ok, kind: non_inferiority, margin: 0.05}
- {id: fr-not-worse, metric: ok, kind: non_inferiority, margin: 0.05, scope: slice/metadata.lang=fr, min_support: 30}
- {id: en-not-worse, metric: ok, kind: non_inferiority, margin: 0.05, scope: slice/metadata.lang=en, min_support: 30}
- {id: de-not-worse, metric: ok, kind: non_inferiority, margin: 0.05, scope: slice/metadata.lang=de, min_support: 30}
families:
- {id: languages, correction: holm, rules: [fr-not-worse, en-not-worse, de-not-worse]}Scritto senza il prefisso, l'ambito viene rifiutato:
Configuration error: rule 'fr-not-worse' has unknown scope 'metadata.lang=fr'; a comparison rule decides on the global scope or on slice/<name>=<value>Con il prefisso, il candidato precedente rispetto alla sua baseline:
oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yamlComparison sha256:cd2693b505e645919d397e8d7a87eaf0a841ab0c11c0b95484912363381b72e0 of run_01M3C46CYA163JSMSA5QZ6KAZA against run_01M3C46B3PSNP1ZTC8X05AG0GE · 240 paired cases
ok: -5.0 points [-15.2, +4.9] · 240 paired · 0 missing · 0 excluded
ok [slice/metadata.lang=de]: +8.8 points [-0.5, +21.5] · 80 paired · 0 missing · 0 excluded · exploratory · support 80
ok [slice/metadata.lang=en]: +18.8 points [+7.0, +34.4] · 80 paired · 0 missing · 0 excluded · exploratory · support 80
ok [slice/metadata.lang=fr]: -42.5 points [-60.3, -26.8] · 80 paired · 0 missing · 0 excluded · exploratory · support 80
ok [slice/metadata.topic=account]: +7.5 points [+0.9, +17.1] · 120 paired · 0 missing · 0 excluded · exploratory · support 120
ok [slice/metadata.topic=billing]: -17.5 points [-35.0, -0.1] · 120 paired · 0 missing · 0 excluded · exploratory · support 120
Decisions
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
fr-not-worse ok non-inferiority, margin 5.0 points FAIL upper_bound_below_margin
en-not-worse ok non-inferiority, margin 5.0 points PASS lower_bound_above_margin
de-not-worse ok non-inferiority, margin 5.0 points PASS lower_bound_above_margin
Family languages: Holm over 3 rules; adjusted levels 0.01667
Gate: BLOCK (exit 1)Questa è la seconda disciplina. Una regola limitata a una slice fa da gate solo all'interno di una voce families:, che elenca le regole i cui falsi fallimenti vengono controllati insieme. holm è la correzione: una regola della famiglia che fallisce viene ritestata a un livello più severo, dimensionato in base a quante regole contiene la famiglia, così tre occasioni di fallire per caso non si sommano in un rischio tre volte maggiore. Con un livello di confidenza di 0.95 e tre regole, il fallimento più forte viene ritestato a 0.05 / 3, il successivo a 0.05 / 2 e l'ultimo a 0.05. Vengono ritestati solo i fallimenti: un pass non è un rifiuto e non richiede correzione. Qui una regola è fallita, è stata ritestata a 0.01667, e il francese fallisce ancora. La regola globale non ha potuto decidere, e il consiglio sotto di essa dice che più casi non farebbero che spostarla verso FAIL.
Una regola su una slice al di fuori di qualsiasi famiglia viene rifiutata:
Configuration error: slice rule 'fr-not-worse' belongs to no family; slice rules multiply the chances of a false FAIL, so they gate only inside a family with a correctionDove andare dopo
- Regole di confronto tratta i tipi di regola a cui si può applicare un
ambito.
Classificatori e regressori usano le slice non basate sui metadati.