Visual guide · Machine Learning

เริ่มสังเกตสัญญาณจากกราฟ

ค่อย ๆ มองหาความต่างของกลุ่ม ตั้งข้อสงสัยจากสิ่งที่เห็น แล้วใช้ baseline และ validation ช่วยตรวจว่าสัญญาณนั้นใช้ได้จริงหรือไม่

เริ่มเห็นการแยก → มีเหตุผลให้ลองสร้างโมเดล
ยังไม่เห็นการแยก → อาจต้องลองมุมมองหรือ feature อื่น
แยกชัดจนน่าสงสัย → ลองตรวจว่าเกิด leakage หรือไม่
01 · เริ่มจากภาพพื้นฐาน

จุดง่าย ๆ ที่ควรสังเกตได้ทันที

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

ลองมองภาพ A

สองกลุ่มเริ่มแยกจากกัน

คลาส Aคลาส B
จุดที่น่าสังเกตตำแหน่งของ feature นี้อาจช่วยแยกสองคลาสได้พอสมควร
ลองมองภาพ B

สองกลุ่มยังทับกันมาก

คลาส Aคลาส B
จุดที่น่าสังเกตfeature เดี่ยวนี้อาจช่วยไม่มาก แต่เมื่อรวมกับ feature อื่นอาจเห็นรูปแบบเพิ่มขึ้น
ลองมองภาพ C

แยกชัดจนควรตรวจที่มา

คลาส Aคลาส B
จุดที่น่าสังเกตอาจเป็นสัญญาณที่ดีจริง หรือ feature อาจเผยคำตอบจากอนาคต
02 · ลองมองบริเวณที่ไม่ทับกัน

ทับกันตรงกลาง ก็ยังมีข้อมูลให้ใช้

ไม่จำเป็นต้องแยกทุกจุด ลองมองปลายด้านซ้าย ขวา บน หรือล่างว่ามีบริเวณที่เหลือเพียงคลาสเดียวหรือไม่

ปลายขวาเหลือคลาส B

แม้ช่วงกลางจะทับกัน แต่เมื่อ feature มากกว่า threshold บริเวณนี้เหลือจุดสีชมพู

ลอง feature: x > 7

กฎนี้ไม่จำเป็นต้องแยกทุกจุด แค่ช่วยระบุ หนึ่งคลาสในบางบริเวณ ได้ ก็เป็นสมมติฐานที่ควรนำไปทดสอบ

ลองต่อยอดสู่ Feature engineering

จากสิ่งที่สังเกต สู่ feature ที่น่าลอง

ใช้กราฟเป็นจุดเริ่มตั้งสมมติฐาน ไม่ใช่คำตอบสุดท้าย: สังเกตสิ่งที่เกิดขึ้น → ลองอธิบาย → สร้าง feature → ตรวจด้วย validation

B เกือบล้วนคลาส Aคลาส Bค่าสูง →

1. หาง Distribution → Threshold

ปลายขวาพ้นจากคลาส A จึงสร้างกฎที่มั่นใจเฉพาะช่วงได้

การเงิน: utilization > 95%พฤติกรรม: login > 20 ครั้ง/ชม.

จุดสังเกต: มองบริเวณหลังเส้นประว่ามีสีอื่นหลุดเข้ามากี่จุด และมีจำนวนตัวอย่างพอหรือไม่

เห็นปลายขวามีคลาสเสี่ยงหนาแน่น
→
คิดความเสี่ยงอาจเริ่มหลังจุดตัด
→
สร้างis_utilization_high
utilization > 0.95 → 1

ตรวจ: จำนวนตัวอย่างที่หางต้องพอ และ threshold ต้องหาใน train เท่านั้น

0–10k10–30k30k+fraud สูงrate

2. รูปแบบเปลี่ยนตามช่วง → Bin

แท่งกลางสูงกว่าช่วงข้างเคียง จึงไม่ควรใช้เส้นตรงเส้นเดียว

ยอดโอน: 0–10k / 10–30k / 30k+อายุบัญชี: ใหม่ / กลาง / เก่า

จุดสังเกต: ดูว่า rate เพิ่มต่อเนื่องหรือเด้งเฉพาะบางช่วง และดูจำนวนแถวใต้แต่ละแท่งควบคู่กัน

เห็นบางช่วงมี target rate สูง
→
คิดแต่ละช่วงอาจมีกฎต่างกัน
→
สร้างamount_band
cut(amount, [0, 10k, 30k, ∞])

ตรวจ: อย่าแบ่งถี่จนบาง bin มีข้อมูลน้อย หรือเลือกขอบจาก test

A + B สูงยอด Aยอด B

3. เส้นแบ่งเอียง → Sum / Interaction

แยกด้วยแกน A หรือ B เดี่ยวไม่ได้ แต่เส้นทแยง A+B แยกได้

ยอดค้างบัตร A + Bยอดโอนเข้า 3 บัญชีรวมกัน

จุดสังเกต: ถ้า boundary เอียง ให้ลองบวก ลบ หรือ interaction แทนการหา threshold บนแกนเดียว

เห็นสองแกนร่วมกันแยกได้
→
คิดผลรวมเป็นตัวกำหนดความเสี่ยง
→
สร้างtotal_balance
total_balance = card_A + card_B

ตรวจ: หน่วยและช่วงเวลาต้องตรงกัน และค่าทั้งคู่ต้องรู้ก่อนทำนาย

DTI = 60%รายได้หนี้

4. ขนาดสัมพันธ์กับฐาน → Ratio

จุดเหนือเส้นมีหนี้สูงเมื่อเทียบกับรายได้ แม้ยอดหนี้ดิบจะต่างกัน

หนี้ ÷ รายได้ (DTI)ยอดใช้ ÷ วงเงิน (utilization)

จุดสังเกต: ถ้าจุดที่มี “สัดส่วนใกล้กัน” อยู่บนเส้นรัศมีเดียวกัน ให้ลองหารด้วยค่าฐาน

เห็นค่าเดียวกันมีผลต่างกันตามฐาน
→
คิดขนาดสัมพัทธ์สำคัญกว่าค่าดิบ
→
สร้างdebt_to_income
DTI = monthly_debt / income

ตรวจ: ป้องกันตัวหารเป็นศูนย์ และดู outlier หลังหารทุกครั้ง

มี statementไม่มี (NA)12% ปฏิเสธ38% ปฏิเสธrate

5. ค่าว่างมีความหมาย → Indicator

กลุ่ม NA มี target rate สูงกว่า จึงอาจใช้ “การหาย” เป็น feature ได้

ไม่มี bank statementไม่กรอกอาชีพ/นายจ้าง

จุดสังเกต: เปรียบเทียบ target rate ของ NA กับ non-NA และถามเสมอว่า “ทำไมข้อมูลจึงหาย”

เห็นกลุ่ม NA มี target rate ต่าง
→
คิดสาเหตุที่หายอาจมีข้อมูล
→
สร้างstatement_missing
is_missing(statement) → 1

ตรวจ: กระบวนการเก็บข้อมูลอาจเปลี่ยน ทำให้ feature นี้เสื่อมเร็ว

ช่วงเงินเดือนออกยอดใช้จ่ายrisk baselineวัน →

6. รูปแบบต่างตามเวลา → Context

ยอดใช้พุ่งใกล้วันเงินเดือนอาจปกติ แต่ยอดเดียวกันนอกช่วงอาจผิดปกติ

ใกล้วันเงินเดือนออกวันหยุด vs วันทำงานสาขา/ผลิตภัณฑ์

จุดสังเกต: วาดเส้นเดิมแยกตามเวลาและกลุ่ม แล้วดูว่าทิศทางหรือ baseline เปลี่ยนหรือไม่

เห็นเส้นเปลี่ยนตามช่วงหรือกลุ่ม
→
คิดบริบทเปลี่ยนความหมายของค่า
→
สร้างdays_from_payday
amount × is_near_payday

ตรวจ: validation ต้องแบ่งตามเวลา และระวัง Simpson’s paradox

ลองปรับตัวเลขแล้วสังเกต

เมื่อรวมยอด A และ B จุดเคลื่อนผ่านเส้นเมื่อไร?

ปรับสองยอดแล้วดูตำแหน่งของจุด แนวคิดคือผลรวมอาจเผยรูปแบบที่ยอดเดี่ยวมองไม่เห็น

feature ที่กำลังลอง: total_balance40,000 บาทจุดยังอยู่ใต้เส้น

สิ่งที่สังเกต → เส้นแบ่งเอียง → ลอง total_balance = A + B → ตรวจว่ายังใช้ได้บน validation หรือไม่

03 · ลองเปลี่ยนมุมมอง

กราฟเดียว อาจบอกเรื่องต่างกัน

เลือกแต่ละมุมมอง แล้วสังเกตว่ารูปทรงและบริบททำให้ข้อสันนิษฐานเปลี่ยนอย่างไร

น่าลองต่อ

สองกลุ่มเริ่มแยกกันบางส่วน

กราฟไม่จำเป็นต้องแยกสมบูรณ์ แค่เริ่มเห็นแนวโน้มก็เพียงพอสำหรับตั้งสมมติฐานและลอง baseline

  • เริ่มด้วย Logistic Regression เป็น baseline
  • ดูว่าสัญญาณยังคงอยู่บน validation set หรือไม่
04 · ก่อนนำข้อสังเกตไปใช้

ลองเช็กอีกสองเรื่องก่อนสรุป

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

⚠

feature นี้รู้อนาคตหรือไม่?

บางค่าเกิดหลังเหตุการณ์ หรือคำนวณจาก target เช่น ใช้ “วันปิดบัญชี” เพื่อทำนายว่าจะปิดบัญชีไหม

ลองถาม: ณ เวลาที่ต้องทำนาย เรามีค่านี้แล้วหรือยัง?
◷

แบ่งข้อมูลเหมือนสถานการณ์จริงหรือไม่?

ข้อมูลคนเดียวกันหรือช่วงเวลาเดียวกันอาจอยู่ทั้ง train และ test ทำให้ผลดูดีกว่าการใช้งานจริง

ลองถาม: ควรแบ่งตามคน กลุ่ม หรือเวลาหรือไม่?
05 · ลองสังเกตด้วยตัวเอง

จากภาพนี้ คุณเริ่มเห็นอะไร?

เลือกข้อที่ใกล้กับสิ่งที่สังเกตที่สุด แล้วค่อยอ่านคำอธิบาย ไม่มีคะแนนและไม่ต้องรีบ—เป้าหมายคือฝึกตั้งคำถามจากภาพ

ภาพที่ 1 / 3

ข้อสังเกตใดสอดคล้องกับภาพมากที่สุด?