มหากาพย์โมเดลประเมินเงินเดือนอาชีพสาย IT ในประเทศไทย

tunacoin
7 min readJun 21, 2022

สวัสดีครับ ผมเติร์ด(3rd)ผู้เข้าร่วมโครงการ AI Builders รุ่นที่ 2 กลุ่ม Lucky Doves

สำหรับคนที่ไม่รู้จักนะครับ โครงการ AI Builders เป็นโครงการที่ให้โอกาสนักเรียนตั้งแต่ประถมจนถึงม.ปลายมาเข้ามาเรียนรู้การสร้าง AI/Machine Learning ตั้งแต่พื้นฐาน(ที่ยากซักหน่อย) จนถึงการนำไปใช้จริง โดนมีพี่ๆ Mentor ผู้เชี่ยวชาญจนไปถึงดร.ที่ทำงานด้าน Data Science และ Machine Learning เข้ามาให้ความรู้และช่วยเราทำโปรเจค

ซึ่งใน Blog นี้ผมก็จะมาเล่าเรื่องราวของผมกับโปรเจคที่ทำในโครงการนี้กันครับ

ทำไมต้องประเมินเงินเดือนอาชีพสาย IT?

ในปัจจุบันที่ผมเคยเห็นมานะครับ จะมีโปรแกรมเมอร์หรือคนทำงานสายนี้ที่จบใหม่แล้วถูกกดเงินเดือนค่อนข้างมาก หรือคนที่ทำงานไปแล้วตั้งคำถามกับตัวเองว่างานที่ทำอยู่ค่าตอบแทนเหมาะสมรึเปล่า ซึ่งเป็นคำถามทั่วไปที่ตอบได้ยาก เพราะเราไม่รู้ว่าเงินเดือนของคนอื่นๆที่มีทักษะ ประสบการณ์ หรือตำแหน่งงานแบบเดียวกับเรา ได้ค่าตอบแทนเท่าไรหรือควรจะได้เท่าไร ถ้าไม่มีแหล่งข้อมูลที่มากพอหรือเวลาที่ใช้ในการหาข้อมูลเหล่านั้น ก็ไม่สามารถตอบได้อย่างมั่นใจเท่าไร ทำให้ผมนึกถึง Machine Learning ที่สามารถจะหา Pattern ของข้อมูลใดๆ ออกมาแล้วสร้างเป็นโมเดลเพื่อหาคำตอบนี้ให้เราได้นั่นเอง

ทีนี้ก็เริ่มวางแผน

ทำการใหญ่ต้องมีแผนเสมอ แผนการรวมๆของผมก็ประมาณนี้ครับ

  1. ทำ Literature Review (ศึกษาโปรเจคหรือบทความวิจัยที่ทำมาก่อนหน้าเรา เพื่อนำความรู้มาต่อยอดไม่ต้องศึกษาใหม่ทั้งหมด)
  2. เก็บข้อมูล
  3. สร้างโมเดล
  4. ทดสอบประสิทธิภาพ
  5. แพ็คโมเดลลงกระเป๋าแล้วส่งมันไปทำงานใน Web App แล้วเปิดให้คนอื่นได้ใช้

เริ่มทำ Literature Review

ตอนเริ่มหางานวิจัยที่ทำคล้ายๆกันครั้งแรกก็ไปเจอกับ Dataset ของ EU ที่ทำคล้ายๆกัน แต่เป็นข้อมูลของยุโรป

IT Salary Survey for EU region(2018–2020) | Kaggle

จากนั้นพี่ TA ในกลุ่มก็ส่งงานวิจัยนึงที่น่าสนใจมากๆ

Thailand IT Salary Rates (punikaamorn.github.io)

จากการเข้าไปศึกษา Github ของผู้พัฒนาโปรเจคนี้ก็พบว่าโมเดลนี้เป็นโมเดล Multiple Linear Regression เทรนด้วย Dataset จากการทำแบบสอบถามของสมาคมโปรแกรมเมอร์ไทย 1,704 records

แต่ Dataset ตัวนี้มี Features เพียง 7 Features และยังขาด Features สำคัญอีกมากทำให้ผมเลือกที่จะหา Data ใหม่ เช่น จังหวัดที่ทำงาน ขนาดขององค์กร ประเภทการจ้างงาน(Full-time/Part-time) เป็นต้น

แต่แล้วผมก็เจอกับ Tutorial ตัวนึงจาก Platform แห่งการเรียนรู้ YouTube

ในคลิปจะมีสอนตั้งแต่การ Import Library การทำ Data Cleaning จนไปถึงการ Deploy เป็น Web Application แต่สิ่งที่น่าสนใจที่สุดคือ Dataset ที่เค้าใช้เป็น Dataset ของโปรแกรมเมอร์ทั่วโลกที่มีข้อมูลมากถึง 80,000 Records จากการทำแบบสอบถามโดย Platform ยอดนิยมที่ไม่มีโปรแกรมเมอร์คนไหนไม่รู้จัก ใช่ครับผมหมายถึง

Stack Overflow Developer Survey 2021

นอกจากจำนวน Data ที่มากมาย ก็ยังมี Features หลายหลายให้เลือกสรรถึง 66 Feature ซึ่งทำให้ผมตัดสินใจใช้ Dataset นี้จะนำมาเทรนได้ในที่สุด

แต่หัวข้อของเราคือการประเมินในประเทศไทย ซึ่งมีข้อมูลใน Dataset นี้เพียง 40 Records เท่านั้น ทำให้ผมเลือกที่จะใช้เทคนิค Transfer Learning คือการนำโมเดลที่เทรนกับ Dataset ที่ใหญ่ๆ Performance ดีๆ มาปรับจูนให้เข้ากับ Dataset ใหม่ที่มีขนาดเล็กแต่มีลักษณะและ Features เหมือนกัน

ซึ่งเป้าหมายของโมเดลเราคือ การประเมินในประเทศเดียวกันไม่ใช่จากหลายประเทศ ทำให้ผมต้องเลือกใช้ Data ที่มาจากประเทศเดียวกัน ซึ่งผมเลือกข้อมูลของชาว USA ที่มีจำนวนมากที่สุด 11,000 Records จาก 80,000 Records แล้วใช้ Dataset ใหม่ที่ผมจะไปเก็บมาจากการทำแบบสอบถามรอบใหม่

และเมื่อเราเลือก Dataset ได้แล้ว เราก็มาเริ่มทดสอบ Performance ของโมเดลกับ Dataset นี้กันเลย

ทดลองโมเดลก่อนลงเก็บ Dataset

ในเมื่อผมไม่รู้ว่าจะใช้โมเดลอะไรดี ผมเลยเริ่มกว้างๆก่อนโดยใช้ AutoML ที่จะนำ Dataset ของเราไปเทรนกับโมเดลต่างๆแล้วนำมาสรุปผลให้เรา ซึ่งตัวที่ผมใช้ก็จะเป็นตัวที่มีสอนในค่ายนั่นก็คือ AutoGluon

ระหว่างผมใช้ AutoGluon กับ Dataset ที่มี ผมก็ทำ Feature Engineering ไปด้วยเพื่อหา Features สำคัญที่จะใช้ในงานจริง แล้วผมก็ได้เลือก Features ตาม Features Importance ออกมาดังนี้

  • ช่วงอายุ (Age) ประเภท Numeric
  • วุฒิการศึกษาสุดท้าย (EdLevel) ประเภท Category
  • จังหวัด/รัฐที่ทำงานอยู่ (WorkPlace) ประเภท Category
  • ประสบการณ์การทำงานในองค์กร (YearsCodePro) ประเภท Numeric
  • ประสบการณ์การเขียนโปรแกรม/ฝึกฝนทั้งหมด (YearsCode) ประเภท Numeric
  • ขนาดองค์กรนับตามจำนวนพนักงาน (OrgSize) ประเภท Category
  • ประเภทการจ้างงาน Full-time/Part-time (Employment) ประเภท Category
  • ตำแหน่งงานที่ทำ (DevType) ประเภท Multi-Category หลายตัวเลือก
  • ประสบการณ์ Programming Language (LanguageHaveWorkedWith) ประเภท Multi-Category

และตัวแปรตาม (Y) ของเรา

  • รายได้ต่อเดือน (Salary)

แต่โมเดลของเราจะมี Performance ตกลงเมื่อประเมินพนักงานที่เงินเดือนมากกว่า 100,000 บาทขึ้นไป เนื่องจากปริมาณข้อมูลของพนักงงานที่เงินเดือนมากกว่า 100,000 เทียบกับคนที่น้อยกว่าแล้วมีปริมาณน้อยกว่าถึง 10 เท่า

1 : 10,000 บาท

ผมเลยใช้เทคนิค Oversampling เพื่อเพิ่มจำนวน Data ที่ยังขาดไปให้มีจำนวนมากขึ้น ให้โมเดลประเมินให้ดีขึ้น

ซึ่งเทคนิค Oversampling คือ การเพิ่มจำนวน Data จากที่มีอยู่ โดยการ Duplicate Data ที่ต้องการออกมาเพิ่ม หรือสร้าง Data ใหม่ที่มีความคล้ายคลึงกับ Data ที่มีอยู่เพื่อลดความ Unbalanced ของ Dataset

1 : 10,000 บาท

ซึ่งทำให้โมเดลมี Performance ดีขึ้นอย่างมาก (จริงๆแล้วมีบางอย่างผิดปกติกับขั้นตอนนี้ อ่านต่อเพื่อติดตามว่าเกิดอะไรขึ้น ( ͡° ͜ʖ ͡°)

ทำให้เราพร้อมแล้วสำหรับการเก็บ Data ที่จะนำมาทำ Transfer Learning

เก็บ Dataset ที่จะใช้จริง

เมื่อเราได้โมเดลพื้นฐานมาแล้วเราก็มาเก็บ Data ที่จะเอามา Transfer กันเลย

ในเมื่อ Data ของเราเป็นแบบ Tabular Data ทำให้หนึ่งในการเก็บที่สะดวกและรวดเร็วที่สุดก็คือการทำแบบสอบถามผ่าน Google Form

แล้วเราก็เอาไปให้โปรแกรมเมอร์ชาวไทยทำ แต่เราจะไปหาที่ที่โปรแกรมเมอร์ไทยอยู่กันเยอะๆและใจดีพอที่จะช่วยเราที่ไหนล่ะ ใช่แล้ว ที่นี่ยังไงล่ะ

ซึ่งผลตอบรับก็ออกมาค่อนข้างดีเลยครับ

ได้ Data มา 300–400 records ซึ่งเมื่อเทียบกับ Dataset ก่อนหน้าอาจจะไม่เยอะมากแต่สามารถหามาได้ในระยะเวลาสั้นๆ และเราไม่จำเป็นต้องใช้ Data เยอะเพราะยังไงเราก็จะทำ Transfer Learning อยู่แล้ว

เพราะงั้นเราก็มาทำ Transfer Learning กันเลย

เอ่อ…. มีบางอย่างผิดปกติ

โมเดลที่เกิดจากการ Transfer Learning ไม่ได้ให้ Performance เท่าที่ควร เมื่อเทียบกับ Dataset จาก USA ทำให้ผมเข้าปรึกษากับ mentor ประจำกลุ่ม

ผม : พี่ครับ โมเดลที่มา transfer แล้วมันไม่ได้ performance ดีเท่า dataset เดิมอ่ะ

mentor : น้อง clean data ให้ input เหมือนกันแล้วใช่มั้ย

ผม : clean แล้วครับยกเว้น oversampling

mentor : หืม น้องได้แยก train_test_split ก่อนทำ oversampling รึเปล่า ไม่งั้นถ้าทำทีหลัง split แล้ว reset index มันจะมี data ซ้ำกันทั้งใน train test set แล้วโมเดลก็จะ overfit เหมือนเราไม่ได้แยก

ผม : *เอ๊ะ*

ผม : *นึกขึ้นได้ว่าไม่ได้ทำ* Oh no (O_O)

mentor : Oh no (O_O)

ก็นั่นแหละครับ ผมเก็บ Data ที่อิงจากโมเดลที่ overfit ไปแล้ว ทำให้ผมอาจจะมี feature ไม่พอที่จะทำให้ Performance ดีเท่าโมเดลเดิมได้

ถึงจะพลาดไปบ้าง แต่ก็ต้องใช้ Data ที่มีให้ดีที่สุด

และการทำอย่างนั้นก็ต้องเริ่มด้วยการทำความเข้าใจ Data และ Data Cleaning!

1. Data Grouping

จากแผนภูมิจังหวัดที่ทำงานจะเห็นว่า คนถึง 80% ทำงานในกรุงเทพฯ และอีก 20% ที่เหลือก็แบ่งกัน 27 จังหวัด

แต่เอ๊ะ ประเทศไทยของเรามี 76 จังหวัด แล้วที่เหลือเค้าหายไปไหนกัน?

ใช่ครับ เค้าไม่ได้มาทำแบบสอบถามของเรา และถ้า Users ใหม่ที่มาจากจังหวัดเหล่านั้น มาใช่โมเดลของเราก็จะทำให้ประสิทธิภาพของโมเดลเราตกลงอย่างมากจากข้อมูลที่ไม่เคยเจอมาก่อน ทำให้เราต้องรวบยอด 76 จังหวัด = 76 Category เป็น 2 Category ได้แก่ ทำงานในกรุงเทพฯและปริมณฑล หรือต่างจังหวัด การทำแบบนี้จะทำให้ Data ของเราครอบคลุมทุกจังหวัดถึงแม้จะไม่มี Data จากบางจังหวัดก็ตาม

เช่นเดียวกับ Feature วุฒิการศึกษาที่มี Data บาง Category น้อยจึงต้องจับรวบยอดกันเป็น 3 Category ต่ำกว่าป.ตรี, ป.ตรี และสูงกว่าป.ตรี

2. Data Pruning

Data เป็นส่วนสำคัญที่สุดในการทำโมเดลก็จริง แต่ถ้า Data บางอย่างทำให้โมเดลของเราผิดเพี้ยนไปเราก็จำเป็นจะต้องตัดทิ้ง เหมือนตัดแต่งกิ่งต้นไม้

ตัวอย่างเช่นในกราฟ ประสบการณ์(ปี)/เงินเดือน ก่อนที่จะตัดแต่งนี้

จะเห็นว่ามีข้อมูลบางส่วนที่ดีดออกไปจาก data อื่นมากๆ ทำให้ภาพรวมของ Data ออกมาดูไม่ดีจับ Pattern ยาก และจะส่งผลต่อ Performance ของโมเดล

ทำให้เราต้องตัดแต่งกิ่งมันซักหน่อย โดยการใส่ค่า Min-Max

df = df[df['Salary'] <= 3e6]
df = df[df['Salary'] >= 1e5]

ทีนี้กลับมาดูกราฟอีกครั้ง จะเห็นว่ากราฟดูดีขึ้นอย่างเห็นได้ชัด

3. Create New Features

เมื่อเราต้องการ Features เพิ่มแต่ไปเก็บใหม่ไม่ได้ก็ต้องสร้าง Features ใหม่จาก Features ที่มี ซึ่ง Features ใหม่ที่ผมสร้างมานั่นก็คือ

  • Pattern ของตำแหน่งงาน(DevType)

Features นี้เป็น Features ที่ Auto ML Features Generator ของ AutoGluon จับ Pattern ของข้อมูลแบบ Text ออกมาได้ เช่น หากทำงานที่เกี่ยวกับ Data ร่วมกับ Academic Researcher หรือ ทำเกี่ยวกับ Development ในด้านต่างๆคล้ายๆกันจะทำให้มีเงินเดือนที่ใกล้เคียงกัน เป็นต้น ซึ่ง Features นี้ถูกสร้างออกมามากถึง 40 กว่า Feature เลยทีเดียว

ซึ่ง Features นี้มีผลให้โมเดลทำงานดีขึ้นอย่างมีนัยสำคัญทางสถิติ

4. Remove Unhealthy Features

จากการ Trials and Error บาง Features ที่เราไม่สามารถวิเคราะห์ออกมาได้ หรือ Features ที่ทำให้โมเดลงงกว่าเดิมก็จำเป็นที่จะต้องถูกตัดทิ้ง ซึ่ง Features ที่ว่านั่นก็คือ

  • Age
  • Employment
  • LanguageHaveWorkedWith

ซึ่งจากการทำ Feature ที่กล่าวมา ก็ทำให้โมเดลมี Performance ดีขึ้นอย่างมีนัยสำคัญทางสถิติ

แต่เราจะนำ Employment Feature กลับมาในตอนที่เรา Deploy แล้วใช้การ Rule-based เพื่อกำหนดเงินเดือนให้แม่นยำมากยิ่งขึ้น

หลังจากทำ Data Cleaning แล้วเราก็มาเช็คความ ถูกต้องของ Data อิงกับความเป็นจริง

  • คนที่วุฒิการศึกษาสูงกว่า มีโอกาสได้เงินเดือนที่สูงกว่า(EdLevel) ถูกต้อง
  • คนที่ทำงานในกรุงเทพฯหรือปริมณฑล มีโอกาสได้เงินเดือนที่สูงกว่าคนที่ทำงานต่างจังหวัด (WorkPlace) ถูกต้อง
(0=ทำงานตจว.) (1=ทำงานในกทม./ปริมณฑล)
  • คนที่ทำงานแบบ Full-time/Freelance มีโอกาสได้เงินเดือนที่สูงกว่าคนทำ Part-time (Employment) ถูกต้อง
(0=Part-time) (1=Full-time/Freelance)
  • คนที่มีประสบการณ์ทำงานมากกว่าจะมีโอกาสได้เงินเดือนที่มากกว่า (YearsCodePro/YearsCode) ถูกต้อง

สรุป Feature ที่จะใช้ในการสร้างโมเดล

  • วุฒิการศึกษาสุดท้าย (EdLevel) ประเภท Category
  • จังหวัดที่ทำงานอยู่ (WorkPlace) ประเภท Category
  • ประสบการณ์การทำงานในองค์กร (YearsCodePro) ประเภท Float
  • ประสบการณ์การเขียนโปรแกรม/ฝึกฝนทั้งหมด (YearsCode) ประเภท Float
  • ขนาดองค์กรนับตามจำนวนพนักงาน (OrgSize) ประเภท Category
  • Feature ย่อยของตำแหน่งงานที่ทำ (DevType) ประเภท Float/Integer

รวมทั้งหมด 6 หัวข้อใหญ่ แต่รวมทั้งหมด 51 Features

ขั้นตอนสุดท้ายของการเตรียม Data ก็คือการแบ่ง Training set/ Test set (อย่างถูกต้อง)

แบ่งโดยใช้ train_test_split ของ sklearn ในอัตราส่วน

  • Training Set 64% : 236 Records
  • Valid Set 16% : 60 Records
  • Test Set 20% : 72 Records

ซึ่งครั้งนี้จะต่างออกไปตรงที่เราจะล็อค Test Set เอาไว้ตลอดไม่ว่าเราจะเปลี่ยนแปลงโมเดลยังไง เพราะเราจะนำมาเปรียบเทียบกับโมเดลอื่นๆ ซึ่งถ้าเราทำให้ Dataset มีการปะปนกันก็จะทำให้เกิดการ Overfitting เหมือนเดิม

เมื่อเราทำข้อมูลเสร็จแล้วก็ถึงเวลาที่จะต้องเทรนโมเดลกันแล้ว (จากเวลา 8 Week ทำข้อมูลอย่างเดียวก็ 5–6 Week แล้ว55)

ผลการเทรนและเลือกโมเดลที่จะใช้

โดยมีผลจากโมเดลที่เทรนโดย AutoGluon ดังนี้

ซึ่งโมเดลที่ Performance ดีที่สุดก็คือออ

Weight Ensemble L2

โมเดลนี้เป็น Stack Model เกิดจากการนำโมเดลที่เทรนมาก่อนหน้ามาซ้อนกัน แล้วช่วยกันประมวลผล ให้น้ำหนัก แล้วออกมาเป็น Output สุดท้าย

โดยโมเดลที่เลือกมา AutoGluon จะเลือกจาก score_val ที่สูงที่สุด 4–5 อันดับและเลือกให้สอดคล้องกับความหลากหลายของโมเดลซึ่งโมเดลที่ AutoGluon เลือกมาก็คือ CatBoost, LightGBMLarge, LightGBMXT และ NeuralNetFastAI ซึ่งประกอบด้วย Tree-based Model 3 และ Neural Network 1 โดยจะมี Weight ต่างกันเพื่อให้ได้คำตอบสุดท้ายที่มีความแม่นยำที่สุด

โดยเราสามารถวัดว่า Feature ไหนมีผลมากหรือน้อยกับเงินเดือนได้โดยใช้ Method Feature Importance ซึ่งให้ผลออกมาดังนี้

นั่นทำให้ Performance สุดท้ายของเราได้ออกมาเป็น

Evaluations on test data:
{
"root_mean_squared_error": -2.2924210115289316,
"mean_squared_error": -5.2551940940993305,
"mean_absolute_error": -1.7836234306847605,
"r2": 0.5359438195295215,
"pearsonr": 0.7603399775802729,
"median_absolute_error": -1.3318117618560792
}

อาจจะยังไม่เห็นภาพได้ชัดมากนัก เราจึงเทียบออกมาเป็นค่า min-max-mean error

MAX ERR : 63478.69
MIN ERR : 756.31
MEAN ERR : 17798.86

โดยหมายความว่าโมเดลประเมินคลาดเคลื่อนมากที่สุดคือ 63,478 บาท น้อยที่สุด 756 บาท และโดยเฉลี่ย 17,798 บาท ต่อเดือนนั่นเอง

เปรียบเทียบประสิทธิภาพกับโมเดลที่มีอยู่

โมเดลที่เราจะเปรียบเทียบก็คือโมเดลจากสมาคมโปรแกรมเมอร์ไทย และ Rule-Based Model ที่จะประเมินออกมาเป็นค่าเฉลี่ยเงินเดือนของ Training Dataset เสมอซึ่งหมายความว่าถ้าโมเดลเรามี Performance ต่ำว่าโมเดลแบบเดาก็…. นั่นแหละครับ555

ซึ่งเราเปรียบเทียบแต่ละโมเดลด้วย Dataset เดียวกัน และแต่ละโมเดลไม่เคยเจอมาก่อน (No overfit this time)

เริ่มจาก โมเดลของเรา

/============= Our Model =============/
MAX ERR : 63478.69
MIN ERR : 756.31
MEAN ERR : 17798.86
--------------------
MSE : 52472.00
RMSE : 22906.77
MAE : 17798.86
MAPE : 0.47
R2 : 0.54

ตามด้วย Rule-Based Model

/============= Mean Rule-based =============/
MAX ERR : 102100.51
MIN ERR : 1566.16
MEAN ERR : 25785.74
--------------------
MSE : 113659.66
RMSE : 33713.45
MAE : 25785.74
MAPE : 0.71
R2 : 0.00

และตามด้วยโมเดลจากโปรแกรมเมอร์ไทยและ DEPA

/============= DEPA Baseline =============/
MAX ERR : 118916.67
MIN ERR : 200.00
MEAN ERR : 22764.00
--------------------
MSE : 111116.17
RMSE : 33334.09
MAE : 22764.00
MAPE : 0.47
R2 : 0.02

LEETTT’S GOOOOO โมเดลเรา Performance ดีกว่า

แต่อาจจะยังเห็นไม่ชัดนำข้อมูลมาเขียนเป็นกราฟกัน

จากกราฟทำให้เราเห็นว่าโมเดลของเรา

  • มี Max Err น้อยลง 46.61%
  • มี MSE น้อยลง 52.78%
  • มี RMSE น้อยลง 31.28%
  • มี MAE น้อยลง 21.83%

ซึ่งทำให้เราสามารถสรุปได้ว่าโมเดลของเรามีประสิทธิภาพดีกว่าโมเดลที่มีในปัจจุบันและสามารถแก้ปัญหานี้ได้โดยมีค่าความผิดพลาดที่น้อยกว่า

วิเคราะห์ว่าทำไมโมเดลของเราถึงมีค่า Error ที่น้อยกว่า

  • ใช้โมเดลที่ต่างกัน

โมเดลที่มีอยู่ในปัจจุบันเป็นโมเดลแบบ Multiple Linear Regression ซึ่งโมเดลแบบ Linear ที่สามารถประเมิน Feature ไปได้ในทิศทางเดียว แต่ Data ของเราไม่ไปในทิศทางเดียวกันตลอดหรือมีค่า Pearson correlation ใกล้ 0 และ Features ส่วนมากเป็น Features แบบ Category ซึ่งเป็นหนึ่งในจุดอ่อนของ Linear Regression

แต่เราเลือกใช้โมเดลแบบ Tree-based และ Stack ที่มีความซับซ้อนกว่าทำให้สามารถหา Pattern ของ Data ใดๆที่ไม่จำเป็นต้องมีค่า Pearson correlation ใกล้ 1 หรือ -1 เพื่อให้โมเดลมี Performance ดีได้ รวมกับการที่โมเดลสามารถจัดการกับ Category Data ได้ดีกว่า ทำให้ Performance ออกมาดีกว่านั่นเอง

  • ใช้ Features ที่ต่างกัน

Feature ของ Dataset เราที่เพิ่มขึ้นมาจากเดิมประกอบไปด้วย จังหวัดที่ทำงาน(WorkPlace) ขนาดองค์กร(OrgSize) ประเภทงานจ้าง(Employment) และการมีตำแหน่งงานหลายตำแหน่ง(Multi-Category DevType) ซึ่งมีส่วนสำคัญให้โมเดลมี Performance ที่ดีกว่า รวมถึงการตัด Feature ที่ทำให้โมเดลสับสนออกไป

ได้เวลาปล่อยโมเดลของเราสู่สาธารณะ!

การปล่อยโมเดลของเราให้คนอื่นใช้นั้นมีหลายวิธี ซึ่งวิธีที่เราเลือกได้รับแรงบันดาลใจมาจากงานวิจัยของสมาคมโปรแกรมเมอร์ไทย นั่นคือการนำมาสร้างเป็น Web Application และ Publish ออกไป ซึ่งหนึ่งในวิธีที่ง่ายและสะดวกที่สุดก็คือการใช้ Python Library : Streamlit

Streamlit เป็น Python Library พร้อม Cloud Service สำหรับพัฒนา Web Application สร้างมาเพื่อให้ Data Scientist อย่างเราสามารถสร้าง Web Application ได้อย่างรวดเร็ว และ Deploy ผ่าน Server ของ Streamlit Cloud ได้เลย

ซึ่งผลที่ออกมาก็คือออ

> Thai IT Salary Predictior · Streamlit

Web Application ที่สามารถเข้าไปใช้งานได้เลยนั่นเองงง

ส่งท้าย

สุดท้ายนี้นะครับ เรื่องราวของผมกับโครงการ AI Builders แล้วก็โปรเจคสุดหรรษาก็ได้จบกันไปแล้ว ขอบคุณทุกคนที่ทนอ่านมาได้ถึงตรงนี้นะครับ555 เจ้าตัวโปรเจคนี้ก็ถือว่าจบ Version 1.0.4 ไปได้แล้วแต่ว่ายังมีที่ว่างสำหรับการพัฒนาอีกมากนะครับ ซึ่งผมก็ไม่ได้ปล่อยไว้และทำแบบสอบถาม v2.0 ไว้แล้วครับสามารถเข้าไปช่วยกันกรอกข้อมูลเพื่อพัฒนาโมเดลได้นะครับ

สำหรับใครที่สนใจทำโปรเจคคล้ายๆกันสามารถส่ง e-mail มาสอบถามรายละเอียดหรือขอคำแนะนำได้ที่ kantapong.vong@mail.kmutt.ac.th ได้เลยครับผม

ทั้งนี้หวังว่า Blog นี้จะเป็นประโยชน์กับผู้อ่านบ้างไม่มากก็น้อยครับผม

ถ้าใครสนใจโครงการ AI Builders ในปีต่อๆไปก็สามารถเข้าไปดูรายละเอียดได้ในลิงค์นี้เลยยย

AI Builders | Facebook

AI Builders — a program for kids who want to build good AI (ai-builders.github.io)

อ้างอิง

Python Engineer Tutorial : https://youtu.be/xl0N7tHiwlw

Baseline’s Github : PunikaAmorn/The-Rated-Salary-Prediction-in-the-Thailand-IT-Job-Market

Baseline’s App : Thailand IT Salary Rates (punikaamorn.github.io)

EU IT Salary Dataset : IT Salary Survey for EU region(2018–2020) | Kaggle

Stack Overflow Developer Survey : Stack Overflow Developer Survey 2021

Our Model’s Github : JustAnotherTunaInTheSea/Thai-IT-Job-Salary-Prediction-Model

Our Model’s App : Thai IT Salary Predictor · Streamlit

ขอขอบคุณ #พี่ชารินทร์ #พี่เต๋อ #พี่แทน #พี่โอ #พี่แพททริค(ที่อยู่รุ่นเดียวกันแต่ก็เรียกพี่) และพี่ๆ Mentor/TA พี่ๆจาก VISTEC และทุกคนในโครงการ AI Builder ที่สละเวลาจัดค่ายกิจกรรมสุดหรรษาในครั้งนี้

ขอขอบคุณ คุณ PunikaAmorn และทางสมาคมโปรแกรมเมอร์ไทยสำหรับ Model Baseline และงานวิจัยที่ดีและเป็นพื้นฐานในการพัฒนาต่อยอด

และขอขอบคุณ 9arm สำหรับการอนุมัติให้เก็บ Data จากชาวหลังบ้านครับ

--

--