การทำนายรายได้ต่อปี ของวัยทำงานในประเทศสหรัฐอเมริกา ด้วยเทคนิค Gaussian Naive Bayes
ในประเทศสหรัฐอเมริกา ทำการสำรวจรายได้ต่อปี ของวัยทำงาน ทั่วประเทศ เพื่อ หารายได้เฉลี่ยขั้นต่ำ ซึ่งในโครงการนี้ ต้องการหาคนที่มีรายได้อย่างน้อย 50,000 เหรียญ ต่อปี ซึ่งสามารถ หา download ได้จากhttp://archive.ics.uci.edu/ml/datasets/Census+Income
โดยพยายามจะจำแนกจาก
1. อายุ (age)
2. ประเภทที่ทำงาน (workclass) เช่น Private, Self-emp-inc, Federal-gov, State-gov, Never-worked.
3. การศึกษา (education)
4. สถานะสมรส (marital-status)
5. อาชีพ (occupation)
6. สถานะในครอบครัว (relationship) เช่น Wife, Husband, Not-in-family, Other-relative, Unmarried.
7. เชื้อชาติ (race)
8. เพศ (sex)
9. capital-gain:
10. capital-loss:
11. hours-per-week:
12. ประเทศต้นกำเนิด (native-country)
สิ่งที่ต้องการทำนาย
· 1 หมายถึง รายได้ต่อปี >50K,
· 0 หมายถึง รายได้ต่อปี <=50K.
Naive Bayes Classification เป็นการจัดหมวดหมู่โดยใช้หลักความน่าจะเป็นเข้ามาช่วยคำนวณ
ด้วยเหตุที่ต้องคำนวณ จำนวนมากมาย ทำให้วิธีนี้จึงไม่ค่อยจะใช้ การคำนวณด้วยมือ หรือ พูดง่ายๆ ใช้เครื่องมือเช่น excel ดีกว่า
วันนี้ ขอนำเสนอ โมเดลเพื่อทำนาย เงินเดือนของคนที่ ได้เกิน 50,000 ดอลลาร์ ต่อ ปี ด้วย Naive Bays algorithm ที่จัดแข่งขันโดย Kaggle ข้อมูลของ UCIML (https://www.kaggle.com/uciml/adult-census-income)
ขั้นตอนที่ 1: สำรวจ ประเภทของข้อมูล เพื่อเลือก Algorithms
จากรูปที่ 1 จะเห็นได้ว่า ข้อมูล ไม่พร้อมสำหรับการทำ Data Science เพราะ ไม่ใช่ตัวเลข ดูได้จาก ประเภท Object ซึ่ง จำเป็นต้องทำ Feature Engineering ก่อน ในกรณีนี้ เนื่องจาก มีถึง 9 ใน 14 คอลัมน์ ทำให้ เราเลือก LabelEncoder โดยใช้ sklearn จากชุดคำสั่ง from sklearn.preprocessing import LabelEncoder ในบรรทัดที่ 2
ขั้นตอนที่ 2: จากฟังก์ชั่น ชื่อ cleandata การแปลง ข้อมูลที่ไม่ใช่ตัวเลข ให้เป็นตัวเลข โดยใช้ LabelEncoder function
ขั้นตอนที่ 3: ทำการแบ่ง ชุดข้อมูล เป็น train และ test ขนาด 70:30 แล้วทำการเทรนข้อมูล ด้วย fit function
ขั้นตอนที่ 4: เนื่องด้วย มีการแบ่ง ข้อมูล แบบ random ทำให้ ข้อมูลไม่ได้เรียง เหมือนเดิม แต่จากการเทรน คำทำนาย กำหนดให้ 0= เงินเดือนน้อยกว่าหรือเท่ากับ 50,000 ดอลลาร์ จะเป็นได้ว่า มีที่ทำนายผิดบ้าง
สาเหตุที่ต้อง ทำการแยกออกมาเปรียบเทียบ โดยเลือก 61 แถวสุดท้ายออกมาเพื่อ เปรียบเทียบ เพื่อให้เห็นภาพจริง
โดยเลือก 61 แถววุดท้าย และต้องเทรดใหม่ เพื่อให้ ค่าจริงกับ ค่าทำนายตรงกัน
หมายเหตุ สังเกต [dataset[32500:].reset_index() เราต้อง reidex เพื่อให้ index ตรงกัน ไม่เช่นนั้น จะ concat ไม่ได้ เราเลือกแบบ equi join
การเชื่อมสองตาราง ด้วย equi join โดยมี index เหมือนกัน
สามารถ download source code ได้ที่
https://drive.google.com/file/d/1FOliT_QP0YL8mlbpusp7Fnwf0ohdeemp/view?usp=sharing