10 Essential ML Interview Questions by Accenture

ฉบับแปลไทย แปลยังไงให้นู๊บเข้าใจ…

Manusaporn Treerungroj
Noob Learning
4 min readMar 2, 2019

--

สวัสดีทู้กกกคน 😊 blog นี้พูดถึงคำถาม 10 ข้อเกี่ยวกับ Machine Learning ที่ใช้สัมภาษณ์งานโดยบริษัท Accenture ต้นฉบับคือข้างล่างนี้เลย!

ปล. บางประโยครู้สึกว่าอ่านเป็นภาษาอังกฤษแล้วเข้าใจง่ายกว่า ดังนั้นทุกคนอาจเปิดต้นฉบับอ่านไปพร้อมกันได้นะคะ (ไม่ยาว อ่านง่ายแน่นอน)

มาเริ่มกันเลยค่ะ~

1. คำว่า Probability กับ Likelihood ต่างกันยังไง

แอบขายของ FlashCard ช่วยจำ (ติดตามได้ที่เพจ Noob Learning จ้า)

ในช่วง training สิ่งที่เราทำคือการหาค่า parameter ของโมเดล ที่ทำให้โมเดลมีประสิทธิภาพมากที่สุด ในที่นี้หมายถึง ทำให้ความน่าจะเป็นที่จะเกิดผลลัพธ์​ที่ถูกต้องสูงที่สุด ซึ่งความน่าจะเป็นนั้นเราเรียกว่า likelihood

ในช่วง testing เราเอา parameter ที่ได้จากตอน training มาหาความน่าจะเป็นของผลลัพธ์ ความน่าจะเป็นนั้นเรียกว่า probability

2. Bayes theorem คืออะไร และมีประโยชน์กับ machine learning ยังไง?

สมการของ Bayes theorem (รูปภาพจาก bayestheorem.net)

Bayes theorem ทำให้เรารู้ความน่าจะเป็นของเหตุการณ์ที่จะเกิดขึ้น จากเหตุการณ์ที่เกิดขึ้นไปแล้ว พูดง่ายๆ คือ คำนวณหาความน่าจะเป็นของสิ่งที่จะเกิดขึ้นนั่นเอง

ซึ่ง Bayes theorem สามารถจัดการกับโจทย์ปัญหาที่ซับซ้อน อย่างการคำนวณความน่าจะเป็นจากเหตุการณ์เยอะๆ ได้ จึงถูกนำมาประยุกต์ใช้ในการคำนวณผล prediction ของ machine learning นั่นเอง

ถ้าใครอยากเข้าใจ Bayes theorem มากขึ้น ลองตามไปอ่านบทความนี้ได้ หรือตาม ref จากต้นฉบับเลยก็ได้ค่ะ

3. โมเดล Discriminative กับ Generative ต่างกันยังไง?

ความแตกต่างระหว่าง Discriminative กับ Generative (รูปภาพจาก stanford.edu)

โมเดล Discriminative Model จะเรียนรู้การจำแนกคลาส ส่วน Generative Model จะเรียนรู้จากการกระจายตัว (distribution) ของแต่ละคลาส สุดท้ายแล้วโมเดลทั้งสองตัวจะทำนายความน่าจะเป็นของ P(y|x) เหมือนกัน

P(y|x) คือ Conditional Probability อ่ะนะ

  • Generative Model จะเรียนรู้จาก Joint Probability Distribution P(x|y) โดยจะใช้ Bayes Theorem มาช่วยในการทำนาย P(y|x)
  • Discriminative Model จะเรียนรู้จาก P(y|x) ตรงๆ
  • Discriminative เจอ outliers ไปก็จะหงอยๆ หน่อย แต่ Generative บอกสบายมาก ก็มาดิคะ!

ระหว่างช่วง training เราก็จะพยายามหา parameters เพื่อให้ performance ของ model เราดีที่สุดชะมะ

ซึ่งถ้าแบบ Discriminative Model เราจะหาความเป็นไปได้แบบมีเงื่อนไขสูงสุด (maximize the conditional likelihood)

แล้วถ้าแบบ Generative Model เราก็จะพยายามหาความเป็นไปได้ร่วมกันสูงสุด
(maximize the joint likelihood)

ใครยังงงในงงของ Accenture แนะนำให้อ่านต่อทางนี้จ้า

4. Cross-validation

ตัวอย่างการแบ่งข้อมูลแบบ cross-validation ออกเป็น k ส่วนเท่าๆ กัน (k = 5)

Cross-validation หรือเรียกว่า k-fold คือการที่เราแบ่งข้อมูลออกเป็น k ส่วนเท่าๆ กัน (เรียกว่า chunk) แล้วสุ่มเลือก k-1 ส่วนมาเป็น training data และอีกส่วนที่เหลือใช้ test โมเดล ทำวนไปเรื่อยๆ k รอบแล้วเอาผลลัพธ์ของโมเดลมารวมกัน

ใครงงแนะนำทางนี้จ้า

5. How is decision tree pruned?

สั้นๆ:
pruning คือเทคนิคการลดความซับซ้อนของ decision tree ลง ด้วยการลบบาง node หรือ branch ออกไป ช่วยให้เกิด overfitting น้อยลง และประสิทธิภาพดีขึ้น

ยาวๆ หน่อย:
ตอนที่สร้าง decision tree เราสามารถใช้ข้อมูล validation set วัดผล tree ได้ จะได้ค่า node purity มา (เป็นตัวบอก accuracy ของ decision tree) ยิ่ง pure มาก accuracy ก็ยิ่งสูง แน่นอนว่าเราอยากให้ node pure ที่สุด มันจึงแตก branch ออกไปเรื่อยๆ จน tree มีขนาดใหญ่มาก ทำให้เกิด overfitting ได้ง่าย เพราะบาง leaf node อาจเป็นแค่ data point เดียวตรงๆ เลย จึงเกิดเทคนิค pruning ที่ช่วยตัดบาง node หรือ branch ออกไป เพื่อช่วยลด overfitting

ในที่นี้วิธีที่ใช้ทำ pruning (เรียกว่า cost-effective pruning) มีขั้นตอนการทำคือ

ตัวอย่างการทำ cost-effective pruning (รูปภาพจาก thelearningmachine.ai)
  1. ใช้ข้อมูล validation set ทดสอบประสิทธิภาพของ tree ก่อน
  2. ดูว่าควรตัด node หรือ branch ไหน เช่นตัวอย่างข้างบนคือตัดส่วน sub-tree t(1) แล้วแทนที่ด้วย leaf node
  3. วัดประสิทธิภาพของ tree อันใหม่
  4. ถ้าประสิทธิภาพของก่อนและหลังตัดไม่ได้ต่างกันมาก (อย่างมีนัยยะสำคัญ) ถือว่าใช้ tree ใหม่แทนได้ แล้วค่อยหา sub-tree อื่นต่อไป

ตามไปอ่านเรื่อง Decision tree ฉบับเต็มๆ ได้ที่ ref นี้เลย!

6. เราจะจัดการกับ imbalanced data set ยังไง?

ตัวอย่าง imbalanced dataset (รูปภาพจาก datascience.aero)

Imbalanced data คือการที่ข้อมูลเราเยอะไปที่ class ใด class นึงมากไป (เรียกว่า major class) หรือบาง class ก็มีน้อยไป (เรียกว่า minor class)

สำหรับ major class ให้ undersample (ลดจำนวน) ด้วยการ random selection ส่วน minor class ให้ oversample (เพิ่มจำนวน) ด้วยเทคนิคต่างๆ

สามารถตามไปอ่านเชิงเทคนิคมากขึ้นจาก ref ต้นฉบับได้เช่นกันค่ะ

หรือลองไปดูตัวอย่างจริงๆ จาก Down-sample Majority Class โดยใช้เทคนิค resample จาก library ยอดนิยมอย่าง scikit-learn

7. เราจะจัดการกับ missing/corrupt data ยังไง?

ตัวอย่าง missing/corrupt data เช่น NaN ในแต่ละ sample

ถ้าเจอ missing value เราสามารถทำ data imputation ได้ (เติมค่าที่หายไป) ซึ่งข้อมูลก็มีหลายประเภท

  • ประเภท categorical อาจเติมด้วย unknownหรือ other แทนประเภทนึงไปเลย
  • ประเภท numeric อาจเติมด้วยค่า 0 หรือค่าที่คำนวณทางคณิตศาสตร์ เช่น ค่าเฉลี่ย หรือจะเติมด้วยค่าอะไรซักอย่างที่ให้โมเดลคำนวณให้ก็ได้

8. เราจะจัดการกับ outlier ยังไง?

ตัวอย่างข้อมูลที่มี outlier (จุดสีแดง) (รูปภาพจาก: researchgate.net)

จริงๆ ให้เราลองวิเคราะห์ข้อมูลทั้งแบบมีและไม่มี outlier เลย ไม่งั้นเราก็จะไม่รู้ว่าถ้าเอา outlier ออกแล้วจะผลออกมาดีหรือแย่ลงหรือไม่ ซึ่งวิธีจัดการกับ outlier คือ

  1. Trimming คือ ถ้าเจอ outlier ก็ลบทั้ง sample ออกไป
  2. Winsorizing คือ แทนที่ค่า outlier นั้นด้วยค่าที่รับได้แทน เช่นค่า max หรือ min ของข้อมูล

ซึ่งจะนิยมทำแบบหลังมากกว่า

9. เราจะทำยังไงให้ไม่เกิด overfitting?

จริงๆ คำถามนี้แอบหลอกถามเราว่า เข้าใจโมเดลที่กำลังใช้อยู่รึเปล่า ถ้าเข้าใจจะรู้ว่าต้องใช้เทคนิคอะไยจัดการกับ overfitting นั้น ข้างล่างนี้คือ cheatsheet!

เทคนิคการจัดการกับ overfitting บนโมเดลต่างๆ (รูปภาพจาก thelearningmachine.ai)

ใครลืม overfitting ไปทวนแป๊บ

10. L1 กับ L2 ต่างกันยังไงในการลดทอนค่า?

https://towardsdatascience.com/regularization-in-machine-learning-connecting-the-dots-c6e030bfaddd

L1 ( Lasso regression)

ใช้ผลรวมของค่าสัมบูรณ์ ของ model parameters ในการลดทอน (penalty) น้ำหนัก (weight) ให้อยู่ในช่วงที่กำหนด, ซึ่งจะทำแบบนั้นได้ก็ต้องปรับแต่งค่าให้อยู่ในค่าทั่วไป (regularization)โดยลดทอนค่าสัมประสิทธิ์ (coefficients) ของตัวแปร regression บางตัวไปที่ 0

อ่านละงงมะ งง! แนะนำให้อ่านต่อจ้า นี่แปลมาตรงๆ งง คืองง ยิ่งแปลไทยยิ่ง งง อ่านภาษาอังกฤษกันดีกว่าเนอะ 555

คหสต : ซึ่ง L1 นี่เวลาลดทอน feature’s coefficient ไปที่ weight=0 นี่คือเอาไปใช้ในการตัด feature ทิ้งได้ด้วยล่ะ! เพราะ feature x ถูกคูณด้วย weight=0 ก็เลยหายไป บัยยย~เอาไว้ใช้ในกรณีที่ feature มากันเยอะจังเล้ยแม่จ๋าาา

L2 (Ridge regression)

ใช้ผลรวมของค่ายกกำลังของ model parameters ในการลดทอน (penalty) ค่าน้ำหนัก (weight) ให้เข้าใกล้ 0 แต่ไม่ใช่ 0

L₂ Regularization

คหสต : L2 ใช้การยกกำลัง ทำให้เวลาไปเจอ outlier weights นี่ก็จะทำให้ค่าโดดเด้งออกมาเลยทีเดียวทำให้เอามาใช้ประโยชน์ในการหา model complexity ได้ด้วยจ้า

แนะนำอ่านต่อ : Regularization in Machine Learning: Connect the dots

จบแล้วววว

ปล. บอกไว้ก่อนว่าพยายามแปลให้ตรงกับต้นฉบับมากที่สุด เนื้อหาผิดถูกยังไงไปบ่นต้นทางโลด (// วิ่งหนี) ส่วนถ้าแปลผิด หรือตรงไหนน่าจะแปลได้ดีกว่าเม้นมาโลด แต่ส่วนตัวแล้วคิดว่าเราอ่านภาษาอังกฤษ จำภาษาอังกฤษ ไม่ต้องมาแปลไทยอีกรอบจะง่าย และไวกว่ามากๆ จ้า (แล้วแปลทำไมอ่ออออ)

--

--