8 ขั้นตอนในการทำ Machine Learning Project

Aug 03, 2020

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

 

Machine Learning Project Checklist จากหนังสือ Hands-On Machine Learning with Scikit-Learn and TensorFlow By Aurélien Géron

Sigkawat Pengnoo

Sigkawat Pengnoo

Software Developer, Data Engineer, and Technology Specialist