🤖 Week 3: Introduction to Machine Learning & Classification

เริ่มต้นการเรียนรู้ของเครื่อง และการจำแนกประเภท

📚 หัวข้อวันนี้

  1. Machine Learning Fundamentals - พื้นฐานการเรียนรู้ของเครื่อง
  2. Classification Algorithms - อัลกอริทึมการจำแนกประเภท
  3. Model Evaluation - การประเมินประสิทธิภาพ
  4. การเลือก Algorithm - วิธีเลือกให้เหมาะกับปัญหา
  5. Best Practices - แนวทางปฏิบัติที่ดี

🎯 ทำไมเครื่องต้องเรียนรู้?

การสอนเด็กแยกแมวกับสุนัข

  • ไม่ได้บอกกฎตายตัว
  • ให้ดูตัวอย่างหลายๆ ตัว
  • เด็กเรียนรู้เอง

Machine Learning ก็เหมือนกัน!

  • ให้ตัวอย่างข้อมูล
  • คอมพิวเตอร์หารูปแบบเอง
  • ไม่ต้องเขียนกฎตายตัว

📖 นิยาม Machine Learning

Machine Learning คือ สาขาหนึ่งของ AI ที่ทำให้คอมพิวเตอร์สามารถเรียนรู้จากข้อมูลและประสบการณ์ โดยไม่ต้องเขียนโปรแกรมกำหนดพฤติกรรมไว้ตายตัว

🤔 ทำไมต้องใช้ Machine Learning?

1. ปัญหาซับซ้อนเกิน

  • จดจำใบหน้า
  • แปลภาษา
  • เขียน if-else ไม่ไหว

2. ปัญหาเปลี่ยนตลอด

  • กรองสแปม
  • แนะนำสินค้า
  • ต้องปรับตัวเรื่อยๆ

3. ปัญหาที่มนุษย์ทำได้แต่อธิบายไม่ได้

  • แยกเสียงพูดในที่มีเสียงรบกวน
  • อ่านลายมือหมอ

🎓 ประเภทของการเรียนรู้

1. Supervised Learning (มีครูสอน)

2. Unsupervised Learning (ไม่มีครูสอน)

3. Reinforcement Learning (เรียนรู้จากรางวัล)

🏷️ Supervised Learning

เหมือนการเรียนที่มีครูคอยบอกคำตอบ

ลักษณะสำคัญ

  • มีข้อมูลพร้อมคำตอบ (labeled data)
  • เรียนรู้ความสัมพันธ์ input → output
  • ใช้ทำนายคำตอบสำหรับข้อมูลใหม่

🏷️ Supervised Learning (ต่อ)

เหมือนการเรียนที่มีครูคอยบอกคำตอบ

แบ่งเป็น 2 ประเภท

  • Classification - ทำนายหมวดหมู่ (แมว/สุนัข)
  • Regression - ทำนายค่าตัวเลข (ราคาบ้าน)

🔍 Unsupervised Learning

เหมือนให้เด็กจัดกลุ่มของเล่นเอง โดยไม่บอกว่าจัดยังไง

ลักษณะสำคัญ

  • ไม่มีคำตอบให้ (unlabeled data)
  • หารูปแบบหรือโครงสร้างเอง
  • ใช้สำรวจและทำความเข้าใจข้อมูล

🔍 Unsupervised Learning (ต่อ)

เหมือนให้เด็กจัดกลุ่มของเล่นเอง โดยไม่บอกว่าจัดยังไง

ตัวอย่าง

  • จัดกลุ่มลูกค้า (Clustering)
  • ลดมิติข้อมูล (Dimensionality Reduction)
  • หา anomaly (Anomaly Detection)

🎮 Reinforcement Learning

เหมือนการฝึกสุนัขด้วยการให้รางวัลและลงโทษ

ลักษณะสำคัญ

  • เรียนรู้จากการลองผิดลองถูก
  • ได้รับ reward/punishment
  • ปรับปรุงกลยุทธ์เพื่อ reward สูงสุด

🎮 Reinforcement Learning (ต่อ)

เหมือนการฝึกสุนัขด้วยการให้รางวัลและลงโทษ

ตัวอย่าง

  • AI เล่นเกม (AlphaGo)
  • หุ่นยนต์เดิน
  • ระบบแนะนำแบบ adaptive

📊 การแบ่งข้อมูลสำหรับ ML

ทำไมต้องแบ่ง? เหมือนให้นักเรียนทำข้อสอบชุดเดิมที่เคยทำ - อาจได้คะแนนเต็มแต่ไม่ได้เข้าใจจริง!

ข้อมูลทั้งหมด (100%)
├── Training Set (60-70%) - ใช้สอนโมเดล
├── Validation Set (15-20%) - ใช้ปรับ hyperparameters  
└── Test Set (15-20%) - ใช้ประเมินผลสุดท้าย

🎭 Overfitting vs Underfitting

Overfitting (เรียนรู้มากไป)

  • จำรายละเอียดมากเกิน
  • ทำนาย train data แม่น
  • แต่ test data แย่
  • แก้ไข: ลดความซับซ้อน, เพิ่มข้อมูล

Underfitting (เรียนรู้น้อยไป)

  • โมเดลง่ายเกินไป
  • จับ patterns ไม่ได้
  • ทำนายแย่ทั้งหมด
  • แก้ไข: เพิ่มความซับซ้อน, เพิ่ม features

🏘️ k-Nearest Neighbors (k-NN)

หลักการ: "บอกฉันว่าคุณคบใครเป็นเพื่อน แล้วฉันจะบอกว่าคุณเป็นคนแบบไหน"

ขั้นตอนการทำงาน

  1. หาข้อมูลที่ใกล้เคียงที่สุด k ตัว
  2. ดูว่าเพื่อนบ้านส่วนใหญ่อยู่ class ไหน
  3. จัดข้อมูลใหม่ไปอยู่ class นั้น

📐 การวัดระยะทางใน k-NN

Euclidean Distance

d = √[(x₁-x₂)² + (y₁-y₂)²]
  • ใช้บ่อยที่สุด
  • เหมือนวัดเส้นตรง

Manhattan Distance

d = |x₁-x₂| + |y₁-y₂|
  • เหมือนเดินในเมือง
  • เหมาะกับหน่วยต่างกัน

🎛️ การเลือกค่า k

ค่า k ข้อดี ข้อเสีย
k น้อย (k=1) ✅ ไวต่อข้อมูล ❌ ไวต่อ noise
k มาก ✅ ทนต่อ noise ❌ อาจ underfit

หลักการเลือก

  • ใช้เลขคี่ (หลีกเลี่ยงเสมอ)
  • ทดลองหลายค่า
  • k ที่นิยม: 3, 5, 7

k-NN: ข้อดี vs ข้อเสีย

✅ ข้อดี

  • เข้าใจง่าย
  • ไม่ต้อง train
  • ทำงานดีกับ non-linear

❌ ข้อเสีย

  • ช้าเมื่อข้อมูลเยอะ
  • ใช้หน่วยความจำมาก
  • ไวต่อ scale
  • ไม่ดีกับมิติสูง

🌳 Decision Trees

หลักการ: ทำงานเหมือนเกม 20 คำถาม - ถามทีละข้อจนได้คำตอบ

         สีเหลือง?
        /        \
      ใช่         ไม่
      /            \
ขนาดใหญ่?         สีแดง?
  /    \         /     \
ใช่    ไม่      ใช่     ไม่
 |      |       |       |
แตงโม  กล้วย  แอปเปิล   ส้ม

📊 การสร้าง Decision Tree

ขั้นตอน

  1. เลือก feature ที่ดีที่สุด

    • ใช้ Information Gain หรือ Gini Impurity
    • เลือกที่ทำให้ข้อมูล "บริสุทธิ์" ที่สุด
  2. แบ่งข้อมูลตาม feature

    • Categorical: แบ่งตามค่า
    • Numerical: หาจุดตัด

📊 การสร้าง Decision Tree (ต่อ)

  1. ทำซ้ำจนกว่า
    • ทุก node บริสุทธิ์
    • ถึงความลึกที่กำหนด

🎯 Metrics สำหรับเลือก Feature

Information Gain

Entropy = -Σ(p_i × log₂(p_i))
IG = Entropy(parent) - Σ(weighted Entropy)
  • วัดความไม่แน่นอน
  • เลือก IG สูงสุด

Gini Impurity

Gini = 1 - Σ(p_i²)
  • วัดความไม่บริสุทธิ์
  • คำนวณเร็วกว่า

🌿 การ Pruning ต้นไม้

Pre-pruning (ป้องกันก่อน)

  • จำกัด max_depth
  • กำหนด min_samples_split
  • กำหนด min_samples_leaf

Post-pruning (ตัดทีหลัง)

  • สร้างต้นไม้เต็มที่
  • ตัด subtrees ที่ไม่จำเป็น
  • ใช้ validation set

Decision Trees: ข้อดี vs ข้อเสีย

✅ ข้อดี

  • อธิบายได้ง่าย
  • ไม่ต้อง scale
  • จัดการได้ทุกประเภท
  • ให้ feature importance

❌ ข้อเสีย

  • Overfitting ง่าย
  • ไม่เสถียร
  • ไม่เก่งเส้นตรง
  • Bias ไปที่ค่าเยอะ

🎲 Naive Bayes

Bayes' Theorem

P(class|features) = P(features|class) × P(class) / P(features)

แปลเป็นภาษาคน

ความน่าจะเป็นที่เป็น class นั้น เมื่อเห็น features เหล่านี้
= ความน่าจะเป็นที่เจอ features ใน class นั้น
× ความน่าจะเป็นของ class โดยทั่วไป
÷ ความน่าจะเป็นที่เจอ features

🤝 ทำไมเรียกว่า "Naive"?

สมมติฐานที่ "ซื่อ"

สมมติว่าทุก feature เป็นอิสระต่อกัน

🤝 ทำไมเรียกว่า "Naive"? (ต่อ)

ตัวอย่าง แยกสแปม

  • คำว่า "ฟรี" และ "โปรโมชั่น"
  • สมมติว่าไม่เกี่ยวข้องกัน
  • (จริงๆ มักปรากฏด้วยกัน)
  • แต่ก็ยังทำงานได้ดี!

📈 ประเภทของ Naive Bayes

Gaussian NB

  • Features ตัวเลขต่อเนื่อง
  • สมมติ normal distribution

Multinomial NB

  • ข้อมูลการนับ (จำนวนคำ)
  • เหมาะกับ text

Bernoulli NB

  • ข้อมูล binary (มี/ไม่มี)
  • Features แบบ boolean

Naive Bayes: ข้อดี vs ข้อเสีย

✅ ข้อดี

  • เร็วมาก
  • ใช้ข้อมูลน้อยได้
  • ดีกับมิติสูง
  • ทนต่อ irrelevant features

❌ ข้อเสีย

  • สมมติฐานอาจไม่จริง
  • ไม่จับความสัมพันธ์
  • Zero frequency problem
  • ความน่าจะเป็นอาจไม่แม่น

📊 Confusion Matrix

                 Predicted
                 Positive  Negative
Actual Positive    TP       FN
       Negative    FP       TN
  • TP = True Positive (ทายถูกว่าใช่)
  • TN = True Negative (ทายถูกว่าไม่ใช่)
  • FP = False Positive (ทายผิดว่าใช่)
  • FN = False Negative (ทายผิดว่าไม่ใช่)

📏 Metrics การวัดประสิทธิภาพ

Accuracy = (TP + TN) / Total

  • ความแม่นยำโดยรวม
  • ⚠️ ระวัง imbalanced data

Precision = TP / (TP + FP)

  • "ในที่ทายว่าใช่ ใช่จริงกี่อัน?"
  • ใช้เมื่อ FP มีต้นทุนสูง

📏 Metrics การวัดประสิทธิภาพ (ต่อ)

Recall = TP / (TP + FN)

  • "ในของจริง หาเจอกี่อัน?"
  • ใช้เมื่อ FN มีต้นทุนสูง

⚖️ F1-Score

F1 = 2 × (Precision × Recall) / (Precision + Recall)

เมื่อไหร่ใช้

  • ต้องการความสมดุล Precision & Recall
  • ข้อมูล imbalanced
  • ไม่แน่ใจว่า FP หรือ FN สำคัญกว่า

🔄 Cross-validation

ปัญหาของการแบ่งครั้งเดียว

  • อาจโชคดี/โชคร้าย
  • ใช้ข้อมูลไม่คุ้ม

k-Fold Cross-validation

รอบ 1: [Valid] [Train] [Train] [Train] [Train]
รอบ 2: [Train] [Valid] [Train] [Train] [Train]
รอบ 3: [Train] [Train] [Valid] [Train] [Train]
รอบ 4: [Train] [Train] [Train] [Valid] [Train]
รอบ 5: [Train] [Train] [Train] [Train] [Valid]

🎯 การเลือก Algorithm

พิจารณาจาก 4 มิติหลัก

1. 📊 ขนาดข้อมูล (Sample Size)

ข้อมูลน้อย (< 1,000 samples)

  • เหมาะสม Simple Decision Tree, Naive Bayes
  • ทางเลือก Transfer Learning สำหรับ Deep Learning

📌 Use Case วินิจฉัยโรคหายาก (Rare Disease Diagnosis)

# Train: 500 patients, 30 symptoms
# Predict: new patient symptoms → disease yes/no
Model: Simple Decision Tree
Accuracy: 92% with only 500 samples

1. 📊 ขนาดข้อมูล (Sample Size) (ต่อ)

ข้อมูลมาก (> 100,000 samples)

  • เหมาะสม Deep Neural Networks, Gradient Boosting (XGBoost/LightGBM)
  • ทางเลือก Random Forest
  • หลีกเลี่ยง Single Decision Tree (overfitting)

1. 📊 ขนาดข้อมูล (Sample Size) (ต่อ)

ข้อมูลมาก (> 100,000 samples) (ต่อ)

📌 Use Case E-commerce Product Recommendation

# Train: 10M transactions, 500K users, 100K products
# Predict: user profile → top 10 products
Model: Deep Neural Network (can learn complex patterns)
Performance: 35% click-through rate improvement

2. 🔢 จำนวน Features

Features น้อย (< 20)

  • เหมาะสม Any algorithm ทำงานได้ดี
  • แนะนำ Tree-based methods, SVM

📌 Use Case House Price Prediction

# Train: area, bedrooms, location, age (4 features)
# Predict: house features → price in THB
Model: Random Forest (handles non-linear well)
Data: 5,000 houses → RMSE: ±200,000 THB

2. 🔢 จำนวน Features (ต่อ)

Features มาก (> 100)

  • เหมาะสม Random Forest
  • เทคนิค Dimension Reduction (PCA, AutoEncoder)
  • ระวัง Naive Bayes (assumption อาจไม่จริง)

2. 🔢 จำนวน Features (ต่อ)

Features มากมาก (> 1,000)

  • ต้องทำ Feature Selection หรือ Dimension Reduction ก่อน
  • เหมาะสม Deep Learning with Dropout

3. 💡 ความต้องการ Interpretability

ต้องอธิบายได้สูง (Regulated Industries)

  • เหมาะสม Linear/Logistic Regression, Single Decision Tree
  • ทางเลือก Rule-based Models, SHAP/LIME สำหรับ Black-box Models

📌 Use Case Bank Loan Approval

# Train: income, debt, credit_score, employment
# Predict: applicant → approve/reject + reason
Model: Logistic Regression
Output: "Rejected: debt_ratio (0.8) > threshold (0.6)"
Requirement: ธปท. ต้องอธิบายเหตุผลการปฏิเสธได้

3. 💡 ความต้องการ Interpretability (ต่อ)

อธิบายได้ปานกลาง

  • เหมาะสม Random Forest + Feature Importance
  • ทางเลือก Gradient Boosting + SHAP values

3. 💡 ความต้องการ Interpretability (ต่อ)

ไม่ต้องอธิบาย (Focus on Performance)

  • เหมาะสม Deep Neural Networks, Ensemble Methods

📌 Use Case Netflix Movie Recommendation

# Train: 100M ratings, viewing history, time patterns
# Predict: user → next movie to watch
Model: Deep Neural Network (Matrix Factorization + DNN)
Focus: Accuracy > Explainability (users don't care why)

4. ⚡ ความเร็วในการ Inference

ต้องการความเร็วสูง (Real-time)

  • Training Any algorithm (train offline)
  • Inference เร็ว Linear Models, Naive Bayes, Simple Decision Tree
  • Inference ปานกลาง: Random Forest (limit trees), Shallow NN

4. ⚡ ความเร็วในการ Inference (ต่อ)

ต้องการความเร็วสูง (Real-time) (ต่อ)

📌 Use Case Credit Card Fraud Detection

# Train: 1M transactions, 50 features
# Predict: new transaction → fraud/normal in <100ms
Model: Logistic Regression
Speed: 0.1ms per transaction (can handle 10,000 TPS)
Alternative: Deep model → distilled to simple model

4. ⚡ ความเร็วในการ Inference (ต่อ)

ความเร็วไม่ใช่ปัญหา

  • เหมาะสม Deep NN, Large Ensembles

📌 Use Case Medical Image Diagnosis (X-Ray)

# Train: 100,000 X-ray images
# Predict: X-ray image → disease detection
Model: Ensemble of 5 CNNs (ResNet, EfficientNet, etc.)
Speed: 5 seconds per image (acceptable for radiology)
Accuracy: 98.5% (worth the wait)

📊 Real-World Case Studies

Case 1 🏥 Hospital Patient Readmission

Challenge Predict 30-day readmission risk

Data Size: 8,000 patients (ข้อมูลน้อย)
Features: 45 (lab results, medications, diagnosis)
Requirement: ต้องอธิบายได้ (medical decision)
Speed: Not critical (batch processing)

✅ Selected: Logistic Regression with L2
❌ Avoided: Deep Learning (data too small)
Result: AUC 0.78, can explain risk factors to doctors

📊 Real-World Case Studies

Case 2 🎬 Netflix Thailand Content Recommendation

Challenge Recommend Thai content to global users

Data Size: Small for Thai content (cold start problem)
Features: Viewing history, content metadata, subtitles
Requirement: Handle sparse data + new content

✅ Selected: Transfer Learning
   - Pre-trained embeddings from global data, Fine-tune on Thai viewing patterns
   - Fallback to content-based for new shows
Result: 40% increase in Thai content viewership

🏁 แนวทางการเริ่มต้น

  1. เริ่มด้วยโมเดลง่ายๆ เป็น baseline
  2. ลอง 2-3 algorithms ที่ต่างกัน
  3. ใช้ cross-validation เปรียบเทียบ
  4. ปรับ hyperparameters ของตัวที่ดีที่สุด
  5. พิจารณา ensemble ถ้าต้องการประสิทธิภาพสูงสุด

✅ Best Practices

สิ่งที่ควรทำ

  1. เข้าใจข้อมูลก่อน

    • EDA, distributions, correlations
  2. Preprocessing ให้ดี

    • Handle missing values
    • Scale features (k-NN)

✅ Best Practices (ต่อ)

  1. ป้องกัน data leakage

    • Scale หลังแบ่งข้อมูล
  2. Document ทุกอย่าง

    • เหตุผล, parameters, ผลลัพธ์

❌ สิ่งที่ไม่ควรทำ

  1. อย่าเชื่อ accuracy อย่างเดียว

    • ดู metrics อื่นด้วย
  2. อย่า overfit validation set

    • ลอง parameters มากเกิน
  3. อย่าใช้ default เสมอ

    • Tune ให้เหมาะสม

❌ สิ่งที่ไม่ควรทำ (ต่อ)

  1. อย่าลืม sanity check
    • Random baseline
    • Simple rules

🎓 สรุป: Key Takeaways

  1. ML = เรียนรู้จากข้อมูล ไม่ใช่เขียนกฎตายตัว
  2. ไม่มี algorithm ที่ดีที่สุดเสมอ ขึ้นอยู่กับปัญหา
  3. การวัดผลต้องรอบด้าน อย่าดู accuracy อย่างเดียว
  4. Overfitting คือศัตรู ระวังไม่ให้จำแทนที่จะเข้าใจ
  5. Practice makes perfect ยิ่งลองมากยิ่งเก่ง

🚀 จำไว้ว่า...

Machine Learning ไม่ใช่เวทมนตร์

แต่เป็นเครื่องมือที่ทรงพลัง

เมื่อใช้อย่างเข้าใจและเหมาะสม!

📚 แหล่งเรียนรู้เพิ่มเติม

  • scikit-learn documentation - คู่มือ ML library
  • Kaggle Learn - บทเรียนและ competitions
  • Google ML Crash Course - หลักสูตรฟรี
  • Andrew Ng's Course - หลักสูตรคลาสสิก

🎯 Next Steps

  1. ลองใช้ algorithms กับข้อมูลจริง
  2. อ่าน papers และ blog posts