การทำนายรายได้ต่อปี ของวัยทำงานในประเทศสหรัฐอเมริกา ด้วยเทคนิค 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: โครงสร้างของข้อมูล

จากรูปที่ 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

--

--

รศ. ดร. เชฏฐเนติ ศรีสอ้าน
รศ. ดร. เชฏฐเนติ ศรีสอ้าน

Written by รศ. ดร. เชฏฐเนติ ศรีสอ้าน

รองอธิการบดีฝ่ายเทคโนโลยี มหาวิทยาลัยรังสิต

No responses yet