การทดลองและตีความผลทดสอบ
UAT 106 สถิติและการวิเคราะห์ข้อมูลสำหรับงานเทคโนโลยี
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- แยกข้อกำหนด เกณฑ์ยอมรับ วิธีทดสอบ และหลักฐาน และวางลำดับการทดสอบ UAV
- ออกแบบการทดลองด้วยหลักการสุ่ม การทำซ้ำ และการจัดกลุ่ม
- วิเคราะห์การทดลองแฟกทอเรียล 2² หาผลหลักและอันตรกิริยา
- ประเมินความไม่แน่นอนของการวัดแบบ Type A และ Type B และรายงานอัตราผ่านพร้อมช่วงความเชื่อมั่น
ทำไมต้องรู้
ข้อมูลที่ดีไม่ได้เกิดจากการวิเคราะห์เก่ง แต่เกิดจาก การออกแบบการทดลอง ที่ดีตั้งแต่ก่อนบิน ถ้าบินแบตเตอรี่ยี่ห้อ A ทั้งหมดตอนเช้าแล้วบินยี่ห้อ B ตอนบ่ายที่ร้อนกว่า ความต่างที่วัดได้อาจเป็นผลของอุณหภูมิ ไม่ใช่ยี่ห้อ และวิธีวิเคราะห์ใดก็แยกไม่ออก โมดูลนี้รวมทุกอย่างในวิชาเข้าเป็นกระบวนการทดสอบที่ผู้อื่นตรวจซ้ำได้
จากข้อกำหนดสู่หลักฐาน
หน่วยความรู้ “การทดสอบ UAV และการวิเคราะห์หลักฐาน” ของคลังความรู้โดรนแยกสี่สิ่งออกจากกัน
| สิ่งที่ต้องเขียน | ตัวอย่าง |
|---|---|
| ข้อกำหนด (requirement) | เวลาบินไม่ต่ำกว่า 20 นาที เมื่อบรรทุก 1.0 kg ที่อุณหภูมิ 25–35 °C |
| เกณฑ์ยอมรับ (acceptance criterion) | ขอบล่างด้านเดียว 95% ของค่าเฉลี่ยมากกว่า 20 นาที จากอย่างน้อย 8 เที่ยว |
| วิธีทดสอบ (procedure) | เริ่มจับเวลาเมื่อล้อพ้นพื้น หยุดเมื่อแบตเตอรี่ถึง 20% ลอยตัวที่ 10 m |
| หลักฐาน (evidence) | log ทุกเที่ยว ตารางผล โค้ดวิเคราะห์ และสภาพอากาศ |
เกณฑ์ยอมรับต้องเขียน ก่อน เห็นผล การทดสอบเดินตามลำดับจากความเสี่ยงต่ำไปสูง แต่ละขั้นตอบคำถามต่างกัน ผลจากการจำลองไม่ใช่หลักฐานของอากาศยานจริง
หลักการออกแบบการทดลอง
ตำรา Statistics for Experimenters ของ Box, Hunter และ Hunter เน้นหลักสามข้อ
- การสุ่ม (randomization) สุ่มลำดับการทดลองเพื่อไม่ให้ปัจจัยที่เปลี่ยนตามเวลา เช่น อุณหภูมิหรือความชำนาญของนักบิน ไปปนกับปัจจัยที่ศึกษา
- การทำซ้ำ (replication) ทำแต่ละเงื่อนไขหลายครั้งด้วยหน่วยทดลองอิสระ เพื่อประมาณความแปรปรวน
- การจัดกลุ่ม (blocking) ถ้าทดสอบไม่เสร็จในวันเดียว ให้แต่ละวันมีทุกเงื่อนไขครบ แล้ววิเคราะห์โดยคำนึงถึงวัน
import numpy as np
plan = [(payload, prop) for payload in (0.5, 1.0) for prop in ("standard", "efficient") for _ in range(3)]
rng = np.random.default_rng(2026)
order = rng.permutation(len(plan))
for run, idx in enumerate(order[:5], start=1):
print(run, plan[idx])
print("...", len(plan), "runs in total")
1 (1.0, 'standard')
2 (0.5, 'standard')
3 (1.0, 'efficient')
4 (1.0, 'standard')
5 (1.0, 'efficient')
... 12 runs in total
การทดลองแฟกทอเรียล 2²
การทดลองแบบเปลี่ยนทีละปัจจัยพลาดสิ่งสำคัญ คือปัจจัยอาจมีผลร่วมกัน การทดลองแฟกทอเรียล (factorial experiment) ทดสอบทุกคู่ของระดับปัจจัยพร้อมกัน ตัวอย่างนี้มีสองปัจจัย ปัจจัยละสองระดับ คือน้ำหนักบรรทุก 0.5 กับ 1.0 kg และใบพัดแบบมาตรฐานกับแบบประหยัด ทำซ้ำมุมละสามเที่ยว รวม 12 เที่ยว ข้อมูลอยู่ในไฟล์ factorial.csv
import pandas as pd
fx = pd.read_csv("factorial.csv")
cell = fx.groupby(["payload_kg", "propeller"])["endurance_min"].mean()
print(cell.round(3).to_string())
light_std, light_eff = cell[(0.5, "standard")], cell[(0.5, "efficient")]
heavy_std, heavy_eff = cell[(1.0, "standard")], cell[(1.0, "efficient")]
payload_effect = (heavy_std + heavy_eff) / 2 - (light_std + light_eff) / 2
prop_effect = (light_eff + heavy_eff) / 2 - (light_std + heavy_std) / 2
interaction = ((heavy_eff - heavy_std) - (light_eff - light_std)) / 2
print(f"payload effect {payload_effect:+.2f} min propeller effect {prop_effect:+.2f} min interaction {interaction:+.2f} min")
payload_kg propeller
0.5 efficient 24.817
standard 23.160
1.0 efficient 20.393
standard 20.053
payload effect -3.76 min propeller effect +1.00 min interaction -0.66 min
ผลหลัก (main effect) ของน้ำหนักบรรทุกคือเวลาบินลดลงประมาณ 3.8 นาทีเมื่อเพิ่มจาก 0.5 เป็น 1.0 kg ส่วนใบพัดประหยัดเพิ่มเวลาบินเฉลี่ยประมาณ 1 นาที แต่ อันตรกิริยา (interaction) ติดลบบอกว่าใบพัดประหยัดช่วยได้มากเมื่อบรรทุกเบา (1.66 นาที) และช่วยน้อยเมื่อบรรทุกหนัก (0.34 นาที) ถ้าทดสอบใบพัดที่ 0.5 kg อย่างเดียวจะประเมินประโยชน์เกินจริงสำหรับภารกิจขนส่งที่บรรทุกหนัก ผลต่างเหล่านี้ยังต้องเทียบกับการกระจายจากการทำซ้ำก่อนสรุปว่ามีนัยสำคัญ
ความไม่แน่นอนของการวัด
ทุกการวัดมีความไม่แน่นอน คู่มือ GUM (JCGM 100:2008) แบ่งวิธีประเมินเป็นสองแบบ
- Type A ประเมินจากการวิเคราะห์ทางสถิติของการวัดซ้ำ เช่น standard error ของค่าเฉลี่ย
- Type B ประเมินด้วยวิธีอื่น เช่น ความละเอียดของเครื่องมือหรือค่าจากใบรับรองการสอบเทียบ ถ้าเครื่องมืออ่านละเอียด 0.1 s ค่าจริงอยู่ในช่วง ±0.05 s ของค่าที่อ่านได้ด้วยโอกาสเท่ากัน ใช้การแจกแจงสี่เหลี่ยมได้
ตัวอย่างที่ 1 ความไม่แน่นอนของเวลาลอยตัว
ผู้ทดสอบห้าคนจับเวลาการลอยตัวครั้งเดียวกันด้วยนาฬิกาจับเวลาความละเอียด 0.1 s
import math
import statistics
readings = [1212.4, 1212.9, 1212.1, 1212.6, 1212.5]
mean = statistics.mean(readings)
u_a = statistics.stdev(readings) / math.sqrt(len(readings))
u_b = 0.05 / math.sqrt(3)
u_c = math.sqrt(u_a ** 2 + u_b ** 2)
print(f"mean {mean:.2f} s u_A {u_a:.3f} s u_B {u_b:.3f} s u_c {u_c:.3f} s")
print(f"result {mean:.2f} s ± {2 * u_c:.2f} s (k = 2)")
mean 1212.50 s u_A 0.130 s u_B 0.029 s u_c 0.134 s
result 1212.50 s ± 0.27 s (k = 2)
ความไม่แน่นอนจากการจับเวลาของคน (Type A) ใหญ่กว่าความละเอียดของนาฬิกา (Type B) มาก การซื้อนาฬิกาที่ละเอียดขึ้นจึงแทบไม่ช่วย ต้องเปลี่ยนวิธีวัด เช่น ใช้เวลาจาก log ของตัวควบคุมการบิน การรายงานความไม่แน่นอนแบบขยาย ตาม GUM ต้องระบุค่า coverage factor ที่ใช้เสมอ ในตัวอย่างนี้ใช้
รายงานอัตราผ่านอย่างมีขอบเขต
หน่วยความรู้ “แบบฝึกและการประเมินภารกิจจำลอง” ของคลังความรู้โดรนเตือนว่าอัตราผ่านต้องกำหนดนิยามก่อนทดลอง และรายงานรอบที่รันไม่จบแยกไว้ ห้ามลบทิ้ง อัตราผ่านจากการทดลองจำนวนจำกัดก็มีความไม่แน่นอนเช่นกัน
from scipy import stats
passed, total = 80, 100
ci = stats.binomtest(passed, total).proportion_ci(confidence_level=0.95)
print(f"pass rate {passed / total:.0%} 95% CI (Clopper-Pearson) [{ci.low:.3f}, {ci.high:.3f}]")
ci_small = stats.binomtest(8, 10).proportion_ci(confidence_level=0.95)
print(f"8 of 10 runs: 95% CI [{ci_small.low:.3f}, {ci_small.high:.3f}]")
pass rate 80% 95% CI (Clopper-Pearson) [0.708, 0.873]
8 of 10 runs: 95% CI [0.444, 0.975]
อัตราผ่าน 80% จาก 100 รอบมีช่วงความเชื่อมั่นประมาณ 71% ถึง 87% แต่ถ้าได้ 8 จาก 10 รอบ ช่วงกว้างตั้งแต่ประมาณ 44% ถึง 97% ตัวเลข 80% เท่ากันแต่ความหมายต่างกันมาก และอัตราผ่านนี้ใช้ได้เฉพาะแบบจำลองและเงื่อนไขที่ทดสอบ ไม่ใช่โอกาสสำเร็จในสนามจริง
รายงานผลทดสอบที่ดีมีอะไรบ้าง
รหัสการทดสอบและข้อกำหนด เกณฑ์ยอมรับที่เขียนก่อนทดสอบ สภาพแวดล้อม ค่าตั้งและรุ่นเฟิร์มแวร์ ข้อมูลดิบและหน่วย วิธีวิเคราะห์และสมมติฐาน จำนวนตัวอย่าง ช่วงความเชื่อมั่นและความไม่แน่นอน ข้อมูลที่ตัดออกพร้อมเหตุผล และข้อสรุปที่ไม่เกินกว่าข้อมูล
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: ออกแบบและวิเคราะห์การทดสอบใบพัด
- เขียนแผนการทดสอบตามตารางในบท (ข้อกำหนด เกณฑ์ยอมรับ วิธีทดสอบ หลักฐาน) สำหรับการเปรียบเทียบใบพัดสองแบบ ส่งให้เพื่อนตรวจก่อนเปิดข้อมูล
- วิเคราะห์
factorial.csvหาผลหลัก อันตรกิริยา และส่วนเบี่ยงเบนมาตรฐานจากการทำซ้ำในแต่ละมุม แล้วประเมินว่าผลใดใหญ่กว่าความแปรปรวนจากการทำซ้ำอย่างชัดเจน - วาดกราฟอันตรกิริยา (แกนนอนน้ำหนักบรรทุก เส้นแยกตามใบพัด) แล้วอธิบายว่าเส้นที่ไม่ขนานหมายถึงอะไร
- ประเมินความไม่แน่นอนของการวัดเวลาบินในการทดสอบของตนเองทั้ง Type A และ Type B และเขียนรายงานผลทดสอบฉบับสมบูรณ์หนึ่งหน้า
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ตั้งเกณฑ์ยอมรับหลังเห็นผล
- ไม่สุ่มลำดับการทดสอบ ทำให้ปัจจัยที่เปลี่ยนตามเวลาปนกับปัจจัยที่ศึกษา
- เปลี่ยนทีละปัจจัย จึงมองไม่เห็นอันตรกิริยา
- รายงานผลการวัดโดยไม่มีความไม่แน่นอน หรือไม่ระบุค่า
- ลบรอบที่ล้มเหลวออกเงียบ ๆ หรือรายงานอัตราผ่านโดยไม่บอกจำนวนรอบ
สรุป
- แยกข้อกำหนด เกณฑ์ยอมรับ วิธีทดสอบ และหลักฐาน เขียนเกณฑ์ก่อนเห็นผล และทดสอบจากความเสี่ยงต่ำไปสูง
- การสุ่ม การทำซ้ำ และการจัดกลุ่มทำให้ผลการทดลองเชื่อถือได้
- การทดลองแฟกทอเรียลเห็นทั้งผลหลักและอันตรกิริยา ซึ่งการเปลี่ยนทีละปัจจัยมองไม่เห็น
- รายงานความไม่แน่นอนทั้ง Type A และ Type B และรายงานอัตราผ่านพร้อมจำนวนรอบและช่วงความเชื่อมั่น
แบบฝึกตรวจความเข้าใจ
- ทำไมต้องสุ่มลำดับการบินในการทดสอบแบตเตอรี่สองยี่ห้อ
- ค่าเฉลี่ยสี่มุมคือ A−B− = 20, A+B− = 24, A−B+ = 22, A+B+ = 30 ผลหลักของ A เท่าใด
- จากข้อ 2 อันตรกิริยา AB เท่าใด
- เครื่องชั่งอ่านละเอียด 0.01 kg ความไม่แน่นอน Type B จากความละเอียดเท่าใด
- ทดสอบ 20 รอบ ผ่าน 20 รอบ สรุปว่า “ระบบผ่าน 100% เสมอ” ได้หรือไม่
เฉลย
- เพื่อไม่ให้ปัจจัยที่เปลี่ยนตามเวลา เช่น อุณหภูมิหรือความชำนาญของนักบิน ปนกับผลของยี่ห้อ
- kg ได้ kg
- ไม่ได้ ช่วงความเชื่อมั่น 95% ของอัตราผ่านยังมีขอบล่างประมาณ 83% และผลใช้ได้เฉพาะเงื่อนไขที่ทดสอบ
สรุปสูตรสำคัญ
| ผลหลักของปัจจัย A ในแฟกทอเรียล 2² | |
| อันตรกิริยา AB | |
| ความไม่แน่นอน Type B จากการแจกแจงสี่เหลี่ยม | |
| ความไม่แน่นอนรวมและแบบขยาย |
แหล่งอ้างอิงหลัก
- Box, G. E. P., Hunter, J. S., & Hunter, W. G. (2005). Statistics for experimenters: Design, innovation, and discovery (2nd ed.). Wiley. link
- Montgomery, D. C., & Runger, G. C. (2018). Applied statistics and probability for engineers (7th ed.). Wiley. link
- JCGM. (2008). Evaluation of measurement data — Guide to the expression of uncertainty in measurement (JCGM 100:2008). BIPM. link
- JCGM. (2012). International vocabulary of metrology — Basic and general concepts and associated terms (VIM, JCGM 200:2012). BIPM. link
- NIST/SEMATECH. e-Handbook of statistical methods. National Institute of Standards and Technology. link
- The SciPy community. Statistical functions (scipy.stats), SciPy 1.18 documentation. link
- Wasserstein, R. L., & Lazar, N. A. (2016). The ASA statement on p-values: Context, process, and purpose. The American Statistician, 70(2), 129–133. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
การทดสอบ UAV และการวิเคราะห์หลักฐาน
ตีความผลทดสอบ endurance
แบบฝึกและการประเมินภารกิจจำลอง
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz