Ositettu otanta ja kalibrointi
Ota otos segmenteittäin ja kalibroi merkityillä validointiaineistoilla.
Ositettu otanta ja kalibrointi on ilmainen Claude Architect-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Claude Architect-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Claude Architect-kurssilla on yhteensä 4 oppituntia.
Miksi kokonaistarkkuus johtaa harhaan
Olette julkaisseet Claude-poimintaputken ja raportoitte sen tarkkuudeksi 97 %. Johto hyväksyy täyden automaation. Kolme viikkoa myöhemmin jokainen ulkomaanvaluuttarivin sisältävä hyvityslasku on väärin.
Otsikkoluku oli todellinen — mutta se oli keskiarvo. Kokonaistarkkuus voi peittää tietyn dokumenttityypin tai kentän katastrofaalisen suorituskyvyn, koska yleiset tapaukset hukuttavat harvinaiset tapaukset alleen.
Tässä oppitunnissa käsitellään toimintatapaa, joka pitää teidät rehellisinä ennen automaation käyttöönottoa: ositettua otantaa, jolla mitataan, missä todellisuudessa epäonnistutte, sekä kalibrointia nimetyillä validointijoukoilla, jotta luottamusarvot merkitsevät jotakin.
Perussääntö
Painakaa mieleenne valvonnan aihealueen koetason periaate:
Kokonaistarkkuus voi peittää heikon suorituskyvyn tietyssä dokumenttityypissä tai kentässä. Käyttäkää ositettua satunnaisotantaa sekä nimetyillä validointijoukoilla kalibroitua kenttäkohtaista luottamusta ennen automaation käyttöönottoa.
Toimikaa kahdessa vaiheessa ja tässä järjestyksessä:
- Osittakaa ja ottakaa sitten otos — jakakaa perusjoukko segmentteihin ja ottakaa otos kustakin, jotta harvinaiset mutta kriittiset osat todella mitataan.
- Kalibroikaa luottamus — varmistakaa, että mallin kenttäkohtainen luottamus vastaa todellista oikeellisuutta vertaamalla sitä totuudenmukaisiin nimikkeisiin.
Jos ohitatte jommankumman vaiheen, arvaatte ettekä ohjaa toimintaa.
Miksi satunnaisotanta ei riitä
Tavallinen satunnaisotanta poimii liikaa sitä, mikä on yleistä. Jos 95 % laskuistanne on yksinkertaisia yhden valuutan kuitteja, 200 tapauksen satos sisältää noin 190 helppoa tapausta ja ehkä vain muutaman vaikean ulkomaanvaluuttatapauksen — liian vähän havaitsemaan kyseisen ryhmän 40 prosentin virhetasoa.
Ositettu otanta korjaa tämän: määritelkää merkitykselliset segmentit (dokumenttityyppi, kieli, toimittaja ja kentän esiintyminen) ja ottakaa sitten otos jokaisesta segmentistä. Nyt harvinainen ryhmä mitataan riittävällä tilastollisella voimalla, jotta sen rikkoutuminen havaitaan selvästi.
Mitatkaa sitä perusjoukkoa, josta olette huolissanne, älkää sitä, joka sattuu olemaan suurin.
Ositteiden valinta
Hyvät ositteet eristävät ulottuvuudet, joissa käyttäytyminen todennäköisesti poikkeaa. Rakenteisen poimintaputken (skenaario 6) hyödyllisiä segmenttejä ovat esimerkiksi:
- Dokumenttityyppi — lasku, kuitti tai tiliote.
- Kenttä — summat, päivämäärät, valuutta ja rivikohdat. Kenttäkohtaisuus on tärkeää, koska
97%kokonaisuutena voi peittää valuuttakentän60%:n tarkkuuden. - Reunaehdot — monisivuiset dokumentit, skannatut tai heikkolaatuiset dokumentit, monikielisyys tai tietueet, joissa valinnainen kenttä puuttuu.
Viimeinen kohta liittyy skeemasääntöön: älkää koskaan merkitkö mahdollisesti puuttuvaa kenttää pakolliseksi, tai malli keksii sille arvon. Osittakaa aineisto esiintymisen ja puuttumisen perusteella, jotta keksityt arvot havaitaan.
Ositetun otoksen poimiminen
Ryhmitelkää validointijoukko konkreettisesti segmenttien mukaan ja poimikaa kustakin kiinteä kiintiö — kussakin ositteessa on oltava riittävästi tapauksia, jotta ositekohtaiseen mittariin voi luottaa, eikä kiintiötä pidä suhteuttaa perusjoukon kokoon.
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()})Kenttäkohtainen luottamus, ei vain tuomio
Kalibrointia varten mallin on tuotettava luottamus jokaiselle kentälle, ei yhtä yleistä pistemäärää. Pakottakaa tuloste rakenteiseen muotoon, jotta luottamus on tarkistettava tyypitetty kenttä — ei jäsennettävää proosaa.
Käyttäkää tool_choice-asetusta varmistaaksenne, että malli palauttaa skeeman. "any" pakottaa sen kutsumaan jotakin työkalua; {"type":"tool","name":"X"} pakottaa käyttämään tiettyä työkalua. JSON Schema poistaa syntaksivirheet ja pakottaa pakolliset kentät.
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}],
)Mitä kalibrointi todella tarkoittaa
Malli on kalibroitu, kun sen ilmoittama luottamus vastaa havaittua tarkkuutta: kaikista kentistä, joille se ilmoittaa luottamukseksi 0.90, noin 90 %:n pitäisi olla oikein totuudenmukaisiin nimikkeisiin verrattuna.
Mallin raaka luottamus on yleensä liian itsevarma — se ilmoittaa arvon 0.95, mutta on oikeassa vain 70 %:ssa tapauksista. Kalibroimattomiin arvoihin perustuvaan automaattisen hyväksynnän kynnysarvoon ei voi luottaa; muuten hyväksyisitte väärää tietoa automaattisesti.
Kalibrointi edellyttää nimettyjä validointijoukkoja: ihmisillä varmennettua totuutta ositetusta otoksesta. Oikotietä ei ole — mallin oma luottamusarvio on juuri sellainen signaali, johon koe kehottaa olemaan luottamatta automaattisissa päätöksissä.
Kalibroinnin mittaaminen nimikkeiden avulla
Ryhmitelkää ennusteet ilmoitetun luottamuksen perusteella ja verratkaa sitten kunkin ryhmän ilmoitettua luottamusta sen todelliseen tarkkuuteen nimetyllä joukolla. Erotus on kalibrointivirheenne — ja se lasketaan ositettain, jotta hyvin kalibroitu ”helppo” ryhmä ei peitä rikkinäistä ”vaikeaa” ryhmää.
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}")Automaattisen hyväksynnän kynnysarvojen määrittäminen segmenteittäin
Kun kalibrointi on tehty, määrittäkää kullekin ositteelle luottamuksen kynnysarvo, joka täyttää tarkkuusvaatimuksenne — esimerkiksi hyväksykää automaattisesti vain, kun kalibroitu tarkkuus on vähintään 99 %. Kynnysarvo vaihtelee segmentin mukaan: helpot yhden valuutan laskut voidaan ehkä hyväksyä automaattisesti arvolla 0.85, kun taas ulkomaanvaluuttarivit vaativat arvon 0.98 — tai ne on pidettävä kokonaan ihmisen tarkistettavina.
Tässä mittaus yhdistyy valvontaan: vähäisen luottamuksen tai tarkkuuden ositteet ohjataan ihmiselle, kun taas erittäin luotettavat ja kalibroidut ositteet automatisoidaan. Yksi yleinen kynnysarvo joko yliarvioisi vaikean ryhmän luotettavuuden tai rajoittaisi tarpeettomasti helppoa ryhmää.
Itsensä korjaaminen vahvistaa signaalia
Luottamus paranee, kun malli pystyy ristiintarkistamaan oman tuloksensa. Pyytäkää numeerisessa poiminnassa mallia tuottamaan sekä calculated_total-arvo (rivikohteiden summa) että dokumenttiin painettu stated_total-arvo ja merkitsemään kaikki poikkeamat. Ristiriita on yksiselitteinen, deterministinen signaali — huomattavasti luotettavampi kuin itse arvioitu luottamusarvo.
Yhdistäkää tähän alkuperätiedot: säilyttäkää kunkin väitteen lähde (dokumentin nimi, lainaus ja sivu), jotta merkitty kenttä voidaan jäljittää ja varmentaa eikä vain arvata uudelleen.
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.01Suorittakaa auditointi kriittisen polun ulkopuolella
Ositetut kalibrointiauditoinnit ovat suuria, estämättömiä töitä — juuri niitä varten Message Batches API on tarkoitettu: 50 % edullisempi, enintään 24 tunnin aikaikkuna eikä viiveen palvelutasotakuuta. Suorittakaa yön yli tehtävä kalibrointikierros eräajona, yhdistäkää tulokset custom_id-tunnisteella ja lähettäkää uudelleen vain epäonnistuneet tapaukset.
Rajaus on kokeessa tärkeä: älkää koskaan käyttäkö Batch API:a estäviin tai aikakriittisiin tarkistuksiin (sillä ei ole viiveen palvelutasotakuuta eikä se tue monikierroksista työkalukutsua). Esiyhdistämisen tarkistus tai reaaliaikainen poiminta pidetään synkronisessa API:ssa; ajoittainen auditointi tehdään eräajona.
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.Pikatarkistus: Automaation hyväksyminen
Soveltakaa sääntöä todelliseen käyttöönotto- tai hylkäyspäätökseen.
Kertaus: Mitatkaa ennen kuin luotatte
Kokeen ja tuotantokäytön tärkeimmät opit:
- Kokonaistarkkuus peittää tyyppi- ja kenttäkohtaiset virheet — älkää koskaan automatisoiko pelkän otsikkokeskiarvon perusteella.
- Ositettu satunnaisotanta jakaa aineiston merkityksellisten ulottuvuuksien (dokumenttityyppi, kenttä ja reunaehdot) mukaan ja ottaa otoksen kustakin, mikä antaa harvinaisille ryhmille todellisen tilastollisen voiman.
- Kalibrointi sovittaa ilmoitetun luottamuksen havaittuun tarkkuuteen, mikä varmistetaan nimetyllä validointijoukolla; mallin raaka luottamus on liian itsevarma, eivätkä itse arvioidut arvot ole luotettava automaation signaali.
- Määrittäkää automaattisen hyväksynnän kynnysarvot segmenteittäin; automatisoikaa kalibroidut ja tarkat ositteet ja ohjatkaa loput ihmisille.
- Vahvistakaa signaalia itsensä korjaamisella (laskettu ja ilmoitettu summa) sekä alkuperätiedoilla; suorittakaa raskas kalibrointiauditointi Batch API -rajapinnassa — ei koskaan estävällä tai aikakriittisellä polulla.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 26
- Oppitunnit
- 104
Usein kysytyt kysymykset
Onko oppitunti ”Ositettu otanta ja kalibrointi” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Claude Architect-oppimispolun 3 oppituntia, myös oppitunnin “Ositettu otanta ja kalibrointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Claude Architect-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Ositettu otanta ja kalibrointi”?
Ota otos segmenteittäin ja kalibroi merkityillä validointiaineistoilla. Harjoittelet Claude Architect-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Claude Architect-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Claude Architect-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Ositettu otanta ja kalibrointi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Claude Architect-oppitunnilla?
Kyllä. Jokainen Claude Architect-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Väitteiden ja lähteiden vastaavuudet
- Ristiriitaiset tiedot ja päivämäärät
- Koontimittarit peittävät virheet
- Ositettu otanta ja kalibrointi