Data Cleaning 101 ทำไมข้อมูลต้องสะอาดก่อนวิเคราะห์
ในยุคที่ใครๆ ต่างก็พูดว่า “Data is the new oil” หรือข้อมูลคือขุมทรัพย์ใหม่ แต่เคยสงสัยไหมครับว่าถ้า “น้ำมัน” ที่เราได้มามันไม่บริสุทธิ์…
Data Cleaning 101 ทำไมข้อมูลต้องสะอาดก่อนวิเคราะห์
ในยุคที่ใครๆ ต่างก็พูดว่า “Data is the new oil” หรือข้อมูลคือขุมทรัพย์ใหม่ แต่เคยสงสัยไหมครับว่าถ้า “น้ำมัน” ที่เราได้มามันไม่บริสุทธิ์ เราก็คงเอามันไปใช้ประโยชน์อะไรไม่ค่อยได้ ข้อมูลก็เช่นกันครับ ถ้าข้อมูลที่เรามีมัน “สกปรก” (Dirty Data) หรือไม่มีคุณภาพ การนำไปใช้วิเคราะห์เพื่อตัดสินใจก็อาจจะผิดพลาดจนสร้างความเสียหายได้เลย วันนี้เราจะมาเจาะลึกกันว่าข้อมูลมันสกปรกได้อย่างไร แล้วเราจะจัดการกับมันยังไงบ้างครับ
1. ทำไมข้อมูลถึงสกปรก
ลองนึกภาพตามนะครับ ข้อมูลที่เราเห็นในระบบต่างๆ ไม่ได้สมบูรณ์แบบเสมอไป มันมีสาเหตุหลายอย่างที่ทำให้ข้อมูลเหล่านั้นกลายเป็นข้อมูลที่ไม่มีคุณภาพ หรือที่เรียกว่า “Dirty Data” ได้ สาเหตุหลักๆ ก็มาจากเรื่องเหล่านี้นั่นเองครับ
- ข้อมูลที่ป้อนเข้ามาไม่ได้ถูกตรวจสอบ (Data input are not validated) : จินตนาการถึงการกรอกฟอร์มที่อนุญาตให้เราใส่เบอร์โทรศัพท์เป็นตัวอักษรได้ นี่คือตัวอย่างคลาสสิกเลยครับ 5555 + คือไม่มีการดักจับข้อมูลที่ผิดพลาดตั้งแต่แรก
- ซอฟต์แวร์คำนวณผิดพลาด (Software make wrong calculations) : บางครั้งบั๊ก (bug) ในโปรแกรมก็อาจทำให้การคำนวณเพี้ยนไปได้ เช่น การคำนวณส่วนลดหรือภาษีที่ผิดเพี้ยนออกไป
- การคำนวณที่ไม่สมบูรณ์ (Incomplete calculations) : กระบวนการบางอย่างอาจหยุดทำงานกลางคัน ทำให้ข้อมูลที่ควรจะถูกคำนวณหรืออัปเดตยังอยู่ในสถานะที่ไม่สมบูรณ์
- การแก้ไขฐานข้อมูลโดยตรง (Direct database manipulation) : การเข้าไปแก้ข้อมูลในฐานข้อมูลโดยตรงแบบไม่ผ่านกระบวนการที่ถูกต้อง อาจสร้างความไม่สอดคล้องกันของข้อมูลได้
- การออกแบบระบบที่ไม่ดี (Bad design) : การออกแบบโครงสร้างการเก็บข้อมูลที่ไม่มีประสิทธิภาพหรือไม่ครอบคลุม ก็เป็นต้นเหตุของปัญหาข้อมูลในระยะยาวได้เหมือนกันกัน
2. Data Quality Problem
เมื่อรู้สาเหตุแล้ว มาดูกันว่าปัญหาคุณภาพข้อมูลมันมีหน้าตาแบบไหนบ้าง โดยเราสามารถแบ่งปัญหาออกเป็น 2 กลุ่มใหญ่ๆ คือปัญหาจากแหล่งข้อมูลเดียว และปัญหาจากหลายแหล่งข้อมูล

data qua
2.1 ปัญหาจากแหล่งข้อมูลเดียว (Single-Source Problem)
2.1.1 Schema Level Problems : ปัญหากลุ่มนี้เปรียบเสมือนการ ออกแบบโครงสร้างที่ไม่ดี คือตัวโครงสร้างที่ใช้เก็บข้อมูลเปิดช่องให้เกิดข้อมูลที่ผิดพลาดได้ง่ายๆ
- Uniqueness
ตัวอย่างเช่น : สมมติว่าในระบบฐานข้อมูลลูกค้า เราควรจะกำหนดว่าเลขบัตรประชาชนหรือรหัสลูกค้าของแต่ละคนต้องไม่ซ้ำกัน แต่ถ้าตอนออกแบบระบบ เราไม่ได้ตั้งกฎว่าห้ามซ้ำ (Uniqueness constraint) นี้ไว้ ก็อาจจะทำให้พนักงานสามารถสร้างข้อมูลของ user ซ้ำกัน 2 ครั้ง ด้วยเลขบัตรประชาชนเดียวกันได้ พอจะนับจำนวนลูกค้าก็จะนับผิด หรือส่งของให้ผิดคนได้นั่นเอง
- Referential integrity
ตัวอย่างเช่น : หากเรามีตารางรายการสั่งซื้อกับตารางสินค้า โดยในตารางสั่งซื้อจะมีการอ้างอิง รหัสสินค้า ที่มีอยู่จริงในตารางสินค้า แต่ถ้าระบบออกแบบมาไม่ดี เราอาจจะ ลบสินค้าชิ้นนั้นออกจากตารางสินค้า ได้ ทั้งๆ ที่ยังมีรายการสั่งซื้อค้างอยู่ ผลก็คือ เราจะมี รายการสั่งซื้อผี ที่อ้างอิงไปยังรหัสสินค้าที่ไม่มีอยู่จริงในระบบแล้ว
2.1.2 Instance Level Problems : ปัญหากลุ่มนี้ไม่ใช่เรื่องของโครงสร้างแล้ว แต่เป็น ความผิดพลาดตอนกรอกข้อมูล ลงไปในแบบฟอร์มที่เราออกแบบไว้นั่นเองครับ ซึ่งเป็นปัญหาที่เจอกันบ่อยมาก
- Misspelling (การสะกดผิด)
ตัวอย่างเช่น : ในคอลัมน์จังหวัด พนักงานคนหนึ่งอาจกรอกว่ากรุงเทพ, อีกคนกรอก กรุงเทพฯ, อีกคนกรอกกทม หรือแม้กระทั่ง BKK สำหรับคอมพิวเตอร์แล้ว ทั้ง 4 คำนี้คือคนละที่กันเลย เวลาจะนับจำนวนลูกค้าในกรุงเทพฯ ก็จะนับได้ไม่ครบนั่นเองครับ
- Duplication (ข้อมูลซ้ำซ้อน)
ตัวอย่างเช่น : คุณสมศรีสมัครสมาชิกผ่านหน้าเว็บ เลยมีข้อมูลในระบบแล้ว 1 รายการ ต่อมาคุณสมศรีไปซื้อของที่หน้าร้าน พนักงานสร้างข้อมูลลูกค้าใหม่อีก 1 รายการ ทำให้ตอนนี้มีข้อมูลคุณสมศรี 2 คนในระบบ ทำให้การสะสมแต้มหรือดูประวัติการซื้อขายของลูกค้าคนนี้ไม่สมบูรณ์
- Contradictory values (ข้อมูลที่ขัดแย้งกัน)
ตัวอย่างเช่น : ในข้อมูลลูกค้าคนเดียวกันคอลัมน์วันเกิด ระบุว่าเป็นปี 1990 (อายุ 35 ปี) แต่ในคอลัมน์อายุ กลับกรอกไว้ว่า 25 ปี หรือในคอลัมน์รหัสไปรษณีย์ เป็นของกรุงเทพฯ แต่คอลัมน์จังหวัดกลับเป็นเชียงใหม่ ซึ่งข้อมูลนั้นมีความขัดแย้งด้วยกันเอง
2.2 ปัญหาจากหลายแหล่งข้อมูล (Multi-Source Problem)
- ระดับโครงสร้าง (Schema Level) : จะเกิดขึ้นเมื่อเรารวมข้อมูลจากหลายระบบที่มีโครงสร้างต่างกัน เช่น ชื่อคอลัมน์ไม่เหมือนกัน (Naming conflicts) หรือโครงสร้างตารางต่างกัน (Structural conflicts)
- ระดับข้อมูล (Instance Level) : เป็นปัญหาคลาสสิกของการรวมข้อมูลเลยครับ คือมีข้อมูลที่ทับซ้อนหรือขัดแย้งกัน (Overlapping, contradicting data) หรือการรวมข้อมูลที่มาจากช่วงเวลาที่ต่างกัน (Inconsistent timing)
3. Data Quality
หัวใจของการใช้ข้อมูลให้เกิดประโยชน์สูงสุด ไม่ใช่แค่การเก็บเยอะๆ เท่านั้นครับ แต่ต้องมั่นใจว่าข้อมูลที่เราใช้นั้นมีคุณภาพ ซึ่งคุณภาพข้อมูลสามารถพิจารณาได้จากหลายมิติเช่น
- ความถูกต้อง (Accuracy) : ข้อมูลต้องตรงกับความเป็นจริง
- ความสมเหตุสมผล (Validity) : ข้อมูลต้องอยู่ในรูปแบบและขอบเขตที่กำหนดไว้
- ความน่าเชื่อถือ (Reliability) : ข้อมูลต้องมีความสม่ำเสมอและเชื่อถือได้
- ความทันสมัย (Timeliness) : ข้อมูลต้องเป็นปัจจุบันพอที่จะนำไปใช้ประโยชน์ได้
- ความเกี่ยวข้อง (Relevance) : ข้อมูลต้องเกี่ยวข้องกับสิ่งที่กำลังจะนำไปใช้
- ความสมบูรณ์ (Completeness) : ไม่มีข้อมูลส่วนสำคัญที่หายไป
- การปฏิบัติตามข้อกำหนด (Compliance): ข้อมูลต้องสอดคล้องกับกฎระเบียบหรือมาตรฐานต่างๆครับ

Data Quality source : https://www.ovaledge.com/blog/data-quality-metrics
หลังจากที่เราได้เรียนรู้ถึงสาเหตุของปัญหาเกี่ยวกับคุณภาพข้อมูล (Data Quality Problem) ไปแล้ว ในขั้นตอนถัดไปคือการทำความเข้าใจลักษณะของข้อมูลที่ดี ซึ่งสามารถนำไปใช้งานได้อย่างมีประสิทธิภาพ ต่อไปนี้คือ ลักษณะปัญหาที่พบบ่อยในการล้างข้อมูล (Data Cleansing) ซึ่งเป็นขั้นตอนสำคัญในการยกระดับคุณภาพข้อมูลให้ พร้อมใช้งาน อย่างแท้จริง
4 . Common topics in data cleansing
1. ข้อมูลที่หายไป (Missing Data)
เป็นหนึ่งในปัญหาที่พบได้บ่อยที่สุด หมายถึงกรณีที่ข้อมูลบางช่องซึ่งควรจะมีค่ายังไม่ได้รับการกรอก หรือมีข้อมูลไม่ครบถ้วนตัวอย่างเช่น
- ข้อมูลลูกค้าที่ไม่มีการกรอกเบอร์โทรศัพท์ หรือ อีเมล
- ข้อมูลการสั่งซื้อที่ไม่มีวันที่จัดส่งสินค้า
- ตารางพนักงานที่ไม่มีระบุ แผนก เป็นต้น
2. ข้อมูลที่ผิดอย่างชัดเจน (Outright Wrong Data)
หมายถึงข้อมูลที่มีการบันทึกค่าไว้แต่ค่าดังกล่าวผิดเพี้ยนจากความเป็นจริงอย่างเห็นได้ชัด หรือเป็นไปไม่ได้ในเชิงตรรกะ ตัวอย่างเช่น
- อายุของลูกค้าแสดงเป็น 250 ปี
- เพศของพนักงานกรอกเป็นคำว่า รถยนต์
- วันที่สั่งซื้อระบุเป็นปี 2030 (ในขณะที่ปัจจุบันคือปี 2025)
- คะแนนความพึงพอใจ (เต็ม 5) แต่มีค่าระบุเป็น 100 เป็นต้น
3. ข้อมูลที่ไม่เป็นหนึ่งเดียวกัน (Fragmented or Inconsistent Data)
หมายถึงการที่ข้อมูลชุดเดียวกันถูกจัดเก็บอย่างกระจัดกระจาย หรือไม่อยู่ในรูปแบบมาตรฐานเดียวกัน ทำให้ยากต่อการรวมและใช้งานข้อมูลอย่างต่อเนื่องตัวอย่างเช่น
- ลูกค้าคนเดียวกันมีข้อมูลกระจายอยู่ในหลายแหล่ง เช่น ชื่อกับที่อยู่ในแหล่งหนึ่ง และชื่อกับเบอร์โทรในอีกแหล่งหนึ่ง
- การเก็บที่อยู่ที่ไม่มีรูปแบบมาตรฐาน เช่น บางรายการรวมไว้ในช่องเดียว บางรายการแยกเป็น บ้านเลขที่, ถนน, อำเภอ เป็นต้น
4. ข้อมูลที่เป็นค่าผิดปกติ (Outliers)
คือข้อมูลที่มีค่าหลุดหรือเบี่ยงเบนจากค่ากลางของชุดข้อมูลมากผิดปกติ ซึ่งอาจเป็นข้อมูลที่ผิด หรืออาจสะท้อนเหตุการณ์ที่เกิดขึ้นจริงแต่จำเป็นต้องได้รับการตรวจสอบเป็นพิเศษ ตัวอย่างเช่น
- พนักงานส่วนใหญ่มีรายได้ระหว่าง 15,000–80,000 บาท แต่พบพนักงานบางราย (เช่น CEO) มีรายได้ 1,000,000 บาท
- ยอดสั่งซื้อสินค้าออนไลน์โดยเฉลี่ยอยู่ที่ 500–2,000 บาท แต่พบรายการสั่งซื้อ 300,000 บาทในบางครั้ง
การตรวจสอบและจัดการกับปัญหาทั้ง 4 ประเภทนี้ คือกระบวนการพื้นฐานของการล้างข้อมูล (Data Cleansing) ที่ช่วยให้ได้ชุดข้อมูลที่มีคุณภาพ สะอาด น่าเชื่อถือ และพร้อมใช้งานในการวิเคราะห์ข้อมูลต่อไปครับ
5. data cleansing in practice
หลังจากที่เราได้เรียนรู้แนวคิดและวิธีการทำความสะอาดข้อมูล (Data Cleaning) ในภาพรวมกันไปแล้ว คราวนี้เราจะมาเจาะลึกลงไปในรูปแบบหนึ่งของการทำ Data Cleaning ที่พบได้บ่อยที่สุด นั่นก็คือ การจัดการกับข้อมูลที่หายไป (Missing Data)
5.1 Missing Data
ข้อมูลที่หายไปเป็นปัญหาที่พบบ่อยที่สุด และต้องจัดการอย่างระมัดระวัง เพราะอาจส่งผลกระทบต่อการวิเคราะห์ได้ การจัดการกับ Missing Data มีขั้นตอนหลักดังนี้
- หาสาเหตุที่ทำให้ข้อมูลหาย เช่น เป็นค่าที่ไม่ได้ถูกบันทึก, การดึงข้อมูลล้มเหลว, หรือเป็นค่าที่ไม่เกี่ยวข้องกับเงื่อนไข
- ตัดสินใจว่าจะแก้ไขอย่างไร เช่น ลบทิ้ง เติมค่ากลาง หรือใส่ค่าว่าง
- ใช้โค้ดหรือเครื่องมือเพื่อจัดการตามที่กำหนดไว้
ขั้นตอนที่ 1 : โหลดและสำรวจข้อมูลเบื้องต้น
csv_filepath = os.path.join(path, 'nyc_flights.csv')
df_flight = pd.read_csv(csv_filepath)
df_flight.head()
เพื่ออ่านไฟล์ข้อมูลและแสดง 5 แถวแรกเพื่อตรวจสอบหน้าตาของข้อมูลเบื้องต้น โดยเราจะเห็นคอลัมน์สำคัญๆ เช่น year, month, day, dep_time, arr_time, และอื่นๆ

ขั้นตอนที่ 2 : ตรวจสอบจำนวนข้อมูลที่หายไปในแต่ละคอลัมน์
df_flight.isnull().sum()
เพื่อตรวจสอบว่าคอลัมน์ใดมีข้อมูลหายไป และหายไปมากน้อยแค่ไหน

ขั้นตอนที่ 3 : วิเคราะห์ข้อมูลที่มีปัญหา
df_flight[df_flight['dep_time'].isnull()]
เป็นการดูรายละเอียดของแถวที่มี dep_time หายไปว่ามีลักษณะอย่างไร ซึ่งพบว่าแถวที่ไม่มีข้อมูลเวลาออกเดินทาง (dep_time) ก็มักจะไม่มีข้อมูลในคอลัมน์ที่เกี่ยวข้องด้วย เช่น dep_delay และ arr_time ด้วยเช่นกัน แสดงว่าแถวเหล่านี้อาจเป็นเที่ยวบินที่ถูกยกเลิก หรือมีปัญหาในการบันทึกข้อมูล

ขั้นตอนที่ 4 : ลบแถวที่ข้อมูลสำคัญหายไป และตรวจสอบผล
df_flight = df_flight[~df_flight['dep_time'].isnull()]
df_flight.isnull().any()
- ข้อมูลที่เหลือไม่มี
dep_timeที่มีค่าว่างอีก - คำสั่ง
.isnull().any()จะคืนค่าFalseหมายถึงไม่มีคอลัมน์ใดที่ยังมีค่าว่าง

ในชุดข้อมูลเที่ยวบิน พบว่า dep_time และ arr_time มีค่าหายไป เมื่อตรวจสอบพบว่าเที่ยวบินนั้นถูกยกเลิก (Cancelled) จึงไม่มีข้อมูลเวลา หากเราสนใจเฉพาะเที่ยวบินที่เกิดขึ้นจริง ก็สามารถลบแถวที่ถูกยกเลิกออกไปได้
การจัดการกับข้อมูลที่หายไปเป็นขั้นตอนสำคัญที่ไม่ควรมองข้าม เพราะหากดำเนินการอย่างไม่เหมาะสม อาจทำให้ผลวิเคราะห์คลาดเคลื่อนอย่างมีนัยสำคัญ ทั้งนี้ การทำความเข้าใจสาเหตุ การเลือกแนวทางที่เหมาะสม และการลงมือแก้ไขอย่างเป็นระบบ จะช่วยให้ข้อมูลมีคุณภาพสูงขึ้น และสร้างความน่าเชื่อถือในการวิเคราะห์ข้อมูลเชิงลึกในลำดับถัดไป
5.2 Outright Wrong Data
ข้อมูลที่ผิดแน่นอน เช่น อายุ 200 ปี หรือ เพศ = โตโยต้า มักเกิดจากความผิดพลาดในการป้อนข้อมูลหรือเชื่อมตารางผิด ต้องจัดการอย่างเป็นระบบดังนี้
- วิเคราะห์การกระจายของข้อมูล โดยใช้กราฟ เช่น histogram หรือการนับ frequency เพื่อตรวจเจอค่าที่ผิดปกติ
- วิเคราะห์สาเหตุ เช่น พิมพ์ผิด, ระบบรวน, เชื่อมตารางผิด
- แก้ไข เช่น ลบทิ้ง เปลี่ยนเป็นค่าว่าง หรือแทนที่ด้วยค่าที่เหมาะสม
จากข้อมูล ATM พบว่าค่ายอดเงินติดลบและวันที่ไม่สมเหตุสมผล สามารถใช้ describe() ตรวจเจอได้ แล้วลบแถวที่ไม่สมเหตุสมผลเหล่านั้นออก
5.3 ข้อมูลที่กระจัดกระจาย (Fragmentation)
บางครั้งข้อมูลหมวดหมู่เดียวกันถูกบันทึกหลายแบบ ทำให้การวิเคราะห์ผิดพลาดหรือยุ่งยาก
- โดยมองหาค่าที่แตกต่างกันแต่มีความหมายเหมือนกัน เช่น “Marketing” กับ “Marketing and Advertisement”
- ใช้คำสั่งเช่น
replace()เพื่อรวมค่าเหล่านี้ให้เป็นกลุ่มเดียวกัน
ตัวอย่างเช่น : ใน HR Data ค่า “Microbiology” อาจถูกรวมเข้ากับ “Life Sciences” หรือ “Marketing and Advertisement” รวมกับ “Marketing” เพื่อให้การวิเคราะห์สอดคล้องมากยิ่งขึ้นขึ้น
5.4 ข้อมูลสุดโต่ง (Outliers)
ข้อมูลที่เบี่ยงเบนจากกลุ่มอย่างรุนแรง เช่น รายได้เดือนละ 1 ล้านบาทในกลุ่มพนักงานทั่วไป อาจทำให้โมเดลหรือกราฟเบี้ยว
- ใช้ Box Plot, Distribution Plot หรือ Z-score เพื่อระบุ Outliers
- กำหนดจุดตัด เช่น ค่า Percentile (p95, p99) เพื่อกำหนดขอบเขต
- ใช้ฟังก์ชัน
clip()เพื่อตัดค่าที่เกินให้อยู่ในขอบเขต
ตัวอย่างเช่น : ถ้ารายได้พนักงานตำแหน่ง Research Scientist ส่วนใหญ่ไม่เกิน 200,000 บาท แต่มีบางคนที่ข้อมูลแสดงว่าได้ 1,000,000 บาท เราอาจใช้ clip() จำกัดรายได้สูงสุดไว้ที่ p99 เพื่อป้องกันไม่ให้โมเดลเรียนรู้ผิดจากค่าผิดปกตินั้น
หลังจากที่ได้ดำเนินการทำความสะอาดข้อมูลเรียบร้อยแล้ว ขั้นตอนถัดไปคือกระบวนการที่เรียกว่า Feature Engineering ซึ่งมีบทบาทสำคัญอย่างยิ่งในโครงการด้านการวิเคราะห์ข้อมูลและการเรียนรู้ของเครื่อง (Machine Learning)
Feature Engineering คือการประยุกต์ใช้ ความรู้เชิงสถิติ ร่วมกับ ความเข้าใจบริบทของข้อมูล (Domain Knowledge) เพื่อ สร้าง ปรับเปลี่ยน หรือคัดเลือกตัวแปร (Features) ที่มีศักยภาพในการเพิ่มประสิทธิภาพของแบบจำลอง ทั้งในด้านความแม่นยำและความสามารถในการตีความผลลัพธ์
6. Feature Engineering
6.1 การสเกลข้อมูล (Feature Scaling)
อัลกอริธึมจำนวนมากใน Machine Learning โดยเฉพาะอัลกอริธึมที่พึ่งพาการคำนวณระยะทาง เช่น K-Means Clustering, K-Nearest Neighbors (KNN) หรือ Principal Component Analysis (PCA) นั้น มีความไวต่อขนาดของข้อมูลแต่ละตัวแปร หากไม่ปรับให้อยู่ในช่วงที่เหมาะสม ตัวแปรที่มีค่ามากจะมีอิทธิพลต่อแบบจำลองเกินควร
เทคนิคที่ใช้
- Min-Max Scaling : ปรับค่าทุกตัวแปรให้อยู่ในช่วง [0, 1]
- Robust Scaling : ใช้ค่า median และ Interquartile Range (IQR) แทนค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน จึงเหมาะกับข้อมูลที่มี Outlier
- MaxAbs Scaling : เหมาะสำหรับข้อมูลที่มีทั้งค่าบวกและค่าลบ และต้องการรักษาทิศทางของข้อมูลไว้ โดยปรับให้อยู่ในช่วง [-1, 1]
Scaling : Standard, MinMax & Robust Methods source : https://www.linkedin.com/pulse/data-scientists-guide-scaling-standard-minmax-robust-methods-kharche-qm3df/
6. 2 การเข้ารหัสตัวแปรเชิงหมวดหมู่ (Encoding Categorical Variables)
ตัวแปรที่มีลักษณะเป็นหมวดหมู่ (เช่น “อาชีพ”, “สถานภาพสมรส”) จำเป็นต้องแปลงให้อยู่ในรูปแบบเชิงตัวเลขก่อนจึงจะสามารถป้อนเข้าแบบจำลองได้ โดยรูปแบบการเข้ารหัสขึ้นอยู่กับประเภทของหมวดหมู่ ประเภทของการเข้ารหัสเช่น
- Binary Encoding
สำหรับตัวแปรที่มีเพียงสองค่าชัดเจน เช่น
'Yes'/'No'→ แปลงเป็น1/0

ก่อนทำ Binary Encoding

หลังทำ Binary Encoding
- Ordinal Encoding
สำหรับตัวแปรที่มีลำดับความสำคัญ เช่น
'primary' < 'secondary' < 'tertiary'→ แปลงเป็น1, 2, 3ตามลำดับ

ก่อนทำ Ordinal Encoding

หลังทำ Ordinal Encoding
- One-Hot Encoding (Nominal)
สำหรับตัวแปรที่ไม่มีลำดับ เช่น
'job': ['admin.', 'technician', 'retired']→ สร้างคอลัมน์แยกสำหรับแต่ละค่า เช่นjob_admin,job_technician,job_retiredเป็นต้น

ก่อนทำ One-Hot Encoding

หลังทำ One-Hot Encoding
6.3 การจัดการกับการกระจายตัวที่ไม่เป็นปกติ (Dealing with Skewed Distributions)
ในโลกของข้อมูลจริง ตัวแปรจำนวนมากมักไม่ได้มีการแจกแจงแบบปกติ (Normal Distribution) อย่างที่แบบจำลองทางสถิติจำนวนมากสมมติไว้ เช่น Linear Regression หรือ Logistic Regression ซึ่งตั้งอยู่บนสมมติฐานของความเป็นเส้นตรงและการกระจายแบบปกติของตัวแปรอิสระ (Independent Variables)
หนึ่งในปัญหาที่พบบ่อยคือการกระจายที่เบ้ขวา (Right-Skewed Distribution) ซึ่งมักเกิดขึ้นในตัวแปรเช่น
- รายได้ต่อเดือน (Monthly Income)
- ยอดขาย (Sales)
- จำนวนธุรกรรม (Transactions)
ข้อมูลลักษณะนี้จะมีค่ามากส่วนใหญ่อยู่ใกล้ 0 แต่มีค่าบางจุดที่สูงมากผิดปกติ (Outliers) ซึ่งจะส่งผลต่อทั้งการเรียนรู้ของโมเดล และความแม่นยำของการพยากรณ์ซึ่งมีเทคนิคที่นิยมใช้ในการปรับการกระจายให้ดีขึ้น
Log Transformation
การแปลงข้อมูลโดยใช้ลอการิทึม (logarithmic transformation) เช่น np.log(x + 1) เป็นวิธีที่ง่ายและได้ผลดีในการลดความเบ้ของข้อมูล และทำให้การแจกแจงใกล้เคียงกับปกติมากขึ้นตัวอย่างเช่น
- ในชุดข้อมูล HR Analytics คอลัมน์
MonthlyIncomeมีค่ารายได้ตั้งแต่ไม่กี่พันบาทไปจนถึงหลักแสน - การใช้ Log Transformation จะช่วยปรับให้ค่ารายได้นั้นกระจายตัวสม่ำเสมอมากขึ้น
ผลลัพธ์ที่ได้จะช่วยให้แบบจำลองเชิงเส้นสามารถเรียนรู้ได้แม่นยำยิ่งขึ้น เพราะไม่ถูกดึงด้วย Outliers นั่นเองครับ
Box-Cox และ Yeo-Johnson Transformation
เทคนิคเหล่านี้เป็นการแปลงข้อมูลในลักษณะพิเศษที่พัฒนาโดยใช้แนวคิดทางคณิตศาสตร์มากขึ้น
- Box-Cox ใช้ได้กับข้อมูลที่ไม่มีค่า 0 หรือลบ
- Yeo-Johnson สามารถใช้กับข้อมูลที่มีค่าเป็นศูนย์หรือลบได้

ตัวอย่างการใช้ Log Transformation source : https://blog.dailydoseofds.com/p/a-common-misconception-about-log
6.4 Trend Extraction in Time Series
สำหรับข้อมูลที่มีลักษณะเป็นอนุกรมเวลา (Time Series) เช่น
- ข้อมูลการใช้งาน ATM รายวัน
- ยอดขายสินค้าแต่ละเดือน
- ความล่าช้าของเที่ยวบินรายชั่วโมง
แนวโน้ม (Trend) คือส่วนประกอบสำคัญที่สามารถสะท้อนพฤติกรรมระยะยาวของข้อมูล เช่น ขายดีขึ้นทุกเดือน หรือมีการใช้งานเพิ่มขึ้นในช่วงปลายปี ซึ่งการสร้าง feature ที่สะท้อนถึงแนวโน้มของข้อมูลเป็นสิ่งสำคัญโดยใช้เทคนิคดังนี้
Long-Term Trend
สามารถสร้างฟีเจอร์ที่สะท้อนแนวโน้มระยะยาวได้โดยการ ฟิตเส้นตรง (Linear Regression) บนข้อมูลย้อนหลังในช่วงเวลาหนึ่ง เช่น 30 วัน
- ใช้ค่า
slopeของเส้นตรงที่ได้เป็นค่าของ "แนวโน้ม" - ถ้าค่า slope เป็นบวก → แนวโน้มเพิ่มขึ้น
- ถ้าค่า slope เป็นลบ → แนวโน้มลดลง
Short-Term Trend เป็นการใช้สูตรง่ายๆ ในการเปรียบเทียบค่าล่าสุดกับค่าที่ผ่านมาหลายช่วง เช่น

ตัวอย่างสูตร Short-Term Trend ในการหาค่า feature ในช่วงเวลานั้นๆ
กล่าวโดยสรุปแล้วนั้น การทำความสะอาดข้อมูลและการสร้างคุณลักษณะ คือหัวใจสำคัญของการวิเคราะห์ข้อมูลเชิงลึกและการสร้างแบบจำลอง Machine Learning ที่มีประสิทธิภาพ แม้จะเป็นขั้นตอนที่มักถูกมองว่าใช้เวลามากและต้องอาศัยความเข้าใจที่ลึกซึ้ง แต่ผลลัพธ์ที่ได้คือ ชุดข้อมูลที่มีคุณภาพ พร้อมสำหรับการวิเคราะห์หรือคาดการณ์อย่างแม่นยำและเชื่อถือได้
การเลือกใช้เทคนิค Feature Engineering อย่างเหมาะสมสามารถ เพิ่มแปลงข้อมูลดิบธรรมดากลายเป็นข้อมูลที่มีความหมายได้ ซึ่งเป็นสิ่งจำเป็นในการนำข้อมูลไปใช้ตัดสินใจหรือแก้ปัญหาในบริบทจริงได้อย่างมีประสิทธิภาพอีกด้วยครับ
Source
메타데이터
- post_id
- 5ff5ca85e25d
- slug
- data-cleaning-101-ทำไมข้อมูลต้องสะอาดก่อนวิเคราะห์-5ff5ca85e25d
- url
- https://medium.com/@4ommyx/data-cleaning-101-%E0%B8%97%E0%B8%B3%E0%B9%84%E0%B8%A1%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%AA%E0%B8%B0%E0%B8%AD%E0%B8%B2%E0%B8%94%E0%B8%81%E0%B9%88%E0%B8%AD%E0%B8%99%E0%B8%A7%E0%B8%B4%E0%B9%80%E0%B8%84%E0%B8%A3%E0%B8%B2%E0%B8%B0%E0%B8%AB%E0%B9%8C-5ff5ca85e25d
- canonical_url
- https://medium.com/@4ommyx/data-cleaning-101-%E0%B8%97%E0%B8%B3%E0%B9%84%E0%B8%A1%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%AA%E0%B8%B0%E0%B8%AD%E0%B8%B2%E0%B8%94%E0%B8%81%E0%B9%88%E0%B8%AD%E0%B8%99%E0%B8%A7%E0%B8%B4%E0%B9%80%E0%B8%84%E0%B8%A3%E0%B8%B2%E0%B8%B0%E0%B8%AB%E0%B9%8C-5ff5ca85e25d
- author_url
- https://medium.com/@4ommyx
- status
- ok
- fetched_at
- 2026-06-13 07:35:29