Evaluate Model นั้นสำคัญอย่างไร ? : Machine Learning 101

Mr.P L
mmp-li
Published in
3 min readOct 12, 2018

ต้องดีขนาดไหนเธอถึงจะสนใจกัน ต้องแม่นยำขนาดไหนเธอถึงจะใช้งานมันได้ :(

บทความนี้จะมาพูดถึงเรื่องการประเมินโมเดลที่เราสร้างขึ้นมาว่า ดีพอหรือยัง ทำนายผิดเยอะมั้ย ทำนายพลาดเป็นอย่างอื่นหรือไม่ โดยโมเดลที่เราจะทำการตรวจสอบในบทความนี้คือ k-NN ที่เราเคยทำไปแล้ว

แต่ในบทความนี้จะไม่เน้นในการเขียนสูตรคำนวณมากนะครับ เพราะบางคนไม่ได้เก่งด้านคณิตศาสตร์ขนาดนั้น และเดียวนี้ก็มี lib มาช่วยในการคำนวณค่าพวกนี้แล้ว เลยจะสอนแค่เบื้องต้น + รู้จักวิธีคิดและวิธีใช้งานนั้นเอง

เราประเมินโมเดลเพื่ออะไร ??

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

บางคนที่ทำการ evaluate model ก็จะทำแค่ acc ซึ่งบางครั้งก็ไม่สามารถบอกอะไรได้มากนักว่าดีหรือไม่ ผมเลยแนะนำให้ใช้ Confusion matrix และ ROC Curve ด้วยเพื่อที่จะรู้ว่าโมเดลของเราดีพอหรือยัง

ดีแค่ไหนถึงจะพอ ?

เมื่อเรานำไปใช้งานจริง แล้วพึงพอใจ นั้นเหละ ดีพอแน่นอน หรืออีกวิธีคือประเมินโมเดลแล้วแม่นยำมากกว่า 90%+ ก็จะเพียงพอ สำหรับข้อมูลขนาดเล็กๆ แต่ในบางกรณีข้อมูลของเรามีจำนวนเยอะมาก (10k data) ความแม่นยำก็อาจจะลดลงบ้าง

เริ่มจากอะไรง่ายๆก่อน

Precision,Recall,F1 Score คืออะไร ?

ขอเข้าหลักคณิตศาสตร์ สถิติหน่อยจ้าาาา

โดยที่

tp คือ ข้อมูลที่ทำนายแล้วถูกต้องเมื่อเทียบกับเฉลย

fp คือ ข้อมูลที่อยู่ในเฉลยแต่ไม่มีในการทำนาย (ตรงข้ามกับ fn)

fn คือ ข้อมูลที่ทำนายแล้วไม่ถูกต้องเมื่อเทียบกับเฉลย

Precision : ค่าความแม่นยำ เกิดจากการนำ ค่า tp มาเทียบกับ fp

Recall : ค่าความถูกต้อง เกิดจากการนำค่า tp มาเทียบกับ fn

F1 Score : ค่าเฉลี่ยของ Precision และ Recall

เริ่มลงมือทำ

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

โดยข้อมูลตั้งต้นมาจากการทำ K-FOLD จากบทความ เพื่อให้เกิดความแม่นยำประมาณ 90 เกิดขึ้น

เรียก accuracy_score เพื่อทำการเช็คความแม่นยำของโมเดล

from sklearn.metrics import accuracy_score
accuracy_score(y_test, answer)

เรียก precision_score เพื่อทำการเช็คความแม่นยำของโมเดล

from sklearn.metrics import precision_score
precision_score(y_test, answer, average=’weighted’)

เรียก recall_score เพื่อทำการเช็คความถูกต้องของโมเดล

from sklearn.metrics import recall_score
recall_score(y_test, answer, average=’weighted’)

เรียก f1_score เพื่อทำการหาค่าเฉลี่ยของทั้ง precision และ recall

from sklearn.metrics import f1_score
f1_score(y_test, answer, average=’macro’)
ง่ายจริงๆ

แต่ sklearn สามารถรวมเอา precision,recall และ f1_score เข้าด้วยกันด้วยคำสั่งเดียวได้ด้วย classification_report

from sklearn.metrics import classification_report
print(classification_report(y_test, answer))

Confusion Matrix เมทริกซ์แห่งความสับสน

เป็นอีกหนึ่งการประเมินโมเดลโดยการนำเอาองค์ความรู้ด้านเมทริกซ์มาประกอบกันเป็นการทำ classification evaluate โดยเมทริกซ์ตัวนี้สามารถอธิบายค่า TP, TN, FN และ FP ของคำตอบของเราได้ เพื่อนำมาเช็คว่าเราทายผิดไปเยอะแค่ไหน

จากบทความนี้ Logsitic Regression ผมทำโมเดลเสร็จแล้ว เช็คแค่ Accuracy ผมเลยต้องการเช็ค confusion matrix เพิ่มเติมอีกสักหน่อย

โดยที่ค่าจะออกมาเป็น matrix ยังสามารถหา precision , recall และ f1_score ได้

  • TP = 101
  • FN = 25
  • FP = 25
  • TN = 64

ก็จะเห็นว่าผมทายผิดจากรอดเป็นตายไป 25 คน

ทายผิดจากตายเป็นรอดอีก 25 คน ทีนี้ลองทำให้ออกมาเป็นรูป confusion matrix แบบสวยๆหน่อย โดยที่สีม่วงคือทายผิดนั้นเอง ยิ่งสีเข้มยิ่งผิดเยอะ (จากรูปความแม่นยำโดยรวมประมาณ 79 %)

สรุป

เราทำ Evaluate Model เพื่อทดสอบว่าโมเดลพร้อมใช้งานหรือไม่ เป็นอีกหนึ่ง Work Flow ที่ขาดไม่ได้ เพราะมันเป็นตัวบ่งบอกว่าโมเดลของเรานั้นมีความแม่นยำเท่าไรเพื่อทำการเปรียบเทียบกับโมเดลชนิดอื่น เผื่อว่าโมเดลอื่นจะทำได้ดีกว่าโมเดลของเรา และเราสามารถหาสาเหตุและแก้ไขได้นั้นเอง

บทความถัดไป :

Linear / Poly Regression ทำนาย GDP ประเทศไทย : Machine Learning 101

บทความก่อนหน้า Under Fitting / Over Fitting ปัญหาที่มองไม่เห็นแต่สัมผัสได้ว่ามี….. : Machine Learning 101

Github : https://github.com/peeratpop/Machine_Learning_101

Medium : https://medium.com/@pingloaf

Linkedin : https://www.linkedin.com/in/peerat-limkonchotiwat/

บทความนี้เป็นส่วนหนึ่งของบทความ

เริ่มเรียน Machine/Deep Learning 0–100 (Introduction)

--

--

Mr.P L
mmp-li
Editor for

Lifestyle of Programmer & IoT (Node-RED|Blynk) & Data Science (ML,DL,NLP) and Whatever I want to do | cat can coding too | Ph.D. -> VISTEC -> IST