Machine Learning › ML Capstone

ML Capstone: โปรเจกต์ end-to-end

ประมาณ 20 นาที

เป้าหมายของบท

  • ทำโปรเจกต์ ML แบบ end-to-end ที่ทำนายการซื้อซ้ำ โดยมี baseline, CV และการทดสอบครั้งสุดท้ายที่ซื่อตรง
  • ใช้ rubric ตรวจงานตัวเอง (leakage, pipeline, การเทียบกับ baseline, ข้อจำกัด) ก่อนเผยแพร่
  • เผยแพร่ notebook พร้อม README บน GitHub

Notebook

งานหลักของบทนี้ทำใน Jupyter notebook ไม่ใช่ในเว็บ — โหลดไฟล์ไปเปิดในเครื่อง หรือเปิดตรงบน Google Colab ก็ได้

⬇ ดาวน์โหลด notebook · เปิดใน Google Colab ↗

โจทย์ของ ML capstone

ใช้ตาราง ml_customers (ลูกค้า 2,839 คน; 1 แถวต่อลูกค้า) ทำนายว่าลูกค้า จะซื้อซ้ำหรือไม่ (repeated) โดยใช้ข้อมูลของการสั่งซื้อครั้งแรกและช่องทางที่สมัคร (ทางเลือกที่ยากกว่า: ทำนายมูลค่าคำสั่งซื้อแรก first_order_value แบบ regression)

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

ลำดับงานที่คาดหวัง

  1. เข้าใจโจทย์และ baseline: อัตราซื้อซ้ำเท่าไร โมเดล “เดาคนส่วนใหญ่” ได้ accuracy เท่าไร (≈ 0.59) — ทุกโมเดลต้องเอาชนะตัวนี้
  2. แบ่งข้อมูลและกัน test ไว้ก่อน (train_test_split, stratify=y, random_state) แล้วแตะ test แค่ครั้งเดียวตอนท้าย
  3. เตรียมข้อมูลใน Pipeline (ColumnTransformer: scale ตัวเลข, one-hot ตัวหมวด) — ตรวจว่า feature ทุกตัวรู้ได้ ณ เวลาที่ต้องทำนาย (ไม่มี leakage)
  4. เทียบอย่างน้อย 3 โมเดล ด้วย StratifiedKFold(shuffle=True): logistic regression, ต้นไม้/forest/gradient boosting, และ (ถ้าอยากลอง) MLP รายงาน mean ± std ของ AUC และ accuracy เทียบ baseline
  5. จูนเล็กน้อย ด้วย GridSearchCV บน train เท่านั้น
  6. อธิบาย: permutation importance บน test และ/หรือ coefficient — feature ไหนที่โมเดลพึ่ง
  7. ทดสอบครั้งสุดท้าย บน test แล้ว สรุปตามจริง พร้อมข้อจำกัด

สิ่งที่ควรคาดหวังจากข้อมูลนี้ (ตามที่เราเห็นในบทก่อนๆ)

  • สัญญาณที่แรงมีอย่างเดียว คือช่องทาง promo (ลูกค้าจาก promo ซื้อซ้ำน้อยกว่า)
  • logistic regression, ต้นไม้ตื้น, forest และ boosting ได้ AUC ราว 0.62–0.66 และ accuracy 0.64–0.66 (MLP มักแย่กว่า) (baseline ≈ 0.59) — ต่างกันไม่กี่ร้อยส่วน
  • ตัวเลขที่ได้ “ปานกลาง” เป็นเรื่องปกติของข้อมูลจริงที่สัญญาณอ่อน: การรายงานตรงๆ ว่าโมเดลดีกว่า baseline แค่ไหน และไม่ควรเชื่อถือเกินกว่านั้น สำคัญกว่าตัวเลขสวย

Rubric ตรวจงานตัวเอง

  • มี baseline และผลโมเดลทุกตัวถูกเทียบกับ baseline
  • แบ่ง train/test ก่อนทำอะไรอื่น; test ถูกใช้ครั้งเดียวตอนท้าย
  • การเตรียมข้อมูลอยู่ใน Pipeline (fit บน train เท่านั้น) และไม่มี feature ที่รั่วข้อมูลจากอนาคต
  • เลือกโมเดล/hyperparameter ด้วย cross-validation ที่ shuffle แล้ว (รายงาน mean ± std)
  • metric เหมาะกับโจทย์ (AUC + accuracy) และอธิบายว่าตัวเลขหมายถึงอะไรทางธุรกิจ
  • มีส่วน “ข้อจำกัด” (ข้อมูลน้อย สัญญาณอ่อน ผลขึ้นกับ seed ฯลฯ) และ “ทำอะไรต่อ”
  • notebook รันได้ทั้งไฟล์จากบนลงล่างโดยไม่ error

เผยแพร่บน GitHub

เหมือน capstone สาย DA: repo สาธารณะ + notebook + README.md สั้นๆ (โจทย์, วิธีรัน, ผลสรุป 2–3 บรรทัด พร้อมข้อจำกัดของผล) แล้วแปะลิงก์ใน resume/LinkedIn

แบบฝึกท้ายบท

บทนี้จะนับว่าเสร็จเมื่อผ่านข้อพื้นฐานและประยุกต์ครบ ข้อท้าทายได้ดาวเพิ่ม

🟢 พื้นฐาน

🟢 พื้นฐานยังไม่ได้ทำ

โหลด data/ml_customers.csv แล้วเก็บจำนวนแถวไว้ใน n_customers และอัตราซื้อซ้ำ (ค่าเฉลี่ยของ repeated ปัด 4 ตำแหน่ง) ไว้ใน repeat_rate — ตัวเลขตั้งต้นของโปรเจกต์

🟢 พื้นฐานยังไม่ได้ทำ

baseline: accuracy ที่ได้จากการเดาคลาสส่วนใหญ่เสมอ = สัดส่วนของคลาสที่พบมากกว่าใน repeated (ปัด 4 ตำแหน่ง) เก็บไว้ในตัวแปร baseline_acc — ทุกโมเดลต้องเอาชนะค่านี้

🟡 ประยุกต์

🟡 ประยุกต์ยังไม่ได้ทำ

ใช้ X, y มาตรฐาน (get_dummies drop_first=True) แล้ววัด ROC-AUC เฉลี่ยของ pipeline StandardScaler + LogisticRegression(max_iter=2000) ด้วย StratifiedKFold(5, shuffle=True, random_state=42) ปัด 4 ตำแหน่ง เก็บไว้ในตัวแปร logreg_cv_auc — ผลอ้างอิงเริ่มต้นสำหรับเทียบโมเดลอื่น

สรุป

  • ML capstone = baseline → split → pipeline → เทียบ ≥3 โมเดลด้วย CV → จูนบน train → อธิบาย → ทดสอบครั้งเดียว → สรุปตามจริง
  • ข้อมูลนี้สัญญาณอ่อน (แทบมีแค่ promo) ผลจะอยู่ราว AUC 0.62–0.66 — รายงานว่าดีกว่า baseline ≈ 0.59 แค่ไหนและข้อจำกัดอย่างตรงไปตรงมา
  • ใช้ notebook เริ่มต้นและ rubric ในบทนี้ แล้วเผยแพร่พร้อม README

คำถามสัมภาษณ์

เล่าโปรเจกต์ ML ของคุณใน 1 นาที ให้คนสัมภาษณ์ฟัง

โครง: โจทย์ธุรกิจและ metric (ทำไมเลือก AUC/accuracy) → baseline → วิธีแบ่งข้อมูลและป้องกัน leakage → โมเดลที่เทียบและผล CV (mean ± std) → โมเดลที่เลือกและเหตุผล → ผลบน test ครั้งเดียว → ข้อจำกัดและขั้นต่อไป การพูดถึงข้อจำกัดอย่างตรงไปตรงมาทำให้น่าเชื่อถือกว่าการโชว์ตัวเลขสวย