AML

[Lý Thuyết] Bài 3: Các bước cơ bản để giải quyết một bài toán ML

Loạt bài học thuộc series AML

Posted by KyoHB on December 10, 2020

Trong bài 2 chúng ta đã điểm qua hai bước đầu tiên khi giải quyết một bài toán ML, ở bài tiếp theo này, chúng ta sẽ điểm qua những bước còn lại nhé !

Source: houseofbots.com

Huấn luyện ML model (Train Model)

Khi dữ liệu đã được thu thập và tiền xử lý (pre-process) xong, giờ chúng ta sẽ bắt đầu tiến hành huấn luyện (training) cho ML model. Chúng ta sẽ phải lựa chọn ML model phù hợp với yêu cầu của bài toán. Với bài toán regression chúng ta có thể lựa chọn các model: Linear Regression, Polynomial Regression, Decision Tree (DT), Support Vector Machine (SVM), Artificial Neural Network (ANN). Với bài toán classification chúng ta có thể lựa chọn các model: Naive Bayes, Logistic Regression, DT, SVM, ANN. Để có thể lựa chọn ML model chính xác chúng ta cần suy xét về phân phối (distribution) của các cá thể (instance) trong tập dữ liệu (dataset).

Source: medium.com

Ở hình trên mô tả một tập dữ liệu (dataset) có 2 nhóm (class) được biểu thị bằng các ký hiệu vuông và cộng. ML model sau quá trình huấn luyện sẽ cho ra một đường phân định (decision boundary) giúp phân loại các cá thể (instance) trong tập dữ liệu (dataset). Trong trường hợp đơn giản như ở hình đầu tiên, đường phân định (decision boundary) của chúng ta chỉ cần là một đường thẳng tuyến tính (linear) đã có thể phân loại được hai nhóm (class) một cách chính xác. Nhưng ở hình ở giữa, mọi thứ đã phức tạp hơn một chút, chúng ta phải sử dụng tới 2 đường thẳng tuyến tính (linear) kết hợp mới phân định được các nhóm. Ở hình cuối cùng mọi thứ trở nên rất phức tạp, đường phân định (decision boundary) là một đường phi tuyến (nonlinear) để sinh ra được đường phân định (decision boundary) này cần phải sử dụng các nonlinear ML model.

Để thuận tiện cho quá trình training, tập dữ liệu (dataset) sẽ được sẽ được chia ta thành 3 tập nhỏ hơn: tập dữ liệu huấn luyện (training set), tập dữ liệu xác nhận (validation set) và tập dữ liệu kiểm thử (testing set). Trong quá trình huấn luyện, ML model sẽ ‘học’ trên tập dữ liệu huấn luyện (training set) và sau đó kiểm tra trên tập dữ liệu xác nhận (validation set). Quá trình huấn luyện ML model cần đảm bảo sao cho ML model không bị thiếu vừa vặn (underfit) cũng như quá vừa vặn (overfit). Việc nhận biệt sẽ dựa vào chỉ số mất mát của việc huấn luyện (training loss) và chỉ số mất mát của việc xác nhận (validation loss). Chỉ số mất mát (loss) này sẽ cho biết lỗi (error) của ML model trong việc dự đoán. Nếu chỉ số mất mát ở cả quá trình huấn luyện (training loss) và xác nhận (validation loss) đều cao, đó là dấu hiệu của việc thiếu vừa vặn (underfit), lúc này chúng ta cần tiến hành huấn luyện (tranining) thêm cho ML model. Nếu chỉ số mất mát của việc huấn luyện (training loss) là thấp trong khi đó chỉ số mất mát của việc xác nhận (validation loss) lại rất cao, điều đó chứng tỏ ML model đã có dấu hiệu của việc quá vừa vặn (overfit) và cần dừng việc huấn luyện (training) cho ML model.

Source: statistics4u.info

Source: jeremyjordan.me

Kiểm thử ML model (Test ML Model)

Sau khi đã trải qua quá trình huấn luyện (training), model giờ có thể đưa ra dự đoán kết quả trên tập dữ liệu kiểm thử (testing set) và so sánh với giá trị thực của chúng. Để đánh giá hiệu năng (performance) của ML model một trong cách phổ biến đó là dựa vào ma trận nhầm lẫn (confusion matrix).

Source: glassboxmedicine.com

Ma trận nhầm lẫn sẽ giúp chúng ta biết được có bao nhiêu cá thể (instance) được ML model dự đoán là khớp (match) với nhãn (label) của chúng và bao nhiêu bị dự đoán sai. Như hình trên chúng ta có 2 nhóm (class) 1 và 0, chúng ta sẽ ngầm hiểu nhóm 1 là dương tính (Positive) và nhóm 0 là âm tính (Negative). Từ đó sẽ có 4 giá trị trong ma trận nhầm lẫn (confusion matrix).

  • True Positives (TPs): Số cá thể (instance) được dự đoán là dương tính (Positive) và nhãn (label) của chúng cũng là dương tính (Positive)
  • True Negatives (TNs): Số cá thể (instance) được dự đoán là âm tính (Negative) và nhãn (label) của chúng cũng là âm tính (Negative)
  • False Positives (FPs): Số cá thể (instance) được dự đoán là dương tính (Positive) nhưng nhãn (label) của chúng lại là âm tính (Negative)
  • False Negatives (FNs): Số cá thể (instance) được dự đoán là âm tính (Negative) nhưng nhãn (label) của chúng lại là dương tính (Positive)

Từ các con số TPs, TNs, FPs, FNs chúng ta sẽ tính được các chỉ số sau:

$accuracy = \frac{TP+TN}{TP+TN+FP+FN}$

$recall= \frac{TP}{TP+FN}$

$precision = \frac{TP}{TP+FP}$

$f1-score = \frac{2 \times precision \times recall}{precision + recall}$

Độ chính xác (accuracy) sẽ cho chúng ta biết tỉ lệ cá thể (instance) được dự đoán chính xác, nếu để ý chúng ta sẽ thấy tử số của accuracy chính là tổng giá trị ở các ô nằm trên đường chéo (diagonal) của ma trận nhầm lẫn (confusion matrix). Tuy nhiên độ chính xác (accuracy) đôi khi không nói lên hết được vấn đề, đặc biệt là nếu tập dữ liệu kiểm thử (testing set) có hiện tượng mất cân bằng (imbalanced dataset). Ví dụ trong bài toán phân loại gian lận (fraud) thẻ tín dụng, tập dữ liệu kiểm thử (testing dataset) của chúng ta có 100 cá thể (instance), trong đó 99 cá thể (instance) thuộc nhóm không gian lận và chỉ có 1 cá thể (instance) thuộc nhóm gian lận. ML model của chúng ta dự đoán 100 cá thể này đều thuộc nhóm không gian lận và theo cách tính độ chính xác (accuracy) sẽ là 0.99 hay 99%, wow một con số rất hoàn hảo đúng không, nhưng bạn có thấy có gì đó sai sai ?

Vì lẽ đó mà chúng ta cần tính thêm các chỉ số như độ bao phủ (recall), độ chuẩn xác (precision). Độ bao phủ (recall) sẽ cho chúng ta biết trong tổng số các cá thể (instance) dương tính (positive) tỉ lệ được dự đoán chính xác là dương tính (positive) là bao nhiêu. Độ chuẩn xác (precision) sẽ cho chúng ta biết trong tổng số các cá thể (instance) được dự đoán là dương tính (positive) tỉ lệ các cá thể (instance) thực sự là dương tính (positive) là bao nhiêu. F1-score là chỉ số tổng hợp cân bằng giữa độ bao phủ (recall) và độ chuẩn xác (precision) . Để dễ hình dung hơn chúng ta sẽ vẽ ma trận nhầm nhẫn của ví dụ trên nhé.

Dựa vào ma trận nhầm lẫn trên chúng ta có thể thấy, độ bao phủ (recall), độ chuẩn xác (precision) và F1-score của ML model sẽ đều là 0%. Như vậy độ bao phủ (recall) và độ chuẩn xác (precision) cho chúng ta thêm những cái nhìn toàn diện hơn về hiệu năng (peformance) của ML model.

Ngoài việc sử dụng ma trận nhầm lẫn (confusion matrix) và tính các chỉ số trên, một phương pháp khác để kiểm tra hiệu năng hiệu năng (peformance) của ML model cũng khá phổ biến đó là dùng chỉ số AUC. AUC là viết tắt của Area Under Curve, hay diện tích dưới vòng cung. Để tính được AUC, chúng ta cần vẽ ra được vòng cung ROC (ROC curve), ROC là viết tắt của receiver operating characteristic curve. Vòng cung ROC sẽ cho chúng ta biết sự thay đổi của tỉ lệ dương tính đúng (True Positive Rate) và tỉ lệ dương tính sai (False Positive Rate) khi ngưỡng (threshold) của ML model thay đổi. Ngưỡng (threshold) của ML model thông thường sẽ là 0.5, khi output của ML model lớn hơn ngưỡng (threshold) thì sẽ được phân loại vào nhóm dương tính (Positive class) nếu nhỏ hơn ngưỡng (threshold) thì sẽ phân loại vào nhóm âm tính (Negative class). Chúng ta sẽ hiểu rõ hơn về ngưỡng khi đi sâu vào từng ML model.

$True Positive Rate = \frac{TP}{TP+FN}$

$False Positive Rate = \frac{FP}{FP+TN}$

Source: developers.google.com

Vòng cung ROC ở hình trên chính là đường xanh kẻ gạch, và AUC sẽ là diện tích bao bởi hình cung đó. AUC sẽ giao động từ 0 cho đến 1, càng gần 1 thì ML model có hiệu năng (performance) càng tốt.

Cải thiện ML model (Improve ML Model)

Sau quá trình kiểm thử nếu ML model có hiệu năng (performance) không tốt chúng ta có thể cải thiện bằng cách thay đổi các thông số vận hành của ML model (hyperparameter). Mỗi ML model đều có những thông số đặc trưng để vận hành, ví dụ như với SVM chúng ta có kernel, gamma, cost, với Decision Tree chúng ta có criterion, splitter, max_depth,.. Việc thay đổi này được gọi là hyperparameter tuning, chúng ta sẽ tìm hiểu kỹ hơn khi đi sâu vào từng model nhé ! Nếu việc thay đổi các thông số của ML model không đem lại nhiều cải thiện, chúng ta có thể cân nhắc sử dụng các ML model khác.

Như vậy chúng ta đã điểm qua 5 bước để giải quyết một bài toán ML, ở bài tiếp theo chúng ta sẽ bắt đầu với bài thực hành đầu tiên về tiền xử lý (pre-process) dữ liệu nhé.