ในหลาย ๆ Dataset เราจะพบว่าข้อมูลแบบ Category มีการแตกยิบย่อยมากเกินไป เช่น บาง Category มีแค่ 1 หรือ 2 Record เท่านั้น หรือ Category เล็ก จำนวน Record แตกต่างกับ Category ใหญ่ ๆ หลายร้อย หลายพันเท่า ข้อมูล Category เล็ก ๆ ยิบย่อยเหล่านี้ อาจจะไม่ได้ช่วยโมเดล Machine Learning ในการเรียนรู้ก็ได้
ทางแก้คือ เราจะ Group รวม Category เล็ก ๆ เหล่านั้นรวมออกมาเป็น Category ใหม่ ตั้งชื่อว่า Other

Other (และอื่น ๆ)
การสร้าง Other Category มีข้อดีอีกอย่าง คือ ถ้าเวลาใช้งานจริง มีข้อมูล Category ใหม่ หลุดเข้ามา เราอาจจะเอาใส่ไว้ใน Other ได้เลย โดยที่ไม่ต้องแก้โปรแกรมเยอะ
และยิ่งถ้า Category นั่นใช้ One-Hot Encoding ถ้าเรามี Category ยิบย่อยจำนวนมาก เช่น หลักพัน จะทำให้ต้องเพิ่มจำนวน Column อีกหลักพัน เท่าจำนวนหมวดหมู่ ทำให้โมเดลอาจจะมีปัญหาได้
เรามาเริ่มกันเลยดีกว่า
ในข้อมูลแบบ Category ถ้าข้อมูลมีการแตกยิบย่อยมากเกินไป เช่น บาง Category มีแค่ 1 หรือ 2 Record หรือจำนวน Record แตกต่างกับ Category ใหญ่ ๆ เป็น 100 เป็น 1000 เท่า ข้อมูล Category เหล่านี้ อาจจะไม่ได้ช่วยโมเดล Machine Learning ในการเรียนรู้ก็ได้
ทางแก้คือ เราจะ Group Category เล็ก ๆ เหล่านั้นรวมออกมาเป็น Category ใหม่ ตั้งชื่อว่า Other
การสร้าง Other Category มีข้อดีอีกอย่างคือ ถ้ามีข้อมูล Category ใหม่หลุดมา เราอาจจะเอาใส่ไว้ใน Other ได้เลย โดยที่ไม่ต้องแก้โปรแกรมเยอะ
0. Magic¶
%reload_ext autoreload
%autoreload 2
%matplotlib inline
1. Import¶
import pandas as pd
import matplotlib.pyplot as plt
2. Data¶
เราจะสมมติข้อมูล ผู้เข้าร่วมงานสัมมนา ขึ้นมา
df = pd.DataFrame({'Name': ["Mister A", "Mister B", "Mister C", "Mister D", "Mister E", "Mister F", "Mister G", "Mister H", "Mister I", "Mister J", "Mister K", "Mister L", "Mister M", "Mister N", "Mister O", "Mister P", "Mister Q", "Mister R", "Mister S", "Mister T", "Mister U", "Mister V", "Mister W", "Mister X"],
'Age': [22, 33, 35, 31, 41, 51, 27, 33, 37, 31, 42, 57, 22, 33, 35, 31, 41, 51, 27, 33, 37, 31, 42, 57],
'Country': ["Thai", "Laos", "Laos", "Thai", "Brazil", "Ethiopia", "Myanmar", "Canada", "Laos", "Thai", "Thai", "Myanmar", "Thai", "Laos", "Laos", "Thai", "Myanmar", "Myanmar", "Myanmar", "Laos", "Laos", "Thai", "Thai", "Myanmar"],
})
df
3. Preprocessing¶
3.1 Other Category¶
Before¶
การที่เราจะ Group Category เล็ก รวมกันเป็น Other เราต้องเข้าใจข้อมูลก่อน นับดูก่อน ว่าแต่ละ Category มีสมาชิกเท่าไร
df["Country"].value_counts()
ในเคสนี้ เราจะเลือก Top 3 Category ออกมาก่อน
top3 = df["Country"].value_counts().nlargest(3).index
top3
After¶
เราจะ Group Category ให้เหลือเป็น 3 + 1 Category (Top 3 + Other)
df["Country_NEW"] = df["Country"].where(df["Country"].isin(top3), other="Other")
df
นับค่า Feature ใหม่ ที่เพิ่งสร้างขึ้นมา
df["Country_NEW"].value_counts()
4. สรุป¶
- เราได้ Group รวม Category เล็ก ๆ รวมเข้าเป็น Category ใหม่ ตั้งชื่อว่า Other ซึ่งเราต้องตัดสินใจเลือกว่าเล็ก คือแค่ไหน จากความเข้าใจในข้อมูล ด้วยการทำ Exploratory Data Analysis (EDA)
- เราสามารถสร้าง Other Category อย่างง่าย ด้วย โค้ดไม่กี่บรรทัด และ Pandas Dataframe
- เราสามารถนำเทคนิคนี้ ไปใช้ร่วมกับ Preprocessing แบบอื่น ๆ เพื่อจัดเตรียมข้อมูล เพิ่มประสิทธิภาพการเรียนรู้ให้กับโมเดลของเรา
Credit¶