หน่วยที่ 3 การวิเคราะห์ข้อมูล
3.2 การวิเคราะห์เชิงทำนาย (เชิงตัวเลข)
หน่วยที่ 3 การวิเคราะห์ข้อมูล
3.2 การวิเคราะห์เชิงทำนาย (เชิงตัวเลข)
คำถาม
11 22 44 87 161 ?
-8 -5 0 1 -8 -33 ?
สี่เหลี่ยมจัตุรัสรูปหนึ่ง ถ้าเพิ่มความยาวด้าน ด้านละ 10% จะมีพื้นที่เพิ่มกี่ %
การวิเคราะห์เชิงทำนาย เป็นการวิเคราะห์ข้อมูลในอดีตเพื่อหารูปแบบความสัมพันธ์ในชุดข้อมูลที่สามารถนำมาเป็นต้นแบบในการทำนาย การคาดการณ์ผลหรือสิ่งที่น่าจะเกิดขึ้นในอนาคต ซึ่งจะช่วยให้บุคคลหรือองค์กรสามารถตัดสินใจได้อย่างมีประสิทธิภาพ การคาดการณ์ว่าฝนจะตกหรือไม่ ทำให้เราตัดสินใจได้ว่าควรจะนำร่มไปหรือไม่ การคาดการณ์นี้อาจทำโดยการเทียบจากประสบการณ์ของเรา หรือจากการสังเกต ที่อาจจะสรุปได้ว่า ถ้าฟ้าครึ้ม ลมแรง แล้วฝนจะตก ถ้าเราคาดการณ์ว่าฝนจะตกและนำร่มไปด้วย แล้วเกิดฝนตกเราจะไม่เปียกฝน แสดงว่าการตัดสินใจมีประสิทธิภาพ
จากที่กล่าวมา นักเรียนคงพอจะเห็นประโยชน์ที่ได้จากการวิเคราะห์เชิงทำนายบ้างแล้ว ซึ่งในหัวข้อนี้จะนำเสนอวิธีการวิเคราะห์เชิงทำนายสองแบบ คือ การทำนายเชิงตัวเลข (numeric prediction) เช่น ทำนายจำนวนนาทีที่ใช้ในการรอแถวจ่ายเงิน และการทำนายเชิงหมวดหมู่ (classification) ตามคุณลักษณะร่วมที่สนใจ เช่น การทำนายสภาพอากาศว่าฝนจะตกหรือท้องฟ้าแจ่มใส
ถามเล่น ๆ แต่ขอคำตอบจริง ๆ
ถ้ามี Wildebeest จำนวน 102 ตัว จะมี Zebra ประมาณกี่ตัว
อีกหน่อย ไฟล์ข้อมูลนี้อยู่ที่นี่ ดาวน์โหลดไฟล์ที่นี้🔗
การทำนายข้อมูลเชิงตัวเลข (numeric prediction) เป็นการใช้ข้อมูลในอดีตมาวิเคราะห์หาความสัมพันธ์ระหว่างชุดข้อมูลและสร้างแบบจำลองในการทำนายที่ให้ผลลัพธ์เป็นตัวเลข โดยทั่วไปมีวิธีการทำนาย 2 วิธีคือ การทำนายโดยใช้กราฟ และ การทำนายโดยใช้สมการเชิงเส้น เช่น
ไฟล์เอกสารประกอบการปฏิบัติ https://www.kaggle.com/muthuj7/weather-dataset
ถ้านักเรียนจะไปเที่ยวต่างประเทศ นักเรียนควรตรวจสอบอุณหภูมิของประเทศที่จะไปในช่วงเวลาเดียวกันในอดีตเพื่อคาดการณ์อุณหภูมิ จะได้จัดเตรียมเสื้อผ้าได้ถูกต้อง
เกษตรกรต้องคาดการณ์ปริมาณน้ำฝนล่วงหน้า โดยใช้ข้อมูลปริมาณน้ำฝนในอดีต เพื่อใช้ในการวางแผนการเพาะปลูก
ประธานนักเรียนต้องการพยากรณ์จำนวนนักเรียนที่จะฝากเงินในธนาคารโรงเรียน เพื่อวางแผนการให้บริการที่เหมาะสม
การทำนายข้างต้น ทำได้โดยการนำข้อมูลในอดีต (สภาพอากาศ ปริมาณน้ำฝนในพื้นที่ หรือจำนวนนักเรียนที่ฝากถอนเงินในแต่ละวัน) มาวิเคราะห์หาความสัมพันธ์ระหว่างชุดข้อมูลและสร้างแบบจำลองในการทำนายที่ให้ผลลัพธ์เป็นตัวเลข โดยทั่วไปมีวิธีการทำนาย 2 วิธี คือ การทำนายโดยใช้กราฟ และการทำนายโดยใช้สมการเชิงเส้น
เมื่อข้อมูล 2 ชุด มีความสัมพันธ์เชิงเส้นต่อกัน นักเรียนสามารถทำนายชุดข้อมูลที่สนใจ เมื่อทราบค่าชุดข้อมูลอีกชุดหนึ่ง ที่สัมพันธ์กัน ดังตัวอย่างของสุนัขจิ้งจอกที่สร้างแผนภาพการกระจาย ซึ่งพบว่าจำนวยวันป่า และจำนวนม้าลาย มีความสัมพันธ์แบบเชิงเส้นต่อกัน ซึ่งหากต้องการจะประมาณค่าจำนวนม้าลาย เมื่อทราบจำนวนวัวป่า เราต้องลากเส้นตรงผ่านจุดต่าง ๆ ในแผนภาพการกระจายให้มากที่สุด เราเรียกเส้นตรงนี้ว่า "เส้นแนวโน้ม" และใช้เส้นแนวโน้มนี้ ในการประมาณค่าจำนวนม้าลาย
แผนภาพนี้ทำให้ทราบรูปแบบความสัมพันธ์ของข้อมูลคร่าว ๆ โดยค่าที่อยู่บนแกน y แทนจำนวนของสิ่งที่เราสนใจ เช่น จำนวนม้าลาย และค่าที่อยู่บนแกน x แทนข้อมูลที่ทราบค่าและคาดว่าจะมีความสัมพันธ์กับ y ในที่นี้คือ จำนวนวัวป่า
ไฟล์ข้อมูล วัวป่าและม้าลาย
เส้นแนวโน้มเป็นเส้นตรงที่ลากผ่านจุดต่าง ๆ ที่อยู่บนแผนภาพการกระจายให้ได้จำนวนมากที่สุด (line of best fit) โดยจำนวนจุดที่อยู่เหนือเส้น และใต้เส้นมีปริมาณใกล้เคียงกัน
เส้นแนวโน้มเป็นเส้นตรงที่ลากผ่านจุดต่าง ๆ ที่อยู่บนแผนภาพการกระจายให้ได้จำนวนมากที่สุด (line of best fit) โดยจำนวนจุดที่อยู่เหนือเส้น และใต้เส้นมีปริมาณใกล้เคียงกัน
ในที่นี้ให้ y เป็นค่าที่ต้องการทำนาย และ x เป็นข้อมูลที่ทราบค่า ที่มีความสัมพันธ์กับ y ในการทำนาย ให้กำหนดจุดที่ทราบค่าบนแกน x แล้วลากเส้นจากจุดนั้นขนานกับแกน y ไปตัดเส้นแนวโน้ม แล้วลากเส้นจากจุดตัดบนเส้นแนวโน้ม ขนานกับแกน x ไตัตัดที่แกน y จะได้ค่า y ซึ่งเป็นค่าที่ต้องการทำนาย
หากสิงโตต้องการทราบว่า ถ้ามีจำนวนวัวป่าประมาณ 85 พันตัว (85,000 ตัว) แล้วอยากทราบว่าจำนวนม้าลายว่ามีเท่าไร
1. ให้ลากเส้นตรงจากตำแหน่งที่ 85 บนแกน x ขนานกับแกน y ไปตัดเส้นแนวโน้ม
2. ลากเส้นจากจุดตัดบนเส้นแนวโน้ม ขนานกับแกน x ไปตัดที่แกน y
3. จะได้จำนวนม้าลายโดยประมาณ 110 พันตัว (110,000 ตัว)
เมื่อได้เส้นแนวโน้มแล้ว เราจะหาสมการเชิงเส้นของเส้นแนวโน้มในรูป y = mx + c
หาค่าความชัน (slope) ของสมการเชิงเส้น ในที่นี้คือ m
1). เลือกจุด 2 จุดบนเส้นตรง โดยใช้ชุดข้อมูลใน predator_dataset.csv สมมติ จุดที่ 1 (x1, y1) คือ (55.02, 85.11) และจุดที่ 2 (x2, y2) คือ (98.07, 121.76)
2). แทนค่า x และ y เพื่อหาความชัน
m = (y2 - y1) /(x2 - x1)
m = (121.76-85.11)/(98.07 - 55.02)
36.65 / 43.05 = 0.85
หาค่า c คือค่าจุดตัดแกน y (y-intercept) หาได้จาก
แทนค่า x และ y ซึ่งนักเรียนสามารถใช้ x1, y1 หรือ x2,y2 แทนค่า x, y ก็ได้ ซึ่งในที่นี้จะใช้ค่าของ x1, y1 ได้แก่ 55.02 และ 85.11 ตามลำดับ
จะได้ y =mx+c
85.11 =0.85(55.02) +c
85.11=46.77+ c
85.11-46.77 =c
c= 38.34
สมการเส้นตรงที่ได้ อธิบายว่า จำนวนม้าลาย (y) เท่ากับ 0.85 เท่าของจำนวนวัวป่า (x) บวกกับ 38.34 การประมาณจำนวนม้าลาย เมื่อทราบจำนวนวัวป่า 85 พันตัว แทนค่าจากสมการจะได้ว่า
y = 0.85(85) + 38.34 ดังนั้น y = 110.59 จะได้ว่าเมื่อมีวัวป่า 85 พันตัว จะมีจำนวนม้าลายจากการประมาณมีค่า 110 พันตัว เท่ากับ 110,000 ตัว
การตรวจสอบความคลาดเคลื่อนของสมการถดถอยเชิงเส้น
ก่อนการนำสมการเส้นแนวโน้มที่ได้ไปใช้ในการทำนาย จะต้องตรวจสอบความคลาดเคลื่อนของสมการเส้นแนวโน้มนี้ จากที่กล่าวมาแล้วว่า เส้นแนวโน้มควรเป็นเส้นที่ลากผ่านจุดต่าง ๆ ที่อยู่บนแผนภาพการกระจายได้จำนวนมากที่สุด ซึ่งจะทำให้นักเรียนสามารถจำลองการทำนายได้ใกล้เคียงกับชุดข้อมูลที่มีอยู่มากที่สุด
การตรวจสอบความคลาดเคลื่อน คำนวณได้จาก การหาผลรวมของผลจ่างยกกำลังสองของค่าจริงและค่าทำนาย (sum of squared errors) หรืออีกนัยหนึ่งคือ การเอาค่าจริงมาลบกับค่าที่ทำนายได้ของแต่ละจุด แล้วนำผลลัพธ์ที่ได้มายกกลังสอง จากนั้นจึงหาผลรวมของค่ายกกำลังสองเหล่านี้ ถ้าค่าที่คำนวณได้ยิ่งน้อย แสดงว่าเส้นแนวโน้มยิ่งสามารถทำนายได้ใกล้เคียงมาก
โดยมีขั้นตอนดังนี้
1. นำข้อมูล 2 ตัวแปร ทำ Scatter เพื่อหาสมการเส้นแนวโน้ม
2. เพิ่มคอลัมน์ทางขวา แทนสมการถดถอยเชิงเส้นที่ได้ y=mx+c จะได้ค่าการทำนาย หรือเรียกว่า Yhat
3. เพิ่มคอลัมน์ทางขวา ใช้สูตรการหา Squared Error =(y - Yhat)^2 แทนสูตรด้วย =power(y-Yhat,2)
4. รวมผลบวกของ Squared Error ซึ่งจะได้ sum of squared errors
# Google Colap โดยใช้ไฟล์ predator_dataset.csv
from scipy import stats
import pandas as pd
data=pd.read_csv('predator_dataset.csv')
slope, intercept, _, _, _=stats.linregress(data['Wildebeest'],data['Zebra'])
print('SLOPE : ',slope)
print('INTERCEPT : ',intercept)
เมื่อรันโปรแกรมจะได้ดังนี้
SLOPE : 0.8958381304027634
INTERCEPT : 34.73270791179347
กิจกรรมที่ 3.2 การวิเคราะห์เชิงทำนาย(เชิงตัวเลข)
เมื่อนักเรียนศึกษาจบเนื้อหาในหัวข้อที่ 3.2 การวิเคราะห์เชิงทำนาย(เชิงตัวเลข) ให้ตอบคำถาม
1. จากไฟล์ข้อมูลวัวป่าและม้าลาย ถ้ากำหนดให้ x1=51.41, y1=83.16, x2=80, y2=105 อยากทราบว่าค่าความชัน (m) จะเป็นเท่าใด
ก. 0.76
🌟 ข. 0.77
ค. 0.78
ง. 0.79
2. จากไฟล์ข้อมูลวัวป่าและม้าลาย ถ้ากำหนดให้ x1=51.41, y1=83.16 เมื่อได้ค่าความชันตามข้อที่ 1 แล้ว ค่าจุดตัดแกน y (y-intercept) จะเป็นเท่าใด
ก. 41.08
🌟 ข. 43.79
ค. 43.89
ง. 44.09
3. จากข้อที่ 1 และ 2 จะได้สมการถดถอยเชิงเส้น (y=mx+c) ใด
ตอบ y = (0.77)(x)+43.79
4. จากไฟล์ข้อมูลวัวป่าและม้าลาย ถ้ากำหนดให้ x1=55.02, y1=85.11, x2=106.58, y2=135.77 อยากทราบว่าค่าความชันจะเป็นเท่าใด
ก. 0.96
🌟ข. 0.97
ค. 0.98
ง. 0.99
5. จากไฟล์ข้อมูลวัวป่าและม้าลาย ถ้ากำหนดให้ x1=55.02, y1=85.11 เมื่อได้ค่าความชันตามข้อที่ 4 แล้ว ค่าจุดตัดแกน y (y-intercept) จะเป็นเท่าใด
ก. 31.18
ข. 31.19
🌟 ค. 31.20
ง. 31.21
6. จากข้อที่ 4 และ 5 จะได้สมการถดถอยเชิงเส้น (y=mx+c) ใด
ตอบ y = (0.97)(x)+31.20
7. จากสมการถดถอยเชิงเส้นตามข้อที่ 6 ถ้ากำหนดให้ x = 85 จะได้ค่า y เท่ากับข้อใด
ก. 113.65
🌟ข. 114.49
ค. 143.58
ง. 114.59
8. จากไฟล์ข้อมูลวัวป่าและม้าลาย ถ้ากำหนดให้ x1=95.47, y1=130.08, x2=97.88, y2=132.4 อยากทราบว่าค่าความชัน(m) จะเป็นเท่าใด
ก. 0.96
ข. 0.97
🌟 ค. 0.98
ง. 0.99
9. จากไฟล์ข้อมูลวัวป่าและม้าลาย ถ้ากำหนดให้ x1=95.47, y1=130.08 เมื่อได้ค่าความชันตามข้อที่ 8 แล้ว ค่าจุดตัดแกน y (y-intercept) จะเป็นเท่าใด
🌟 ก. 38.42
ข. 38.43
ค. 39.42
ง. 39.43
10. จากข้อที่ 8 และ 9 จะได้สมการถดถอยเชิงเส้น (y=mx+c) ใด
ตอบ y = (0.98)(x)+38.42