# ขั้นตอนการเตรียมข้อมูลเบื้องต้น: วิธีทำความสะอาดข้อมูลทางธุรกิจ

> เรียนรู้ขั้นตอนการเตรียมข้อมูลที่เปลี่ยนบันทึกทางธุรกิจที่ยุ่งเหยิงให้เป็นข้อมูลเชิงลึกที่เชื่อถือได้ พร้อมตัวอย่างสำหรับ SME และดูว่า ELECTE ทำขั้นตอนเหล่านี้โดยอัตโนมัติได้อย่างไร

Source: https://www.electe.net/th/post/data-preprocessing-steps

Site guide: https://www.electe.net/th/llms.txt

คุณดึงไฟล์ส่งออกยอดขายที่ดูเรียบร้อยครบถ้วน มีทั้งคำสั่งซื้อ ต้นทุน และวันที่อยู่เต็มชีต จากนั้นรายงานพยากรณ์ก็ไปถึงโต๊ะหัวหน้าฝ่ายการเงิน และมูลค่าคำสั่งซื้อเฉลี่ยกลับพุ่งสูงขึ้น ทั้งที่แคตตาล็อกสินค้าไม่ได้เปลี่ยนแปลงเลย

การพุ่งขึ้นแบบนั้นมักเกิดจากข้อผิดพลาดในการเตรียมข้อมูล ไม่ใช่พฤติกรรมการซื้อที่เปลี่ยนไป หากเติมราคาที่ว่างทั้งที่ไฟล์ยังมีใบแจ้งหนี้ซ้ำอยู่ หรือปรับสเกลข้อมูลทั้งชุดก่อนที่จะแยกแถวบางส่วนออกไว้ ก็เท่ากับสอนโมเดลด้วยข้อเท็จจริงที่มันยังไม่ควรเห็น บทความส่วนใหญ่แสดง**ขั้นตอนการเตรียมข้อมูล**เป็นเทคนิคแยกกันที่จะทำลำดับใดก็ได้ แต่ลำดับนี่เองคือสิ่งที่ทำให้ผลลัพธ์สูงเกินจริง

ต่อไปนี้คือลำดับที่ผมแนะนำเมื่อนักวิเคราะห์ดูแลไฟล์ธุรกิจที่ใช้งานจริง คุณจะได้ลำดับการทำงาน เกณฑ์ที่ผมถือเป็นจุดเริ่มต้นมากกว่ากฎตายตัว และวิธีล็อกค่าที่ปรับจากข้อมูลแต่ละอย่าง เพื่อให้การโหลดข้อมูลครั้งต่อไปใช้เส้นทางเดียวกัน

## ขั้นตอนการเตรียมข้อมูล 7 ขั้นตามลำดับที่ถูกต้อง

ไฟล์ส่งออกยอดขายอาจดูครบถ้วน แต่ยังซ่อนแถวใบแจ้งหนี้ซ้ำ ต้นทุนต่อหน่วยที่ว่าง และวันที่ที่เก็บเป็นสองรูปแบบ หากแก้ปัญหาเหล่านี้ผิดลำดับ ค่าเฉลี่ยทุกตัวในขั้นถัดไปก็จะรับปัญหานั้นไปด้วย

**ทุกขั้นตอนที่เรียนรู้ค่าตัวเลขจากข้อมูลต้องทำหลังจากแยกชุดข้อมูลแล้ว** ค่าเฉลี่ย ค่ามัธยฐาน หรือช่วงการปรับสเกลที่คำนวณจากไฟล์ทั้งชุดจะทำให้แถวข้อมูลสำหรับตรวจสอบเข้าไปมีอิทธิพลต่อชุดฝึกสอน คะแนนที่ได้จึงดูดีกว่าที่โมเดลจะทำได้จริงกับคำสั่งซื้อเดือนหน้า

ขั้นตอนสิ่งที่ต้องทำถือว่าเสร็จเมื่อ1. ตรวจสอบและทำความสะอาดตรวจจำนวนแถว ชนิดข้อมูล และอัตราค่าว่าง ลบข้อมูลที่ซ้ำกันทุกประการ และปรับรูปแบบวันที่และป้ายกำกับให้เป็นมาตรฐานได้ตารางฐานที่สะอาด โดยแต่ละหมวดหมู่มีป้ายกำกับเดียว2. แบ่งข้อมูลสุ่มสลับลำดับแถว แล้วแบ่งเป็นชุดฝึกสอนและชุดตรวจสอบมีข้อมูลสองชุดแล้ว และยังไม่มีการคำนวณค่าตั้งที่เรียนรู้จากข้อมูล3. จัดการค่าที่หายไปลบแถว ลบฟีเจอร์ หรือเติมค่าโดยใช้เฉพาะข้อมูลชุดฝึกสอนทุกช่องข้อมูลครบถ้วน หรือมีการทำเครื่องหมายช่องที่ยังว่าง4. เข้ารหัสและสร้างฟีเจอร์แปลงหมวดหมู่เป็นตัวเลข สร้างอัตราส่วน ส่วนประกอบของเวลา และค่าเฉลี่ยเคลื่อนที่ได้ตารางฟีเจอร์ที่พร้อมใช้กับโมเดล พร้อมเอกสารอธิบายแต่ละคอลัมน์5. จัดการค่าผิดปกติตรวจสอบค่าที่สูงหรือต่ำผิดปกติ แล้วจำกัดค่า แปลงค่า หรือทำเครื่องหมายไว้ค่าที่ผิดปกติมีคำอธิบาย ไม่ใช่การคาดเดา6. ปรับสเกลฟีเจอร์ตัวเลขฟิตตัวปรับสเกลกับข้อมูลชุดฝึกสอน แล้วนำไปใช้กับข้อมูลชุดตรวจสอบคอลัมน์ตัวเลขอยู่ในช่วงที่เปรียบเทียบกันได้7. ล็อกไปป์ไลน์บันทึกการแปลงข้อมูลที่ฟิตแล้วทุกขั้นตอน เพื่อให้ข้อมูลใหม่ผ่านกระบวนการเดียวกันได้กระบวนการที่รันซ้ำได้ และใช้ได้กับข้อมูลที่โหลดเข้ามาใหม่ทุกครั้ง

สมมติว่าร้านค้าปลีกแห่งหนึ่งมีรายการสั่งซื้อ 12,000 บรรทัด โดยมีแถวใบแจ้งหนี้ซ้ำ 900 แถว หากเติมค่าราคาที่หายไปก่อนลบแถวซ้ำเหล่านั้น ใบแจ้งหนี้เดียวกันจะถูกนับสองครั้ง และทำให้ค่าเฉลี่ยเบี่ยงออกจากราคาในรายการราคาจริง

> **กฎปฏิบัติ:** ทำแถวที่คุณกำลังทำอยู่ให้เสร็จก่อน แล้วค่อยคำนวณสิ่งที่แถวถัดไปต้องใช้

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

## ตรวจสอบโปรไฟล์และทำความสะอาดข้อมูลธุรกิจดิบ

การทำโปรไฟล์ข้อมูลคือขั้นตอนหนึ่งชั่วโมงที่ผู้จัดการทำเสร็จได้ก่อนที่ใครจะเปิดโมเดล เก็บไฟล์ดิบไว้โดยไม่แก้ไข และบันทึกทุกการเปลี่ยนแปลงลงในบันทึกการทำความสะอาด เพื่อให้หัวหน้าฝ่ายการเงินเห็นว่าทำไมยอดรวมจึงเปลี่ยน

1. **นับจำนวนแถวและคอลัมน์ แล้วยืนยันชนิดข้อมูลของแต่ละคอลัมน์** ต้นทุนที่เก็บเป็นข้อความจะรวมยอดไม่ได้ และจะไม่แจ้งข้อผิดพลาดให้เห็นชัด ควรแปลงก่อนเชื่อถือยอดรวมใดๆ
2. **คำนวณอัตราค่าว่างของทุกคอลัมน์** คอลัมน์ที่ว่างเกิน 30% ให้ใช้กฎจัดการค่าที่หายไป ไม่ใช่เติมค่าแบบเร็วๆ ผมจะลบคอลัมน์ทิ้งทั้งหมดก็ต่อเมื่อค่าว่างเกิน 50% และฟิลด์นั้นไม่จำเป็นต่อการตัดสินใจ
3. **ลบเฉพาะแถวที่ซ้ำกันทุกประการ ไม่ใช่แถวที่แค่คล้ายกัน** จับคู่จากเลขที่ใบแจ้งหนี้ วันที่ และจำนวนเงินพร้อมกัน คำสั่งซื้อที่สองซึ่งมีรหัสบรรทัดต่างกันคือยอดขายจริง การลบทิ้งเพียงเพราะลูกค้าและวันที่ตรงกันคือความพลาดที่ทำให้รายได้ต่ำกว่าความเป็นจริง
4. **ปรับรูปแบบให้เป็นมาตรฐานในรอบเดียว** ใช้รูปแบบวันที่เดียว สกุลเงินเดียวต่อคอลัมน์ และไม่มีช่องว่างแปลกปลอมในรหัส รูปแบบที่ปะปนกันจะแยกสินค้าหนึ่งรายการออกเป็นสองชุดข้อมูล และทำให้การรวมตารางในภายหลังผิดพลาด
5. **ทำป้ายกำกับหมวดหมู่ให้เป็นมาตรฐาน** `UK`, `U.K.` และ `United Kingdom` คือตลาดเดียวกัน สายผลิตภัณฑ์เดียวที่สะกดสี่แบบในไฟล์ส่งออกอีคอมเมิร์ซสามปีก็สร้างความเสียหายแบบเดียวกัน เลือกป้ายกำกับเดียวแล้วแมปที่เหลือเข้าด้วยกัน

สมมติว่าไฟล์ส่งออกนั้นเก็บวันที่สั่งซื้อเป็น `2024-03-01` ในปีหนึ่ง และเป็น `01/03/2024` ในอีกปีหนึ่ง จนกว่าทั้งสองจะเป็นรูปแบบเดียวกัน แผนภูมิรายเดือนจะนับเดือนมีนาคมซ้ำสองครั้งหรือตกหล่นไป

### สิ่งที่บันทึกและการตัดข้อมูลส่วนบุคคลช่วยปกป้อง

บันทึกการทำความสะอาดคือตารางสั้นๆ ประกอบด้วย คอลัมน์ กฎ จำนวนแถวที่เปลี่ยน ผู้ดำเนินการ และวันที่ เมื่อฝ่ายการเงินถามว่าทำไมยอดเดือนมีนาคมที่ผ่านมาลดลง คุณชี้ไปที่กฎการลบแถวซ้ำได้ทันที แทนที่จะต้องไล่สร้างไฟล์ใหม่จากความจำ

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

หากต้องการความเห็นเพิ่มเติมว่าข้อมูลที่ "ดี" สำหรับไฟล์ส่งออกเชิงพาณิชย์ควรเป็นอย่างไร [ข้อมูลเชิงลึกด้านคุณภาพข้อมูลการขายจาก Pipecorn](https://pipecorn.com/blog/data-quality-standards) เป็นเช็กลิสต์ที่มีประโยชน์เรื่องตัวระบุ ความครบถ้วน และความสอดคล้อง ใช้เพื่อตัดสินใจว่าควรเก็บคอลัมน์ใด แล้วกลับมาที่เกณฑ์อัตราค่าว่างข้างต้น

## แบ่งข้อมูลก่อนเริ่มการเรียนรู้ใดๆ

การแบ่งข้อมูลเปรียบเหมือนรั้วกั้น สิ่งใดที่ใช้ประมาณค่าสถิติไม่ควรทำบนไฟล์ทั้งหมด

สำหรับการจำแนกข้อความแบบมีผู้สอน (supervised text classification) [คู่มือการจำแนกข้อความของ Google](https://developers.google.com/machine-learning/guides/text-classification/step-3) แนะนำให้สับลำดับข้อมูลก่อนแบ่งชุด เพราะการคงลำดับเดิมไว้อาจทำให้ทั้งสองชุดเอนเอียง หลังสับลำดับแล้ว สัดส่วนการแบ่งโดยทั่วไปคือนำตัวอย่าง **80%** ไปฝึกโมเดล และ **20%** ไปตรวจสอบ (validation) จากนั้นจึงใช้การแปลงข้อมูลชุดเดียวกันกับทั้งสองชุด แต่ต้องเรียนรู้การแปลงนั้นจากแถวข้อมูลฝึกเท่านั้น

### ทำไมไฟล์ยอดขายที่เรียงลำดับไว้จึงให้ผลที่ผิดเพี้ยน

ไฟล์ที่ส่งออกมามักเรียงตามวันที่ ภูมิภาค หรือลูกค้า ถ้าแบ่งไฟล์นั้นจากบนลงล่าง คุณจะฝึกโมเดลด้วยข้อมูลปี 2023 แล้วตรวจสอบด้วยข้อมูลช่วงปลายปี 2024 คะแนนที่ได้จึงสะท้อนปฏิทิน ปฏิทินโปรโมชัน หรือสัดส่วนของภูมิภาคใดภูมิภาคหนึ่ง ไม่ได้บอกว่าโมเดลเข้าใจคำสั่งซื้อจริงหรือไม่

ให้สับลำดับเมื่อแต่ละแถวเป็นกรณีที่เป็นอิสระต่อกัน เช่น คำสั่งซื้อที่ปิดแล้ว บัญชีที่เลิกใช้งาน หรือตั๋วที่จำแนกแล้ว แต่ไม่ต้องสับลำดับเมื่อโจทย์คือการพยากรณ์

> ให้คงลำดับเวลาไว้เมื่อพยากรณ์ ฝึกโมเดลด้วยเดือนก่อนหน้า และทดสอบด้วยเดือนถัดมา การสับลำดับจะทำให้โมเดลเห็นอนาคต แล้วนับว่าเป็นความสามารถ

### ช่องข้อความต้องตัดตามความถี่

ตั๋วซัพพอร์ตและคำอธิบายสินค้าจะแตกออกเป็นโทเคนนับพัน ในขั้นตอนเดียวกันของ Google คุณจะตัดโทเคนที่ปรากฏน้อยกว่า **สอง** ครั้งทิ้ง เก็บฟีเจอร์โทเคนอันดับต้น ๆ **20,000** รายการ แล้วจัดอันดับส่วนที่เหลือด้วยคะแนนความสำคัญที่อิงการทดสอบ F โทเคนที่โผล่มาแค่ครั้งเดียวมักเป็นคำพิมพ์ผิดหรือ SKU ที่ใช้ครั้งเดียว ไม่ใช่รูปแบบที่คุ้มกับการมีหนึ่งคอลัมน์

หลังแบ่งชุดแล้ว ให้ฟิตการแมปทุกอย่างจากข้อมูลฝึกเท่านั้น แล้วนำการแมปที่ตรึงไว้นั้นไปใช้กับชุดตรวจสอบ การคำนวณคลังคำศัพท์หรือรายการหมวดหมู่ใหม่บนแถวที่กันไว้ เป็นอีกทางหนึ่งที่ทำให้คำตอบรั่วเข้าไปในขั้นตอนเตรียมข้อมูล

## เติมค่าที่ขาดหายโดยไม่ทำให้ผลลัพธ์เบี้ยว

ช่องข้อมูลว่างบ่อยแค่ไหน และการตัดสินใจต้องใช้ช่องนั้นหรือไม่ เป็นตัวกำหนดว่าจะทำอย่างไร เกณฑ์ช่วงด้านล่างเป็นหลักปฏิบัติคร่าว ๆ ไม่ใช่กฎตายตัว โมเดลความเสี่ยงในธุรกิจที่มีการกำกับดูแลอาจไม่อนุญาตให้ตัดแถวที่การพยากรณ์ในงานค้าปลีกยอมเสียได้

สัดส่วนข้อมูลที่หายไปความสำคัญของฟีเจอร์การดำเนินการต่ำกว่า 5%ทุกระดับลบแถวเหล่านั้นออก หากยังมีข้อมูลเหลือเพียงพอ5% ถึง 30%ต่ำลบฟีเจอร์นั้นออก5% ถึง 30%สูงเติมค่าที่หายไปโดยใช้เฉพาะแถวข้อมูลชุดฝึกสอนมากกว่า 30%สูงเติมค่าที่หายไป เพิ่มคอลัมน์ระบุค่าว่าง และตรวจสอบว่าเหตุใดฟิลด์นี้จึงว่างเปล่ามากกว่า 30%ต่ำลบฟีเจอร์นั้นออก

แถวแรกคือไฟล์คำสั่งซื้อที่ข้อมูลครบเกือบทั้งหมด แต่มีต้นทุนว่างอยู่เพียงไม่กี่รายการ การลบแถวเหล่านั้นเสียหายน้อยกว่าการแต่งราคาขึ้นมาเอง ส่วนฟิลด์แบบสำรวจที่แทบไม่ได้ใช้และมีข้อมูลอยู่ในช่วงกลาง ก็ไม่คุ้มที่จะเติมค่าเดา จึงตัดคอลัมน์นั้นทิ้ง ส่วนอายุการเป็นลูกค้า (tenure) ที่คุณใช้วิเคราะห์การเลิกใช้บริการ (churn) ให้เก็บไว้และประมาณค่าขึ้นมา

[แนวทางการเตรียมข้อมูลสำหรับการทำคลัสเตอร์ของ Google](https://developers.google.com/machine-learning/clustering/prepare-data) ระบุทางเลือกเชิงปฏิบัติสามข้อ ได้แก่ ลบตัวอย่างที่มีค่าที่ขาดหาย ลบฟีเจอร์นั้น หรือทำนายค่าที่ขาดจากข้อมูลอื่น หากช่องว่างเกิดขึ้นน้อย การลบแถวอาจสมเหตุสมผล แต่ถ้าเกิดบ่อย มักต้องตัดฟีเจอร์ทิ้งหรือเติมค่า (impute)

### ทำนายช่องว่าง แทนการแปะค่าคงที่

สำหรับฟิลด์ตัวเลข ให้เทรนโมเดลถดถอยจากแถวที่มีค่าอยู่ แล้วประมาณค่าช่องที่ว่าง เช่น อายุลูกค้าที่ขาดหายสามารถประมาณจากรายได้และอายุการเป็นลูกค้า แทนการใช้ค่าเฉลี่ยของทั้งบริษัทเพียงค่าเดียว วิธีนี้ใช้ความสัมพันธ์ที่คุณเชื่อถืออยู่แล้ว

มูลค่าคำสั่งซื้อมีการกระจายแบบเบ้ ใบสั่งซื้อขายส่งขนาดใหญ่ไม่กี่ใบดึง**ค่าเฉลี่ย**ให้สูงขึ้น การเติมด้วยค่าเฉลี่ยจึงทำให้ตะกร้าสินค้าทั่วไปดูมีมูลค่าสูงกว่าความเป็นจริง ส่วน**ค่ามัธยฐาน**อยู่ใกล้คำสั่งซื้อทั่วไปและขยับน้อยกว่าเมื่อมีใบแจ้งหนี้ขายส่งก้อนใหญ่เข้ามา ให้เปรียบเทียบสถิติสรุปก่อนและหลังการเติมค่า หากเปลี่ยนไปมาก แสดงว่าวิธีนั้นกำลังเขียนธุรกิจใหม่ ไม่ได้อุดช่องโหว่

สำหรับข้อมูลหมวดหมู่ ให้ระบุช่องว่างเป็น `Unknown` บ่อยครั้งช่องว่างนั้นเองคือสัญญาณ เช่น หน้าชำระเงินที่ไม่เคยเก็บข้อมูลภูมิภาค หรือสินค้าที่ไม่มีรหัสซัพพลายเออร์ การทำให้เป็นระดับข้อมูลจริงช่วยเก็บแถวไว้ และบอกโมเดลว่าฟิลด์นั้นว่างโดยมีเหตุผล

ช่องว่างที่เกิดบ่อยไม่ใช่เรื่องแปลกในงานปฏิบัติการ งานศึกษาปี 2025 เรื่องข้อมูลการใช้น้ำที่ไม่สมบูรณ์อธิบายชุดข้อมูลอาคารที่มีบันทึกรายชั่วโมง **33,888** รายการ ตั้งแต่กุมภาพันธ์ 2019 ถึงธันวาคม 2023 โดยมีค่าที่ขาดหายใน **20%** ของชั่วโมง ซึ่งอยู่ในช่วงที่การลบแถวทั้งหมดจะทิ้งประวัติไปมากเกินไป ([งานศึกษานี้](https://arxiv.org/html/2506.08882v1))

ให้ฟิตตัวเติมค่า (imputer) จากแถวเทรนเท่านั้น [คู่มือข้อมูลที่ขาดหายของ ELECTE](https://www.electe.net/post/missing-data-imputation) อธิบายตัวเลือกการเติมค่าอย่างละเอียดยิ่งขึ้น หากต้องการทบทวนวิธีการอีกรอบ ไม่ใช่ลำดับขั้นตอน

## เข้ารหัสหมวดหมู่และสร้างฟีเจอร์ที่เป็นประโยชน์

ขั้นตอนนี้มีสองงาน คือแปลงป้ายกำกับเป็นตัวเลขที่โมเดลใช้ได้ และสร้างคอลัมน์ที่ตอบคำถามทางธุรกิจซึ่งฟิลด์ดิบตอบไม่ได้

### การเข้ารหัสโดยไม่สร้างลำดับปลอม

**One-hot encoding** เหมาะกับหมวดหมู่ที่มีค่าไม่มาก เช่น ห้าภูมิภาคการขาย แต่ละภูมิภาคจะกลายเป็นคอลัมน์ใช่/ไม่ใช่ของตัวเอง และไม่มีภูมิภาคใดที่ "ใหญ่กว่า" อีกภูมิภาค

**Ordinal encoding** เหมาะกับข้อมูลที่มีลำดับจริง เช่น ไซซ์ S, M และ L ตัวเลขจะตรงกับการจัดอันดับที่ธุรกิจใช้อยู่แล้ว

อย่ากำหนด 1, 2, 3 ให้ชื่อที่ไม่มีลำดับ เช่น ช่องทางขายหรือเมือง โมเดลจะมองว่ารหัสที่สูงกว่าคือมีบางสิ่งมากกว่า ลำดับปลอมนี้จะปรากฏภายหลังเป็นสัมประสิทธิ์ที่มั่นใจแต่ผิด เมื่อฟิลด์มีหลายร้อยระดับ one-hot จะสร้างตารางที่กว้างมาก ให้รวมระดับที่พบน้อยเป็น `Other` ก่อนเข้ารหัส และเรียนรู้การจัดกลุ่มนี้จากแถวเทรนเท่านั้น

### คอลัมน์ที่ตอบคำถามทางธุรกิจ

สร้างรายการสั้นๆ ที่ผูกกับการตัดสินใจเดียว ไม่ใช่เทอัตราส่วนทุกแบบที่คิดออกมาใส่ไว้

- **เปอร์เซ็นต์กำไรขั้นต้น:** `(price − cost) / price` บอกได้ว่าโปรโมชันยังคุ้มต้นทุนหรือไม่ ซึ่งดูจากรายได้อย่างเดียวไม่ได้
- **จำนวนวันนับจากการซื้อครั้งล่าสุด:** การทบทวนลูกค้าที่หายไปต้องใช้ความใหม่ของการซื้อ ไม่ใช่รหัสลูกค้าซ้ำอีกชุด
- **วันในสัปดาห์และเดือน:** การวางแผนอุปสงค์ต้องดูยอดพุ่งวันศุกร์และเดือนตามฤดูกาลที่ซ่อนอยู่ในค่าเวลาแบบเต็ม
- **ค่าเฉลี่ยเคลื่อนที่ 7 วัน:** ยอดขายรายวันขึ้นลงไม่สม่ำเสมอ ค่าเฉลี่ยรายสัปดาห์จะบอกว่าอุปสงค์กำลังเพิ่มขึ้นหรือไม่
- **อัตราส่วนสต็อกต่อยอดขาย:** ผู้จัดการสินค้าคงคลังเห็นสัญญาณขาดสต็อกได้เร็วกว่าการดูจำนวนคงเหลือดิบ

ผมจะเริ่มจากฟีเจอร์สิบถึงสิบห้าตัวที่เชื่อมกับการตัดสินใจเดียวนั้น ตัดคอลัมน์หนึ่งออกเมื่อคู่คอลัมน์มีสหสัมพันธ์เกิน 0.95 เพราะคอลัมน์ที่สองซ้ำกับคอลัมน์แรก เขียนความหมายทางธุรกิจไว้ข้างชื่อคอลัมน์ในพจนานุกรมข้อมูล แผนที่การเข้ารหัสหรือค่าเฉลี่ยเคลื่อนที่ที่เรียนรู้จากไฟล์ทั้งหมด รวมถึงแถวที่ตั้งใจกันไว้เป็นชุดทดสอบ จะทำให้เกิดการรั่วไหลซ้ำกับที่คุณป้องกันไว้ตอนแบ่งข้อมูล

## ปรับสเกลตัวเลขและจัดการค่าผิดปกติ

ค่าสุดโต่งไม่ได้เป็นข้อผิดพลาดเสมอไป ออเดอร์ 40 ชิ้นจากบัญชีลูกค้า B2B คือยอดขายจริง ให้ติดแฟลกไว้เพื่อไม่ให้มันครอบงำค่าเฉลี่ย และเก็บไว้ในประวัติ ส่วนราคาต่อหน่วย 100,000 ที่พิมพ์ผิดจาก 1,000 คือข้อผิดพลาดในการป้อนข้อมูล ให้แก้ตัวเลข อย่า "จัดการ" มันเหมือนเป็นอุปสงค์

### ตรวจค่าสุดโต่งก่อนลบ

สองวิธีตรวจที่ใช้คู่กันได้ดี กฎ **1.5 × ช่วงควอร์ไทล์** จะระบุจุดที่อยู่ไกลจากกลางคอลัมน์ ส่วนการตรวจตามโดเมนจะถามว่าค่านั้นเป็นไปได้หรือไม่ เช่น สต็อกติดลบ วันที่ในอีกหลายสิบปีข้างหน้า หรือส่วนลดที่สูงกว่าราคาขาย ให้ตรวจสอบก่อน แล้วจึงจำกัดค่าที่เปอร์เซ็นไทล์ที่ 1 และ 99 ใช้การแปลงลอการิทึมกับรายได้ที่เบ้ หรือเพิ่มแฟลกแล้วเก็บค่าดิบไว้สำหรับรายงาน

> ออเดอร์ล็อตใหญ่ที่คุณลบทิ้งคือรายได้ที่คุณจะไม่มีวันพยากรณ์ได้อีก ส่วนข้อผิดพลาดที่คุณเก็บไว้จะกลายเป็นราคาที่โมเดลคิดว่าลูกค้ายินดีจ่าย

รันสรุปผลอีกครั้งหลังจำกัดค่า ศูนย์กลางของคอลัมน์ควรขยับแทบไม่มาก หากค่ามัธยฐานกระโดด แสดงว่าการจำกัดค่าทำงานมากเกินไป และคุณควรกลับไปดูแถวต้นทางอีกครั้ง

### เลือกตัวปรับสเกลให้ตรงกับลักษณะข้อมูล

การปรับสเกลช่วยไม่ให้คอลัมน์ที่มีหน่วยใหญ่ เช่น รายได้ต่อปี กลบคอลัมน์ที่มีหน่วยเล็ก เช่น จำนวนหน่วยต่อออเดอร์ [เอกสารการประมวลผลล่วงหน้าของ Scikit-learn](https://scikit-learn.org/stable/modules/preprocessing.html) ระบุว่า **StandardScaler** จัดให้แต่ละฟีเจอร์อยู่กึ่งกลางที่ค่าเฉลี่ยของชุดฝึกและปรับสเกลตามความแปรปรวน และอาจทำงานได้ไม่ดีเมื่อมีค่าผิดปกติจำนวนมาก ส่วน **RobustScaler** เป็นตัวทดแทนที่ใช้ค่าประมาณของจุดศูนย์กลางและช่วงที่ทนทานกว่า

ลักษณะของข้อมูลScalerเหตุผลที่เหมาะสมค่อนข้างสมมาตร มีค่าสุดโต่งน้อยStandardScalerจัดให้ค่าอยู่รอบค่าเฉลี่ย และปรับสเกลตามความแปรปรวนมีค่าผิดปกติมาก เช่น คำสั่งซื้อจำนวนมากที่เกิดขึ้นเป็นครั้งคราวRobustScalerใช้ค่ามัธยฐานและพิสัยระหว่างควอร์ไทล์ ซึ่งทนต่อค่าสุดโต่งค่าต้องอยู่ในช่วงคงที่ เช่น คะแนนรีวิวตั้งแต่ 1 ถึง 5MinMaxScalerแปลงค่าให้อยู่ระหว่าง 0-1 โดยไม่เปลี่ยนรูปร่างของการกระจาย

ให้ fit scaler กับข้อมูลชุดฝึก (training data) เท่านั้น แล้วนำค่าที่ fit ได้ไปใช้กับชุดตรวจสอบ (validation) การ fit ซ้ำบนชุดข้อมูลที่กันไว้จะทำให้แถวข้อมูลที่สุดโต่งในชุด validation เข้ามากำหนดสเกลเอง หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีสังเกตค่าสุดโต่งก่อนเลือกวิธีจัดการ ดูได้ที่ [คู่มือเรื่องค่าผิดปกติของ ELECTE](https://www.electe.net/post/outlier-statistica)

## ทำไปป์ไลน์ให้อัตโนมัติและตรวจสอบผลลัพธ์

ไฟล์ที่ทำความสะอาดแล้วและเก็บไว้ใน notebook เดียวอาจคลาดเคลื่อนระหว่างการรันแต่ละครั้ง ไฟล์ใหม่อาจได้ค่าเติมข้อมูลที่ขาด การเข้ารหัสหมวดหมู่ หรือสเกลที่ต่างออกไป ทำให้แดชบอร์ดเปลี่ยนแม้ธุรกิจจริงจะไม่ได้เปลี่ยน

ไปป์ไลน์จะเก็บ imputer, encoder และ scaler ที่ fit แล้วไว้ด้วยกัน และใช้การแปลงแบบเดียวกันกับไฟล์ใหม่ ให้ fit ขั้นตอนเหล่านี้โดยใช้เฉพาะส่วนข้อมูลชุดฝึก แล้วนำค่าที่ fit ไว้ไปใช้กับข้อมูลชุดตรวจสอบและชุดทดสอบโดยไม่คำนวณใหม่ [บันทึกของ IBM เรื่อง data leakage](https://www.ibm.com/think/topics/data-leakage-machine-learning) อธิบายว่าเหตุใดการ fit ขั้นตอนเตรียมข้อมูลข้ามชุดฝึกและชุดทดสอบจึงอาจทำให้ข้อมูลรั่วไหลเข้าสู่การประเมินผล

### สิ่งที่ต้องตรวจสอบหลังการรันทุกครั้ง

งานที่รันสำเร็จเพียงยืนยันว่ากระบวนการทำงานครบเท่านั้น ให้ตรวจสอบว่าผลลัพธ์ยังตรงกับแหล่งข้อมูลและกฎที่คุณกำหนดหรือไม่:

- **จำนวนแถว:** กระทบยอดไฟล์ที่โหลดเข้ากับไฟล์ที่ส่งออก โดยนับรวมรายการซ้ำที่บันทึกไว้
- **อัตราค่าว่างต่อคอลัมน์:** ตรวจสอบหากเพิ่มขึ้นกะทันหัน ซึ่งอาจหมายความว่าฟิลด์จากแหล่งข้อมูลหยุดส่งเข้ามา
- **ช่วงของค่า:** ตรวจสอบว่าราคา ปริมาณ และวันที่ยังอยู่ในขอบเขตที่ยอมรับได้
- **หมวดหมู่ใหม่:** ส่งภูมิภาคหรือ SKU ที่ไม่เคยพบไปยังกลุ่มที่กำหนดไว้ แทนที่จะทิ้งไปโดยไม่แจ้งเตือน

สำหรับ[ตัวอย่างการตรวจสอบความถูกต้องของข้อมูลในทางปฏิบัติ](https://www.electe.net/post/data-validation-techniques) ลองดูว่าการตรวจสอบเหล่านี้ใช้กับไฟล์ธุรกิจอย่างไร ควรถือว่าผลลัพธ์อัตโนมัติเป็นเพียงค่าประมาณ และตรวจสอบด้วยตนเองในไม่กี่รอบแรกก่อนนำไปใช้ทริกเกอร์การแจ้งเตือน

**ELECTE** แพลตฟอร์มวิเคราะห์ข้อมูลด้วย AI สำหรับธุรกิจที่กำลังเติบโต เชื่อมต่อกับซอฟต์แวร์บัญชีหรือไฟล์ที่อัปโหลด แล้ววิเคราะห์ข้อมูลและพยากรณ์ได้โดยไม่ต้องมีนักวิเคราะห์ ลูกค้าประหยัดเวลาได้มากกว่า 10 ชั่วโมงต่อสัปดาห์ด้วยการวิเคราะห์การเงินอัตโนมัติ ประโยชน์นี้ขึ้นอยู่กับการใช้ขั้นตอนที่ฟิตแล้วและอธิบายได้ในการตรวจทาน แทนที่จะคำนวณใหม่ทุกครั้งที่อัปโหลด

สัปดาห์นี้ ลองนำชุดข้อมูลหนึ่งชุดมาตรวจตามตารางเจ็ดแถว และทำเครื่องหมายว่าขั้นตอนใดยังทำด้วยมืออยู่ ทำขั้นตอนที่ทำซ้ำให้เป็นอัตโนมัติ แต่ให้การตัดสินใจที่ต้องใช้วิจารณญาณ เช่น รายการซ้ำกับการสั่งซื้อซ้ำจริง หรือการพิมพ์ผิดกับการสั่งซื้อจำนวนมาก อยู่ในการตรวจสอบจนกว่ากฎจะนิ่ง

---

ELECTE เชื่อมต่อข้อมูลบัญชีหรือไฟล์ที่อัปโหลดของคุณ เตรียมข้อมูล และแปลงเป็นการพยากรณ์และรายงานที่คุณตรวจสอบร่วมกับทีมได้ หากต้องการให้ขั้นตอนเตรียมข้อมูลเหล่านี้ทำงานเหมือนกันทุกครั้งที่โหลด เข้าไปที่ [ELECTE](https://www.electe.net) และดูว่าแพลตฟอร์มทำงานกับตัวเลขของคุณเองอย่างไร
