The 5 Sampling Algorithms every Data Scientist need to know

13-Nov-19

คัมภีร์เทพ IT

See the original english version Click here!

 

Data Science เป็นการศึกษาเกี่ยวกับ Algorithm จากที่คุณ Rahul Agarwal ต้องเจอกับ Algorithm มากมายในแต่ละวัน เขาจึงรวบรวม Algorithm ที่พบมากและถูกใช้งานบ่อยที่สุดมาให้เราได้ทราบกัน ซึ่งเป็น 5 Sampling Algorithms ที่ Data Scientist ทุกคนควรรู้จัก ซึ่งคุณสามารถใช้งานพวกมันได้เมื่อต้องทำงานกับข้อมูล
  • Simple Random Sampling
สมมติว่าคุณต้องการเลือก Subset ของประชากร (Population) ที่แต่ละสมาชิกของ Subset มีความน่าจะเป็น (Probability) ที่เท่ากันในการถูกเลือก
ด้านล่างนี้ เป็นการเลือก 100 ตัวอย่างจาก Dataset  

  • Stratified Sampling
สมมติว่า เราต้องประมาณจำนวน Vote โดยเฉลี่ยสำหรับผู้สมัครแต่ละคนในการเลือกตั้ง โดยในประเทศนี้มีอยู่ 3 เมือง คือ:
เมือง A มี คนงานที่ทำงานในโรงงาน จำนวน 1 ล้านคน
เมือง B มี คนงาน จำนวน 2 ล้านคนและ
เมือง C มี ผู้เกษียณอายุ จำนวน 3 ล้านคน
เราจะสามารถเลือกสุ่ม 60 ตัวอย่าง จากประชากรทั้งหมด แต่มีโอกาสที่ Simple Random Sampling จะเกิดความไม่สมดุลกันสำหรับทั้ง 3 เมือง และด้วยเหตุนี้จะทำให้เกิดความเอนเอียงซึ่งก่อให้เกิดข้อผิดพลาดอย่างมีนัยสำคัญในการประมาณได้
แต่หากเราเลือกที่จะสุ่มตัวอย่างที่มีขนาด 10, 20 และ 30 จากเมือง A, B และ C ตามลำดับ จะทำให้เกิดข้อผิดพลาดที่น้อยลง ในการประมาณค่าสำหรับขนาดตัวอย่างทั้งหมด
คุณสามารถทำสิ่งนี้ได้ง่าย ๆ ด้วยการใช้ Python: 

  • Reservoir Sampling
ลองมาดูปัญหานี้กัน:
สมมติว่า คุณมี Stream ของ Items ที่มีปริมาณมาก ๆ และไม่รู้จำนวนที่แท้จริงของมัน ซึ่งเราสามารถใช้งานวนซ้ำ (Iteration) ได้ครั้งเดียวเท่านั้น
หากเราต้องการ สร้าง Algorithm ที่สุ่มเลือก Item จาก Stream เหล่านั้น โดยให้แต่ละ Item มีแนวโน้มที่จะถูกเลือกเท่ากัน เราจะทำสิ่งนั้นได้อย่างไร
สมมติว่า เราต้องสุ่มตัวอย่าง 5 Objects จาก Stream ทั้งหมดข้างต้นที่มีจำนวนมากมายมหาศาล โดยที่แต่ละ Element มีความน่าจะเป็นที่เท่ากันในการถูกเลือก

 มันสามารถพิสูจน์ทางคณิตศาสตร์ได้ว่า ในตัวอย่างแต่ละ Element มีความน่าจะเป็นพอ ๆ กันในการที่จะถูกเลือก แต่คำถามคือ อย่างไรล่ะ

มันจะช่วยเราได้มากขึ้น หากเรามองปัญหาให้มีขนาดเล็กลง เมื่อพูดถึงคณิตศาสตร์
ดังนั้น เราลองกลับมานึกใหม่ว่า มีข้อมูลอยู่ 3 Items และเราต้องการเลือกเพียง  2 Items เท่านั้น
เราเห็น Item แรก เราเก็บไว้ใน List เนื่องจาก Reservoir ของเรามีพื้นที่ว่าง เราเห็น Item ที่ 2 เราเก็บมันไว้ใน List เนื่องจาก Reservoir ของเราก็ยังมีพื้นที่อยู่
เราเห็น Item ที่ 3 และนี่คือสิ่งที่น่าสนใจ เราเลือก Item ที่ 3 ที่อยู่ใน List โดยมีความน่าจะเป็น 2 / 3
ตอนนี้เราจะเห็น ความน่าจะเป็น ของการเลือก Item แรกแล้ว:
ความน่าจะเป็นที่จะ Remove Item แรก ก็คือ ความน่าจะเป็นของ Element ที่ 3 ซึ่งได้รับเลือก คูณด้วย ความน่าจะเป็นของ Element ที่ 1 ที่ได้รับการเลือกแบบสุ่ม ซึ่งเป็นตัวเลือกทดแทน จาก Element ที่ 2 ใน Reservoir ซึ่งมีความน่าจะเป็น คือ:

 ​2 / 3 * 1 / 2 = 1 / 3

 ดังนั้น ความน่าจะเป็นที่ Element ที่ 1 จะถูกเลือกก็คือ:

1 – 1 / 3 = 2 / 3

 เราสามารถมี Argument เดียวกันสำหรับ Element ที่ 2 และเราสามารถขยายมันสำหรับ Element มากมาย

ดังนั้น แต่ละ Item มีความน่าจะเป็นที่เหมือนกันในการถูกเลือก ก็คือ 2 / 3 หรือโดยทั่วไปคือ k / n  
  • Random Undersampling และ Oversampling

บ่อยครั้งมาก ที่เราจะพบ Dataset ที่ไม่มีความสมดุล
เทคนิคที่มักนำมาใช้อย่างกว้างขวางสำหรับการจัดการกับ Dataset ที่มีความไม่สมดุลอย่างมาก เรียกว่า Resampling มันประกอบด้วย การ Remove ตัวอย่างออกจาก Majority Class (Undersampling) และ/หรือ เพิ่มตัวอย่างเพิ่มเติมจาก Minority Class (Oversampling) 
ก่อนอื่น ให้เราสร้างตัวอย่างของข้อมูลที่ไม่สมดุลก่อน

ตอนนี้เราสามารถทำการ Random แบบ Oversampling และ Undersampling โดยใช้:

 

  • Undersampling และ Oversampling โดยการใช้ Imbalanced-Learn
imbalanced-Learn(imblearn) เป็น Python Package เพื่อจัดการกับ Dataset ที่ไม่มีความสมดุลกัน
มันได้จัดเตรียม Methods ต่าง ๆ มากมายไว้สำหรับ Undersample และ Oversample แล้ว

a. Undersampling โดยใช้ Tomek Links: 

หนึ่งใน Methods ดังกล่าวนั้น เรียกว่า Tomek Links โดย Tomek Links ถือเป็นตัวอย่างที่คู่กันของ Opposite Classes ใน Vicinity ที่ใกล้เคียงกัน

ใน Algorithm นี้ เราจะทำการ Remove Majority Element ออกจาก Tomek Links ซึ่งได้เตรียมขอบเขตของการตัดสินใจที่ดีขึ้นสำหรับ Classifier

 

Source

  

b. Oversampling โดยใช้ SMOTE: 

ใน SMOTE (Synthetic Minority Oversampling Technique) เราจะทำการรวบรวม Elements สำหรับ Minority Class ใน Vicinity ของ Element ที่มีอยู่แล้ว

 

Source

  

ยังมีอีกหลาย Methods ใน imblearn package สำหรับทั้ง Undersampling (Cluster Centroids, NearMiss เป็นต้น) และ Oversampling (ADASYN และ bSMOTE) ที่คุณสามารถนำไปใช้งานได้ 

สรุป

 Algorithms ถือเป็นส่วนที่สำคัญมากสำหรับ Data Science 

Sampling ก็ถือเป็นหัวข้อสำคัญใน Data Science และเราก็ไม่ค่อยได้พูดถึงเรื่องนี้มากเท่าที่ควร บางครั้ง Sampling Strategy ที่ดีก็สามารถช่วยดึงให้ Project ทั้งหมดเดินหน้าไปได้เป็นอย่างดี ส่วน Sampling Strategy ที่ไม่ดี อาจให้ผลลัพธ์ที่ไม่ถูกต้องแก่เราได้ ดังนั้น จึงควรระมัดระวังในการเลือก Sampling Strategy 

ที่มา:  https://towardsdatascience.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด

ดูตำแหน่งงานที่ใช้ทักษะภาษา Python ได้ที่นี่

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด

ดูตำแหน่งงานที่ใช้ทักษะภาษา Python ได้ที่นี่

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด