Stratificeret sampling og kalibrering
Udtag stikprøver efter segment; kalibrér med mærkede valideringssæt
Stratificeret sampling og kalibrering er en gratis Claude Architect-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Claude Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Claude Architect-kurset indeholder 4 lektioner i alt.
Hvorfor samlet nøjagtighed lyver
Du sender en Claude-udtrækningspipeline i produktion og rapporterer 97 % nøjagtighed. Ledelsen godkender fuld automatisering. Tre uger senere er alle refusionsfakturaer med en linje i fremmed valuta forkerte.
Det fremhævede tal var reelt — men det var et gennemsnit. Samlet nøjagtighed kan skjule katastrofale fejl for en bestemt dokumenttype eller et bestemt felt, fordi de almindelige tilfælde overdøver de sjældne.
Denne lektion handler om den disciplin, der holder dig ærlig, før du automatiserer: stratificeret stikprøveudtagning for at måle, hvor du faktisk fejler, og kalibrering på mærkede valideringssæt, så dine konfidensscorer betyder noget.
Den grundlæggende regel
Husk dette princip fra tilsynsområdet på eksamensniveau:
Samlet nøjagtighed kan skjule dårlig ydeevne for en bestemt dokumenttype eller et bestemt felt. Brug stratificeret tilfældig stikprøveudtagning samt konfidens på feltniveau, kalibreret på mærkede valideringssæt, før du automatiserer.
To trin i denne rækkefølge:
- Stratificér, og udtag derefter stikprøver — opdel populationen i segmenter, og udtag stikprøver inden for hvert segment, så sjældne, men kritiske udsnit faktisk bliver målt.
- Kalibrér konfidensen — få modellens konfidens for hvert felt til at svare til den faktiske korrekthed i den virkelige verden, dokumenteret mod mærkede facitdata.
Springer du et af trinnene over, gætter du i stedet for at styre.
Hvorfor tilfældig stikprøveudtagning ikke er nok
Almindelig tilfældig stikprøveudtagning udtager for mange prøver af det, der er almindeligt. Hvis 95 % af dine fakturaer er simple kvitteringer i én valuta, vil en tilfældig stikprøve på 200 være cirka 190 nemme tilfælde og måske en håndfuld af de vanskelige med fremmed valuta — for få til at opdage en fejlrate på 40 % i det udsnit.
Stratificeret stikprøveudtagning løser dette: Definér relevante segmenter (dokumenttype, sprog, leverandør og tilstedeværelse af felter), og udtag derefter en stikprøve fra hvert segment. Nu måles det sjældne udsnit med tilstrækkelig statistisk styrke til tydeligt at vise, hvis det er defekt.
Du måler den population, du er bekymret for, ikke den population, der tilfældigvis er størst.
Vælg dine lag
Gode lag isolerer de dimensioner, hvor adfærden plausibelt afviger. For en pipeline til struktureret udtræk (scenarie 6) omfatter nyttige segmenter:
- Dokumenttype — faktura kontra kvittering kontra kontoudtog.
- Felt — totaler, datoer, valuta og linjeposter. Feltniveauet er vigtigt, fordi
97%samlet kan skjule60%for valutafeltet. - Randbetingelser — dokumenter på flere sider, scannede dokumenter eller dokumenter i lav kvalitet, flersprogede dokumenter eller poster, hvor et valgfrit felt er fraværende.
Det sidste hænger sammen med en skemaregel: Markér aldrig et felt, der muligvis mangler, som påkrævet, for så fabrikerer modellen det. Stratificér efter tilstedeværelse/fravær, så du opdager fabrikation.
Udtagning af en stratificeret stikprøve
Konkret grupperer du din valideringspulje efter segment og udtager en fast kvote fra hvert — nok pr. lag til at have tillid til målingen for laget, ikke proportionalt med populationen.
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å feltniveau, ikke kun en afgørelse
For at kalibrere skal modellen angive en konfidensværdi for hvert felt, ikke én samlet score. Tving et struktureret output, så konfidens er et felt med en bestemt type, som du kan auditere — ikke prosa, du skal fortolke.
Brug tool_choice for at garantere, at modellen returnerer skemaet. "any" tvinger den til at kalde et vilkårligt værktøj; {"type":"tool","name":"X"} tvinger den til at kalde et bestemt værktøj. Et JSON Schema eliminerer syntaksfejl og håndhæver påkrævede felter.
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}],
)Hvad kalibrering faktisk betyder
En model er kalibreret, når dens angivne konfidens svarer til den observerede nøjagtighed: Af alle felter, den angiver med 0.90 konfidens, bør cirka 90 % være korrekte i forhold til facitdata.
Modellens rå konfidens er som regel for selvsikker — den angiver 0.95, men har ret 70 % af tiden. Du kan ikke stole på en tærskel for automatisk godkendelse, der bygger på ukalibrerede scorer; du ville automatisk godkende forkerte data.
Kalibrering kræver mærkede valideringssæt: menneskebekræftede facitdata for din stratificerede stikprøve. Der findes ingen genvej — modellens egen vurdering af konfidens alene er netop den slags signal, som eksamen siger, at du IKKE skal stole på ved automatiserede beslutninger.
Måling af kalibrering med mærkede data
Gruppér forudsigelser efter angivet konfidens, og sammenlign derefter den angivne konfidens for hver gruppe med dens faktiske nøjagtighed på det mærkede sæt. Forskellen er din kalibreringsfejl — og du beregner den pr. lag, så et velkalibreret "nemt" udsnit ikke kan skjule et defekt "svært" udsnit.
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}")Fastlæg tærskler for automatisk godkendelse pr. segment
Når kalibreringen er på plads, udleder du en konfidensgrænse for hvert lag, der opfylder dit nøjagtighedskrav — eksempelvis automatisk godkendelse kun dér, hvor den kalibrerede nøjagtighed er ≥ 99 %. Tærsklen varierer efter segment: Nemme fakturaer i én valuta kan måske godkendes automatisk ved 0.85, mens linjer med fremmed valuta kræver 0.98 — eller fortsat skal gennemgås af et menneske.
Dette er forbindelsen mellem måling og tilsyn: Lag med lav konfidens eller lav nøjagtighed sendes til et menneske; kalibrerede lag med høj konfidens automatiseres. Én global tærskel ville enten give det vanskelige udsnit for meget tillid eller unødigt begrænse det nemme.
Selvkorrektion styrker signalet
Konfidensen bliver bedre, når modellen kan krydskontrollere sig selv. Ved numerisk udtræk skal du få den til at angive både en calculated_total (summen af linjeposterne) og den stated_total, der står trykt på dokumentet, og derefter markere enhver uoverensstemmelse. Et mismatch er et hårdt, deterministisk signal — langt mere pålideligt end et tal for egenvurderet konfidens.
Kombinér dette med kildeoplysninger: Bevar kilden til hvert udsagn (dokumentnavn, citat og side), så et markeret felt kan spores og verificeres i stedet for blot at blive gættet igen.
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.01Kør auditten uden for den kritiske sti
Stratificerede kalibreringsaudits er store job, der ikke blokerer — præcis det, Message Batches API er beregnet til: 50 % billigere, et tidsvindue på op til 24 timer og ingen latenstids-SLA. Kør din natlige kalibreringsgennemgang som en batch, korrelér resultaterne med custom_id, og indsend kun fejlene igen.
Grænsen er vigtig til eksamen: Brug aldrig Batch API til blokerende eller tidsfølsomme kontroller (det har ingen latenstids-SLA og understøtter ikke værktøjskald i flere vendinger). En pre-merge-gate eller et live-udtræk skal blive på det synkrone API; den periodiske audit skal køre 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.Hurtigt tjek: Godkendelse af automatisering
Anvend reglen på en reel beslutning om, hvorvidt noget skal sættes i drift.
Opsummering: Mål, før du stoler på resultatet
Vigtigste pointer til eksamen og produktion:
- Samlet nøjagtighed skjuler fejl pr. type og pr. felt — automatisér aldrig alene ud fra et fremhævet gennemsnit.
- Stratificeret tilfældig stikprøveudtagning opdeler efter de dimensioner, der betyder noget (dokumenttype, felt og randbetingelser), og udtager stikprøver fra hvert, så sjældne udsnit får reel statistisk styrke.
- Kalibrering bringer angivet konfidens på linje med observeret nøjagtighed, dokumenteret på et mærket valideringssæt; modellens rå konfidens er for selvsikker, og egenvurderede scorer er ikke et pålideligt automatiseringssignal.
- Fastlæg tærskler for automatisk godkendelse pr. segment; automatisér kalibrerede lag med høj nøjagtighed, og send resten til mennesker.
- Styrk signalet med selvkorrektion (beregnet kontra angivet total) og kildeoplysninger; kør den omfattende kalibreringsaudit på Batch API — aldrig på en blokerende, tidsfølsom sti.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 26
- Lektioner
- 104
Ofte stillede spørgsmål
Er lektionen “Stratificeret sampling og kalibrering” gratis?
Ja — alle 3 lektioner i læringssporet Claude Architect, inklusive “Stratificeret sampling og kalibrering”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Claude Architect-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Stratificeret sampling og kalibrering”?
Udtag stikprøver efter segment; kalibrér med mærkede valideringssæt Du øver dig i Claude Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Claude Architect?
Der kræves ingen tidligere erfaring. Claude Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Stratificeret sampling og kalibrering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Claude Architect-lektion?
Ja. Alle Claude Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Koblinger mellem påstande og kilder
- Modstridende data og datoer
- Aggregerede nøgletal skjuler fejl
- Stratificeret sampling og kalibrering