การนำเปอร์เซ็นไทล์ (Percentile) มาวิเคราะห์ข้อมูลใน Machine Learning ด้วย Python
การหาเปอร์เซ็นไทล์ (Percentile) จะช่วยให้เราสามารถทำความเข้าใจและวิเคราะห์ข้อมูลได้ง่ายขึ้น โดยเปอร์เซ็นไทล์จะใช้กันอย่างแพร่หลายในการวิเคราะห์ข้อมูลในหลายๆ ด้าน เช่น ด้านการเงิน การตลาด และการแพทย์ เปอร์เซ็นไทล์จะแสดงให้เห็นถึงค่าของข้อมูลที่อยู่ในช่วงเท่าไรของข้อมูลทั้งหมด โดยเปอร์เซ็นไทล์สามารถหาได้ตั้งแต่เปอร์เซ็นไทล์ที่ 1 จนถึง 100 ซึ่งแต่ละเปอร์เซ็นไทล์จะแสดงค่าต่างๆ ของข้อมูลในช่วงนั้นๆ ที่หาได้จากการเรียงลำดับข้อมูลจากน้อยไปหามาก
เปอร์เซ็นไทล์ (Percentile) คือ ค่าที่แยกข้อมูลออกเป็นส่วนเท่า ๆ กันตามจำนวนที่กำหนด เช่น percentile 50 (หรือ median) คือค่าที่แบ่งข้อมูลออกเป็นสองส่วนเท่ากัน 50% อยู่ด้านซ้ายของ median และ 50% อยู่ด้านขวาของ median
เปอร์เซ็นไทล์ (Percentile) ยังใช้ในการปรับแต่งและวิเคราะห์โมเดล Machine Learning ได้อีกด้วย ตัวอย่างเช่น ในการตัดสินใจว่าใช้โมเดล Machine Learning ไหนที่จะใช้ในการทำนายการเกิดโรคหัวใจ โดยมีชุดข้อมูลทดสอบของผู้ป่วย 100 คน แต่ละคนมีฟีเจอร์หลายตัวเช่น อายุ น้ำหนัก ส่วนสูง ระดับความดันโลหิต คอเลสเตอรอล เป็นต้น และเราต้องการเลือกโมเดลที่ดีที่สุดจากโมเดลต่างๆ ที่พัฒนาขึ้นมา เราสามารถใช้เปอร์เซ็นไทล์เพื่อวิเคราะห์ความแม่นยำของแต่ละโมเดลได้ โดยเราสามารถคำนวณเปอร์เซ็นไทล์ของค่าความถูกต้องของแต่ละโมเดล แล้วเลือกโมเดลที่มีค่าเปอร์เซ็นไทล์สูงสุดเป็นโมเดลที่จะนำไปใช้งานจริง นอกจากนั้นเปอร์เซ็นไทล์ (Percentile)ใช้วิเคราะห์การกระจายของข้อมูลขนาดใหญ่ที่มีการแจกแจงต่อเนื่อง โดยเราสามารถนำเปอร์เซ็นไทล์มาคำนวณหาค่ากระจายและค่ากลางของข้อมูลได้ ซึ่งจะช่วยในการวิเคราะห์และปรับปรุงโมเดล Machine Learning อีกด้วย
ใน Machine Learning เราสามารถนำเปอร์เซ็นไทล์มาใช้ในการวิเคราะห์ข้อมูลได้หลายรูปแบบ เช่น การค้นหา outliers (ข้อมูลที่เป็นปัจจัยผิดปกติ) ในข้อมูล การหาค่า threshold สำหรับการแบ่งกลุ่มข้อมูล เป็นต้น
เปอร์เซ็นไทล์ (Percentile) เป็นเครื่องมือทางสถิติที่ใช้ในการวิเคราะห์ข้อมูลใน Machine Learning โดยมีประโยชน์ดังนี้
-
ช่วยในการตรวจสอบความแปรปรวนของข้อมูล: เปอร์เซ็นไทล์สามารถช่วยในการวิเคราะห์ความแปรปรวนของข้อมูล โดยการหาเปอร์เซ็นไทล์ที่ต่างๆ ให้ข้อมูลเปรียบเทียบกันได้ สามารถใช้ค่าเปอร์เซ็นไทล์เพื่อหาค่าสูงสุดและต่ำสุดของข้อมูลและดูว่าข้อมูลกระจายตัวอย่างไร
-
ช่วยในการตัดสินใจเลือก Feature ที่สำคัญ: เมื่อมีข้อมูลจำนวนมากและต้องการเลือก Feature ที่สำคัญ สามารถใช้เปอร์เซ็นไทล์เพื่อหาข้อมูลที่มีความสำคัญสูงสุดเพื่อนำไปสร้างโมเดล
-
ช่วยในการตรวจสอบความสอดคล้องของโมเดล: ใช้เปอร์เซ็นไทล์เพื่อตรวจสอบว่าโมเดลทำงานได้ดีหรือไม่ โดยเปรียบเทียบค่าเปอร์เซ็นไทล์ที่คำนวณจากโมเดลกับค่าเปอร์เซ็นไทล์จากข้อมูลจริง ถ้าค่าเปอร์เซ็นไทล์ของโมเดลสูงเท่ากับค่าเปอร์เซ็นไทล์จากข้อมูลจริง แสดงว่าโมเดลสามารถทำนายข้อมูลได้ดี
-
ช่วยในการจัดกลุ่มข้อมูล: เปอร์เซ็นไทล์สามารถช่วยในการจัดกลุ่มข้อมูลได้โดยให้มุมมองที่สมบูรณ์ของการกระจายของข้อมูล
-
ช่วยในการวิเคราะห์และการตัดสินใจ: เปอร์เซ็นไทล์สามารถช่วยในการวิเคราะห์และการตัดสินใจได้โดยการแบ่งกลุ่มข้อมูลตามเปอร์เซ็นไทล์ที่กำหนดเอาไว้
-
ช่วยในการแก้ไขข้อมูลที่ผิดปกติ: เปอร์เซ็นไทล์สามารถช่วยในการตรวจสอบข้อมูลที่ผิดปกติโดยการค้นหาค่าที่ต่ำกว่าหรือสูงกว่าเปอร์เซ็นไทล์ที่กำหนดไว้
-
ช่วยในการแก้ไขข้อมูลขาดหาย: เปอร์เซ็นไทล์สามารถช่วยในการประมาณค่าข้อมูลที่หายไปโดยการใช้ค่าเฉลี่ยของเปอร์เซ็นไทล์ที่กำหนดไว้
-
ช่วยในการสร้างโมเดล: เปอร์เซ็นไทล์สามารถช่วยในการสร้างโมเดล Machine Learning โดยใช้ข้อมูลที่ถูกต้องและมีความแม่นยำสูง
ตัวอย่าง การใช้งานเปอร์เซ็นไทล์สำหรับคำนวณค่าเงินเดือนเฉลี่ยของลูกจ้างในบริษัท
import numpy as np
# สุ่มข้อมูลเงินเดือนของลูกจ้างในบริษัท
salary_data = np.random.normal(50000, 15000, 1000)
# คำนวณเปอร์เซ็นไทล์ของเงินเดือนที่ต่ำกว่า 25,000 บาท
pct_25 = np.percentile(salary_data, 25)
# คำนวณเปอร์เซ็นไทล์ของเงินเดือนที่ต่ำกว่า 50,000 บาท
pct_50 = np.percentile(salary_data, 50)
# คำนวณเปอร์เซ็นไทล์ของเงินเดือนที่ต่ำกว่า 75,000 บาท
pct_75 = np.percentile(salary_data, 75)
# พิมพ์ผลลัพธ์
print('25th percentile: ', pct_25)
print('50th percentile: ', pct_50)
print('75th percentile: ', pct_75)
ผลลัพธ์ที่ได้ คือ
25th percentile: 39917.00534753004
50th percentile: 49923.58776447357
75th percentile: 59934.45095471995
จากผลลัพธ์ดังกล่าว เราสามารถสรุปได้ว่า
- 25% ของลูกจ้างมีเงินเดือนต่ำกว่า 39,917 บาท
- 50% ของลูกจ้างมีเงินเดือนต่ำกว่า 49,924 บาท
- 75% ของลูกจ้างมีเงินเดือนต่ำกว่า 59,934 บาท
ตัวอย่าง
import numpy as np
# สุ่มข้อมูลจำนวนเต็ม 100 ตัวเพื่อใช้ในการตัดสินใจสำหรับตัวอย่างนี้
data = np.random.randint(0, 101, 100)
# หาเปอร์เซ็นไทล์ของข้อมูลที่ตำแหน่งที่ 25, 50, 75
p25 = np.percentile(data, 25)
p50 = np.percentile(data, 50)
p75 = np.percentile(data, 75)
print("25th percentile:", p25)
print("50th percentile:", p50)
print("75th percentile:", p75)
# คำนวณค่าความแปรปรวน (variance) และส่วนเบี่ยงเบนมาตรฐาน (standard deviation) ของข้อมูล
variance = np.var(data)
std_deviation = np.std(data)
print("Variance:", variance)
print("Standard Deviation:", std_deviation)
ผลลัพธ์ที่ได้ คือ
25th percentile: 26.0
50th percentile: 48.5
75th percentile: 72.25
Variance: 780.3079000000001
Standard Deviation: 27.93193353046313
จากตัวอย่าง เราสุ่มข้อมูลจำนวนเต็ม 100 ตัวจากช่วง 0-100 แล้วหาเปอร์เซ็นไทล์ของข้อมูลที่ตำแหน่งที่ 25, 50, 75 โดยใช้ฟังก์ชัน np.percentile()
จากนั้นแสดงผลลัพธ์ออกมาทางหน้าจอด้วยคำสั่ง print()
นอกจากนี้ยังคำนวณค่าความแปรปรวนและส่วนเบี่ยงเบนมาตรฐานของข้อมูลด้วยฟังก์ชัน np.var()
และ np.std()
ตามลำดับ และแสดงผลลัพธ์ออกมาด้วยคำสั่ง print()
อีกครั้ง
ตัวอย่าง การวิเคราะห์ข้อมูลสัตว์ จะใช้ชุดข้อมูลเกี่ยวกับน้ำหนักและความสูงของสัตว์ในสวนสัตว์
import numpy as np
# น้ำหนัก (kg)
weights = np.array([120, 70, 80, 60, 100, 85, 90, 75, 110, 95, 130, 105, 115, 75, 65, 70, 85, 95, 120, 110])
# ความสูง (cm)
heights = np.array([180, 165, 170, 155, 175, 170, 172, 163, 177, 175, 185, 180, 182, 167, 160, 165, 170, 173, 180, 175])
# หา percentile ที่ 25, 50, 75
percentiles = [25, 50, 75]
w_perc = np.percentile(weights, percentiles)
h_perc = np.percentile(heights, percentiles)
# แสดงผลลัพธ์
print("Weight percentiles:", w_perc)
print("Height percentiles:", h_perc)
ผลลัพธ์ที่ได้ คือ
Weight percentiles: [ 70. 85. 115.5]
Height percentiles: [163.5 170. 178.5]
จากตัวอย่าง ค่า percentile ที่ 25% ของน้ำหนักสัตว์ทั้งหมดอยู่ที่ 70 kg และ 75% ของน้ำหนักอยู่ที่ 115.5 kg โดยค่า percentile ที่ 50% หรือ median ของน้ำหนักอยู่ที่ 85 kg สำหรับความสูง ค่า percentile ที่ 25% ของความสูงอยู่ที่ 163.5 cm และ 75% ของความสูงอยู่ที่ 178.5 cm โดย median หรือ percentile ที่ 50% ของความสูงอยู่ที่ 170 cm