{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "z_pu3Mn7iKez"
},
"source": [
"# Introduction to Machine Learning\n",
"\n",
"บทเรียนเกี่ยวกับ machine learning เบื้องต้นได้ถูกสอนและบรรจุอยู่ใน Brain Buiding Blocks โดยสามารถทบทวนได้จาก [Session ที่ 7 ของ Brain Building Blocks](https://youtube.com/playlist?list=PLnE-99oQBy1KNsUWI0F1L0Lcwtzp-CkYu)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vBkDUPUciPyL"
},
"source": [
"Machine learning (การเรียนรู้ของเครื่อง) คือสาขาหนึ่งของปัญญาประดิษฐ์ (Artificial Intelligence, AI) ที่เน้นการพัฒนาและออกแบบวิธีการให้เครื่องคอมพิวเตอร์สามารถเรียนรู้จากข้อมูลโดยไม่จำเป็นต้องระบุโครงสร้างหรือกฎกำหนดอย่างชัดเจน เครื่องคอมพิวเตอร์จะสามารถวิเคราะห์และสกัดความรู้หรือแบบแผนที่อยู่ภายในชุดข้อมูล ทำนายผลลัพธ์ หรือทำงานอื่นได้ โดยจะต้องอาศัยอัลกอริทึม (Algorithms) ต่างๆ ในการเรียนรู้"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MFx2y1Z0KXRQ"
},
"source": [
"\n",
"AI-Machine Learning-Deep Learning [ที่มา](https://blogs.nvidia.com/blog/2016/07/29/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "75relggB1ySB"
},
"source": [
"แผนภาพข้างต้นแสดงถึงวิวัฒนาการ AI ซึ่งก็คือความฉลาดเทียมที่สร้างขึ้นให้กับสิ่งไม่มีชีวิต โดยมี Machine Learning หรือการเรียนรู้ของเครื่อง จัดเป็นส่วนหนึ่งและเปรียบเหมือนสมองของ AI และส่วน Deep Learning (การเรียนรู้เชิงลึก) จัดเป็นการเรียนรู้ของเครื่องด้วยอัลกอริทึมโครงข่ายประสาทเทียม (Artificial Neural Networks, ANNs) ซึ่งเลียนแบบการทำงานของระบบประสาทของมนุษย์"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VlDb3SzKCuKs"
},
"source": [
"# การจำแนก Machine learning ตามการเรียนรู้ของข้อมูล\n",
"เราสามารถจำแนกประเภทของ Machine learning ตามการเรียนรู้ของข้อมูลได้เป็นหลายประเภท เช่น\n",
"\n",
"* [**Supervised Learning**](https://youtu.be/NCF1cqLCW84) (การเรียนรู้แบบมีผู้สอน) เป็นการเรียนรู้ที่ต้องอาศัยชุดข้อมูลควบคู่ไปกับชุดคำตอบของข้อมูลหรือผลเฉลย (ซึ่งเรามักจะเรียกกันว่า labels หรือ targets) ในการฝึกฝนโมเดล เพื่อให้เกิดการเรียนรู้และสร้างรูปแบบในการจำแนกหรือทำนายผลลัพธ์ของชุดข้อมูลที่ต้องการศึกษา โมเดลที่เป็นที่นิยมใช้สำหรับ supervised learning ได้แก่ Linear Regression, Logistic Regression, Support Vector Machine (SVM), Decision Tree, Random Forest, และ Neural Networks เป็นต้น โจทย์ที่เรามักจะเจอในการทำงานกับ supervised learning ประกอบด้วย\n",
"\n",
" * **Classification** (การจำแนกหมวดหมู่): เป็นการจำแนกข้อมูลออกเป็นประเภทต่าง ๆ เช่น การจำแนกอีเมล์ว่าเป็นอีเมล์ที่เป็นสแปมหรือไม่เป็นสแปม หรือการจำแนกภาพถ่ายว่าเป็นภาพถ่ายของคนหรือสัตว์\n",
"\n",
" * **Regression** (การทำนายค่า): เป็นการทำนายผลลัพธ์ที่มีลักษณะเป็นค่าต่อเนื่องหรือตัวเลข โดยตัวอย่างที่นิยมใช้ เช่น การทำนายราคาของบ้าน การทำนายยอดขายสินค้าในอนาคต เป็นต้น\n",
"\n",
"* [**Unsupervised Learning**](https://youtu.be/pG_eDbWALCs) (การเรียนรู้แบบไม่มีผู้สอน): ลักษณะของการเรียนรู้ประเภทนี้อาศัยชุดของข้อมูลที่ไม่มีชุดคำตอบหรือผลเฉลย โมเดลจะเรียนรู้โดยการสำรวจโครงสร้าง หาความสัมพันธ์โครงสร้างข้อมูล ตัวอย่างของเทคนิคที่เป็นที่รู้จักของ Unsupervised Learning ได้แก่ เทคนิค Clustering (การจัดกลุ่ม) และ เทคนิค Dimensionality Reduction (การลดมิติของข้อมูล เพื่อลดความซับซ้อนก่อนนำไปใช้ต่อ หรือเพื่อแสดงผลในรูปกราฟอ่านได้ง่ายขึ้น) ที่เราได้เรียนรู้กันมาในบทเรียนที่แล้ว\n",
"\n",
"\n",
"* [**Reinforcement Learning**](https://youtu.be/DvpMk2Tl6RE) (การเรียนรู้แบบเสริมกำลัง): เป็นการเรียนรู้ที่โมเดลพัฒนาตนเองขึ้น จากการลองผิดลองถูกในสถานการณ์ต่างๆ และจากการสังเกตสิ่งแวดล้อมรอบตัว ภายใต้เงื่อนไขของการได้รับรางวัลเมื่อโมเดลนั้นทำได้ถูกหรือตอบถูกนั่นเอง ตัวอย่างของ Reinforcement Learning ที่ถูกนำมาประยุกต์ใช้ในเกมส์ เช่น AlphaGo เป็น AI ที่เรียนรู้และฝึกหัดจากข้อมูลเกมส์การแข่งขันโกะจำนวนมหาศาลของผู้เล่นต่างๆ รวมถึงเกมส์ที่เล่นกับตัวเอง จนมีความสามารถเล่นเกมโกะให้ชนะผู้เล่นระดับโลกได้\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YzgGGcA3t5cd"
},
"source": [
"\n",
"\n",
"ภาพแสดงการจำแนก Machine Learning ตามการเรียนรู้ของข้อมูล: Supervised Learning, Unsupervised Learning และ Reinforcement Learning [ที่มา](https://datasciencedojo.com/blog/machine-learning-101/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "e2TeMZLoc1vC"
},
"source": [
"# กระบวนการสร้างแบบจำลอง Machine Learning"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wJ06q8w7aIo8"
},
"source": [
"\n",
"\n",
"แผนภาพแสดงกระบวนการสร้างแบบจำลอง Machine Learning [ที่มา](https://techtrendmm.tech/2022/02/23/the-machine-learning-process/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-EUhPEWjZFMk"
},
"source": [
"แผนภาพด้านบนแสดงกระบวนการสร้างโมเดล Machine Learning เราจะสังเกตเห็นได้ว่า ขั้นตอนการเก็บข้อมูล และการเตรียมข้อมูลนั้นมีความสำคัญอย่างมาก ไม่แพ้ขั้นตอนการสร้างโมเดลเลยทีเดียว ซึ่งเราอาจจะต้องใช้ความละเอียดรอบคอบและเวลาพอสมควรกับขั้นตอนนี้ ต่อไปเราจะมาลงรายละเอียดของแต่ละขั้นตอนกัน\n",
"\n",
"1. การเก็บรวบรวมข้อมูล (Data Collection): ข้อมูลเหล่านี้อาจเป็นข้อมูลที่ได้รับการจัดเก็บในรูปแบบที่มีลักษณะโครงสร้างแน่นอนและสามารถนำไปใช้ได้ง่าย (structured data) เช่น tsv และ csv หรืออาจเป็นข้อมูลที่ไม่ได้มีโครงสร้างที่แน่นอนและเป็นระเบียบ (unstructured data)\n",
"\n",
"2. การตรวจสอบและจัดเตรียมข้อมูล (Data Preprocessing): การตรวจสอบและจัดเตรียมข้อมูลให้พร้อมใช้งาน ประกอบด้วย\n",
"\n",
" - การทำความสะอาดข้อมูล (Data Cleaning) ด้วยการจัดการข้อมูลที่หายไปโดยการเติมข้อมูล (data imputation) หรือการละทิ้งข้อมูล (drop) ที่เราไม่สนใจ\n",
"\n",
" - การแปลงข้อมูลให้เป็นรูปแบบที่เหมาะสม (Transformation) ด้วยการปรับข้อมูลให้อยู่ในรูปแบบที่คอมพิวเตอร์จะสามารถนำไปใช้งานได้ง่าย\n",
"\n",
" - การรวมข้อมูล (Data Integration) โดยการนำข้อมูลที่เกี่ยวข้องทั้งหมด มารวบรวมให้เป็นข้อมูลชุดเดียวกันโดยทำการเชื่อมข้อมูลของ บุคคลหรือวัตถุสิ่งเดียวกันให้อยู่ใน entry เดียวกัน หรือสามารถอ้างอิงถึงกันได้ง่าย\n",
"\n",
"3. การดึงคุณลักษณะที่สำคัญออกมาจากข้อมูล (Feature Extraction): ขั้นตอนนี้จะดึงคุณลักษณะที่สำคัญมาเป็นตัวแทนของจุดข้อมูลที่เรามี โดยเราจะเรียกคุณลักษณะที่ดึงออกมาว่า feature ซึ่งมักจะเป็นคุณลักษณะที่จะช่วยให้เราแก้โจทย์ปัญหาได้ง่ายขึ้นกว่าการใช้ข้อมูลดิบโดยตรง และควรเป็นคุณลักษณะที่มีความเหมาะสมต่อโมเดลที่เลือกใช้\n",
"\n",
"\n",
"4. การเลือกแบบจำลอง (Model Selection): คือการพิจารณาความเหมาะสมของปัญหาและข้อมูลที่มีอยู่ โดยเลือกแบบจำลองที่เหมาะสมต่อผลลัพท์ที่ต้องการ เช่น\n",
"\n",
" - แบบจำลองการทำนายค่า (regression) เหมาะสำหรับปัญหาที่ต้องการผลลัพธ์แสดงค่าตัวเลข (หรือชุดของตัวเลข) ที่มีความต่อเนื่อง หรือมีสมบัติความเป็นลำดับขั้น ordinal\n",
" \n",
" - แบบจำลองการจำแนกประเภท (classification) เหมาะสำหรับปัญหาที่ต้องการจำแนกจุดข้อมูลแต่ละจุดว่าเป็นประเภทใด เช่น การจำแนกข้อมูลภาพถ่ายสมองว่าเป็นผู้มีสุขภาพดีหรือเป็นผู้ที่มีภาวะผิดปกติทางสมอง\n",
" \n",
" - แบบจำลองการจัดกลุ่มข้อมูล (clustering) เหมาะสมกับการดูโครงสร้างของข้อมูลว่ามีการกระจุกตัว หรือการกระจายตัวในรูปแบบใด ซึ่งใช้การเรียนรู้แบบ unsupervised\n",
"\n",
"5. การฝึกแบบจำลอง (Model Training): ในกระบวนการนี้จะเป็นการให้ข้อมูลที่เตรียมแก่แบบจำลองที่เราเลือก เพื่อให้แบบจำลองใช้ฝึกฝนและเรียนรู้วิธีการที่จะแก้ปัญหาให้ได้\n",
"\n",
"6. การประเมินแบบจำลอง (Model Evaluation): เมื่อแบบจำลองถูกฝึกแล้ว จะต้องทำการประเมินผลประสิทธิภาพของแบบจำลอง โดยใช้ชุดข้อมูลทดสอบที่แยกไว้เพื่อประเมินค่าเชิงสถิติ เช่น ค่าความถูกต้อง (accuracy) ค่าความแม่นยำ (precision) ค่าความไว (recall) หรือค่าความคลาดเคลื่อนเฉลี่ย (mean squared error) เป็นต้น\n",
"\n",
"สิ่งที่กล่าวมาข้างต้น เป็นหลักการพื้นฐานที่เราสามารถนำมาใช้เพื่อเป็นแนวทางในการศึกษาเพื่อสร้างแบบจำลองที่ตรงตามความต้องการและแก้ปัญหาได้อย่างเหมาะสม มุมมองการตั้งคำถามหรือเป้าหมายในการสร้างแบบจำลองเองก็เป็นส่วนสำคัญที่จะทำให้เราสามารถใช้ machine learning ในการแก้ปัญหาได้อย่างมีประสิทธิภาพ นอกจากวิธีการพื้นฐานดังแสดงข้างต้นแล้วยังมีตัวอย่างการวิเคราะห์ปัญหารูปแบบอื่น ๆ เช่น https://developers.google.com/machine-learning/problem-framing ซึ่งแต่ละวิธีก็มีข้อดีและข้อด้อยต่างกัน และขึ้นกับความถนัดของผู้ใช้ด้วยเช่นกัน\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZE-v0TUdFB0L"
},
"source": [
"# Model Evaluation"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AZDhXVTShpSt"
},
"source": [
"บทเรียนเรื่อง model evaluation ได้ถูกบรรจุอยู่ใน Brain Buiding Blocks โดยสามารถทบทวนเนื้อหาได้จาก [Model Evaluation](https://youtu.be/xXW2mPt83Dc) ของภายใต้ Session 6: Data Modeling\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9Ew2XT9vhmgF"
},
"source": [
"การประเมินแบบจำลองหรือโมเดลเป็นหนึ่งในขั้นตอนที่สำคัญในการวัดประสิทธิภาพ (performance) ของโมเดลว่าดีเพียงพอต่อการนำไปใช้งานหรือไม่\n",
"กระบวนการนี้มีความสำคัญไม่น้อยไปกว่าการเลือกและการสร้างโมเดล\n",
"\n",
"ตัวอย่างตัวชี้วัดที่เป็นที่นิยมใช้ในการประเมินแบบจำลองในโจทย์ประเภท regression ประกอบด้วย R-squared, Mean Absolute Error (MAE), Mean Squared Error (MSE), Root Mean Squared Error (RMSE)\n",
"\n",
"ในส่วนของโจทย์ประเภท (classification) จะมีตัวอย่างตัวชี้วัด ดังนี้\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "PODIl-vzy5sR"
},
"source": [
"* **Confusion Matrix**\n",
"เป็นตารางที่แสดงผลลัพธ์จากการทำนายของแบบจำลองในการแก้ปัญหา classification โดยที่ขนาดของตารางขึ้นอยู่กับจำนวนประเภท (class หรือ category) ที่เราต้องการทำนายผลลัพธ์ เช่น สำหรับโจทย์ที่มี 2 classes ตัว confusion matrix จะเป็นตารางขนาด 2 x 2 ถ้าเกิดว่าเป็นโจทย์ที่มีจำนวน class มากกว่า 2 ตัว confusion matrix ก็จะมีขนาดใหญ่ขึ้นเรื่อย ๆ เช่น 4 x 4 สำหรับโจทย์ที่ต้องการจำแนกข้อมูลออกเป็น 4 classes"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5IrI7lDnuQnM"
},
"source": [
"**ตัวอย่าง** สมมติว่าเราต้องการใช้โมเดล machine learning ในการตรวจคัดกรองดูว่าผู้ที่เข้ารับการตรวจมีภาวะรู้คิดบกพร่องหรือว่าปกติดี โจทย์ข้อนี้จะเป็นโจทย์ classification ที่มี 2 classes ประกอบด้วย\n",
"\n",
"1. Positive - มีภาวะรู้คิดบกพร่อง\n",
"\n",
"2. Negative - ปกติดี\n",
"\n",
"ในการวัดผล confusion matrix จะมีขนาดเป็น 2 x 2 ตามแผนภาพด้านล่าง\n",
"\n",
"\n",
"\n",
"แผนภาพแสดง Confusion Matrix [ที่มา](https://medium.com/@pagongatchalee/confusion-matrix-%E0%B9%80%E0%B8%84%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%AA%E0%B8%B3%E0%B8%84%E0%B8%B1%E0%B8%8D%E0%B9%83%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%A1%E0%B8%B4%E0%B8%99%E0%B8%9C%E0%B8%A5%E0%B8%A5%E0%B8%B1%E0%B8%9E%E0%B8%98%E0%B9%8C%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%99%E0%B8%B2%E0%B8%A2-%E0%B9%83%E0%B8%99machine-learning-fba6e3f9508c)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cw-w8Ro_u2dW"
},
"source": [
"\n",
"โดยที่\n",
"> TPs: True Positives คือ จำนวนเคสที่พบว่า เป็น positive และโมเดลทำนายถูกต้อง ว่าเป็น positive\n",
" * โมเดลตอบถูกต้องว่าผู้เข้ารับการตรวจมีภาวะรู้คิดบกพร่องจริง\n",
"\n",
"> TNs: True Negatives คือ จำนวนเคสที่พบว่า เป็น negative และโมเดลทำนายถูกต้อง ว่าเป็น negative\n",
" * โมเดลตอบถูกต้องว่าผู้เข้ารับการตรวจไม่มีภาวะรู้คิดบกพร่องจริง\n",
"\n",
"> FPs: False Positives คือ จำนวนเคสที่พบว่า เป็น negative แต่โมเดลทำนายผิด ว่าเป็น positive\n",
" * โมเดลตอบว่าผู้เข้ารับการตรวจมีภาวะการรู้คิดบกพร่อง ทั้ง ๆ ที่ในความเป็นจริง เป็นผู้ที่ไม่มีภาวะนั้น\n",
"\n",
"> FNs: False Negatives คือ จำนวนเคสที่พบว่า เป็น postitive แต่โมเดลทำนายผิด ว่าเป็น negative\n",
" * โมเดลตอบว่าผู้เข้ารับการตรวจไม่มีภาวะการรู้คิดบกพร่อง ทั้ง ๆ ที่ในความเป็นจริง เป็นผู้ที่ที่มีภาวะนั้น หากเรานำเอาโมเดลที่มี false negative เยอะมาใช้งาน เราก็จะเสียโอกาสที่จะตรวจพบผู้ที่มีภาวะการรู้คิดบกพร่อง"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jAtnLNyqMpur"
},
"source": [
"* **Accuracy** (ค่าความถูกต้อง): เป็นค่าที่แสดงถึงความแม่นยำของโมเดลโดยรวม ใช้บอกว่าโมเดลสามารถทำนายได้ถูกต้องและตรงกับสิ่งที่เกิดขึ้นจริงเท่าไรเมื่อเทียบกับจำนวนการทำนายทั้งหมด โดยค่า accuracy จะมีค่าอยู่ระหว่าง 0 กับ 1 ยิ่งมีค่าเข้าใกล้ 1 แปลว่าโมเดลเราทำนายผลได้ดีมาก\n",
"\n",
"$$\n",
"\\text{Accuracy} = \\frac{{TP} + {TN}} {{TP} + {TN} + {FP} + {FN}}\n",
"$$\n",
"\n",
"\n",
"* **Precision** (ค่าความแม่นยำ): เป็นค่าที่แสดงถึงความสามารถของโมเดลในการทำนายคลาสที่สนใจ (positive) ว่าได้แม่นยำแค่ไหน หรือก็คือ *สัดส่วนจำนวนเคสที่ป่วยจริง ต่อ จำนวนเคสทั้งหมดที่โมเดลทำนายว่าป่วย*\n",
"\n",
"$$ \\text{Precision} = \\frac{TP}{TP+FP}$$\n",
"\n",
"* **Sensitivity/Recall** (ค่าความอ่อนไหวหรือค่าความไว): แสดงถึงความสามารถของโมเดลในการทำนายคลาสที่สนใจ (positive) ได้อย่างถูกต้อง เทียบกับผลการทำนายว่าเป็นคลาสที่สนใจทั้งหมด หรือก็คือ *สัดส่วนจำนวนเคสที่ป่วยจริงและโมเดลทำนายถูกต้อง ต่อ จำนวนเคสคนป่วยทั้งหมดในกลุ่มตัวอย่าง*\n",
"\n",
"$$ \\text{Recall} = \\frac{TP}{TP+FN}$$\n",
"\n",
"* **Specificity** (ส่วนค่าความจำเพาะ): แสดงถึงความสามารถของโมเดลในการทำนายคลาสที่เราไม่สนใจ (negative) ได้อย่างถูกต้อง หรือก็คือ *สัดส่วนจำนวนเคสปกติที่โมเดลทำนายถูกต้อง ต่อ จำนวนเคสคนปกติทั้งหมดในกลุ่มตัวอย่าง*\n",
"\n",
"$$ \\text{Specificity} = \\frac{TN}{TN+FP}$$\n",
"\n",
"* **F1 Score**: ค่าเฉลี่ยฮาร์โมนิกระหว่าง precision และ recall\n",
"\n",
"$$\n",
"\\text{F1-Score} = 2 \\times \\frac{\\text{Precision} \\times \\text{Recall}}{\\text{Precision} + \\text{Recall}}\n",
"$$\n",
"\n",
"* **ROC Curve** (Receiver Operating Characteristic Curve): กราฟที่แสดงความสามารถในการแยกแยะของโมเดลระหว่าง TPR: True Positive Rate (sensitivity) และ FPR: False Positive Rate (1-specificity)\n",
"เป็นการ plot ระหว่างค่าสัดส่วนที่ทำนายได้อย่างถูกต้อง กับค่าสัดส่วนที่ทำนายผิด (false positive)\n",
"\n",
"โดยที่\n",
"\n",
"$$TPR = \\frac{TP}{TP+FN}$$\n",
"\n",
"$$FPR = \\frac{FP}{FP+TN}$$\n",
"\n",
"\n",
"* **AUC** (Area Under the ROC Curve): ค่าของพื้นที่ใต้เส้นโค้ง ROC ซึ่งสามารถใช้เป็นตัวบ่งชี้ของประสิทธิภาพของโมเดลในการแยกแยะ AUC มีค่าอยู่ระหว่าง 0 กับ 1 ยิ่งค่าเข้าใกล้ 1 แปลว่าโมเดลในภาพรวมสามารถทำนายผลลัพธ์ได้ดีมาก\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dF1Kx1t1uQTR"
},
"source": [
"\n",
"\n",
"แผนภาพแสดง ROC curve ซึ่งค่าทางแกน $x$ คือ False Positive Rate (TPR) และค่าทางแกน $y$ คือ True Positive Rate (FPR) [ที่มา](https://en.wikipedia.org/wiki/Receiver_operating_characteristic)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H7TUfJSdgYar"
},
"source": [
"**การวัดผลประสิทธิภาพโมเดลด้วย ROC curve**\n",
"\n",
"เส้นประสีแดงแสดงประสิทธิภาพของโมเดลแบบทำนายสุ่ม เส้นทึบสีเขียวและเส้นทึบสีฟ้าที่อยู่เหนือเส้นประสีแดงไปทางมุมซ้ายบน แสดงถึงโมเดลที่มีประสิทธิภาพดี ในขณะโมเดลที่ก่อให้เกิดเส้นที่เอนไปทางมุมขวาล่างที่ต่ำกว่าเส้นสีแดง แสดงถึงโมเดลมีประสิทธิภาพต่ำ\n",
"\n",
"\n",
"จากเส้น ROC curves เราสามารถประมาณพื้นที่ใต้กราฟหรือ AUC (Area under the ROC curve) ของโมเดลที่เกิดจากการทำนายแบบสุ่ม (random classifier) ได้เท่ากับ 0.5 โมเดลที่มีประสิทธิภาพดีนั้นจะมีค่า AUC เข้าใกล้ 1 ซึ่งเส้น ROC curve จะเข้าใกล้ทางด้านมุมซ้ายบนมากที่สุด\n",
"\n",
"\n",
"อย่างไรก็ตามในการใช้งานจริงเราควรพิจารณาตัวชี้วัดเหล่านี้ประกอบกัน ซึ่งเราสามารถเรียกใช้ฟังก์ชันเหล่านี้ในไลบรารี `scikit-learn` โดยสามารถศึกษาเพิ่มเติมได้จาก [Model Evaluation](https://scikit-learn.org/0.15/modules/model_evaluation.html)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XNW_koATdWzF"
},
"source": [
"# ตัวอย่างการใช้ Confusion Matrix\n",
"สมมติผลการทดสอบโมเดล machine learning (ML) คัดกรองผู้ป่วยโควิดด้วย chest X-ray เปรียบเทียบผลการทดสอบด้วย Real time (RT)-PCR ซึ่งเป็นวิธีมาตรฐานและมีความแม่นยำ จากจำนวนผู้ทดสอบทั้งหมด 1,584 ราย มีค่าดังตาราง confusion matrix นี้"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TBJV0RpulKEY"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TGjzAdqQd4rY"
},
"source": [
"ผลในตารางแสดงว่า การใช้โมเดล ML สามารถจำแนกผู้ติดเชื้อโควิดได้ถูกต้องจำนวน 1,069 ราย และผู้ไม่ติดเชื้อได้ถูกต้องจำนวน 405 ราย และพบว่ามีจำนวน 38 รายที่โมเดลทำนายว่าไม่มีเชื้อโควิด แต่จากการตรวจด้วย RT-PCR ยืนยันการติดเชื้อโควิด และที่น่าสนใจมีจำนวน 72 รายที่โมเดลทำนายว่าติดเชื้อแต่จากการตรวจด้วย RT-PCR พบว่าไม่ติดเชื้อ (ถือเป็น false alarm)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_sY-Ny4melei"
},
"source": [
"* ลองคำนวณค่า\n",
"accuracy, precision, specificity, sensitivity\n",
"ของโมเดล ML คัดกรองผู้ป่วยโควิดด้วย chest X-ray ด้วยสูตรการคำนวณที่อธิบายไว้ข้างต้น และอภิปรายถึงผลที่คำนวณได้ต่อประสิทธิภาพของโมเดล\n",
"\n",
"* จากค่าที่คำนวณ accuracy, specificity, precision, sensitivity\n",
"ของโมเดล ML คัดกรองผู้ป่วยโควิดด้วย chest X-ray เราสมควรนำโมเดลมาใช้จริงหรือไม่ เพราะอะไร"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "arka1uytYOS-"
},
"source": [
"
\n",
"\n",
"ใน tutorial ถัดไป เราจะมาเรียนรู้การใช้โมเดล Machine learning ที่ผ่านการเรียนรู้แบบ supervised learning มาแก้ปัญหา classification กัน โดยเราจะลองมาทำความรู้จักกับ Logistic Regression, Support Vector Machine, Decision Tree, Random Forest, และ K-Nearest Neighbors และใน tutorial สุดท้ายของบทเรียนนี้ เราจะได้ลองนำเอาโมเดลเหล่านี้มาทดลองใช้ในการจำแนกอารมณ์ของคนจากคลื่นสัญญาณไฟฟ้าของสมอง (Electroencephalogram, EEG) กัน"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**ผู้จัดเตรียม tutorial**: ดร. มนฤดี เลี้ยงรักษา"
]
}
],
"metadata": {
"colab": {
"provenance": [],
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}