Excel Statistics

รีวิวเทคนิค Normalization และ Standardization

หนึ่งในเทคนิค data science ที่เราใช้ในการปรับหน้าตาข้อมูล (transformation) ให้เหมาะสมกับการวิเคราะห์หรือสร้างโมเดลคือ normalization/ standardization อธิบายภาษาไทยง่ายๆ คือการปรับ scale ข้อมูลให้อยู่ในช่วงที่เราต้องการ เช่น [0, 1] หรือว่า [-1, +1] เป็นต้น

อ้างอิงจากบทความของ Shay Geller (2019) เวลาเราพูดถึง “normalization คือการปรับค่าตัวแปรให้มีค่าอยู่ระหว่าง [0, 1] ส่วน standardization คือการปรับค่าแบบ unit variance ให้มีค่า mean = 0 และ sd = 1”

บทความนี้แอดจะอธิบายเหตุผลที่ต้องปรับ scale ตัวแปร สูตรการทำ normalization และ standardization ง่ายๆ พร้อมตัวอย่างใน Excel ดาวน์โหลดไฟล์ตัวอย่างได้ที่นี่

ทำไมต้องปรับ scale ตัวแปร?

  • เพราะการปรับ scale (หรือ rescale) ตัวแปรจะช่วยให้การคอมพิวเตอร์ทำงานได้เร็วขึ้น!

เปิดไฟล์ Excel ขึ้นมา ดูที่คอลัมน์ A:C จะเห็นข้อมูล original data, normalized และ standardized ตามลำดับ สังเกตว่า original data จะมี scale เป็นเลขสองหลัก เช่น 62 75 90 92 เป็นต้น แต่เมื่อ normalized หรือ standardized แล้ว โดยปกติค่าที่ได้จะเป็นทศนิยม เช่น .7027 .8919 .8378 และ .4595 เป็นต้น

ลองคิด – ถ้าเราต้องยกกำลังสองค่า x = 87 หรือ norm_x = .7027 แบบไหนที่เราสามารถหาคำตอบได้เร็วกว่ากัน? คำตอบคือคนส่วนใหญ่สามารถคำนวณผลลัพธ์ของ .7027 * .7027 (~.49) ได้เร็วกว่า 87 * 87 (กดเครื่องคิดเลขแป๊ป 7569) การ rescale ข้อมูลให้เป็นเลขทศนิยมจะช่วยให้การทำ computation ง่ายขึ้น i.e. คอมพิวเตอร์ใช้ RAM น้อยลงเพื่อเก็บข้อมูลและประมวลผล make sense? การ rescale จะเห็นผลชัดเจนมาก ถ้าวันนี้คอลัมน์ Data (x) เป็นเลขหลักล้าน 1,000,000, …

ข้อมูลแบบ normalization เปรียบเทียบกับ standardization
เปรียบเทียบ original data, normalized, standardized
  • การ rescale ตัวแปรช่วยให้การสร้างโมเดลต่างๆง่ายขึ้น (เช่น regression, PCA, k-means ฯลฯ)

โดยทั่วไป ข้อมูลจะมีความหลากหลายในแง่ของ scale สมมติวันนี้เราทำโมเดล churn prediction ทำนายว่าลูกค้าคนไหนจะเลิกใช้บริการผลิตภัณฑ์ ข้อมูลที่เรามี เช่น อายุ (15-90), รายได้ (15000 – 100000), average revenue per user หรือ ARPU (300 – 1500) ฯลฯ

ถ้าเราเทรนโมเดล regression โดยที่ไม่ปรับ scale ตัวแปรทั้งหมดให้ใกล้เคียงกันก่อน ผลที่ได้คือตัวแปรที่มี scale กว้างที่สุด [รายได้] จะมีค่าสัมประสิทธิ์สูงกว่าตัวแปรอื่นๆ แต่ไม่ได้แปลว่ามันจะมีความสำคัญกว่าตัวแปรอื่นๆเสมอไป ถ้าไม่ปรับ scale แล้วเทรนโมเดลเลยจะไม่ fair เท่าไหร่

การทำ normalization หรือ standardization นอกจากจะช่วยให้คอมพิวเตอร์ทำงานได้เร็วขึ้นแล้ว ยังช่วยลด bias ตอนเราสร้างโมเดล โดยเฉพาะโมเดลในตระกูล regression และ clustering เช่น k-means เป็นต้น

Normalization

norm_x = (x - min_x) / (max_x - min_x)

สูตร normalization ด้านบนมีชื่อทางการว่า min-max normalization คำนวณง่ายๆโดยใช้ค่า min และ max ของข้อมูล original ถ้าเรา apply ฟังชั่นนี้จะ rescale ตัวแปรให้อยู่ในช่วง [0, 1] เสมอ ค่าสูงสุดใน original data จะมีค่า normalized = 1 ส่วนค่าต่ำสุดจะค่า normalized = 0

สำคัญมาก เราต้องตรวจสอบก่อนว่าข้อมูลของเรามี outliers หรือเปล่า เพราะการทำ normalization ไม่ได้ช่วยลดปัญหาเรื่องนี้เลย most extreme value จะถูก normalized = 1 แต่การกระจายตัวข้อมูลยังเหมือนเดิม

Standardization

z_score = (x - mean_x) / sd_x

การทำ standardization หรือการหาค่า z-score ในทางสถิติทำได้ง่ายๆด้วยสูตรด้านล่าง โดยที่ (x – mean_x) เรียกว่า “centering” ส่วนการหารด้วยค่า sd_x เรียกว่า “scaling” นี่คือเหตุผลที่อีกชื่อหนึ่งของ standardization เรียกว่าการทำ “center and scale”

ลักษณะสำคัญของค่า z-score คือ mean_z มีค่าเท่ากับ 0 และ sd_z มีค่าเท่ากับ 1 ถ้า original data กระจายตัวปกติ ค่า z-score ก็จะกระจายตัวปกติเช่นกัน ในกรณีนี้ค่า z ส่วนใหญ่จะวิ่งอยู่ระหว่าง [-3, +3]

วิธีการอ่านค่า z-score: ถ้า z < 0 แปลว่า original value มีค่าต่ำกว่าค่าเฉลี่ย ถ้า z > 0 แปลว่า original value มีค่าสูงกว่าค่าเฉลี่ย ถ้า z = 0 แปลว่า original value มีค่าเท่ากับค่าเฉลี่ยพอดี ตัวอย่างการอ่านค่า z = -2.65 แปลว่า original value ก่อน standardized มีค่าต่ำกว่าค่าเฉลี่ยอยู่ 2.65 เท่าของค่า sd

การกระจายตัวของ z-score ที่ได้จากการทำ standardization
original data vs. z-score มีการกระจายตัวเหมือนกัน
สำคัญมาก การทำ standardization (หรือ normalization) ไม่ได้ช่วยให้ข้อมูลเรากระจายตัวดีขึ้นเลย ถ้าข้อมูล original เบ้ตั้งแต่แรก z-score ก็จะเบ้เช่นกัน (รูปด้านบน) ถ้าต้องการปรับให้ข้อมูลกระจายตัวปกติ ต้องมีการทำ transformation รูปแบบอื่นๆ เช่น Natural Logarithm, Box Cox หรือ Yeo-Johnson เป็นต้น

เมื่อไหร่ใช้ norm หรือ z-score?

ถ้าเป้าหมายของเราคือการ rescale ตัวแปรเพื่อให้การทำ computation เร็วขึ้น ช่วยลด feature bias ตอนสร้างโมเดล ส่วนตัวแอดคิดว่าจะใช้เทคนิค normalization [0, 1] หรือ standardization [-3, +3] วิธีใดก็ได้

แต่ทั้งสองวิธีจะไม่ช่วยเรื่องการกระจายของข้อมูลเลย (e.g. skewed distribution, outlier) ถ้าเป้าหมายของเราคือการปรับ distribution จากที่เบ้มากๆให้กลับมาเป็นปกติ อาจต้องใช้เทคนิคอื่นๆร่วมกับ norm/ z-score

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.