จากที่ผมได้อ่านหนังสือ Hands-On Machine Learning with Scikit-Learn and TensorFlow By Aurélien Géron (ซึ่งเป็นหนังสือที่ดีมากๆเล่มหนึ่งสำหรับผู้ที่ตั้งใจจะศึกษา Machine Learning) โดยจะมีส่วนหนึ่งที่ผมคิดว่าน่าสนใจและสรุปได้ดีสำหรับมือใหม่และผู้ที่ทำงานด้าน Machine Learninig ควรจะท่องไว้ให้ขึ้นใจ แล้วฝึกทำๆๆจนเป็นนิสัยให้ได้ คือ ขั้นตอนการทำ Machine Learning Project
โดย มี 8 ขั้นตอนดังนี้
1. ตีกรอบปัญหาและมองภาพใหญ่
2. รวบรวมข้อมูล
3. สำรวจข้อมูลเพื่อหา insights
4. จัดเตรียมข้อมูลเพื่อพร้อมสร้างโมเดล
5. ใช้ model ที่หลากหลาย จากนั้นเลือก model ที่ดีที่สุด 3-5 model
ุ6. ปรับจูนโมเดลและนำมารวมเข้าด้วยกันเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
7. นำเสนอ solution ของคุณ
8. Launch โปรเจ็กต์ของคุณ คอย monitor และดูแลปรับปรุง
มาลงรายละเอียดแต่ละขั้นกันว่าต้องทำอะไรกันบ้าง
1. ตีกรอบปัญหาและมองภาพใหญ่
- กำหนดวัตถุประสงค์ในแง่ธุรกิจ
- solution ของคุณจะถูกนำไปใช้อย่างไร
- วิธีแก้ปัญหาที่ใช้อยู่ในปัจจุบันมีอะไรบ้าง
- คุณควรแก้ปัญหานี้อย่างไร (supervised/unsupervised,online/offline ...)
- จะวัดประสิทธิภาพอย่างไร
- การวัดประสิทธิภาพสอดคล้องกับวัตถุประสงค์ทางธุรกิจหรือไม่
- ประสิทธิภาพขั้นต่ำที่จำเป็นในการบรรลุเป้าหมายทางธุรกิจคืออะไร
- ปัญหาที่ใกล้เคียงคล้ายคลึงกันมีอะไรบ้าง และจะสามารถนำประสบการณ์หรือเครื่องมือมาใช้ซ้ำได้หรือไม่
- ต้องใช้ความชำนาญของมนุษย์หรือไม่
- ถ้าจะแก้ปัญหาด้วยวิธี manual จะทำอย่างไร
- ทำลิสต์รายการสมมุติฐานทั้งหมดที่คุณได้ตั้งไว้
- ทำการทดสอบสมมุติฐานเหล่านั้นทั้งหมด ถ้าเป็นไปได้
2. รวบรวมข้อมูล (Get the Data)
- อย่าลืมที่จะสร้างระบบการเก็บรวบรวมข้อมูลให้เป็นระบบอัตโนมัติให้มากที่สุดเท่าที่จะทำได้ แล้วชีวิตคุณจะง่ายขึ้น
- ให้ทำลิสต์รายการข้อมูลที่จำเป็นต้องใช้และปริมาณข้อมูลที่ต้องการ
- หาแหล่งข้อมูลและทำการจดบันทึกไว้
- ต้องใช้พื้นที่เก็บข้อมูลเท่าไร
- ตรวจสอบข้อผูกมัดด้านกฏหมายต่างๆ
- ทำการขอสิทธิเพื่อเข้าถึงข้อมูล
- สร้าง workspace ในการทำงาน ที่มีพื้นที่เก็บข้อมูลเพียงพอ
- ทำการรวบรวมข้อมูลจากแหล่งข้อมูล
- แปลงข้อมูลให้อยู่ในรูปแบบที่จัดการได้ง่าย โดยที่เนื้อหาของข้อมูลไม่เปลี่ยน
- ข้อมูลที่ sensitive ควรทำการลบออกหรือปกป้องข้อมูลไว้ (เช่น ไม่ระบุชื่อ)
- ตรวจสอบขนาดและประเภทของข้อมูล
- แบ่งข้อมูลออกมาเป็นชุดทดสอบ (Test Set) แล้ววางไว้เฉยๆโดยไม่ต้องไปยุ่งหรือแอบส่องมัน
3. Explore the Data - สำรวจข้อมูลเพื่อหา insights
- ในขั้นตอนนี้ ลองพยายามรับ insights จากผู้เชี่ยวชาญ
- สร้างสำเนาของข้อมูลเพื่อทำการ explore (หากข้อมูลมีปริมาณมาก อาจแบ่งกลุ่มตัวอย่างมาหากจำเป็น)
- สร้าง Jupyter Notebook เพื่อบันทึกแต่ละขั้นตอนของการ explore
- ศึกษาแต่ละ attribute และคุณลักษณะของมัน
- ชื่อ,ประเภท
- % ของ missing value
- noise และรูปแบบของ noise (stochastic,outliers,rounding errors ...)
- มีประโยชน์กับงานนี้หรือไม่
- การกระจายของข้อมูลเป็นรูปแบบใด (Guassian, uniform , logarithm)
- กรณีที่ทำ supervised learning ให้กำหนด target attribute ( attribute ที่เป็นคำตอบ)
- Visualize ข้อมูล (plot กราฟ)
- ศึกษาความสัมพันธ์ (correlation) ระหว่าง attribute ต่างๆ
- ให้ลองคิดวิธีแก้ใขปัญหาด้วยวิธี manual ดู
- สามารถนำข้อมูลมา transform แบบใดได้บ้างที่อาจเป็นประโยชน์
- ดูว่ายังต้องการข้อมูลอะไรเพิ่มเติมอีกที่อาจเป็นประโยชน์
- บันทึกและอธิบายสิ่งที่คุณได้เรียนรู้จากการ explore ข้อมูล
4. Prepare the Data : เตรียมข้อมูลให้พร้อมสร้างโมเดล
- ขั้นตอนนี้ให้ copy ข้อมูลมาและทำบนข้อมูล copy นี้ (เก็บข้อมูลต้นฉบับไว้)
- ให้สร้างฟังก์ชั่นสำหรับการ transform ข้อมูลทั้งหมดที่ใช้ โดยมีเหตุผล 5 ข้อดังนี้
1. เพื่อความสะดวกในการ prepare ข้อมูลใหม่ในครั้งต่อไป
2. สามารถนำไปใช้กับ project อื่นๆในอนาคตได้
3. เพื่อ่นำไปใช้กับข้อมูล Test Set (ที่แบ่งเอาไว้ตอนแรก)
4. เพื่อใช้กับชุดข้อมูลใหม่หลังจากนำ project ขึ้นใช้งานจริง
5. ทำให้ง่ายในการเตรียมข้อมูลเพื่อปรับ hyperparameter ต่างๆ
ขั้นตอน มีดังนี้
- Data Cleaning
- เอาข้อมูลที่เป็น outlier ออก
- จัดการกับ missing values (เช่นการ เติม 0 , mean, median, ... ) หรือ drop แถว หรือ column ออก
- ทำ feature selection โดยการ drop attribute ที่ไม่มีข้อมูลที่เป็นประโยชน์ออก
- ทำ Feature Enginerring
- Discretize countinuous features
- Decompose features (Categorical , date/time,...)
- Data transformation เช่น log(x) , sqrt(x), x )
- Aggregate feature บางตัวให้เป็น feature ใหม่ เช่นการเอามาบวกลบคูณหารกัน
- Feature Scaling โดยการทำ standardize หรือ normalize เพื่อให้ข้อมูลแต่ละ feature อยู่ใน scale ที่ใกล้เคียงกัน
5. ใช้ model ที่หลากหลาย จากนั้นเลือก model ที่ดีที่สุด 3-5 model
- หากข้อมูลมีขนาดใหญ่มาก คุณอาจต้องทำการ sample trainning set ให้เล็กลง เพื่อจะได้เอามา train ด้วย model หลายๆแบบ
และอย่าลืมที่จะสร้างระบบ automate ไว้ด้วย
- train model อย่างง่ายๆแบบเร็วๆ หลายๆอัลกอริธึม (เช่นใช้ linear , naive bayes, SVM , random forest ,. neural net,...) โดยใช้ parameter มาตรฐานของแต่ละอัลกอริธึม
- วัดผลและเปรียบเทียบ performance - โดยแต่ละ medel ใช้วิธี N-Fold cross-validation และคำรวณ mean ,SD ของ N-Folds
- วิเคราะห์ตัวแปรที่สำคัญที่สุดของแต่ละอัลกอริธึม
- วิเคราะห์ประเภทของ error ของแต่ละ model
- ทำ feature selection และ feature engineering แบบเร็วๆ
-
- ทำซ้ำ 5 ขั้นตอนก่อนหน้านี้ สัก 1-2 รอบ
- เลือก model ที่ได้ผลดีที่สุดมา 3-5 model ถ้าจะให้ดีควรเลือก model ที่มี error ในรูปแบบที่แตกต่างกัน
ุ
6. ปรับจูนโมเดลและนำมารวมเข้าด้วยกันเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
- ปรับจูน hyperparameter โดยวิธี cross-validation
- วิธีการ transform data โดยเฉพาะอย่างยิ่งเมื่อคุณไม่แน่ใจเกี่ยวกับมัน เช่น ควรจะแทนที่ missing value ด้วย 0 หรือค่า median ดี หรือว่าควรจะ drop row ทิ้งไปเลย
- ถ้าหาก hyperparameter ไม่ได้มีน้อยจนเกินไป ลองทำ random search ด้วย grid search
- หากการ train ใช้เวลานานเกินไป ลองใช้ Baysian optimization (เช่น Guassian)
- ลองใช้วิธี Ensemble - การรวมกันของ model ที่ดีหลายๆ model มักจะได้ผลลัพธ์ที่ดีขึ้นไปอีก
- เมื่อคุณมั่นใจว่าได้ model สุดท้ายแล้ว ให้วัดประสิทธิภาพกับข้อมูล test set เพื่อหาความแม่นยำของ model และอย่าปรับจูนอะไรหลังจากนี้ เพราะจะเป็นการ overfitting test set
7. นำเสนอ Solution ของคุณ
- ทำการจดบันทึกและอธิบายสิ่งที่คุณทำ
- สร้าง presentation ให้เจ๋ง โดยจำไว้ว่า ต้องให้เห็นภาพใหญ่ก่อนเสมอ (ปัญหาหลักที่เราทำ solution นี้ มาแก้)
- อธิบายให้ชัดเจนว่าทำไม solution ของคุณจึงทำให้บรรลุวัตถุประสงค์ทางธุรกิจ
- อย่าลืมแสดงประเด็นสำคัญที่คุณสังเกตได้ระหว่างการทำงาน
- บอกได้ว่าทำอะไรเวิร์คหรือไม่เวิร์ค
- ลิสค์รายการข้อสันนิษฐานของคุณรวมถึงข้อจำกัดของระบบคุณ
- นำการค้นพบที่สำคัญมาสื่อสารผ่านการ visualization ที่สวยงาน หรือด้วยข้อความที่ง่ายต่อการจดจำ (เช่น "รายได้เฉลี่ย เป็นตัวแปรอันดับหนึ่งในการใช้คาดการณ์ราคาบ้าน")
8. Launch โปรเจ็กต์ของคุณ คอย monitor และดูแลปรับปรุง
- นำ solution ของคุณมาทำให้พร้อมสำหรับการใช้งานจริง
- ทำระบบในการ monitor และตรวจเช็คประสิทธิภาพของระบบ และมีระบบการแจ้งเตือนเมื่อประสิทธิภาพต่ำลง
- ให้ระวังเรื่องการเสื่อมประสิทธิภาพอย่างช้าๆทีละนิด จนสุดท้ายใช้ไม่ได้ เรียกว่าระบบเน่า เนื่องจากการที่ข้อมูลค่อยๆเปลี่ยนแปลงไป ทำให้ model ที่เคยแม่นยำ ไม่แม่นอีกต่อไป
- การวัดประสิทธิภาพอาจต้องใช้คนมาช่วย (เช่นผ่านบริการ crowd sourcing)
- คอยตรวจสอบคุณภาพของข้อมูลที่เข้ามาด้วย ซึ่งเป็นเรื่องสำคัญหากระบบเราเป็นแบบ online learning