Claude Architect · บทเรียน

การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ

สุ่มตัวอย่างตามกลุ่ม และปรับเทียบด้วยชุดตรวจสอบที่มีป้ายกำกับ

บทเรียน 4 จาก 413 ขั้นตอน

การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ เป็นบทเรียน Claude Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Claude Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Claude Architect มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดความแม่นยำรวมจึงหลอกลวง

คุณนำกระบวนการประมวลผลการดึงข้อมูลของ Claude ไปใช้งานและรายงานว่า มีความแม่นยำ 97% ฝ่ายบริหารอนุมัติให้ทำงานอัตโนมัติทั้งหมด สามสัปดาห์ต่อมา ใบแจ้งหนี้คืนเงินทุกฉบับที่มีรายการสกุลเงินต่างประเทศกลับผิดทั้งหมด

ตัวเลขพาดหัวนั้นเป็นเรื่องจริง — แต่เป็นเพียงค่าเฉลี่ย ความแม่นยำรวมสามารถบดบังความล้มเหลวร้ายแรงในประเภทเอกสารหรือช่องข้อมูลบางอย่างได้ เพราะกรณีทั่วไปมีจำนวนมากจนกลบกรณีที่พบไม่บ่อย

บทเรียนนี้กล่าวถึงวินัยที่ช่วยให้คุณซื่อสัตย์ต่อข้อเท็จจริงก่อนทำงานอัตโนมัติ: การสุ่มตัวอย่างแบบแบ่งชั้น เพื่อวัดจุดที่คุณล้มเหลวจริง และ การปรับเทียบ กับชุดตรวจสอบที่มีป้ายกำกับ เพื่อให้คะแนนความเชื่อมั่นมีความหมาย

กฎสำคัญ

จงจำหลักการระดับข้อสอบจากขอบเขตการกำกับดูแลไว้:

ความแม่นยำรวมสามารถซ่อนประสิทธิภาพที่ต่ำในประเภทเอกสารหรือช่องข้อมูลบางอย่างได้ ก่อนทำงานอัตโนมัติ ให้ใช้การสุ่มตัวอย่างแบบแบ่งชั้นร่วมกับความเชื่อมั่นระดับช่องข้อมูลที่ปรับเทียบกับชุดตรวจสอบซึ่งมีป้ายกำกับ

มีสองขั้นตอนตามลำดับ:

  • แบ่งชั้น แล้วจึงสุ่มตัวอย่าง — แบ่งประชากรออกเป็นส่วนย่อย แล้วสุ่มตัวอย่างภายในแต่ละส่วน เพื่อให้วัดส่วนย่อยที่พบไม่บ่อยแต่สำคัญอย่างยิ่งได้จริง
  • ปรับเทียบความเชื่อมั่น — ทำให้ความเชื่อมั่นของโมเดลในแต่ละช่องข้อมูลสอดคล้องกับความถูกต้องในโลกจริง โดยพิสูจน์กับป้ายกำกับค่าความจริงอ้างอิง

หากข้ามขั้นตอนใดขั้นตอนหนึ่ง คุณกำลังคาดเดา ไม่ได้กำกับดูแล

เหตุใดการสุ่มตัวอย่างทั่วไปจึงไม่เพียงพอ

การสุ่มตัวอย่างทั่วไปจะสุ่มกรณีที่พบได้บ่อยมากเกินไป หากใบแจ้งหนี้ของคุณ 95% เป็นใบเสร็จแบบง่ายที่ใช้สกุลเงินเดียว การสุ่มตัวอย่าง 200 รายการจะได้กรณีง่ายประมาณ 190 รายการ และอาจได้กรณีสกุลเงินต่างประเทศที่ยากเพียงไม่กี่รายการ ซึ่งน้อยเกินกว่าจะตรวจพบอัตราข้อผิดพลาด 40% ในส่วนย่อยนั้น

การสุ่มตัวอย่างแบบแบ่งชั้นแก้ปัญหานี้ได้: กำหนดส่วนย่อยที่สำคัญ (ประเภทเอกสาร ภาษา ผู้ขาย การมีอยู่ของช่องข้อมูล) แล้วสุ่มตัวอย่างจากแต่ละส่วนย่อย ตอนนี้ส่วนย่อยที่พบไม่บ่อยจะได้รับการวัดด้วยพลังทางสถิติที่เพียงพอ หากมีปัญหาก็จะแสดงผลอย่างชัดเจน

คุณกำลังวัดประชากรที่กังวล ไม่ใช่ประชากรที่บังเอิญมีจำนวนมากที่สุด

การเลือกชั้นของคุณ

ชั้นที่ดีจะแยกมิติที่พฤติกรรมน่าจะแตกต่างกันได้อย่างชัดเจน สำหรับกระบวนการประมวลผลการดึงข้อมูลแบบมีโครงสร้าง (สถานการณ์ที่ 6) ส่วนย่อยที่มีประโยชน์ได้แก่:

  • ประเภทเอกสาร — ใบแจ้งหนี้ เทียบกับ ใบเสร็จ เทียบกับ รายการสรุป
  • ช่องข้อมูล — ยอดรวม วันที่ สกุลเงิน รายการย่อย ระดับช่องข้อมูลมีความสำคัญ เพราะ 97% โดยรวมอาจบดบัง 60% ในช่องสกุลเงิน
  • เงื่อนไขขอบ — เอกสารหลายหน้า เอกสารสแกนหรือคุณภาพต่ำ หลายภาษา หรือระเบียนที่ช่องข้อมูลเสริมไม่มีอยู่

ประเด็นสุดท้ายเชื่อมโยงกับกฎของโครงร่างข้อมูล: อย่ากำหนดให้ช่องข้อมูลที่อาจไม่มีอยู่เป็นช่องที่ต้องมี มิฉะนั้นโมเดลจะแต่งข้อมูลขึ้นมา ให้แบ่งชั้นตามการมีอยู่หรือไม่มีอยู่ของช่องข้อมูล เพื่อจับการแต่งข้อมูล

การสุ่มตัวอย่างแบบแบ่งชั้น

ในทางปฏิบัติ ให้จัดกลุ่มชุดข้อมูลตรวจสอบตามส่วนย่อย แล้วดึงตัวอย่างตามโควตาคงที่จากแต่ละส่วนให้เพียงพอที่จะไว้วางใจเมตริกของแต่ละชั้น ไม่ใช่ดึงตามสัดส่วนของประชากร

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()})

ความเชื่อมั่นระดับช่องข้อมูล ไม่ใช่แค่คำตัดสิน

ในการปรับเทียบ โมเดลต้องส่งออกความเชื่อมั่นสำหรับแต่ละช่องข้อมูล ไม่ใช่คะแนนรวมเพียงคะแนนเดียว บังคับให้ผลลัพธ์มีโครงสร้าง เพื่อให้ความเชื่อมั่นเป็นช่องข้อมูลที่มีชนิดข้อมูลและตรวจสอบได้ ไม่ใช่ร้อยแก้วที่ต้องแยกวิเคราะห์

ใช้ tool_choice เพื่อรับประกันว่าโมเดลจะส่งคืนโครงร่างข้อมูล "any" บังคับให้โมเดลเรียกใช้เครื่องมือบางอย่าง ส่วน {"type":"tool","name":"X"} บังคับให้เรียกใช้เครื่องมือที่ระบุ JSON Schema จะกำจัดข้อผิดพลาดทางไวยากรณ์และบังคับให้มีช่องข้อมูลที่จำเป็น

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}],
)

การปรับเทียบหมายถึงอะไรอย่างแท้จริง

โมเดลได้รับการปรับเทียบเมื่อความเชื่อมั่นที่ระบุสอดคล้องกับความแม่นยำที่สังเกตได้ กล่าวคือ ในบรรดาช่องข้อมูลทั้งหมดที่โมเดลระบุว่ามีความเชื่อมั่น 0.90 ควรมีประมาณ 90% ที่ถูกต้องเมื่อเทียบกับค่าความจริงอ้างอิง

ความเชื่อมั่นดิบของโมเดลมักมั่นใจเกินจริง — โมเดลระบุว่า 0.95 แต่ถูกต้องเพียง 70% ของเวลา คุณไม่สามารถไว้วางใจค่าขีดจำกัดการยอมรับอัตโนมัติที่สร้างจากคะแนนซึ่งยังไม่ได้ปรับเทียบได้ เพราะคุณจะอนุมัติข้อมูลที่ผิดโดยอัตโนมัติ

การปรับเทียบต้องใช้ชุดตรวจสอบที่มีป้ายกำกับ: ค่าความจริงอ้างอิงที่มนุษย์ตรวจสอบแล้วสำหรับตัวอย่างแบบแบ่งชั้น ไม่มีทางลัด ความเชื่อมั่นที่โมเดลประเมินตนเองเพียงอย่างเดียวเป็นสัญญาณประเภทเดียวกับที่ข้อสอบบอกคุณอย่างชัดเจนว่า NOT ให้ไว้วางใจสำหรับการตัดสินใจอัตโนมัติ

การวัดการปรับเทียบด้วยป้ายกำกับ

จัดกลุ่มคำทำนายตามความเชื่อมั่นที่ระบุ จากนั้นเปรียบเทียบความเชื่อมั่นที่ระบุกับความแม่นยำจริงของแต่ละกลุ่มในชุดข้อมูลที่มีป้ายกำกับ ส่วนต่างนี้คือข้อผิดพลาดจากการปรับเทียบ และคุณต้องคำนวณแยกตามแต่ละชั้น เพื่อไม่ให้ส่วนย่อยที่ “ง่าย” และปรับเทียบได้ดีบดบังส่วนย่อยที่ “ยาก” และมีปัญหา

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}")

การตั้งค่าขีดจำกัดการยอมรับอัตโนมัติแยกตามส่วนย่อย

เมื่อปรับเทียบแล้ว ให้หาค่าขีดจำกัดความเชื่อมั่นสำหรับแต่ละชั้นที่ผ่านเกณฑ์ความแม่นยำของคุณ เช่น ยอมรับโดยอัตโนมัติเฉพาะกรณีที่ความแม่นยำหลังปรับเทียบ ≥ 99% ค่าขีดจำกัดจะแตกต่างกันไปตามส่วนย่อย: ใบแจ้งหนี้สกุลเงินเดียวแบบง่ายอาจยอมรับอัตโนมัติที่ 0.85 ขณะที่รายการสกุลเงินต่างประเทศต้องใช้ 0.98 หรืออาจต้องให้มนุษย์ตรวจสอบทั้งหมด

นี่คือสะพานเชื่อมจากการวัดไปสู่การกำกับดูแล: ชั้นที่มีความเชื่อมั่นต่ำหรือความแม่นยำต่ำจะถูกส่งต่อให้มนุษย์ ส่วนชั้นที่มีความเชื่อมั่นสูงและปรับเทียบแล้วจะทำงานอัตโนมัติ ค่าขีดจำกัดเดียวสำหรับทุกกรณีจะทำให้คุณไว้วางใจส่วนย่อยที่ยากเกินไป หรือกีดกันส่วนย่อยที่ง่ายโดยไม่จำเป็น

การแก้ไขตนเองช่วยเสริมความน่าเชื่อถือของสัญญาณ

ความเชื่อมั่นจะดีขึ้นเมื่อโมเดลสามารถตรวจสอบไขว้กับตนเองได้ สำหรับการดึงข้อมูลตัวเลข ให้โมเดลส่งออกทั้ง calculated_total (ผลรวมของรายการย่อย) และ stated_total ที่พิมพ์อยู่บนเอกสาร จากนั้นให้ทำเครื่องหมายเมื่อพบความไม่ตรงกัน ความไม่ตรงกันเป็นสัญญาณที่ชัดเจนและกำหนดตายตัวได้ จึงน่าเชื่อถือกว่าตัวเลขความเชื่อมั่นที่โมเดลประเมินตนเองมาก

ใช้วิธีนี้ร่วมกับแหล่งที่มา: เก็บต้นทางของข้ออ้างแต่ละข้อไว้ (ชื่อเอกสาร คำพูดที่ยกมา หน้า) เพื่อให้สามารถติดตามและตรวจสอบช่องข้อมูลที่ถูกทำเครื่องหมายได้ ไม่ใช่เพียงคาดเดาใหม่

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.01

เรียกใช้การตรวจสอบนอกเส้นทางวิกฤต

การตรวจสอบการปรับเทียบแบบแบ่งชั้นเป็นงานขนาดใหญ่ที่ไม่ขัดขวางการทำงาน ซึ่งตรงกับจุดประสงค์ของส่วนติดต่อโปรแกรมประยุกต์ Message Batches: ราคาถูกลง 50% มีกรอบเวลาสูงสุด 24 ชั่วโมง และไม่มีข้อตกลงระดับบริการด้านเวลาแฝง ให้เรียกใช้การตรวจสอบการปรับเทียบข้ามคืนเป็นชุด แล้วจับคู่ผลลัพธ์ด้วย custom_id และส่งใหม่เฉพาะรายการที่ล้มเหลว

ขอบเขตนี้สำคัญต่อข้อสอบ: อย่าใช้ส่วนติดต่อโปรแกรมประยุกต์แบบชุดสำหรับการตรวจสอบที่ต้องขัดจังหวะหรือไวต่อเวลา (ไม่มีข้อตกลงระดับบริการด้านเวลาแฝงและไม่รองรับการเรียกใช้เครื่องมือหลายรอบ) ประตูตรวจสอบก่อนรวมโค้ดหรือการดึงข้อมูลแบบสดยังคงใช้ส่วนติดต่อโปรแกรมประยุกต์แบบทำงานพร้อมกัน ส่วนการตรวจสอบเป็นระยะให้ใช้แบบชุด

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.

ตรวจสอบอย่างรวดเร็ว: อนุมัติการทำงานอัตโนมัติ

ใช้กฎนี้กับการตัดสินใจจริงว่าจะดำเนินการหรือไม่

สรุป: วัดผลก่อนจึงค่อยไว้วางใจ

ประเด็นสำคัญสำหรับข้อสอบและการใช้งานจริง:

  • ความแม่นยำรวมซ่อนความล้มเหลวแยกตามประเภทและช่องข้อมูล — อย่าทำงานอัตโนมัติโดยอาศัยค่าเฉลี่ยพาดหัวเพียงอย่างเดียว
  • การสุ่มตัวอย่างแบบแบ่งชั้นแบ่งตามมิติที่สำคัญ (ประเภทเอกสาร ช่องข้อมูล เงื่อนไขขอบ) และสุ่มตัวอย่างจากแต่ละส่วน ทำให้ส่วนย่อยที่พบไม่บ่อยมีพลังทางสถิติจริง
  • การปรับเทียบทำให้ความเชื่อมั่นที่ระบุสอดคล้องกับความแม่นยำที่สังเกตได้ โดยพิสูจน์จากชุดตรวจสอบที่มีป้ายกำกับ ความเชื่อมั่นดิบของโมเดลมักมั่นใจเกินจริง และคะแนนที่โมเดลประเมินตนเองไม่ใช่สัญญาณที่น่าเชื่อถือสำหรับการทำงานอัตโนมัติ
  • ตั้งค่าขีดจำกัดการยอมรับอัตโนมัติแยกตามส่วนย่อย ให้ชั้นที่ปรับเทียบแล้วและมีความแม่นยำสูงทำงานอัตโนมัติ ส่วนที่เหลือให้ส่งต่อมนุษย์
  • เสริมความน่าเชื่อถือของสัญญาณด้วยการแก้ไขตนเอง (ยอดรวมที่คำนวณเทียบกับยอดรวมที่ระบุ) และแหล่งที่มา ให้เรียกใช้การตรวจสอบการปรับเทียบขนาดใหญ่บนส่วนติดต่อโปรแกรมประยุกต์แบบชุด ห้ามใช้บนเส้นทางที่ต้องขัดจังหวะหรือไวต่อเวลา
เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
26
บทเรียน
104

คำถามที่พบบ่อย

บทเรียน “การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Claude Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Claude Architect มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ”

สุ่มตัวอย่างตามกลุ่ม และปรับเทียบด้วยชุดตรวจสอบที่มีป้ายกำกับ คุณปฏิบัติ Claude Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Claude Architect หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Claude Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Claude Architect นี้ได้ไหม

ได้ บทเรียน Claude Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเชื่อมโยงข้อกล่าวอ้างกับแหล่งที่มา
  2. ข้อมูลและวันที่ที่ขัดแย้งกัน
  3. ตัวชี้วัดรวมซ่อนความล้มเหลว
  4. การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ
← กลับไปที่ Claude Architect