พอกันที! กับการรู้ตัวในวันที่สายเกินไป…
มาทำนายแนวโน้มการลาออกของคนในองค์กรด้วย Machine Learning กัน

DSE4_G8
botnoi-classroom
Published in
7 min readSep 5, 2021

บทความนี้เป็นส่วนหนึ่งของ Botnoi Data Science Essential รุ่นที่ 4 Project 2หัวข้อ Machine Learning

ทำงานได้ปีสองปี ลาออก…
ทุ่มเทสอนงานจนเป็น ทำงานได้คล่อง ลาออก…
ปัญหาคลาสสิกที่องค์กรทั้งเล็กและใหญ่น่าประสบกันมาอยู่เสมอ และเหล่า HR ต้องคงปวดหัวปริ๊ดอยู่บ่อย ๆ

กว่าจะรู้ตัว เจ้าตัวก็เดินมายื่นเรื่องลาออกซะแล้ว!

คงจะดีไม่น้อย ถ้ามีเครื่องไม้เครื่องมือ หรือวิธีการอะไรสักอย่างมาช่วยแก้ปัญหานี้ได้

ชาว HR คงทราบกันดีว่า บริษัทต้องใช้งบประมาณจำนวนมากแค่ไหนในการสรรหาพนักงานแต่ละตำแหน่ง ตั้งแต่การลงโฆษณาประกาศรับสมัครงาน การใช้บริการ Recruitment Agency ค่าใช้จ่ายในการเทรนงาน ซึ่งต้องใช้พลังกาย พลังใจ และความอดทนอย่างสูงกว่าจะได้รับอนุมัติงบประมาณในแต่ละครั้ง

ยิ่งไปกว่านั้น กว่าจะได้พนักงานเข้ามาทำงานสักคนใช่ว่าจะรับใครก็ได้ นอกจากเรื่องความสามารถแล้วยังต้องดูอีกว่าจะเข้ากับวัฒนธรรมองค์กรได้ไหม ถูกโฉลกกับหัวหน้างานหรือไม่ เลือกเขาแล้วเขาจะเลือกเราอยู่ไหม ถ้าไม่เลือกก็ต้องไปเริ่มหาใหม่วนไปอีก รับมาแล้วจะอยู่กับเรานานไหม ถ้ารีบออกก็ต้องหาใหม่วนไปอี๊ก

โปรเจ็กที่สองของเราครั้งนี้ เลยขอสร้างเครื่องมือที่สามารถช่วยแก้ปัญหาชวนปวดหัวปิ๊ดดนี้ ซึ่งได้รับการเสนอปัญหา (ด้วยอินเนอร์สุดแรงกล้า) จากคุณ HR หนึ่งในสมาชิกกลุ่ม 8 ของเรานี่เอง

แล้วจะแก้ยังไงล่ะ?

โจทย์ของโปรเจ็กนี้คือสร้าง Machine Learning เราก็จะใช้ Machine Learning กันน่ะสิ

เราจะสร้างโมเดลเพื่อทำนายว่าพนักงานคนนั้น ๆ มีแนวโน้มจะลาออกหรือไม่ เพียงแค่ป้อนข้อมูลเล็ก ๆ น้อย ๆ เข้าไป นอกจากจะรู้แนวโน้มว่าจะอยู่จะไป ยังบอกได้อีกด้วยว่าปัจจัยใจไหน ที่เราจะรั้งเค้าไว้ได้! เมื่อทราบดังนั้นแล้ว คุณ HR ในทีมก็ตอบรับด้วยน้ำเสียงกระตือรือร้น เปี่ยมไปด้วยความหวังว่าจะลดภาระงานลงไปได้อีกมาก

อ๊ะเดี๋ยวก่อน ก่อนจะไปดูวิธีสร้าง เรามาทำความรู้จักกับเจ้า Machine Learning กันสักหน่อยดีกว่า

Machine Learning คืออะไร?
ชื่อก็บอกอยู่ Machine = เครื่องจักร Learning = การเรียนรู้
ดูแค่นี้ก็คงพอจะเดาออก ว่าหมายถึงการเรียนรู้ของเครื่องจักร

แล้วเครื่องจักรในที่นี้คืออะไรล่ะ… ก็คือคอมพิวเตอร์ของเรานั่นเอง

ใช่แล้ว Machine Learning เป็นการทำให้ระบบคอมพิวเตอร์ของเราเรียนรู้ แต่การเรียนรู้นั้นยังแบ่งแยกย่อยไปได้อีกหลายแบบ ตามแผนภาพนี้

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

เช่นเดียวกับการทำ Data Analytics ในโปรเจ็กแรก การสร้าง Machine Learning ก็มีกระบวนการ หรือ Pipeline ของมันเช่นกัน เป็นตามภาพนี้

ถ้าอยากอ่านขั้นตอนแบบละเอียด ๆ คลิก link นี้เลย

เอาล่ะ หากพอจะรู้แล้วว่า Machine Learning นี่มันคืออะไร มีกี่ประเภท ยังไงบ้าง และมีกระบวนการสร้างประมาณไหน ก็ไปดูวิธีการสร้างโมเดลของเรากันเลย

ขั้นตอนการสร้าง Machine Learning ทำนายการลาออกของพนักงานในแบบของเรา

STEP 1: ระบุปัญหา

อย่างที่ได้กล่าวถึงไปแล้วข้างต้น ปัญหาเราคือ จะทำยังไงถึงจะรู้ว่าพนักงานคนไหนมีแนวโน้มจะลาออก ซึ่งถือเป็นปัญหาของเหล่าคนทำงาน HR ทั้งหลาย เพราะโดยส่วนใหญ่แล้ว HR มักจะทราบว่าใครต้องการลาออกก็ต่อเมื่อมีการยื่นเรื่องลาออกแล้วเท่านั้น (รั้งไว้ไม่ค่อยจะทัน) จึงเกิดเป็นความคิดว่า ถ้าได้รู้ก่อนว่าใครที่เริ่มจะหมดใจกับองค์กร หรือมีปัญหาอื่น ๆ ก็น่าจะดี

เลยออกมาเป็น Machine Learning ที่จะมาทำนายว่าพนักงานแต่ละคนมีแนวโน้มที่จะลาออกหรือไม่ และยังบอกปัจจัยที่ทำให้คนนั้น ๆ ตัดสินใจลาออกได้อีกด้วย โดยใส่เพียงข้อมูลที่เกี่ยวข้องลงไป

หาก Machine Learning สามารถบอกได้ว่า อุ… คนนี้อาจจะลาออกก็ได้นะ จะทำให้ HR วางแผนงานได้ เช่น การจัดทำ Promotion Criteria หรือการคัดเลือกพนักงานเข้าโครงการ High Potential High Performance (HIPO) รวมทั้งยังสามารถเข้าชาร์จ ไถ่ถามปัญหา สารทุกข์สุกดิบ เจรจาต่อรองเพื่อไม่ให้องค์กรต้องเสียทรัพยากรบุคคลดี ๆ และเสียเงิน เสียเวลาไปกับลูปแห่งการสรรหาพนักงานใหม่นั้นอีก

เรียกได้ว่า จะช่วยลดภาระงานเอชอาร์และลดค่าใช้จ่ายของบริษัทไปได้มากเลยทีเดียว

STEP 2: เก็บข้อมูล (Data Collection)

เนื่องจากเรามีสมาชิกในกลุ่มที่ทำงาน HR อยู่ จึงมีข้อมูลพนักงานอยู่ในมือเป็นจำนวนมากและหลากหลายเลยทีเดียว ทั้งการรับเข้า ลาออก รวมถึงแบบสำรวจต่าง ๆ ในที่นี้เราจึงเลือกข้อมูลมาใช้ 2 ชุด (ขออนุญาตบริษัทแล้ว) ได้แก่ ผลสำรวจความผูกพันองค์กรของพนักงาน Raw Data Engagement survey 2559 และข้อมูลพนักงาน Data Employee ที่มีระบุว่าพนักงานคนใดลาออกบ้าง

เรานำข้อมูลพนักงานของทั้งสองแบบฟอร์มมาเทียบกันเพื่อดูว่า คนที่ตอบแบบสอบถามปี 2559 นั้น ใครยังอยู่ ใครลาออกไปแล้ว เพื่อจะนำผลแบบสอบถามมาสอนคอมพิวเตอร์ว่า ถ้าคนลักษณะนี้ ๆ ตอบแบบนี้ ๆ จะยังอยู่ต่อหรือลาออกไปแล้ว

นอกจากจะรวมข้อมูลทั้งสองแบบฟอร์มแล้ว ในแบบฟอร์มแรก (Raw Data Engagement survey 2559) เราจะพบว่า มีข้อมูลดิบในส่วนของผลแบบสำรวจอยู่เยอะมาก ดังภาพ

ภาพข้อมูลดิบ จะเห็นว่าแต่ละหัวข้อมีคำถามย่อยอีกหลายคำถามเลย

จึงนำข้อมูลดิบมากรุ๊ปรวมเป็นคะแนนดิบ แล้วคำนวนหาค่าเฉลี่ยของคะแนนออกมา เป็นแต่ละปัจจัยใหญ่ ๆ 16 ข้อ ตั้งตัวอย่างต่อไปนี้

ตัวอย่างการกรุ๊ปปัจจัยที่อาจส่งผลต่อการตัดสินใจลาออกของพนักงาน

แล้วต่อจากนี้เอาปัจจัยทั้ง 16 ข้อนี้มาเลือก Feature กัน

STEP 3: เตรียมข้อมูล (Data Preparation)

ก่อนจะนำข้อมูลไปดำเนินงานต่อ ก็ต้องเตรียมข้อมูลให้สะอาด เรียบร้อย เป็นระบบระเบียบเสียก่อน จะได้ง่ายทั้งคนทำ ทั้งโปรแกรมที่ต้องรับไปวิเคราะห์ต่อด้วย

<<หมายเหตุ - ต่อไปนี้จะอธิบายเฉพาะบางขั้นเท่านั้น (ถ้าเล่าหมด บทความนี้อาจจะกลายเป็น 30 min read ได้) สำหรับใครที่สนใจ code แบบละเอียดยิบๆ คลิกดูที่ link ได้เลยนะ>>

ขั้นตอนการเตรียมข้อมูลของเรามีดังนี้

3.1) นำชุดข้อมูลทั้ง 2 ไฟล์ มารวมเป็นไฟล์ Excel เดียวกัน โดยแบ่งเป็น 3 ชีต ได้แก่
1) EE 59 คือ ชุดข้อมูล Raw Data Engagement survey 2559
2) ps (27) คือ ชุดข้อมูล Data Employee
3) Matching ชุดข้อมูลที่มีรายชื่อของคนเดียวกัน ในชีท EE 59 และ ps (27) แต่ว่าสะกดไม่เหมือนกัน อย่างเช่นในรูป ตัวอย่างเช่น

Sudarat — — Sudarad หรือ Sompong — — Somphong (นามสมมติ) เป็นต้น

จากนั้นก็ Import ไฟล์ Excel ดังกล่าวเข้า Colab

3.2) ก่อนที่จะนำข้อมูลผลสำรวจและข้อมูลที่มีอายุงานและลาออกมารวมเป็น Dataframe เดียวกัน เราจะนำข้อมูลในชีต Matching มาเปลี่ยนชื่อที่สะกดไม่เหมือนกันในชีต EE 59 โดยการนำชื่อจากคอลัมน์ใน ps (27) มาแทนชื่อเดิมที่สะกดต่างกันในชีท EE 59 ด้วยคำสั่ง .replace()

**อันนี้สำคัญมาก ถ้าไม่ทำ ข้อมูลของคนที่ลาออกจะตกหล่นเยอะมาก มีผลต่อการเทรนโมเดลเด้อ**

นำชุดข้อมูลมารวมเข้าด้วยกันด้วยวิธี left join และ join กันด้วยคอลัมน์ที่มีข้อมูลชื่อ นั่นคือ Created By และ Full_Name

ทีนี้ก็จะได้ Dataframe ออกมาหนึ่งก้อนแล้ว เอาไปใช้ต่อกันเลย

3.3) ทำความสะอาดข้อมูล (Data cleansing) และแปลงข้อมูล (Data transformation)

เช่นเดียวกับการทำ Data Analytics ก่อนจะนำข้อมูลไปใช้ต่อ เราต้องจัดการกับค่าว่างในแต่ละ คอลัมน์เพื่อไม่ให้โปรแกรมนำข้อมูลว่าง ๆ นี้ไปคิด (ผลจะเพี้ยน) รวมถึงต้องแปลงข้อมูลต่าง ๆ เพื่อให้เข้าใจตรงกันทั้งคนทั้งคอมด้วย

1) แปลงข้อมูลในจากคอลัมน์อายุงานที่มี 3 คอลัมน์ (ปี เดือน วัน) โดยการคูณเลขปีและเดือน ก่อนจะหาผลรวมแล้วสร้างเป็นคอลัมน์ใหม่ชื่อ Service Total Days ซึ่งเป็นอายุงานที่มีหน่วยเป็นวัน

แปลงอายุงานให้มีหน่วยเป็นวัน

2) ปรับข้อมูลการตอบแบบสอบถามในแต่ละหมวดหมู่ให้เป็น 4 ระดับ เริ่มแรกเรานำข้อมูลแยกย่อยในแต่ละหมวดหมู่มารวมกันและหาค่า mean จากนั้นทำเป็นเงื่อนไขเพื่อแบ่งระดับ

ปรับ Score ให้เป็น 4 ระดับ

3) เปลี่ยนข้อมูลจากระดับของพนักงาน (Grade 4–18) เป็นตำแหน่งของพนักงาน เนื่องจากตำแหน่งหนึ่งตำแหน่ง สามารถมีได้หลายช่วงระดับ (Grade) โดยแบ่งเป็น

ระดับที่ 4–6 = พนักงาน
ระดับที่ 7–9 = เจ้าหน้าที่
ระดับที่ 10 = อาวุโส
ระดับที่ 11 = ผู้ช่วยผู้จัดการ
ระดับที่ 12–13 = ผู้จัดการ
ระดับที่ 14 = ผู้ช่วยผู้อำนวยการ
ระดับที่ 15–16 = ผู้อำนวยการ
ระดับที่ 17 ขึ้นไป = รองกรรมการผู้อำนวยการ

ปรับระดับพนักงานให้เป็นตำแหน่ง

4) เติมค่าว่างด้วยคำสั่ง .fillna() โดยเริ่มจากคอลัมน์ Status ข้อมูลจะมีแค่ Resign (ลาออก) ส่วนคนที่ยังอยู่จะเป็นค่าว่าง

5) แปลงค่าคอลัมน์ Gender จากมีตัวเลขข้างหน้า ให้เหลือแค่ชายหญิง

6) เปลี่ยนช่วงอายุในคอลัมน์ Age ให้เป็นค่าเฉลี่ยของแต่ละช่วงอายุ ยกเว้นอายุมากกว่า 45 ปี ที่กำหนดให้เท่ากับ 46 เลย

ปรับช่วงอายุให้เป็นค่าเฉลี่ยแต่ละช่วงอายุ

3.4) ทำ Data analysis เพื่อหาความสัมพันธ์ของข้อมูลมาประกอบการตัดสินใจในการเลือก feature ที่จะใช้ในการสอนโมเดล

อันที่จริงเราวิเคราะห์ออกมาอยู่หลายแบบเลย (ดูได้ใน Colab) แต่คิดว่ากราฟนี้น่าจะช่วยให้เราเลือก feature มาสร้างโมเดลได้

กราฟแสดงผลการตอบแบบสอบถามระหว่างพนักงานที่ยังอยู่ และพนักงานที่ลาออกไปแล้ว

จากกราฟ ฝั่งซ้ายคือคะแนนผลสำรวจในแต่ละหัวข้อของคนที่ยังทำงานอยู่
ฝั่งขวาคือคะแนนผลสำรวจในแต่ละหัวข้อของคนที่ลาออกแล้ว

เราจึงเลือก feature จากการดูว่า หัวข้อใดในแบบสำรวจ มีคะแนนลดลงอย่างเห็นได้ชัดในกลุ่มคนที่ลาออกไป ได้ออกมาเป็น ความก้าวหน้าในอาชีพ (Score_Career Opportunities) Work-life balance (Score_Work/Life Balance) การให้รางวัล (Score_Rewards & Recognition) ความผูกพันองก์กร (Score_Engagement (Strive)) และงานที่ได้รับ (Score_Work Tasks)

สรุปว่า feature ที่เราเลือกมาเทรนโมเดลของเรามีดังนี้

STEP 4: Feature Extraction

Feature Extraction เป็นกระบวนการแปลงข้อมูลให้อยู่ในรูปแบบที่ Machine เข้าใจได้ เช่น เปลี่ยนข้อมูลจากเพศชาย-หญิง เป็นตัวเลข 0 กับ 1

ก่อนจะทำ Feature Extraction เราได้แบ่งชุดข้อมูลเป็นชุดที่จะใช้สอน (Train set) และชุดที่จะใช้ทดสอบ (Test set) ด้วย train_test_split() ของ sklearn ก่อน

*ขั้นนี้ก็สำคัญมากเช่นกัน* การ แยก Train set กับ Test set ก่อน scale จะเป็นการรักษาการกระจายตัวของข้อมูลทั้ง 2 ชุดให้เหมือนกัน

หลังจากแยกชุดข้อมูลแล้ว เราแบ่ง feature ออกเป็น 2 ชนิด คือ

แบบที่เป็นตัวเลข (numeric) — -> เลือกใช้วิธีสเกลได้ระหว่าง MinMaxScaler() และ StandardScaler()
และแบบที่เป็นตัวอักษร (object) — -> เลือกใช้วิธีสเกลได้ระหว่าง OneHotEncoder() และ OrdinalEncoder()

เนื่องจาก feature extraction นั้นทำได้หลายวิธีตามแผนภาพข้างบน กลุ่มเราจึงลองหลาย ๆ วิธี แล้วนำผลลัพธ์มาเทียบกันอีกที โดยทำดังนี้

1) นำคอลัมน์ที่เป็นตัวเลขมา Scale โดยใช้ MinMaxScaler()

2) นำคอลัมน์ที่เป็นตัวเลข มา scale โดยใช้ StandardScaler()

3) หลังจาก scale ด้วยวิธี MinMaxScaler() หรือ StandardScaler() เรียบร้อยแล้ว ลองก็นำคอลัมน์ที่เป็นตัวหนังสือ อย่างเช่น เพศ ตำแหน่ง แผนก มาแปลงค่าเป็น 0 กับ 1 ด้วย OneHotEncoder()

4) แล้วลองอีกวิธีคือแปลงค่าเป็นตัวเลข เช่น พนักงานเป็น 1 เจ้าหน้าที่เป็น 2 ผู้จัดการเป็น 3 ด้วย OrdinalEncoder()

5) ทำ LabelEncoder เพื่อแปลงข้อมูล Label (resign/existing) ให้เป็นตัวเลขที่คอมพิวเตอร์อ่านได้

การทำ LabelEncoder

STEP 5: Train & Test Model

หลังจากเลือก Feature ได้ และพร้อมใช้งานแล้ว ก็เข้าสู่ช่วงของการสอนให้โมเดลเรียนรู้และลองทดสอบหาค่าความแม่นยำดู ซึ่งเรามีขั้นตอนในการทำดังนี้

5.1) เเบ่งข้อมูลเป็น Train set 90% เเละ Test set 10% โดยใช้ train_test_split จาก library sklearn ที่เราแบ่ง trainning data ให้มีขนาดเยอะขนาดนี้ ก็เพื่อให้โมเดลเรามีข้อมูลมากพอในการเรียนรู้ ถ้าหากมีข้อมูลมีปริมาณมาก ๆ ก็อาจจะปรับเป็น Train set 80% เเละ Test set 20% หรือแบบอื่น ๆ ก็ได้

การแบ่งข้อมูลไปเทรนและเทสก็เป็นเรื่องสำคัญเช่นกัน การเทรนก็เหมือนการฝึกทำข้อสอบ ถ้าเราใช้ข้อมูลทั้งหมดในการเทรน พอไปเทส จะเหมือนกับว่าเราฝึกทำข้อสอบแล้วไปทดสอบจริงด้วยข้อสอบชุดเดิมเป๊ะ ๆ ซึ่งความแม่นยำต้องออกมาสูงปริ๊ดอย่างแน่นอน เราก็จะหลงระเริงใจไปว่าเรานี่มันเทพจริง ๆ

แต่ถ้าเราไปเจอข้อสอบจริงที่ไม่เหมือนตอนเทรนล่ะ

แน่นอนว่าจะต้องแตกตื่น ลนลาน ความแม่นยำ 100% ที่เทสมาก็ช่วยอะไรไม่ได้ Machine ของเราก็มีหลักประมาณนี้

5.2) Train Model
ในการทำ Classification มีโมเดลให้เลือกมาใช้ Train data หลากหลายมาก ได้เเก่ Logistic Regression, KNeighbors, Gussian Naive bayes, Decision tree, Random Forest เเละ SVC

เราลองใช้วิธี LogisticRegression มาเทรนจะได้ประมาณนี้

5.3) Test Model
มาทดสอบข้อมูล test set เพื่อให้โมเดลได้ทำนายข้อมูลที่ไม่เคยเห็นมาก่อน ปรากฏว่าผลความเเม่นยำที่ลองด้วยเทสด้วย LogisticRegression ก่อน ออกมาคือ 83.33% โดยใช้ accuracy_score จาก library sklearn

พอรู้คร่าว ๆ แล้ว เราลองย้อนกลับไปเลือกวิธี Scaling data มาลองเทสกับโมเดลแบบอื่น ๆ เพื่อหาว่าจะมีแบบไหนให้ความแม่นยำได้มากที่สุดดูในขั้นตอนของ Tuning model กันต่อ

STEP 6: Tuning Model

ลองใช้ Data ที่ทำ Feature Extraction ทั้ง 4 แบบข้างต้น มาเทสกับ Model ที่แตกต่างกันเพิ่มเติม เช่น

เลือกทดสอบด้วย Decision tree

เลือกทดสอบด้วย RandomForest

เลือกทดสอบด้วย LogisticRegression

พอดูผลแล้วพบว่าค่าความแม่นยำไม่ต่างกันมาก เราจึงเลือกใช้วิธี Scaling data เป็น StandardScaler และ OrdinalEncoder มาใช้กับการทดสอบด้วย LogisticRegression ซึ่งเหมาะกับข้อมูลที่มีไม่มากนักของเรา

หรืออาจจะลองอีกวิธีหนึ่งคือใช้ Pycaret มาช่วยในการเลือกโมเดลก็น่าสนใจเหมือนกัน เราลองใช้ดูแล้วได้ผลตามภาพนี้ (ใช้ Logistic Regression ก็ดีจริง ๆ ด้วย)

ผลจากการใช้ pycaret

อย่างไรก็ตาม ชุดข้อมูลและการนำไปใช้แต่ละแบบ ก็มีโมเดลในการเทรนที่เหมาะสมแตกต่างกัน ต้องศึกษา และพิจารณาเปรียบเทียบดูดี ๆ

แต่ช้าก่อน!! อย่าเพิ่งวางใจในเปอร์เซนต์ความแม่นยำนั้นไป ลองมาเช็กดูใน Confusion Matrix ดูซิ ว่าผลนี้น่าเชื่อถือได้ขนาดไหนบ้าง

ภาพข้างบนนี้การใช้ Confusion Matrix คำนวณผลความแม่นยำโมเดลออกมาโดยแบ่งเป็น 4 ช่อง ได้แก่

ซ้ายบน คือ True Positive: ทำนายคนอยู่ถูก
ขวาบน False Positive: (Type 1 Error): ทำนายคนอยู่ผิด
ซ้ายล่าง False Negative: (Type 2 Error): ทำนายคนลาออกผิด
ขวาล่าง True Negative: ทำนายคนลาออกถูก

จะเห็นว่า โมเดลของเราทำนายถูกในเรื่องของการเดาว่าคนนั้น ๆ จะอยู่ โดยมีผิดบ้างเล็กน้อย แต่ไม่ปรากฏผลในการทำนายเรื่องคนลาออก (ไม่บอกผล เดาผิด)

พอเราร่วมกันคิดหาสาเหตุดูแล้ว จึงทราบว่าเกิดจากชุดข้อมูลของเราทำจำนวนน้อย และมีจำนวนคนที่ลาออกกับคนที่อยู่ ต่างกันอย่างมาก (อยู่ 306 คน ลาออก 78 คน) เราเรียกสิ่งนี้ว่า ความไม่สมดุล หรือ Imbalanced

การจัดการชุดข้อมูลที่ไม่สมดุลนี้มีหลายวิธีมาก แต่เนื่องด้วยเวลาในการทำโปรเจ็กที่จำกัด เราจึงให้แนวทางในการจัดการไว้ตาม Link นี้แทน ต้องขออภัยมา ณ ที่นี้ที่ไม่ได้สาธิตด้วยตนเอง

STEP 7: DEPLOY ML

6.1) นำ Model ที่ผ่านการ Train เรียบร้อยแล้ว มาสร้าง API บน LocalHost หรือว่าเครื่องคอมของเราก่อน

6.2) นำ API ที่รันบน LocalHost ไปขึ้นที่ server ของ Heroku จะได้เป็น Web service หน้าตาประมาณนี้ออกมา

6.3) นำ API ที่รันบน server ของ Heroku ไปฝากไว้ที่ Open API ของ Botnoi

ถ้าใครต้องการลองเข้าไปเล่นโมเดลตัวนี้ดู ให้ลองเข้าไปที่ Colab แล้วกด 1.รัน 2.กรอกข้อมูล 3.รันอีกทีหนึ่ง ตามภาพด้านล่าง

ได้ผลออกมา จะเอาไปขอต่อรองเงินเดือนกับ HR ก็ได้น้า อิอิ

บทสรุป

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

--

--

DSE4_G8
botnoi-classroom

A group of data science students, studying Botnoi Data Science Essential course :)