Stratifisert utvalg og kalibrering
Ta utvalg per segment, og kalibrer med merkede valideringssett.
Stratifisert utvalg og kalibrering er en gratis leksjon i Claude Architect på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Claude Architect, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Claude Architect inneholder totalt 4 leksjoner.
Hvorfor samlet nøyaktighet lyver
De setter i produksjon en Claude-basert uttrekksprosess og rapporterer 97 % nøyaktighet. Ledelsen godkjenner full automatisering. Tre uker senere er alle refusjonsfakturaer med en linje i utenlandsk valuta feil.
Tallet i overskriften var reelt — men det var et gjennomsnitt. Samlet nøyaktighet kan skjule katastrofale feil for en bestemt dokumenttype eller et bestemt felt, fordi de vanlige tilfellene overdøver de sjeldne.
Denne leksjonen handler om disiplinen som holder Dem ærlig før De automatiserer: stratifisert utvalg for å måle hvor De faktisk feiler, og kalibrering på merkede valideringssett, slik at konfidensverdiene betyr noe.
Hovedregelen
Memorér prinsippet fra kontrollområdet på eksamensnivå:
Samlet nøyaktighet kan skjule svak ytelse for en bestemt dokumenttype eller et bestemt felt. Bruk stratifisert tilfeldig utvalg samt konfidens på feltnivå, kalibrert på merkede valideringssett, før De automatiserer.
To trinn, i denne rekkefølgen:
- Stratifiser, og trekk deretter utvalg — del populasjonen inn i segmenter og trekk utvalg innenfor hvert segment, slik at sjeldne, men kritiske, utsnitt faktisk blir målt.
- Kalibrer konfidensen — sørg for at modellens konfidens for hvert felt samsvarer med korrekthet i den virkelige verden, dokumentert mot fasitmerkede data.
Hvis De hopper over ett av trinnene, gjetter De i stedet for å styre.
Hvorfor tilfeldig utvalg ikke er nok
Et vanlig tilfeldig utvalg overrepresenterer det som er vanlig. Hvis 95 % av fakturaene Deres er enkle kvitteringer i én valuta, vil et tilfeldig utvalg på 200 bestå av rundt 190 enkle tilfeller og kanskje en håndfull vanskelige tilfeller i utenlandsk valuta — for få til å oppdage en feilrate på 40 % for dette utsnittet.
Stratifisert utvalg løser dette: definer relevante segmenter (dokumenttype, språk, leverandør og om felt finnes), og trekk deretter et utvalg fra hvert segment. Nå blir det sjeldne utsnittet målt med tilstrekkelig statistisk styrke til å gi et tydelig utslag hvis det er feil.
De måler populasjonen De er bekymret for, ikke populasjonen som tilfeldigvis er størst.
Slik velger De strata
Gode strata isolerer dimensjonene der atferden med rimelighet kan avvike. For en prosess for strukturert uttrekk (Scenario 6) omfatter nyttige segmenter:
- Dokumenttype — faktura kontra kvittering kontra kontoutskrift.
- Felt — totalbeløp, datoer, valuta og linjeelementer. Feltnivået er viktig fordi
97%totalt kan skjule60%for valutafeltet. - Spesielle forhold — dokumenter over flere sider, skannede dokumenter eller dokumenter med lav kvalitet, flere språk eller poster der et valgfritt felt er fraværende.
Det siste henger sammen med en skjemaregel: Merk aldri et felt som kanskje ikke finnes, som obligatorisk, ellers vil modellen fabrikere det. Stratifiser etter om feltet finnes eller mangler, slik at De fanger opp fabrikasjon.
Trekk et stratifisert utvalg
Helt konkret grupperer De valideringsmaterialet etter segment og trekker en fast kvote fra hvert segment — nok fra hvert stratum til at De kan stole på måleverdien for stratumet, ikke et antall som står i forhold til populasjonen.
import random
from collections import defaultdict
# Each record carries the dimensions we stratify on.
def segment_key(rec):
return (rec["doc_type"], rec["has_currency_line"], rec["is_multilingual"])
buckets = defaultdict(list)
for rec in validation_pool:
buckets[segment_key(rec)].append(rec)
# Fixed quota per stratum -> rare slices get real coverage,
# not just a couple of incidental samples.
PER_STRATUM = 40
sample = []
for key, recs in buckets.items():
random.shuffle(recs)
sample.extend(recs[:PER_STRATUM])
print({k: min(len(v), PER_STRATUM) for k, v in buckets.items()})Konfidens på feltnivå, ikke bare en konklusjon
For å kalibrere må modellen angi en konfidensverdi for hvert felt, ikke én samlet poengsum. Tving frem strukturert output slik at konfidensen blir et felt med angitt type som De kan revidere — ikke prosa som De må tolke.
Bruk tool_choice for å garantere at modellen returnerer skjemaet. "any" tvinger modellen til å kalle et eller annet verktøy; {"type":"tool","name":"X"} tvinger den til å kalle et bestemt verktøy. Et JSON Schema eliminerer syntaksfeil og håndhever obligatoriske felt.
extract_tool = {
"name": "emit_extraction",
"description": "Return extracted fields, each with a per-field confidence in [0,1].",
"input_schema": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"value": {"type": "string"},
"confidence": {"type": "number"}
},
"required": ["name", "value", "confidence"]
}
}
},
"required": ["fields"]
}
}
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
tools=[extract_tool],
tool_choice={"type": "tool", "name": "emit_extraction"},
messages=[{"role": "user", "content": invoice_text}],
)Hva kalibrering faktisk betyr
En modell er kalibrert når den oppgitte konfidensen samsvarer med den observerte nøyaktigheten: av alle feltene den angir med konfidens 0.90, bør rundt 90 % være korrekte mot fasiten.
Modellens rå konfidens er vanligvis for høy — den sier 0.95, men har rett 70 % av tiden. De kan ikke stole på en terskel for automatisk godkjenning som bygger på ukalibrerte verdier; da ville De automatisk godkjenne feilaktige data.
Kalibrering krever merkede valideringssett: menneskeverifisert fasit for det stratifierte utvalget Deres. Det finnes ingen snarvei — modellens egen konfidensvurdering alene er nettopp den typen signal eksamen sier at De IKKE skal stole på for automatiserte beslutninger.
Mål kalibrering med merkinger
Gruppér prediksjonene etter oppgitt konfidens, og sammenlign deretter den oppgitte konfidensen i hver gruppe med gruppens faktiske nøyaktighet i det merkede datasettet. Avviket er kalibreringsfeilen — og De beregner den per stratum, slik at et godt kalibrert «enkelt» utsnitt ikke kan skjule et ødelagt «vanskelig» utsnitt.
from collections import defaultdict
# preds: list of {stratum, confidence, predicted, ground_truth}
bins = defaultdict(lambda: {"n": 0, "correct": 0, "conf_sum": 0.0})
for p in preds:
b = round(p["confidence"], 1) # 0.0..1.0 buckets
key = (p["stratum"], b)
bins[key]["n"] += 1
bins[key]["conf_sum"] += p["confidence"]
bins[key]["correct"] += int(p["predicted"] == p["ground_truth"])
for (stratum, b), s in sorted(bins.items()):
stated = s["conf_sum"] / s["n"]
actual = s["correct"] / s["n"]
print(stratum, b, f"stated={stated:.2f} actual={actual:.2f} gap={stated-actual:+.2f}")Angi terskler for automatisk godkjenning per segment
Når kalibreringen er på plass, utleder De en konfidensgrense for hvert stratum som oppfyller kravet til nøyaktighet — for eksempel automatisk godkjenning bare der den kalibrerte nøyaktigheten er ≥ 99 %. Terskelen vil variere mellom segmentene: enkle fakturaer i én valuta kan kanskje godkjennes automatisk ved 0.85, mens linjer i utenlandsk valuta krever 0.98 — eller fortsatt må kontrolleres av mennesker.
Dette er overgangen fra måling til kontroll: strata med lav konfidens eller lav nøyaktighet sendes til et menneske, mens høykonfidens-strata med god kalibrering automatiseres. Én global terskel ville enten gitt for stor tillit til det vanskelige utsnittet eller unødvendig blokkert det enkle.
Selvkorrigering styrker signalet
Konfidensen blir bedre når modellen kan kryssjekke seg selv. Ved numerisk uttrekk lar De den angi både en calculated_total (summen av linjeelementene) og stated_total som står på dokumentet, og flagger deretter alle avvik. Et avvik er et hardt, deterministisk signal — langt mer pålitelig enn et selvevaluert konfidensnummer.
Kombiner dette med kildeopprinnelse: behold kilden til hver påstand (dokumentnavn, sitat og side), slik at et flagget felt kan spores og verifiseres, ikke bare gjettes på nytt.
verify_schema = {
"name": "emit_totals",
"description": "Extract both the computed and printed total so discrepancies are detectable.",
"input_schema": {
"type": "object",
"properties": {
"line_items": {"type": "array", "items": {"type": "number"}},
"calculated_total": {"type": "number"},
"stated_total": {"type": "number"},
"source_quote": {"type": "string"}
},
"required": ["calculated_total", "stated_total", "source_quote"]
}
}
# Deterministic check beats trusting a self-rated score:
# discrepancy = abs(out['calculated_total'] - out['stated_total']) > 0.01Kjør revisjonen utenfor den kritiske banen
Stratifiserte kalibreringsrevisjoner er store, ikke-blokkerende jobber — akkurat det Message Batches API er laget for: 50 % billigere, et tidsvindu på opptil 24 timer og ingen SLA for svartid. Kjør den nattlige kalibreringsgjennomgangen som en batch, korreler resultatene med custom_id, og send bare feilene inn på nytt.
Grensen er viktig på eksamen: Bruk aldri Batch API til blokkerende eller tidssensitive kontroller (det har ingen SLA for svartid og støtter ikke verktøykall over flere omganger). En kontroll før sammenslåing eller et aktivt uttrekk skal bruke det synkrone API-et; den periodiske revisjonen skal kjøres som batch.
requests = [
{
"custom_id": f"val-{rec['id']}",
"params": {
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"tools": [extract_tool],
"tool_choice": {"type": "tool", "name": "emit_extraction"},
"messages": [{"role": "user", "content": rec["text"]}],
},
}
for rec in stratified_sample
]
batch = client.messages.batches.create(requests=requests)
# Overnight audit: no latency SLA, 50% cheaper. NOT for pre-merge gates.Kort kontroll: Godkjenne automatisering
Anvend regelen på en reell beslutning om å gå videre eller ikke.
Oppsummering: Mål før De stoler på resultatet
Viktigste læringspunkter for eksamen og produksjon:
- Samlet nøyaktighet skjuler feil per type og per felt — automatiser aldri basert på et gjennomsnitt i overskriften alene.
- Stratifisert tilfeldig utvalg deler inn etter de viktige dimensjonene (dokumenttype, felt og spesielle forhold) og trekker utvalg fra hvert segment, slik at sjeldne utsnitt får reell statistisk styrke.
- Kalibrering samordner oppgitt konfidens med observert nøyaktighet, dokumentert på et merket valideringssett; modellens rå konfidens er for høy, og selvevaluerte verdier er ikke et pålitelig signal for automatisering.
- Angi terskler for automatisk godkjenning per segment; automatiser kalibrerte strata med høy nøyaktighet, og send resten til mennesker.
- Styrk signalet med selvkorrigering (beregnet kontra oppgitt total) og kildeopprinnelse; kjør den omfattende kalibreringsrevisjonen på Batch API — aldri i en blokkerende, tidssensitiv bane.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 26
- Leksjoner
- 104
Ofte stilte spørsmål
Er leksjonen «Stratifisert utvalg og kalibrering» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Claude Architect, inkludert «Stratifisert utvalg og kalibrering», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Claude Architect inneholder totalt 4 leksjoner.
Hva lærer jeg i «Stratifisert utvalg og kalibrering»?
Ta utvalg per segment, og kalibrer med merkede valideringssett. Du øver på Claude Architect med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Claude Architect?
Ingen tidligere erfaring er nødvendig. Claude Architect på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Stratifisert utvalg og kalibrering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Claude Architect-leksjonen?
Ja. Alle Claude Architect-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Koblinger mellom påstander og kilder
- Motstridende data og datoer
- Aggregerte måltall skjuler feil
- Stratifisert utvalg og kalibrering