AUC – ROC Curve แยกแยะปัญหาใน Machine Learning ด้วย Python

AUC-ROC curve เป็นกราฟที่ใช้วัดประสิทธิภาพของโมเดลในการแยกแยะคลาส (class) ของปัญหา classification โดยเฉพาะในกรณีที่มีคลาส imbalance หรือจำนวนข้อมูลของแต่ละคลาสไม่เท่ากัน AUC ย่อมมาจากคำว่า “Area Under the Curve” ซึ่งหมายถึงพื้นที่ใต้เส้น Curve ที่เกิดจากการ plot ความสัมพันธ์ระหว่าง True Positive Rate (TPR) กับ False Positive Rate (FPR) ของโมเดล ส่วน ROC ย่อมมาจากคำว่า “Receiver Operating Characteristic Curve” ซึ่งเป็นกราฟที่ใช้แสดงประสิทธิภาพของโมเดลที่ใช้ในการจำแนกแบบไบนารี (binary classification) โดยจะแสดงความสัมพันธ์ระหว่าง False Positive Rate (FPR) และ True Positive Rate (TPR) โดยที่ FPR คืออัตราส่วนของคำตอบที่ตอบว่า Positive โดยที่คำตอบจริงๆ มีค่าเป็น Negative ต่อจำนวน Negative ทั้งหมด ส่วน TPR คืออัตราส่วนของคำตอบที่ตอบว่า Positive โดยที่คำตอบจริงๆ มีค่าเป็น Positive ต่อจำนวน Positive ทั้งหมด

ในกราฟ AUC-ROC curve จะมีเส้นประสีน้ำเงินแทนความสัมพันธ์ระหว่าง TPR กับ FPR และจุดบนเส้นเป็นจุดที่ค่า TPR และ FPR เท่ากัน (ค่า threshold เท่ากับ 1) จุดนี้แทนค่า AUC เท่ากับ 1 ซึ่งหมายถึงโมเดลมีประสิทธิภาพสูงสุดในการแยกแยะคลาส แต่ถ้า AUC เท่ากับ 0.5 แสดงว่าโมเดลมีประสิทธิภาพในการแยกแยะคลาสเท่ากับการทายแบบสุ่ม และถ้า AUC น้อยกว่า 0.5 แสดงว่าโมเดลมีประสิทธิภาพที่แย่กว่าการทายแบบสุ่มในการแยกแยะคลาส

การใช้ AUC-ROC curve ช่วยในการปรับแต่ง hyperparameters และวัดประสิทธิภาพของโมเดลในการแยกแยะคลาส โดยมีหลายวิธีในการสร้าง AUC-ROC curve เช่น ใช้ฟังก์ชัน predict_proba หรือ decision_function ของโมเดลในการคำนวณ TPR และ FPR ของแต่ละค่า threshold หรือใช้ cross-validation ในการคำนวณ AUC-ROC curve ของโมเดล

การใช้ AUC-ROC curve ในการประเมินความสามารถของโมเดลในการแยกแยะกลุ่มข้อมูล มักถูกนำมาใช้กับปัญหาที่มีการจัดแบ่งแยกกลุ่มอย่างชัดเจน เช่น การจำแนกว่าผู้ป่วยเป็นโรคหัวใจหัวใจวาย (heart disease) หรือไม่ โดยใช้ข้อมูลเกี่ยวกับปัจจัยต่างๆ เช่น เพศ อายุ ความดันโลหิต เป็นต้น

AUC-ROC curve จะเป็นกราฟเส้นโค้งที่แสดงความสามารถของโมเดลในการแยกแยะกลุ่ม โดยกราฟจะแสดงการเปรียบเทียบระหว่าง อัตราส่วนของ true positive rate (TPR) และ false positive rate (FPR) ของโมเดล โดยที่ TPR คือ อัตราส่วนของตัวอย่างที่ถูกจำแนกถูกต้องเป็น positive class ต่อจำนวนตัวอย่างที่เป็น positive class ในข้อมูลจริง และ FPR คือ อัตราส่วนของตัวอย่างที่ถูกจำแนกผิดเป็น positive class ต่อจำนวนตัวอย่างที่เป็น negative class ในข้อมูลจริง

กราฟ AUC-ROC curve จะมีรูปแบบเป็นเส้นโค้ง โดยถ้าโมเดลแยกแยะข้อมูลได้ดีจะมีค่า TPR สูง และค่า FPR ต่ำ ทำให้กราฟจะอยู่บนด้านซ้ายบนของกระดาน แต่ถ้าโมเดลแยกแยะไม่ดีจะเป็นเส้นตรงแทน ซึ่งมีค่า TPR และ FPR เท่ากัน

AUC-ROC Curve ใช้สำหรับการประเมินความแม่นยำของโมเดลในงานที่เป็นการแยกประเภท (classification) โดยเฉพาะในกรณีที่มีคลาสไม่สมดุล หรือมีจำนวนข้อมูลของคลาสแต่ละคลาสที่ต่างกันมากๆ

เมื่อประเมินความแม่นยำของโมเดลด้วยตัวชี้วัดอื่นๆ เช่น accuracy, precision, recall เป็นตัวชี้วัดที่ไม่สามารถใช้ได้กับกรณีที่มีคลาสไม่สมดุล เพราะอาจจะให้ผลการประเมินที่เหมือนกันโดยไม่คำนึงถึงคลาสที่มีข้อมูลน้อย

AUC-ROC Curve นำเสนอผลการประเมินของโมเดลด้วยกราฟโดยนำค่า True Positive Rate (TPR) และ False Positive Rate (FPR) มาเปรียบเทียบกัน โดย TPR หมายถึงสัดส่วนของ positive ที่ถูกทำนายถูกต้องต่อ positive ทั้งหมด และ FPR หมายถึงสัดส่วนของ negative ที่ถูกทำนายว่าเป็น positive ต่อ negative ทั้งหมด

กราฟ AUC-ROC Curve จะเป็นเส้นสวนไปสวนมา โดยกราฟที่อยู่บนสุด (ด้านบนขวา) จะแสดงถึงโมเดลที่มีประสิทธิภาพดีที่สุด ส่วนกราฟที่อยู่ด้านล่าง (ด้านล่างซ้าย) จะแสดงถึงโมเดลที่มีประสิทธิภาพต่ำที่สุด และกราฟที่เป็นเส้นตรงจะแสดงถึงโมเดลที่ไม่มีความแตกต่างในการทำนายแต่ละคลาส

นอกจากนั้น AUC-ROC curve ยังสามารถใช้ในการเปรียบเทียบประสิทธิภาพของหลายๆ โมเดล หรือการทดลองที่ต่างกันได้ โดยใช้ค่า AUC เป็นตัวเปรียบเทียบ โมเดลที่มี AUC มากกว่าจะถือว่ามีประสิทธิภาพดีกว่า ในขณะเดียวกัน สามารถหา threshold ที่เหมาะสมสำหรับการทำนายได้ โดยใช้ค่า ROC curve นี้ ดังนั้น AUC-ROC curve เป็นเครื่องมือที่มีประโยชน์ในการประเมินและปรับปรุงประสิทธิภาพของโมเดลการทำนายที่เกี่ยวข้องกับการจำแนกประเภท (classification) ใน Machine Learning โดยเฉพาะอย่างยิ่งในงานทางการแพทย์และการวิเคราะห์ข้อมูลที่เกี่ยวข้องกับการจำแนกโรคหรืออาการของผู้ป่วย

ขั้นตอนการใช้ AUC – ROC Curve ใน Machine Learning มีดังนี้

  1. สร้างโมเดล Machine Learning:
    ก่อนที่เราจะสร้าง AUC – ROC Curve เราจำเป็นต้องสร้างโมเดล Machine Learning ให้เรียบร้อยก่อน เช่น Logistic Regression, Decision Tree, Random Forest, Neural Network เป็นต้น

  2. แบ่งข้อมูลเป็น Train และ Test:
    แบ่งข้อมูลออกเป็น Train และ Test เพื่อใช้ Train โมเดล Machine Learning และทดสอบประสิทธิภาพของโมเดล Machine Learning ด้วย Test Data

  3. สร้างโมเดลและทำนายผล:
    ใช้ Train Data สร้างโมเดลและใช้ Test Data ในการทำนายผล โดยผลลัพธ์จะได้เป็นค่าความแม่นยำ (Accuracy) และค่าเสียหาย (Loss)

  4. คำนวณค่าความแม่นยำของโมเดล:
    ใช้ Test Data และผลลัพธ์ที่ได้จากการทำนายของโมเดล คำนวณค่าความแม่นยำของโมเดลเพื่อใช้ในการสร้าง AUC – ROC Curve

  5. สร้าง AUC – ROC Curve:
    ใช้ค่า True Positive Rate (TPR) และ False Positive Rate (FPR) เพื่อสร้างกราฟ AUC – ROC Curve

  6. ประเมินประสิทธิภาพของโมเดล:
    ดูค่า AUC – ROC Curve เพื่อประเมินประสิทธิภาพของโมเดล โดย AUC มีค่าอยู่ระหว่าง 0 ถึง 1 โดย AUC ที่มีค่ามากกว่า 0.5 ถือว่าโมเดลมีประสิทธิภาพในการทำนายผล และค่า AUC เท่ากับ 1 แสดงว่าโมเดลสามารถทำนายผลได้ถูกต้องทั้งหมด

ในการประเมินประสิทธิภาพของโมเดลการจำแนกหรือคาดการณ์ข้อมูล การใช้ AUC – ROC Curve เป็นวิธีที่นิยมมาก โดยเฉพาะในงานที่เกี่ยวข้องกับการตรวจหาโรค เช่น การตรวจหาโรคมะเร็ง ซึ่งเป็นการตรวจหาโรคที่ต้องการความแม่นยำสูงและต้องการลดความเป็นเท็จลบที่เป็นไปได้ให้น้อยที่สุด เป็นต้น การใช้ AUC – ROC Curve เป็นวิธีที่มีประสิทธิภาพสูงในการประเมินโมเดล โดยเฉพาะในงานที่ต้องการความแม่นยำ

ตัวอย่าง การใช้ AUC-ROC Curve ในการวัดประสิทธิภาพของ model ในการแยกประเภทโดยใช้ Logistic Regression

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split

# สร้าง dataset ขึ้นมา
X, y = make_classification(n_samples=1000, n_classes=2, n_features=20, random_state=42)

# แบ่ง train set และ test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# สร้าง model Logistic Regression
clf = LogisticRegression()
clf.fit(X_train, y_train)

# ทำนายค่า y จาก X_test
y_score = clf.predict_proba(X_test)[:, 1]

# คำนวณค่า false positive rate (fpr) และ true positive rate (tpr)
fpr, tpr, _ = roc_curve(y_test, y_score)

# คำนวณค่า AUC (Area Under Curve)
roc_auc = auc(fpr, tpr)

# plot ROC Curve
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

ผลลัพธ์ที่ได้ คือ

จากตัวอย่าง

  • make_classification ถูกใช้ในการสร้าง dataset ที่ประกอบด้วย features จำนวน 20 และมี 2 กลุ่ม
  • train_test_split ถูกใช้ในการแบ่ง train set และ test set
  • LogisticRegression ถูกใช้ในการสร้าง model โดยใช้ train set
  • predict_proba ถูกใช้ในการทำนายค่า y จาก test set โดยต้องการค่า probability ของ class 1 เพื่อใช้ในการวัดประสิทธิภาพของ model ด้วย AUC-ROC Curve
  • roc_curve ถูกใช้ในการคำนวณค่า false positive rate (fpr) และ true positive rate (tpr) ที่จำเป็นสำหรับ plot ROC Curve
  • auc ถูกใช้ในการคำนวณค่า AUC (Area Under Curve) สำหรับ plot ROC Curve

การใช้ AUC-ROC Curve ในตัวอย่างมีขั้นตอนดังนี้

  1. Import libraries
  • numpy: ไลบรารี่สำหรับการทำงานกับ arrays และ matrices
  • matplotlib.pyplot: ไลบรารี่สำหรับการสร้างกราฟและแผนภูมิ
  • make_classification: ฟังก์ชันสำหรับสร้าง dataset สำหรับการสร้างโมเดล Machine Learning ซึ่งเป็นฟังก์ชันของ scikit-learn ที่ใช้สร้างชุดข้อมูลสำหรับงาน classification โดยสามารถกำหนดพารามิเตอร์ได้หลากหลาย เช่น จำนวนตัวอย่าง (n_samples) จำนวนคลาส (n_classes) และจำนวนแบบจำลองที่ใช้สร้างข้อมูล (n_clusters_per_class) เป็นต้น
  • LogisticRegression: โมเดล Linear Classification ใน scikit-learn
  • roc_curve: ฟังก์ชันสำหรับคำนวณค่า False Positive Rate (FPR) และ True Positive Rate (TPR) สำหรับ ROC Curve
  • auc: ฟังก์ชันสำหรับคำนวณค่าพื้นที่ใต้กราฟ ROC Curve
  • train_test_split: ฟังก์ชันสำหรับแบ่ง dataset เป็น train set และ test set
  1. สร้าง dataset ขึ้นมาด้วยฟังก์ชัน make_classification โดยกำหนดค่าต่างๆ เช่น n_samples, n_classes, n_features และ random_state

  2. แบ่ง dataset เป็น train set และ test set ด้วยฟังก์ชัน train_test_split โดยกำหนด test_size ให้เท่ากับ 0.3

  3. สร้างโมเดล Logistic Regression ด้วยคำสั่ง clf = LogisticRegression() และฝึกสอนโมเดลด้วยข้อมูล train set ด้วยคำสั่ง clf.fit(X_train, y_train)

  4. ทำนายค่า y จาก X_test ด้วยคำสั่ง y_score = clf.predict_proba(X_test)[:, 1]

  5. คำนวณค่า FPR และ TPR ด้วยฟังก์ชัน roc_curve โดยกำหนด y_test และ y_score เป็น input

  6. คำนวณค่า AUC ด้วยฟังก์ชัน auc โดยกำหนด FPR และ TPR เป็น input

  7. สร้างกราฟ ROC Curve ด้วยคำสั่ง plt.plot และ plt.show() โดยใส่ค่า FPR และ TPR เป็น input ของ plt.plot

การแบ่งข้อมูลเป็น train set และ test set ใช้ฟังก์ชัน train_test_split ที่เป็นฟังก์ชันของ scikit-learn โดยกำหนด test size เป็น 0.3 คือแบ่งข้อมูลเป็น 70% train set และ 30% test set

สำหรับการสร้างโมเดลใช้ Logistic Regression ที่เป็นอัลกอริทึมการเรียนรู้เชิงสถิติที่ใช้สำหรับงาน classification

ในการทำนายค่า y จาก X_test จะใช้เมธอด predict_proba เพื่อทำนายความน่าจะเป็นของคลาสที่ 1 ซึ่งจะได้ค่าความน่าจะเป็นเป็นอาร์เรย์ขนาด n_test_samples

สำหรับคำนวณ ROC Curve และ AUC ใช้ฟังก์ชัน roc_curve และ auc ที่เป็นฟังก์ชันของ scikit-learn โดยฟังก์ชัน roc_curve จะคืนค่า false positive rate (fpr) และ true positive rate (tpr) ส่วน auc จะคำนวณค่า AUC (Area Under Curve)

สุดท้าย ใช้ Matplotlib เพื่อพล็อตกราฟ ROC Curve โดยกำหนดให้แกน x เป็น false positive rate และแกน y เป็น true positive rate และแสดงค่า AUC ในกราฟ

ตัวอย่าง การใช้ AUC – ROC Curve ใน Machine Learning เกี่ยวกับปัญหาที่มีการจัดแบ่งกลุ่ม โดยสร้างโมเดลด้วย Decision Tree

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split

# สร้าง dataset ขึ้นมา
X, y = make_classification(n_samples=1000, n_classes=2, n_features=20, random_state=42)

# แบ่ง train set และ test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# สร้าง model Decision Tree
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)

# ทำนายค่า y จาก X_test
y_score = clf.predict_proba(X_test)[:, 1]

# คำนวณค่า false positive rate (fpr) และ true positive rate (tpr)
fpr, tpr, _ = roc_curve(y_test, y_score)

# คำนวณค่า AUC (Area Under Curve)
roc_auc = auc(fpr, tpr)

# plot ROC Curve
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

ผลลัพธ์ที่ได้ คือ

จากตัวอย่าง มีการสร้าง dataset แบบสุ่มขึ้นมาจำนวน 1000 ตัวอย่าง ซึ่งแบ่งเป็น 2 กลุ่ม โดยมี feature ทั้งหมด 20 ตัว จากนั้นทำการแบ่ง train set และ test set ด้วยอัตราส่วน 70:30 ตามลำดับ

จากนั้นสร้าง model ด้วย Decision Tree Classifier แล้วทำการ fit กับ train set ที่ได้แบ่งไว้ก่อนหน้านี้ จากนั้นทำการทำนายค่า y ด้วย X_test และนำ y_score มาคำนวณค่า false positive rate (fpr) และ true positive rate (tpr) จากนั้นคำนวณค่า AUC โดยใช้คำสั่ง auc() จาก Library scikit-learn

สุดท้าย plot กราฟ ROC Curve โดยใช้ Matplotlib และแสดงค่า AUC ที่ได้ ซึ่งเป็นตัวบอกความแม่นยำของโมเดลในการจำแนกแยกกลุ่ม ซึ่งค่า AUC จะอยู่ในช่วง 0.5 – 1 โดยค่าที่มากกว่า 0.5 จะหมายถึงโมเดลมีความแม่นยำในการจำแนกแยกกลุ่มดีขึ้นกว่าการสุ่มเดินเล่น (random guessing)

การใช้ AUC-ROC Curve ใน Machine Learning โดยใช้ Decision Tree ในการสร้างโมเดลและประเมินผลโดยการพล็อตกราฟ ROC Curve ด้วย Matplotlib โดยลำดับขั้นตอนการทำงานประกอบไปด้วย:

  1. สร้าง dataset ทดสอบด้วยฟังก์ชัน make_classification() โดยกำหนดจำนวนตัวอย่าง (n_samples), จำนวนคลาส (n_classes), จำนวนฟีเจอร์ (n_features), และ random state เพื่อให้ผลการสุ่มเหมือนกันทุกครั้ง

  2. แบ่งข้อมูลออกเป็น train set และ test set โดยกำหนด test_size ให้เท่ากับ 0.3 เพื่อให้ test set มีจำนวนตัวอย่างเท่ากับ 30% ของ dataset

  3. สร้าง Decision Tree Classifier โดยกำหนด random state เพื่อให้ผลการสุ่มเหมือนกันทุกครั้ง และใช้ฟังก์ชัน fit() เพื่อสร้างโมเดลจาก train set

  4. ทำนายค่า y ของ test set โดยใช้ฟังก์ชัน predict_proba() เพื่อคืนค่าความน่าจะเป็นว่าตัวอย่างใน test set จะอยู่ในคลาส positive (y = 1) หรือ negative (y = 0)

  5. คำนวณค่า false positive rate (fpr) และ true positive rate (tpr) โดยใช้ฟังก์ชัน roc_curve() โดยรับข้อมูลจริง y_test และค่าที่ทำนายได้ y_score เพื่อคำนวณค่า threshold ในการตัดสินใจว่าตัวอย่างนั้นจะอยู่ในคลาส positive หรือ negative

  6. คำนวณค่า AUC (Area Under Curve) โดยใช้ฟังก์ชัน auc() จาก fpr และ tpr ที่คำนวณได้ในขั้นตอนก่อนหน้า

  7. พล็อตกราฟ ROC Curve โดยใช้ Matplotlib

ตัวอย่าง การใช้ AUC – ROC Curve ใน Machine Learning เกี่ยวกับปัญหาที่มีการจัดแบ่งกลุ่ม โดยสร้างโมเดลด้วย Neural Network

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split

# สร้าง dataset ขึ้นมา
X, y = make_classification(n_samples=1000, n_classes=2, n_features=20, random_state=42)

# แบ่ง train set และ test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# สร้าง model Neural Network
clf = MLPClassifier(hidden_layer_sizes=(50, 50), max_iter=1000, random_state=42)
clf.fit(X_train, y_train)

# ทำนายค่า y จาก X_test
y_score = clf.predict_proba(X_test)[:, 1]

# คำนวณค่า false positive rate (fpr) และ true positive rate (tpr)
fpr, tpr, _ = roc_curve(y_test, y_score)

# คำนวณค่า AUC (Area Under Curve)
roc_auc = auc(fpr, tpr)

# plot ROC Curve
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

ผลลัพธ์ที่ได้ คือ

จากตัวอย่าง ได้สร้าง dataset และใช้ AUC-ROC curve ใน Machine Learning โดยใช้ปัญหาการจัดแบ่งกลุ่มโดยการสร้างโมเดล Neural Network และพล็อตกราฟด้วย Matplotlib

ในขั้นตอนแรก มีการใช้ make_classification ในการสร้าง dataset ที่มี 20 features และ 2 classes แล้วแบ่งเป็น train set และ test set โดย test set จะมีขนาดเท่ากับ 30% ของข้อมูลทั้งหมด

เราใช้ MLPClassifier ในการสร้างโมเดล Neural Network โดยกำหนด hidden_layer_sizes เป็น (50, 50) หมายความว่าโมเดลมี hidden layer 2 ชั้นที่มี 50 โหนดในแต่ละชั้น และกำหนด max_iter เป็น 1000 คือจำนวน maximum iteration ที่โมเดลจะทำการฝึกสอน

สร้าง dataset จำนวน 1000 ตัว ซึ่งแบ่งออกเป็น 2 กลุ่ม ด้วยฟีเจอร์ทั้งหมด 20 ฟีเจอร์ โดยใช้ฟังก์ชัน make_classification และกำหนด random state เป็น 42

ในขั้นตอนต่อมา มีการแบ่ง dataset เป็น train set และ test set โดยเก็บค่า X_train, X_test, y_train, y_test โดยกำหนด test size เป็น 0.3 และ random state เป็น 42

ในขั้นตอนการสร้างโมเดล Neural Network โดยใช้ MLPClassifier โดยกำหนด hidden layer sizes เป็น (50, 50) และกำหนด max iteration เป็น 1000 และ random state เป็น 42 และสร้างโมเดลด้วยการเรียกใช้ fit()

ในขั้นตอนต่อมา ได้ทำนายค่า y จาก X_test ด้วย predict_proba() และใช้ค่าที่คำนวณจาก predict_proba() เพื่อคำนวณค่า false positive rate (fpr) และ true positive rate (tpr) ด้วย roc_curve() และคำนวณค่า AUC (Area Under Curve) ด้วย auc()

ในขั้นตอนสุดท้าย พล็อตกราฟ ROC curve ด้วย Matplotlib โดยใช้ plt.plot() เพื่อพล็อตค่า fpr และ tpr โดยใช้สีส้ม และใส่ชื่อ label เพื่อแสดงค่า AUC และใช้ plt.plot() เพื่อพล็อตเส้นประสีน้ำเงิน แทนเส้นผ่านจุด (0,0) และ (1,1) และใช้ plt.xlabel(), plt.ylabel(), plt.title() และ plt.legend() เพื่อตั้งค่าต่างๆ ในการแสดงผลกราฟ

การทำงานของโค้ดสามารถแจกแจงออกเป็นขั้นตอนดังนี้

  1. import library ที่จำเป็นในการทำงาน เช่น numpy, matplotlib, sklearn เป็นต้น

  2. สร้าง dataset ขึ้นมาโดยใช้ make_classification() ใน sklearn โดยกำหนดจำนวน sample ทั้งหมด 1000, จำนวน class 2, และจำนวน features 20 โดยกำหนด random state เป็น 42

  3. แบ่ง dataset เป็น train set และ test set โดยกำหนด test set ให้มีขนาด 30% ของ dataset และกำหนด random state เป็น 42

  4. สร้างโมเดล Neural Network โดยใช้ MLPClassifier ใน sklearn โดยกำหนด hidden layer 2 ชั้น แต่ละชั้นมี 50 โนด และกำหนดจำนวน max iteration ให้เท่ากับ 1000 โดยกำหนด random state เป็น 42

  5. ทำการ train โมเดลโดยใช้ข้อมูล train set

  6. ทำนายค่า y ของ test set โดยใช้โมเดล Neural Network และคำนวณค่า y_score โดยใช้ predict_proba() ซึ่งจะคืนค่าความน่าจะเป็นของคลาสที่มีค่าสูงสุด

  7. คำนวณค่า false positive rate (fpr) และ true positive rate (tpr) โดยใช้ roc_curve() ใน sklearn

  8. คำนวณค่า AUC (Area Under Curve) โดยใช้ auc() ใน sklearn

  9. สร้างกราฟ ROC Curve โดยใช้ matplotlib โดยกำหนดว่าเส้น ROC Curve มีสีส้ม และความหนาเท่ากับ 2 และแสดงค่า AUC บนกราฟด้วย label