การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ
สุ่มตัวอย่างตามกลุ่ม และปรับเทียบด้วยชุดตรวจสอบที่มีป้ายกำกับ
การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเชื่อมโยงข้อกล่าวอ้างกับแหล่งที่มา
- ข้อมูลและวันที่ที่ขัดแย้งกัน
- ตัวชี้วัดรวมซ่อนความล้มเหลว
- การสุ่มตัวอย่างแบบแบ่งชั้นและการปรับเทียบ