โมดูล 1/5 · สัปดาห์ 1–3 · 27 ชม.

ข้อมูลและสถิติเชิงพรรณนา

UAT 106 สถิติและการวิเคราะห์ข้อมูลสำหรับงานเทคโนโลยี

เวลาเรียนประมาณ 90 นาทีร่าง รอตรวจปรับปรุงล่าสุด 26 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. แยกชนิดข้อมูล ประชากรกับตัวอย่าง และระบุหน่วยทดลองให้ถูกต้อง
  2. คำนวณค่ากลาง ส่วนเบี่ยงเบนมาตรฐาน เปอร์เซ็นไทล์ และพิสัยควอร์ไทล์ด้วย Python
  3. อ่านกล่องสี่เหลี่ยม (box plot) และระบุค่าผิดปกติด้วยเกณฑ์ 1.5 IQR
  4. แยกความแม่น (trueness) กับความเที่ยง (precision) และคำนวณ bias กับ RMSE

ความรู้พื้นฐานที่ควรมี: UAT 104 โมดูล 3

ทำไมต้องรู้

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

ข้อมูลในวิชานี้เป็น ข้อมูลสังเคราะห์ ที่สร้างจากแบบจำลองด้วยสคริปต์ make_sample_data.py เพื่อฝึกวิธีวิเคราะห์เท่านั้น ไม่ใช่ผลทดสอบของโดรนรุ่นใด ดาวน์โหลดได้ที่ /downloads/uat-106/

ข้อมูลชนิดต่าง ๆ และหน่วยทดลอง

ชนิดความหมายตัวอย่างงานโดรน
นามบัญญัติ (nominal)กลุ่มที่ไม่มีลำดับยี่ห้อแบตเตอรี่, โหมดการบิน
เรียงลำดับ (ordinal)มีลำดับแต่ระยะห่างไม่เท่ากันระดับความเสี่ยง ต่ำ กลาง สูง
อันตรภาค (interval)ระยะห่างมีความหมาย ศูนย์ไม่ใช่ “ไม่มี”อุณหภูมิ °C
อัตราส่วน (ratio)มีศูนย์จริง หารกันได้เวลาบิน, น้ำหนักบรรทุก, ระยะทาง

ประชากร (population) คือทั้งหมดที่เราอยากรู้ เช่น ทุกเที่ยวบินที่แบตเตอรี่รุ่นนี้จะบินได้ ส่วน ตัวอย่าง (sample) คือส่วนที่เราวัดจริง สถิติคือการใช้ตัวอย่างบอกเรื่องของประชากร

หน่วยทดลอง (experimental unit) คือสิ่งที่ถูกวัดแยกกันอย่างเป็นอิสระ ถ้าคำถามคือ “แบตเตอรี่รุ่นนี้บินได้นานเท่าใด” หน่วยทดลองคือ เที่ยวบิน ไม่ใช่จุดข้อมูลใน log จุด log หนึ่งพันจุดในเที่ยวเดียวไม่ได้เป็นหนึ่งพันเที่ยวบินที่เป็นอิสระกัน ข้อผิดพลาดนี้พบบ่อยมากและทำให้ผู้วิเคราะห์มั่นใจเกินจริง

import pandas as pd

hover = pd.read_csv("hover_error.csv")
err = hover["alt_err_m"]
print(len(err), "samples from ONE hover flight, sampled every", hover["t_s"].diff().iloc[1], "s")
print(f"mean {err.mean():.3f} m   median {err.median():.3f} m   sd {err.std():.3f} m")
print(f"min {err.min():.3f} m   max {err.max():.3f} m")
600 samples from ONE hover flight, sampled every 0.1 s
mean -0.002 m   median -0.001 m   sd 0.127 m
min -0.735 m   max 0.897 m

ค่ากลางและการกระจาย

  • ค่าเฉลี่ย (mean) ผลรวมหารจำนวน ไวต่อค่าผิดปกติ
  • มัธยฐาน (median) ค่าตรงกลางเมื่อเรียงข้อมูล ทนต่อค่าผิดปกติ
  • ส่วนเบี่ยงเบนมาตรฐาน (standard deviation, SD) บอกว่าข้อมูลห่างจากค่าเฉลี่ยโดยทั่วไปเท่าใด หน่วยเดียวกับข้อมูล
  • เปอร์เซ็นไทล์ (percentile) ค่าที่มีข้อมูลต่ำกว่าตามสัดส่วนที่กำหนด เช่น p95 คือค่าที่ข้อมูล 95% ไม่เกิน ส่วน ควอร์ไทล์ Q1 Q2 Q3 คือเปอร์เซ็นไทล์ที่ 25 50 75

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

import statistics
import numpy as np

flights = [21.8, 22.0, 22.5, 23.9, 24.1]
print(f"stdev (n-1) {statistics.stdev(flights):.3f}   pstdev (n) {statistics.pstdev(flights):.3f}")
print("pandas .std():", round(pd.Series(flights).std(), 3), "  numpy np.std():", round(np.std(flights), 3))
print("statistics.quantiles:", statistics.quantiles(flights, n=4))
print("numpy.percentile:    ", np.percentile(flights, [25, 50, 75]).tolist())
stdev (n-1) 1.074   pstdev (n) 0.960
pandas .std(): 1.074   numpy np.std(): 0.96
statistics.quantiles: [21.9, 22.5, 24.0]
numpy.percentile:     [22.0, 22.5, 23.9]

pandas .std() หารด้วย แต่ numpy np.std() หารด้วย ถ้าไม่ระบุ ddof=1 ส่วนควอร์ไทล์ของ statistics.quantiles (วิธี exclusive) กับ numpy.percentile (วิธี linear) ได้ค่าต่างกันเมื่อข้อมูลน้อย ทั้งสองไม่ผิด แต่ต้อง รายงานวิธีที่ใช้ เพื่อให้ผู้อื่นคำนวณซ้ำได้ตรงกัน

ตัวอย่างที่ 1 เวลาประมวลผลภาพบน edge computer

ข้อมูล 200 เฟรมจากไฟล์ latency.csv เป็นข้อมูลที่ เบ้ขวา คือมีเฟรมช้าจำนวนน้อยที่ช้ามาก หน่วยความรู้ “Edge benchmark” ของคลังความรู้โดรนแนะนำให้รายงาน p95 คู่กับค่ากลาง

lat = pd.read_csv("latency.csv")["latency_ms"]
print(f"mean {lat.mean():.1f} ms   median {lat.median():.1f} ms")
print(f"p95 {lat.quantile(0.95):.1f} ms   max {lat.max():.1f} ms")
mean 42.3 ms   median 40.5 ms
p95 62.6 ms   max 79.4 ms

ค่าเฉลี่ยสูงกว่ามัธยฐานเพราะเฟรมที่ช้าดึงค่าเฉลี่ยขึ้น ถ้าระบบต้องประมวลผลให้เสร็จภายใน 60 ms ค่าเฉลี่ย 42 ms ดูเหมือนผ่านสบาย แต่ p95 ประมาณ 63 ms บอกว่ามีเฟรมอย่างน้อย 5% ที่ช้ากว่าเกณฑ์ (นับจริงได้ 14 จาก 200 เฟรม หรือ 7%) ค่าสรุปที่เลือกจึงต้องตรงกับคำถาม

กล่องสี่เหลี่ยมและค่าผิดปกติ

กล่องสี่เหลี่ยม (box plot) ตามคู่มือสถิติของ NIST สรุปข้อมูลด้วยห้าค่า กล่องครอบจาก Q1 ถึง Q3 ความกว้างของกล่องคือ พิสัยควอร์ไทล์ (IQR) เส้นกลางกล่องคือมัธยฐาน หนวดยืดไปถึงข้อมูลที่ไกลที่สุดที่ยังอยู่ในเกณฑ์ และจุดที่อยู่นอก หรือ ถูกแสดงแยกเป็นค่าผิดปกติที่ควรตรวจ

กล่องสี่เหลี่ยมแนวนอนของความคลาดเคลื่อนความสูง กล่องแคบอยู่รอบศูนย์ระหว่าง Q1 กับ Q3 มีเส้นมัธยฐานใกล้ศูนย์ หนวดยื่นไปประมาณลบศูนย์จุดสามและบวกศูนย์จุดสาม มีค่าผิดปกติสามจุด ใกล้ลบศูนย์จุดเจ็ด ใกล้ลบศูนย์จุดสี่ และใกล้บวกศูนย์จุดเก้า
ภาพที่ 1 กล่องสี่เหลี่ยมของความคลาดเคลื่อนความสูงขณะลอยตัว
q1, q3 = err.quantile([0.25, 0.75])
iqr = q3 - q1
low, high = q1 - 1.5 * iqr, q3 + 1.5 * iqr
print(f"Q1 {q1:.3f}  Q3 {q3:.3f}  IQR {iqr:.3f}  fences [{low:.3f}, {high:.3f}]")
print(hover[(err < low) | (err > high)].to_string(index=False))
Q1 -0.086  Q3 0.082  IQR 0.167  fences [-0.337, 0.333]
 t_s  alt_err_m
21.5      0.897
43.0     -0.735
58.3     -0.372

พบค่าผิดปกติสามจุด สองจุดที่ 21.5 และ 43.0 วินาทีห่างจากกลุ่มมาก ส่วนจุดที่ 58.3 วินาทีเกินเกณฑ์เพียงเล็กน้อย เกณฑ์ 1.5 IQR เป็นเพียง สัญญาณให้ไปตรวจ ไม่ใช่คำสั่งให้ลบ ต้องกลับไปดูสาเหตุ เช่น ลมกระโชกหรือเซนเซอร์ขัดข้อง ถ้าตัดข้อมูลออกต้องรายงานเหตุผลและผลทั้งก่อนและหลังตัด

ความแม่น ความเที่ยง bias และ RMSE

พจนานุกรมมาตรวิทยาสากล (VIM, JCGM 200:2012) แยกคำสามคำ

  • ความแม่น (trueness) ค่าเฉลี่ยของการวัดซ้ำจำนวนมากใกล้ค่าอ้างอิงเพียงใด ความไม่แม่นคือมี bias
  • ความเที่ยง (precision) ผลการวัดซ้ำใกล้กันเองเพียงใด
  • ความถูกต้อง (accuracy) ผลการวัดใกล้ค่าจริงเพียงใด เป็นผลรวมของทั้งสองอย่าง VIM ระบุว่าเป็นแนวคิด ไม่ใช่ปริมาณที่ให้ตัวเลขได้โดยตรง
เป้ายิงสี่เป้า เป้าแรกจุดกระจุกกลางเป้าคือแม่นและเที่ยง เป้าที่สองจุดกระจุกแต่เลื่อนไปมุมขวาบนคือเที่ยงแต่มี bias เป้าที่สามจุดกระจายรอบกลางคือไม่มี bias แต่กระจาย เป้าที่สี่จุดกระจายและเลื่อนคือมี bias และกระจาย
ภาพที่ 2 ความแม่นกับความเที่ยง

ในงานตรวจแผนที่ ความคลาดเคลื่อน คือค่าจากแผนที่ลบค่าอ้างอิงของจุดตรวจสอบ bias คือค่าเฉลี่ยของ ส่วน RMSE คือรากของค่าเฉลี่ยกำลังสอง ซึ่งรวมทั้ง bias และการกระจาย ตัวอย่างนี้ใช้ข้อมูลสังเคราะห์สี่จุดจากหน่วยความรู้ “ตรวจความถูกต้องและแก้ปัญหาแผนที่”

e_z = np.array([0.10, 0.00, -0.10, 0.00])
for label, e in [("as measured", e_z), ("with +0.20 m offset", e_z + 0.20)]:
    print(f"{label:<20} bias {e.mean():+.3f} m   RMSE {np.sqrt(np.mean(e ** 2)):.3f} m")
as measured          bias +0.000 m   RMSE 0.071 m
with +0.20 m offset  bias +0.200 m   RMSE 0.212 m

bias เป็นศูนย์ไม่ได้แปลว่าไม่มีความคลาดเคลื่อน เพราะค่าบวกกับลบหักล้างกัน เมื่อทุกจุดเลื่อนขึ้น 0.20 m (เช่น ใช้ระดับอ้างอิงความสูงผิด) ทั้ง bias และ RMSE เพิ่มขึ้น จึงต้องรายงานทั้งสองค่าคู่กัน

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: สรุปข้อมูลการลอยตัว

  1. เปิด hover_error.csv ด้วย pandas คำนวณค่าสรุปทั้งหมดในบท แล้ววาด histogram และ box plot ด้วย matplotlib
  2. ตัดค่าผิดปกติสองจุดที่ชัดเจนออก คำนวณ SD ใหม่ แล้วเขียนรายงานสั้นที่แสดงทั้งผลก่อนและหลังตัดพร้อมเหตุผล
  3. คำนวณ p50 p90 p95 และ p99 ของ latency.csv ด้วยทั้ง numpy.percentile และ statistics.quantiles(n=100) เทียบว่าต่างกันเท่าใด
  4. ใช้ข้อมูลจุดตรวจสอบจากหน่วยความรู้ “ตรวจความถูกต้องและแก้ปัญหาแผนที่” คำนวณ bias และ RMSE แยกแกน E N Z

ข้อผิดพลาดที่พบบ่อย

ระวัง

  • นับจุด log เป็นเที่ยวบิน ทำให้ดูเหมือนมีข้อมูลมากกว่าจริงหลายร้อยเท่า
  • ใช้ค่าเฉลี่ยกับข้อมูลเบ้ โดยไม่ดูมัธยฐานหรือเปอร์เซ็นไทล์
  • ไม่รู้ว่าเครื่องมือหาร n หรือ n−1 ได้ SD ไม่ตรงกับผู้อื่น
  • ลบค่าผิดปกติทิ้งเงียบ ๆ เพื่อให้ผลดูดี
  • รายงานแต่ bias ซึ่งอาจเป็นศูนย์ทั้งที่ความคลาดเคลื่อนรายจุดใหญ่

สรุป

  • ระบุชนิดข้อมูลและหน่วยทดลองให้ถูกก่อนคำนวณ จุด log ในเที่ยวเดียวไม่ใช่ตัวอย่างอิสระ
  • ใช้ค่าเฉลี่ยคู่กับมัธยฐาน และ SD คู่กับเปอร์เซ็นไทล์ รายงานวิธีคำนวณเสมอ
  • box plot และเกณฑ์ 1.5 IQR ชี้จุดที่ควรตรวจ ไม่ใช่จุดที่ต้องลบ
  • ความแม่นเกี่ยวกับ bias ความเที่ยงเกี่ยวกับการกระจาย RMSE รวมทั้งสองอย่าง

แบบฝึกตรวจความเข้าใจ

  1. ข้อมูลโหมดการบิน (MANUAL, AUTO, RTL) เป็นข้อมูลชนิดใด
  2. เวลาบิน 20, 22, 24 นาที มีส่วนเบี่ยงเบนมาตรฐานของตัวอย่างเท่าใด
  3. Q1 = 10 และ Q3 = 18 ค่าที่มากกว่าเท่าใดถือเป็นค่าผิดปกติตามเกณฑ์ 1.5 IQR
  4. ความคลาดเคลื่อน +0.03 และ −0.03 m มี bias และ RMSE เท่าใด
  5. log ความสูง 36 000 จุดจากการบิน 3 เที่ยว มีตัวอย่างอิสระกี่ตัวเมื่อคำถามคือ “เวลาบินเฉลี่ย”
เฉลย
  1. นามบัญญัติ (nominal) เพราะเป็นกลุ่มที่ไม่มีลำดับ
  2. ค่าเฉลี่ย 22 ผลรวมกำลังสองของส่วนต่าง ได้ นาที
  3. IQR = 8 เกณฑ์บน
  4. bias m และ RMSE m
  5. 3 ตัวอย่าง เพราะหน่วยทดลองคือเที่ยวบิน

สรุปสูตรสำคัญ

ค่าเฉลี่ย
ส่วนเบี่ยงเบนมาตรฐานของตัวอย่าง
เกณฑ์ค่าผิดปกติแบบ box plot
bias และ RMSE

แหล่งอ้างอิงหลัก

  1. Montgomery, D. C., & Runger, G. C. (2018). Applied statistics and probability for engineers (7th ed.). Wiley. link
  2. Diez, D. M., Çetinkaya-Rundel, M., & Barr, C. D. (2019). OpenIntro statistics (4th ed.). OpenIntro. link
  3. NIST/SEMATECH. e-Handbook of statistical methods. National Institute of Standards and Technology. link
  4. NIST/SEMATECH. Box plot (section 1.3.3.7). e-Handbook of statistical methods. link
  5. Python Software Foundation. statistics — Mathematical statistics functions. The Python standard library (3.14). link
  6. NumPy developers. numpy.percentile. NumPy documentation. link
  7. JCGM. (2012). International vocabulary of metrology — Basic and general concepts and associated terms (VIM, JCGM 200:2012). BIPM. link
  8. McKinney, W. (2022). Python for data analysis (3rd ed.). O'Reilly. link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: คณิตศาสตร์ ฟิสิกส์ และสถิติ · การสำรวจ ทำแผนที่ และภูมิสารสนเทศ · ปัญญาประดิษฐ์และคอมพิวเตอร์วิทัศน์