ปรึกษา Data Mining
Data Mining 4124305 • Chapter 06

บทที่ 6 การจำแนกข้อมูลและต้นไม้ตัดสินใจ

เรียนรู้ Supervised Learning, Classification, Regression และ Decision Tree ตั้งแต่การเตรียมข้อมูล การสร้างโมเดลด้วย Python ไปจนถึงการประเมินผลด้วย Accuracy, Precision, Recall, F1-score และ Cross-validation

Classification Decision Tree Entropy / Gini Confusion Matrix Cross-validation scikit-learn

ผลลัพธ์การเรียนรู้

  • อธิบาย Classification และ Regression ได้
  • เข้าใจ Feature, Label, Target และ Train/Test
  • สร้าง Decision Tree ด้วย Python ได้
  • ประเมินโมเดลด้วย Metrics และ Validation ได้
ต่อเนื่องจากบทที่ 5
อธิบาย Decision Tree ชัดเจน
มีตัวอย่าง Python
มี Metrics ประเมินผล

6.1 วัตถุประสงค์การเรียนรู้

บทนี้เน้นการเรียนรู้การจำแนกข้อมูลในงานเหมืองข้อมูล โดยใช้ ต้นไม้ตัดสินใจ (Decision Tree) เป็นอัลกอริทึมหลัก เพราะเป็นโมเดลที่อธิบายง่าย เห็นกฎการตัดสินใจชัดเจน และเหมาะสำหรับผู้เริ่มต้นเรียน Classification

Learning Objectives

บทนี้ช่วยให้ผู้เรียนเข้าใจภาพรวมของการจำแนกข้อมูล และสามารถสร้างโมเดล Decision Tree พร้อมประเมินผลได้อย่างถูกต้อง

แยกความหมายของ Feature, Label, Target, Training Data และ Testing Data ได้
อธิบายโครงสร้าง Root Node, Internal Node, Branch และ Leaf Node ได้
สร้าง Pipeline ด้วย OneHotEncoder และ DecisionTreeClassifier ได้
อ่าน Confusion Matrix และเลือกใช้ Accuracy, Precision, Recall, F1-score ได้เหมาะสม

เมื่อเรียนจบบทนี้ ผู้เรียนควรทำได้

  • อธิบายความหมายของ Classification และ Regression ได้
  • อธิบาย Feature, Attribute, Label และ Target ได้
  • เข้าใจกระบวนการสร้างโมเดลแบบ Supervised Learning
  • แบ่งข้อมูลเป็น Training Data และ Testing Data ได้
  • สร้างโมเดล Decision Tree ด้วย Python ได้
  • ประเมินผลด้วย Accuracy, Precision, Recall, F1-score และ Confusion Matrix ได้

6.2 แนวคิดพื้นฐานของ Supervised Learning

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

ภาพประกอบ: Workflow ของ Supervised Learning
Dataset Feature + Label Training เรียนรู้รูปแบบ Model Decision Tree Predict ข้อมูลใหม่

โมเดลเรียนรู้จากข้อมูลที่มีคำตอบกำกับไว้แล้ว จากนั้นนำโมเดลที่ฝึกได้ไปทำนายข้อมูลใหม่

ข้อมูลนำเข้า + คำตอบที่ถูกต้อง

ชุดข้อมูลต้องมีทั้ง Feature และ Label เช่น อายุ รายได้ ประวัติซื้อสินค้า และคำตอบว่า Churn หรือไม่ Churn

นำไปฝึกโมเดล

โมเดลเรียนรู้รูปแบบ ความสัมพันธ์ และเงื่อนไขที่เชื่อมโยง Feature กับ Target

โมเดลทำนายข้อมูลใหม่

เมื่อมีข้อมูลลูกค้ารายใหม่ โมเดลจะทำนายผลลัพธ์ เช่น มีแนวโน้มเลิกใช้บริการหรือไม่

คำศัพท์สำคัญ

Input / Feature

ข้อมูลนำเข้าที่ใช้ให้โมเดลเรียนรู้ เช่น อายุ รายได้ เพศ อาชีพ จำนวนครั้งที่ซื้อสินค้า

Output / Label

คำตอบจริงที่กำกับข้อมูล เช่น ผ่าน/ไม่ผ่าน ซื้อ/ไม่ซื้อ Spam/Not Spam

Target

ชื่อตัวแปรเป้าหมายที่ต้องการทำนาย เช่น Churn ส่วน Label คือค่าจริงในคอลัมน์นั้น เช่น Yes/No

Training / Testing Data

Training ใช้ฝึกโมเดล ส่วน Testing ใช้ทดสอบว่าโมเดลทำนายข้อมูลใหม่ได้ดีเพียงใด

ตัวอย่างงานFeatureTarget / Label
ทำนายลูกค้า Churnอายุ รายได้ จำนวนครั้งที่ซื้อ ระยะเวลาสมาชิกChurn: Yes/No
ทำนายความเสี่ยงสินเชื่ออายุ อาชีพ รายได้ รายจ่าย ประวัติชำระเงินRisk: ต่ำ/กลาง/สูง
จำแนกอีเมล Spamคำสำคัญ ความยาวข้อความ ผู้ส่ง ลิงก์Spam / Not Spam
ทำนายผลการเรียนเวลาเรียน คะแนนเก็บ คะแนนสอบผ่าน / ไม่ผ่าน

6.3 Classification และ Regression

Prediction คือกระบวนการทำนายผลลัพธ์ของข้อมูลใหม่ โดยแบ่งเป็น 2 ประเภทหลัก คือ Classification และ Regression

ภาพประกอบ: Classification vs Regression
Classification Regression ผลลัพธ์เป็นกลุ่ม เช่น ผ่าน/ไม่ผ่าน ผลลัพธ์เป็นค่าตัวเลข เช่น ราคา/ยอดขาย

Classification ทำนายเป็นคลาสหรือประเภท ส่วน Regression ทำนายเป็นค่าตัวเลขต่อเนื่อง

ประเภทผลลัพธ์ตัวอย่างอัลกอริทึมที่พบได้บ่อย
Classificationกลุ่มหรือประเภทผ่าน/ไม่ผ่าน, ซื้อ/ไม่ซื้อ, Spam/Not SpamDecision Tree, KNN, SVM, Random Forest, Naive Bayes
Regressionค่าตัวเลขต่อเนื่องยอดขาย ราคา รายได้ อุณหภูมิLinear Regression, SVR, Random Forest Regressor

งาน Classification มีการประยุกต์ใช้กว้างขวาง เช่น การจำแนกภาพ การจำแนกข้อความ การวิเคราะห์ความรู้สึก การจำแนกโรค และการตรวจจับการบุกรุกระบบคอมพิวเตอร์

6.4 กระบวนการของการจำแนกข้อมูล

การทำ Classification ควรดำเนินงานเป็นระบบ ตั้งแต่เข้าใจเป้าหมายจนถึงนำผลลัพธ์ไปใช้สนับสนุนการตัดสินใจ

Business Understanding

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

Data Understanding

สำรวจแหล่งข้อมูล ตัวแปร Feature, Target และคุณภาพของข้อมูล

Data Preparation

ลบข้อมูลซ้ำ จัดการค่าว่าง แปลงข้อมูลข้อความเป็นตัวเลข และเลือก Feature ที่เหมาะสม

Split Data

แบ่งข้อมูลเป็น Training Data และ Testing Data เช่น 70:30 หรือ 80:20

Model Training

ฝึกโมเดล Classification เช่น Decision Tree, Random Forest, KNN หรือ SVM

Testing, Evaluation และ Recommendation

ทดสอบโมเดล ประเมินผล และแปลผลเป็นข้อเสนอแนะเชิงธุรกิจหรือเชิงวิชาการ

6.5 เทคนิคที่ใช้ในการ Classification

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

เทคนิคหลักการโดยย่อจุดเด่น
Decision Treeใช้เงื่อนไขแตกแขนงเหมือนต้นไม้เข้าใจง่าย อธิบายเป็นกฎได้
Random Forestรวมผลจาก Decision Tree หลายต้นแม่นยำกว่าและลด Overfitting
Logistic Regressionคำนวณความน่าจะเป็นของแต่ละกลุ่มเหมาะกับปัญหา 2 กลุ่ม อธิบายง่าย
Naive Bayesใช้หลักความน่าจะเป็นและ Bayes' Theoremเร็ว เหมาะกับข้อความและข้อมูลมิติสูง
KNNดูข้อมูลที่อยู่ใกล้ที่สุดจำนวน K ตัว แล้วโหวตหลักการง่าย ไม่ต้องสร้างโมเดลซับซ้อน
SVMหาเส้นแบ่งกลุ่มหรือ Hyperplane ที่ดีที่สุดเหมาะกับข้อมูลหลายมิติ
Neural Networkเรียนรู้ผ่านโหนดหลายชั้นเหมาะกับข้อมูลซับซ้อน เช่น ภาพ เสียง ข้อความ

6.6 Decision Tree หรือต้นไม้ตัดสินใจ

Decision Tree คืออัลกอริทึมการเรียนรู้แบบมีผู้สอนที่ใช้โครงสร้างแบบต้นไม้ในการตัดสินใจ โดยเริ่มจาก Root Node แล้วแบ่งข้อมูลออกเป็นกลุ่มย่อยตามเงื่อนไขของ Feature จนได้ผลลัพธ์สุดท้ายที่ Leaf Node

ภาพประกอบ: โครงสร้าง Decision Tree
คะแนนสอบ ≥ 50? ใช่ไม่ใช่ เข้าเรียน ≥ 80%? ต้องเรียนเสริม ผ่าน เสี่ยงไม่ผ่าน Root Node → Internal Node → Branch → Leaf Node

Decision Tree แสดงเงื่อนไขเป็นกิ่งก้าน ทำให้ผู้เรียนเห็นเหตุผลการตัดสินใจของโมเดลได้ชัดเจน

ตัวอย่างกฎแบบ Decision Tree

  • ถ้าคะแนนสอบ >= 50 → ทำนายว่า “ผ่าน”
  • ถ้าคะแนนสอบ < 50 → ทำนายว่า “ไม่ผ่าน”
  • ถ้ารายได้มากกว่า 30,000 บาท และประวัติชำระหนี้ดี → “อนุมัติสินเชื่อ”
  • ถ้าประวัติชำระหนี้ไม่ดี → “ไม่อนุมัติสินเชื่อ”

ส่วนประกอบของ Decision Tree

Root Node

โหนดเริ่มต้นด้านบนสุด มักเป็น Feature ที่แบ่งข้อมูลได้ดีที่สุด

Internal Node

โหนดภายในที่ใช้ตั้งเงื่อนไขเพื่อตัดสินใจต่อ

Branch

เส้นกิ่งที่แสดงผลจากเงื่อนไข เช่น ใช่/ไม่ใช่ มาก/น้อย

Leaf Node

โหนดปลายทางที่ให้คำตอบหรือคลาส เช่น ผ่าน, ไม่ผ่าน, Spam, Not Spam

Entropy, Information Gain และ Gini Index

การสร้าง Decision Tree ต้องเลือก Feature ที่แบ่งข้อมูลได้ดีที่สุด โดยนิยมใช้ตัววัด เช่น Entropy, Information Gain และ Gini Index

ภาพประกอบ: แนวคิดการเลือก Feature ที่แบ่งข้อมูลได้ดีที่สุด
Parent Node Feature A Information Gain สูง Feature B ยังปะปนสูง Child Nodes บริสุทธิ์มากขึ้น เป้าหมายคือทำให้ Entropy/Gini ลดลงหลังการแบ่งข้อมูล

Feature ที่ดีควรลดความปะปนของคลาส ทำให้โหนดลูกมีความบริสุทธิ์มากขึ้น

Entropy(S) = - Σ pᵢ log₂(pᵢ)

Entropy ใช้วัดความไม่แน่นอนของข้อมูลในโหนด หาก Entropy ต่ำ แปลว่าข้อมูลในโหนดนั้นมีความบริสุทธิ์สูงหรือแบ่งคลาสได้ดี

Information Gain = Entropy(parent) - Weighted Entropy(children)

Information Gain ใช้วัดว่าเมื่อแบ่งข้อมูลด้วย Feature หนึ่งแล้ว ความไม่แน่นอนลดลงมากเพียงใด Feature ที่ให้ Information Gain สูงมักถูกเลือกใช้ก่อน

Gini = 1 - Σ pᵢ²

Gini Index ใช้วัดความปะปนของคลาสในโหนด ค่า Gini ต่ำแปลว่าโหนดมีความบริสุทธิ์สูง ใน scikit-learn ค่าเริ่มต้นของ DecisionTreeClassifier มักใช้ Gini เป็นเกณฑ์แบ่งข้อมูล

ข้อดีและข้อจำกัด

ข้อดี

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

ข้อจำกัด

  • มีโอกาส Overfitting หากต้นไม้ลึกเกินไป
  • ผลลัพธ์ไวต่อการเปลี่ยนแปลงของข้อมูล
  • ถ้าข้อมูลน้อยหรือไม่สมดุล อาจทำนายผิดพลาด
  • ควรใช้ Validation และปรับพารามิเตอร์ร่วมด้วย

6.7 การเตรียมข้อมูลสำหรับ Decision Tree

การเตรียมข้อมูลเป็นขั้นตอนสำคัญก่อนสร้างโมเดล เพราะ Decision Tree จะเรียนรู้จากข้อมูลที่เตรียมไว้ หากข้อมูลผิดพลาด โมเดลก็อาจเรียนรู้ผิดและทำนายผิดตามไปด้วย

ตรวจสอบจำนวนข้อมูล

ควรมีข้อมูลมากพอ เช่น อย่างน้อย 1,000 รายการในงานฝึกปฏิบัติ เพื่อให้การแบ่ง Train/Test มีความหมาย

ตรวจสอบ Missing Values

จัดการค่าว่างด้วยการลบ แทนค่าด้วยค่าเฉลี่ย/ฐานนิยม หรือวิธีที่เหมาะกับบริบท

ตรวจสอบ Duplicate Data

ลบข้อมูลซ้ำเพื่อลดอคติและความผิดพลาดในการฝึกโมเดล

Encoding Categorical Data

แปลงข้อมูลข้อความ เช่น เพศ รายได้ การศึกษา การทำงาน เป็นตัวเลขด้วย LabelEncoder หรือ OneHotEncoder

กำหนด X และ y

X คือ Feature ทั้งหมด ส่วน y คือ Target ที่ต้องการทำนาย เช่น Churn

แบ่ง Train/Test

ใช้ train_test_split แบ่งข้อมูล เช่น 80% สำหรับฝึก และ 20% สำหรับทดสอบ

6.8 การสร้างโมเดล Decision Tree ด้วย Python

ตัวอย่างต่อไปนี้เป็นแนวทางสร้างโมเดล Decision Tree สำหรับทำนาย Churn ของลูกค้า โดยใช้ Python, Pandas และ scikit-learn

ตัวอย่างที่ 1: สร้างชุดข้อมูลตัวอย่าง 1,000 รายการ

import pandas as pd
import numpy as np

np.random.seed(42)

data = {
    'อายุ': np.random.randint(18, 65, size=1000),
    'เพศ': np.random.choice(['ชาย', 'หญิง'], size=1000),
    'รายได้': np.random.choice(['น้อย', 'มาก'], size=1000),
    'การศึกษา': np.random.choice(['ปริญญาตรี', 'มัธยม', 'ปริญญาโท'], size=1000),
    'การทำงาน': np.random.choice(['ทำงาน', 'ไม่ทำงาน'], size=1000),
    'Churn': np.random.choice(['ใช่', 'ไม่'], p=[0.2, 0.8], size=1000)
}

df = pd.DataFrame(data)
df.to_excel('decision_tree_dataset_01.xlsx', index=False)

ตัวอย่างที่ 2: สร้าง Pipeline ด้วย OneHotEncoder และ DecisionTreeClassifier

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# Load dataset
df = pd.read_excel('decision_tree_dataset_01.xlsx')

# กำหนด Feature และ Target
X = df.drop('Churn', axis=1)
y = df['Churn']

cat_cols = ['เพศ', 'รายได้', 'การศึกษา', 'การทำงาน']
num_cols = ['อายุ']

preprocess = ColumnTransformer(
    transformers=[
        ('cat', OneHotEncoder(handle_unknown='ignore'), cat_cols),
        ('num', 'passthrough', num_cols)
    ]
)

model = DecisionTreeClassifier(
    max_depth=5,
    random_state=42,
    class_weight='balanced'
)

pipe = Pipeline(steps=[
    ('preprocess', preprocess),
    ('model', model)
])

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)

print('Accuracy:', accuracy_score(y_test, y_pred))
print('Confusion Matrix:')
print(confusion_matrix(y_test, y_pred))
print('Classification Report:')
print(classification_report(y_test, y_pred))

ตัวอย่างที่ 3: ทำนายข้อมูลใหม่ที่โมเดลยังไม่เคยเห็น

unseen_data = pd.DataFrame([
    {'อายุ': 30, 'เพศ': 'ชาย', 'รายได้': 'มาก', 'การศึกษา': 'มัธยม', 'การทำงาน': 'ไม่ทำงาน'},
    {'อายุ': 50, 'เพศ': 'หญิง', 'รายได้': 'น้อย', 'การศึกษา': 'มัธยม', 'การทำงาน': 'ไม่ทำงาน'},
    {'อายุ': 22, 'เพศ': 'หญิง', 'รายได้': 'มาก', 'การศึกษา': 'ปริญญาโท', 'การทำงาน': 'ไม่ทำงาน'}
])

pred = pipe.predict(unseen_data)
unseen_data['ผลการทำนาย Churn'] = pred
print(unseen_data)

ตัวอย่าง Decision Tree กับข้อมูล Iris

ชุดข้อมูล Iris เป็นชุดข้อมูลยอดนิยมสำหรับทดลอง Classification เพราะมีข้อมูลดอก Iris 3 ชนิด และมี Feature เช่น sepal length, sepal width, petal length และ petal width โมเดล Decision Tree สามารถสร้างกฎ เช่น ถ้า petal width น้อยกว่าค่าหนึ่ง ให้จัดเป็น Iris setosa เป็นต้น

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_text

iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)

accuracy = clf.score(X_test, y_test)
print(f"Accuracy: {accuracy:.2f}")

rules = export_text(clf, feature_names=iris.feature_names)
print(rules)

ข้อควรระวังเรื่อง Accuracy 100%

ถ้าโมเดลได้ Accuracy = 1.00 หรือ 100% ควรตรวจสอบว่าเกิด Overfitting หรือไม่ โดยดูขนาดข้อมูล วิธีแบ่งข้อมูล ความซ้ำของข้อมูล และควรทดลอง Cross-validation เพื่อประเมินให้รอบคอบขึ้น

ต้องการนำ Classification ไปใช้กับข้อมูลจริง?

Siam2Dev ช่วยออกแบบชุดข้อมูล สร้างโมเดล Decision Tree / Random Forest / SVM ทำ Dashboard และรายงานผลสำหรับธุรกิจ งานวิจัย และการเรียนการสอน

6.9 การประเมินผลโมเดล Classification

หลังสร้างโมเดลแล้ว ต้องประเมินผลว่าโมเดลทำนายได้ดีเพียงใด โดยเฉพาะเมื่อข้อมูลไม่สมดุล เช่น คลาส Churn มีน้อยกว่า Non-Churn การดู Accuracy เพียงอย่างเดียวอาจทำให้เข้าใจผิดได้

ภาพประกอบ: Confusion Matrix และตัวชี้วัด
Confusion Matrix เปรียบเทียบค่าจริงกับค่าที่โมเดลทำนาย TPทำนายบวก ถูกต้อง FPทำนายบวก แต่ผิด FNทำนายลบ แต่ผิด TNทำนายลบ ถูกต้อง ใช้คำนวณ Accuracy, Precision, Recall และ F1-score

Confusion Matrix ช่วยให้เห็นว่าโมเดลผิดพลาดแบบใด ไม่ควรดู Accuracy เพียงค่าเดียวโดยเฉพาะเมื่อข้อมูลไม่สมดุล

Confusion Matrix

ค่าประเมินความหมาย
True Positive (TP)ทำนายว่าเป็นคลาสบวก และเป็นจริง
True Negative (TN)ทำนายว่าเป็นคลาสลบ และเป็นจริง
False Positive (FP)ทำนายว่าเป็นคลาสบวก แต่จริง ๆ ไม่ใช่
False Negative (FN)ทำนายว่าเป็นคลาสลบ แต่จริง ๆ เป็นคลาสบวก
Accuracy = (TP + TN) / (TP + TN + FP + FN)
Precision = TP / (TP + FP)
Recall = TP / (TP + FN)
F1-score = 2 × (Precision × Recall) / (Precision + Recall)

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

6.10 Validation และ Cross-validation

Validation คือการตรวจสอบว่าโมเดลสามารถทำนายข้อมูลใหม่ได้ดีจริง ไม่ใช่เพียงจำข้อมูลฝึกเท่านั้น

ภาพประกอบ: Hold-out และ K-Fold Cross-Validation
Hold-out Method Training 80% Test แบ่งข้อมูลครั้งเดียว เช่น 80:20 K-Fold Cross-Validation สลับ Test Fold หลายรอบ แล้วเฉลี่ยผลลัพธ์ Train Test

Cross-validation ช่วยลดความเอนเอียงจากการแบ่งข้อมูลเพียงครั้งเดียว และเหมาะเมื่อข้อมูลมีไม่มาก

Hold-out Method

แบ่งข้อมูลเป็น Training Data และ Testing Data หนึ่งครั้ง เช่น 80:20 หรือ 70:30

Cross-validation

แบ่งข้อมูลเป็นหลายส่วน เช่น 5-fold หรือ 10-fold แล้วสลับกันทดสอบ เพื่อให้ผลประเมินน่าเชื่อถือขึ้น

Overfitting

โมเดลเรียนรู้ข้อมูลฝึกมากเกินไป ทำนาย Training ได้ดี แต่ทำนายข้อมูลใหม่ไม่ดี

Underfitting

โมเดลง่ายเกินไป จับรูปแบบสำคัญไม่ได้ ทำให้ทำนายได้ไม่ดีทั้ง Training และ Testing

ตัวอย่าง 5-fold Cross-validation

from sklearn.model_selection import cross_val_score, KFold
from sklearn.tree import DecisionTreeClassifier
import numpy as np

X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12], [13, 14], [15, 16]]
y = [0, 0, 0, 0, 1, 1, 1, 1]

model = DecisionTreeClassifier(random_state=42, max_depth=3)
kfold = KFold(n_splits=5, shuffle=True, random_state=42)

scores = cross_val_score(model, X, y, cv=kfold)
print("Cross-Validation Scores:", scores)
print("Average Cross-Validation Score:", np.mean(scores))

6.11 แบบฝึกหัดท้ายบท

  1. อธิบายความแตกต่างระหว่าง Classification และ Regression พร้อมยกตัวอย่างอย่างละ 2 ตัวอย่าง
  2. จากข้อมูลนักศึกษา ให้ระบุว่า Feature, Target และ Label คืออะไร
  3. จงอธิบายส่วนประกอบของ Decision Tree ได้แก่ Root Node, Branch และ Leaf Node
  4. ทำไม Decision Tree จึงเข้าใจง่ายกว่าโมเดลบางประเภท เช่น Neural Network?
  5. จงสร้างข้อมูลตัวอย่างอย่างน้อย 1,000 รายการ สำหรับทำนาย Churn ของลูกค้า
  6. ใช้ Python สร้าง DecisionTreeClassifier และรายงาน Accuracy, Confusion Matrix และ Classification Report
  7. ถ้าโมเดลได้ Accuracy 100% ควรตรวจสอบอะไรบ้าง?
  8. เปรียบเทียบ Hold-out Method กับ Cross-validation

สรุปบทเรียน

บทนี้แสดงให้เห็นว่า Classification เป็นเทคนิคสำคัญของเหมืองข้อมูลที่ใช้ทำนายผลลัพธ์เป็นกลุ่มหรือประเภท โดย Decision Tree เป็นโมเดลที่เหมาะสำหรับเริ่มต้น เพราะอธิบายง่ายและแสดงผลเป็นกฎการตัดสินใจได้ชัดเจน อย่างไรก็ตาม ผู้เรียนต้องเตรียมข้อมูลอย่างถูกต้อง ประเมินผลด้วยหลายตัวชี้วัด และระวังปัญหา Overfitting เมื่อโมเดลมีความซับซ้อนเกินไป

คำถามที่พบบ่อยเกี่ยวกับ Decision Tree

เหมาะกับงาน Classification และ Regression ที่ต้องการอธิบายเหตุผลการตัดสินใจเป็นกฎ เช่น ผ่าน/ไม่ผ่าน, ซื้อ/ไม่ซื้อ, เสี่ยง/ไม่เสี่ยง หรือทำนายค่าตัวเลขบางประเภท

Entropy และ Gini ใช้วัดความปะปนของคลาสในโหนด ส่วน Information Gain ใช้วัดว่าการแบ่งข้อมูลด้วย Feature หนึ่งช่วยลดความไม่แน่นอนได้มากเพียงใด

เพราะต้นไม้ที่ลึกเกินไปอาจจำรายละเอียดของข้อมูลฝึกมากเกินไป จึงควรจำกัด max_depth, min_samples_leaf หรือใช้ Cross-validation เพื่อตรวจสอบความสามารถในการทำนายข้อมูลใหม่

ไม่ควร โดยเฉพาะเมื่อข้อมูลไม่สมดุล ควรดู Precision, Recall, F1-score และ Confusion Matrix ร่วมด้วย เพื่อให้เข้าใจว่าโมเดลผิดพลาดแบบใด
อ่านต่อ

เรียนต่อเนื้อหาเหมืองข้อมูลตามลำดับ

เชื่อมโยงบทเรียนบทที่ 1–9 เพื่อให้ผู้เรียนเข้าใจตั้งแต่พื้นฐาน ไปจนถึง Machine Learning และ Neural Network