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

แม้ชื่อจะมีคำว่า regression แต่ logistic regression มักใช้เพื่อตัดสินใจระหว่างสองคลาส เช่น ผ่าน/ไม่ผ่าน สแปม/ไม่ใช่สแปม หรือผิดนัดชำระ/ไม่ผิดนัดชำระ คำว่า "regression" ในที่นี้หมายถึงสูตรเชิงเส้นภายในโมเดล ไม่ได้หมายถึงการทำนายผลลัพธ์ต่อเนื่อง

สูตรของ logistic regression แบบสรุป

Binary logistic regression ใช้

p(y=1x)=σ(z),z=β0+β1x1++βnxnp(y=1 \mid x) = \sigma(z), \qquad z = \beta_0 + \beta_1 x_1 + \cdots + \beta_n x_n

โดยมีฟังก์ชันซิกมอยด์เป็น

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

ส่วนเชิงเส้น zz สามารถเป็นจำนวนจริงใดก็ได้ แต่ซิกมอยด์จะบีบค่านั้นให้อยู่ในช่วง (0,1)(0,1) จึงทำให้ผลลัพธ์สามารถใช้เป็นค่าประมาณความน่าจะเป็นได้

ทำไมฟังก์ชันซิกมอยด์จึงสำคัญ

ถ้าคุณใช้คะแนนเชิงเส้นดิบ zz เป็นความน่าจะเป็นโดยตรง คุณอาจได้ค่าที่เป็นไปไม่ได้ เช่น 1.71.7 หรือ 0.4-0.4 ฟังก์ชันซิกมอยด์แก้ปัญหานี้โดยแมปคะแนนลบมาก ๆ ให้เข้าใกล้ 00 คะแนนบวกมาก ๆ ให้เข้าใกล้ 11 และคะแนนใกล้ 00 ให้เข้าใกล้ 0.50.5

จึงตีความได้ในทางปฏิบัติว่า

  • ถ้า zz ติดลบมาก โมเดลเอนเอียงไปทางคลาส 00
  • ถ้า zz ใกล้ 00 โมเดลยังไม่แน่ใจ
  • ถ้า zz เป็นบวกมาก โมเดลเอนเอียงไปทางคลาส 11

กราฟจะชันที่สุดใกล้ z=0z=0 ดังนั้นการเปลี่ยนแปลงเล็กน้อยของคะแนนอาจทำให้ความน่าจะเป็นเปลี่ยนมากเมื่ออยู่ใกล้ 0.50.5 แต่จะเปลี่ยนน้อยกว่ามากเมื่อความน่าจะเป็นเข้าใกล้ 00 หรือ 11 อยู่แล้ว

ตัวอย่าง logistic regression แบบคำนวณจริง

สมมติว่าโมเดลใช้ฟีเจอร์เดียวคือ xx และมี

z=7+0.1xz = -7 + 0.1x

คุณอาจมองว่า xx คือคะแนนสอบ และ y=1y=1 หมายถึง "ผ่าน" ค่าสัมประสิทธิ์ในที่นี้เป็นเพียงตัวอย่างเพื่อแสดงกลไกการทำงาน

ถ้า x=65x = 65 จะได้ว่า

z=7+0.1(65)=0.5z = -7 + 0.1(65) = -0.5

ดังนั้นความน่าจะเป็นที่ทำนายได้คือ

p(y=1x=65)=σ(0.5)=11+e0.50.378p(y=1 \mid x=65) = \sigma(-0.5) = \frac{1}{1 + e^{0.5}} \approx 0.378

ถ้า x=80x = 80 จะได้ว่า

z=7+0.1(80)=1z = -7 + 0.1(80) = 1

และ

p(y=1x=80)=σ(1)=11+e10.731p(y=1 \mid x=80) = \sigma(1) = \frac{1}{1 + e^{-1}} \approx 0.731

ดังนั้นโมเดลเดียวกันนี้ให้โอกาสผ่านประมาณ 37.8%37.8\% เมื่อ x=65x=65 และประมาณ 73.1%73.1\% เมื่อ x=80x=80 คะแนนเพิ่มขึ้น 1.51.5 แต่ผลลัพธ์สุดท้ายยังคงอยู่ระหว่าง 00 และ 11 เพราะซิกมอยด์ดัดผลลัพธ์ให้เป็นความน่าจะเป็น

ถ้าคุณเลือก threshold เป็น 0.50.5 กรณีแรกจะถูกจัดเป็นคลาส 00 และกรณีที่สองเป็นคลาส 11 ขั้นตอนสุดท้ายนี้ขึ้นอยู่กับ threshold ส่วนค่าประมาณความน่าจะเป็นนั้นไม่ได้ขึ้นอยู่กับ threshold

ทางลัดที่มีประโยชน์อย่างหนึ่งคือ ถ้าใช้ threshold ที่ 0.50.5 คลาสจะเปลี่ยนพอดีเมื่อ z=0z=0 เพราะ σ(0)=0.5\sigma(0)=0.5

logistic regression กลายเป็นตัวจำแนกได้อย่างไร

ผลลัพธ์ของโมเดลคือค่าประมาณความน่าจะเป็น ส่วนกฎการจำแนกจะถูกเพิ่มเข้ามาภายหลัง

ตัวอย่างเช่น เมื่อใช้ threshold 0.50.5:

  • ทำนายเป็นคลาส 11 ถ้า p(y=1x)0.5p(y=1 \mid x) \ge 0.5
  • ทำนายเป็นคลาส 00 ถ้า p(y=1x)<0.5p(y=1 \mid x) < 0.5

แต่ 0.50.5 ไม่ใช่ threshold ที่ถูกต้องเสมอไป ถ้าต้นทุนของ false positive และ false negative ต่างกัน หรือถ้าคลาสไม่สมดุลกันมาก threshold อื่นอาจทำงานได้ดีกว่า

ค่าสัมประสิทธิ์หมายถึงอะไร

เครื่องหมายของค่าสัมประสิทธิ์บอกทิศทางของผลกระทบต่อคะแนนเชิงเส้น zz:

  • ถ้า βi>0\beta_i > 0 การเพิ่ม xix_i จะทำให้ zz สูงขึ้น และมีแนวโน้มทำให้ p(y=1x)p(y=1 \mid x) เพิ่มขึ้น
  • ถ้า βi<0\beta_i < 0 การเพิ่ม xix_i จะทำให้ zz ลดลง และมีแนวโน้มทำให้ p(y=1x)p(y=1 \mid x) ลดลง

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

ใน logistic regression มาตรฐาน โมเดลเชิงเส้นจะอยู่บนสเกล log-odds:

log(p1p)=β0+β1x1++βnxn\log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x_1 + \cdots + \beta_n x_n

นั่นหมายความว่า เมื่อคงฟีเจอร์อื่นไว้คงที่ การเพิ่มฟีเจอร์หนึ่งหน่วยจะทำให้ log-odds เปลี่ยนแบบเชิงเส้น ซึ่งแม่นยำกว่าการพูดว่ามันทำให้ความน่าจะเป็นเปลี่ยนไปด้วยจำนวนคงที่

ข้อผิดพลาดที่พบบ่อยใน logistic regression

มองผลลัพธ์ว่าเป็นคลาสที่แน่นอน

การทำนายอย่าง 0.730.73 ไม่ได้แปลว่าเหตุการณ์นั้นจะเกิดขึ้นแน่นอน แต่มันหมายความว่าโมเดลให้ค่าประมาณความน่าจะเป็นของคลาสบวกสำหรับอินพุตนั้นประมาณ 73%73\%

คิดว่า threshold ต้องเป็น 0.50.5

ค่า 0.50.5 เป็นค่าที่ใช้บ่อย แต่เป็นทางเลือก ไม่ใช่กฎตายตัว threshold ที่ดีที่สุดขึ้นอยู่กับการใช้งาน

คิดว่าความน่าจะเป็นเปลี่ยนแบบเชิงเส้น

คะแนน zz เป็นเชิงเส้นในอินพุต แต่ความน่าจะเป็นไม่เป็นเชิงเส้น การเปลี่ยนฟีเจอร์หนึ่งหน่วยอาจมีผลต่างกันเมื่ออยู่ใกล้ p=0.5p=0.5 เทียบกับเมื่ออยู่ใกล้ p=0.95p=0.95

ลืมว่าโมเดลพื้นฐานเป็นแบบทวิภาค เว้นแต่จะขยายต่อ

Logistic regression แบบพื้นฐานรองรับสองคลาส เวอร์ชันหลายคลาสมีอยู่จริง แต่เป็นส่วนขยาย ไม่ใช่การตั้งค่าแบบทวิภาคเดียวกันที่เขียนต่างออกไป

logistic regression ใช้เมื่อไร

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

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

วิธีนึกภาพแบบง่าย ๆ

ลองคิดว่า logistic regression เป็นเครื่องจักรสองขั้นตอน:

  1. รวมหลักฐานด้วยคะแนนเชิงเส้น
  2. แปลงคะแนนนั้นเป็นความน่าจะเป็นด้วยซิกมอยด์

ภาพนี้เพียงพอสำหรับการเข้าใจตัวอย่างเบื้องต้นส่วนใหญ่ และช่วยให้เห็นว่าทำไม logistic regression จึงอยู่กึ่งกลางระหว่างโมเดลเชิงเส้นกับงานจำแนกประเภท

ลองทำโจทย์ logistic regression ที่คล้ายกัน

เลือกคะแนนง่าย ๆ เช่น

z=3+0.5xz = -3 + 0.5x

คำนวณ σ(z)\sigma(z) สำหรับค่า xx หลายค่า เช่น 22, 66 และ 1010 สังเกตว่าคะแนนเชิงเส้นเปลี่ยนอย่างสม่ำเสมอ ในขณะที่ความน่าจะเป็นโค้งไปตามกราฟรูปตัว S จากนั้นลองใช้ threshold อื่น แล้วดูว่าคลาสที่ทำนายเปลี่ยนเมื่อใด

ต้องการความช่วยเหลือในการแก้โจทย์?

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

เปิด GPAI Solver →