สาระสำคัญ การคาดการณ์หรือการรู้อนาคตเป็นสิ่งที่คนส่วนใหญ่ให้ความสำคัญ เพื่อนำมาประกอบการตัดสินใจให้สามารถเลือกสิ่งที่ดีที่สุดสำหรับตัวเองหรือองค์กรได้ ในเชิงธุรกิจผู้ประกอบการอาจมีความต้องการที่จะรู้ว่าการลงทุนกับสินค้าชนิดใดแล้วจะได้กำไรเท่าไร เพื่อให้เลือกลงทุนได้อย่างเหมาะสม สำหรับบุคคลทั่วไป อาจมีความต้องการที่จะคาดการณ์สิ่งที่จะเกิดขึ้นในชีวิตประจำวัน เช่น ก่อนออกจากบ้านอาจต้องการที่จะคาดการณ์ว่าฝนจะตกหรือไม่ จะได้นำร่มติดตัวไปด้วย
3.2 การวิเคราะห์เชิงทำนาย
การวิเคราะห์เชิงทำนายเป็นการวิเคราะห์ข้อมูลในอดีตเพื่อหารูปแบบความสัมพันธ์ในชุดข้อมูลที่สามารถนำมาเป็นต้นแบบในการทำนาย การคาดการณ์ผลหรือสิ่งที่น่าจะเกิดขึ้นในอนาคตซึ่งจะช่วยให้บุคคลหรือองค์กรสามารถตัดสินใจได้อย่างมีประสิทธิภาพ การคาดการณ์ว่าฝนจะตกหรือไม่ทำให้เราตัดสินใจได้ว่าควรจะนำร่มไปหรือไม่ การคาดการณ์นี้อาจทำโดยการเทียบจากประสบการณ์ของเรา หรือจากการสังเกตที่อาจจะสรุปได้ว่า ถ้าฟ้าครึ้มลมแรงแล้วฝนจะตก ถ้าเราคาดการณ์ว่าฝนจะตกและนำร่มไปด้วย แล้วเกิดฝนตกเราจะไม่เปียกฝน แสดงว่าการตัดสินใจมีประสิทธิภาพ
จากที่กล่าวมา นักเรียนคงพอจะเห็นประโยชน์ที่ได้จากการวิเคราะห์เชิงทำนายบ้างแล้ว ซึ่งในหัวข้อนี้จะนำเสนอวิธีการวิเคราะห์เชิงทำนายสองแบบ คือ การทำนายเชิงตัวเลข (numeric prediction) เช่น ทำนายจำนวนนาทีที่ใช้ในการรอแถวจ่ายเงิน และการทำนายเชิงหมวดหมู่ (classification) ตามคุณลักษณะร่วมที่สนใจ เช่น การทำนายสภาพอากาศว่าฝนจะตกหรือท้องฟ้าแจ่มใส
ถ้านักเรียนจะไปเที่ยวต่างประเทศ นักเรียนควรตรวจสอบอุณหภูมิของประเทศที่จะไปในช่วงเวลาเดียวกันในอดีตเพื่อคาดการณ์อุณหภูมิ จะได้จัดเตรียมเสื้อผ้าได้ถูกต้อง
เกษตรกรต้องคาดการณ์ปริมาณน้ำฝนล่วงหน้า โดยใช้ข้อมูลปริมาณน้ำฝนในอดีต เพื่อใช้ในการวางแผนการเพาะปลูก
ประธานนักเรียนต้องการพยากรณ์จำนวนนักเรียนที่จะฝากเงินในธนาคารโรงเรียน เพื่อวางแผนการให้บริการที่เหมาะสม
การทำนายข้างต้น ทำได้โดยการนำข้อมูลในอดีต (สภาพอากาศ ปริมาณน้ำฝนในพื้นที่ หรือจำนวนนักเรียนที่ฝากถอนเงินในแต่ละวัน) มาวิเคราะห์หาความสัมพันธ์ระหว่างชุดข้อมูลและสร้างแบบจำลองในการทำนายที่ให้ผลลัพธ์เป็นตัวเลข โดยทั่วไปมีวิธีการทำนาย 2 วิธี คือ การทำนายโดยใช้กราฟ และการทำนายโดยใช้สมการเชิงเส้น
เมื่อข้อมูล 2 ชุด มีความสัมพันธ์เชิงเส้นต่อกัน นักเรียนสามารถทำนายชุดข้อมูลที่สนใจ เมื่อทราบค่าชุดข้อมูลอีกชุดหนึ่งที่สัมพันธ์กัน ดังตัวอย่างของสุนัขจิ้งจอกที่สร้างแผนภาพการกระจาย ซึ่งพบว่าจำนวยวันป่าและจำนวนม้าลายมีความสัมพันธ์แบบเชิงเส้นต่อกัน ซึ่งหากต้องการจะประมาณค่าจำนวนม้าลาย เมื่อทราบจำนวนวัวป่าเราต้องลากเส้นตรงผ่านจุดต่าง ๆ ในแผนภาพการกระจายให้มากที่สุดเราเรียกเส้นตรงนี้ว่า "เส้นแนวโน้ม" และใช้เส้นแนวโน้มนี้ในการประมาณค่าจำนวนม้าลาย
หากสิงโตต้องการทราบว่า ถ้ามีจำนวนวัวป่าประมาณ 85 พันตัว (85,000 ตัว) แล้วอยากทราบว่าจำนวนม้าลายว่ามีเท่าไร
1. ให้ลากเส้นตรงจากตำแหน่งที่ 85 บนแกน x ขนานกับแกน y ไปตัดเส้นแนวโน้ม
2. ลากเส้นจากจุดตัดบนเส้นแนวโน้ม ขนานกับแกน x ไปตัดที่แกน y
3. จะได้จำนวนม้าลายโดยประมาณ 110 พันตัว (110,000 ตัว)
เมื่อได้เส้นแนวโน้มแล้ว เราจะหาสมการเชิงเส้นของเส้นแนวโน้มในรูป y = mx + c
ขั้นตอนที่ 1
หาค่าความชัน (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
ขั้นตอนที่ 2
หาค่า 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 ตัว
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
กิจกรรมที่ 3.3 การหาสมการเส้นแนวโน้มโดยใช้ภาษาไพทอนสำหรับชุดช้อมูล โดยใช้ไฟล์ 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.8390868836262829
INTERCEPT : 38.50417610731145