AML

[Lý Thuyết] Bài 2: 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 9, 2020

Như vậy trong bài 1 chúng ta đã cùng điểm qua những khái niệm đầu tiên về ML, để bắt tay giải quyết bài toán bằng ML chúng ta cần trải qua những bước gì ?

Source: houseofbots.com

Thu thập dữ liệu (Get Data)

Tất nhiên rồi để giải quyết được bài toán ML chúng ta cần phải có dữ liệu, và dữ liệu bao nhiều thì là đủ ? Không có con số chính xác là cần phải có nhiêu bao nhiêu dữ liệu nhưng chắc chắn rằng số lượng càng nhiều thì sẽ càng tốt (The more the better). Ta sẽ có một cái nhìn đúng đắn nhất về số lượng dữ liệu là thiếu hay đủ khi model đã được huấn luyện (train) và đưa vào đánh giá hiệu năng (evaluate performance) trên các dữ liệu mới (unseen data).

Để thực hành các kỹ năng ML, chúng ta có thể tận dụng những nguồn dữ liệu (dataset) dồi dào từ các nguồn nổi tiếng như Kaggle (Kaggle: Your Home for Data Science), UCI (UCI Machine Learning Repository). Trong chuyên mục AML này các phần thực hành cũng sẽ lấy dữ liệu từ các nguồn trên.

Chuẩn bị dữ liệu (Data Preparation)

Khi có được dữ liệu, chúng ta cần phải tiền xử lý (pre-processing) trước khi tiến hành training model. Đây là giai đoạn rất quan trọng, nó giống như việc chúng ta cần phải cắt, gọt, rửa rau, thịt, cá trước khi đưa vào nồi để nấu. Bước đầu tiên để tiền xử lý dữ liệu chúng ta cần phải khám phá và phân tích dữ liệu – Explory Data Analysis (EDA).

Trong EDA chúng ta sẽ khám phá và phân tích những thông tin về tập dữ liệu (dataset) như số lượng cá thể (instance), số biến (variable), phân phối (distribution) giá trị của các biến, mối quan hệ giữa các biến không phụ thuộc (independent variable) và biến phụ thuộc (dependent variable) cũng như kiểm tra các vấn đề như dữ liệu trống (missing values), mất cân bằng dữ liệu (imbalanced dataset), kiểm tra các cá thể ngoại biên (outlier). Để có thể nhìn nhận một cách trực quan các vấn đề, khi thực hiện EDA chúng ta sẽ sử dũng các biểu đồ như biểu đồ cột, hộp (box-plot), phân phối (distribution). Khá nhiều thuật ngữ mới đúng không, đừng sợ, hãy uống một ngụm nước và chúng ta sẽ đi vào chi tiết của từng thuật ngữ đã đề cập ở trên nhé !

Ở phần trên chúng ta có đề cập đến biến không phụ thuộc (independent variable) và biến phụ thuộc (dependent variable) vậy không phụ thuộc và phụ thuộc là gì ? Biến không phụ thuộc (independent variable) chính là các thành phần giúp chúng ta dự đoán ra biến phụ thuộc (dependent variable). Ví dụ như trong bài toán dự đoán giá nhà, các biến không phụ thuộc sẽ là: diện tích, số phòng ngủ, số nhà vệ sinh, khu vực có an ninh không, khoảng cách với trung tâm thành phố và biến phụ thuộc sẽ là giá nhà. Dựa trên các biến không phụ thuộc, chúng ta sẽ xác định được biến phụ thuộc. Trong giai đoạn tiền xử lý chúng ta cần đánh giá mối quan hệ giữa các biến không phụ thuộc và biến phụ thuộc để xem chúng có có thực sự liên quan đến nhau không. Để đánh giá mối quan hệ giữa chúng, chúng ta sẽ sử dụng ma trận tương quan (correlation matrix).

Source: statology.org

Hình trên là minh họa cho một ma trận tương quan (correlation matrix), có thể thấy nó sẽ là một ma trận đối xứng (symmetric matrix) có giá trị từ -1 đến 1. Giá trị trong ma trận tương quan (correlation matrix) thể hiện mực độ liên quan giữa các biến, càng gần 1 và -1 thì mức độ liên quan càng cao, nếu gần 0 thì các biến đó gần như không liên quan đến nhau. Trong matrix trên có thể thấy Exam score có mức độ liên quan cao theo hướng thuận nhau (positive relationship) với Hours spent studying, mức độ tương quan giữa hai biến này là 0.82, đồng nghĩa với việc nếu Hours spent studying tăng thì Exam score cũng tăng và người lại. Trong khi đó Exam score cũng cho thấy mức độ liên quan với Hours spent sleeping nhưng theo hướng nghịch nhau (negative relationship), mức độ tương quan là -0.22 cho thấy nếu Hours spent Sleeping tăng thì Exam score giảm và ngược lại. Đối với IQ score, dù Hours spent studying có tăng hay giảm thì chúng cũng không nói lên điều gì với IQ score, khi chúng gần như không liên quan đến nhau, mức độ tương quan gần như bằng 0 (0.08). Chúng ta có thể thấy những lập luận dựa trên ma trận tương quan (correlation matrix) theo đúng logic thông thường đúng không. Từ ma trận tương quan (correlation matrix) này chúng ta có thể đưa ra quyết định, ví dụ như bài toán dự đoán điểm IQ score của một người, chúng ta có thể loại bỏ đi các biến Hours spent studying, Hours spent sleeping và School rating và chỉ giữ lại biến Exam score vì các biến trên không có sự liên quan đến biến phụ thuộc (dependent variable) – IQ score và sẽ không giúp ích trong quá trình học của ML model. Một lưu ý nhỏ, nếu sự liên quan giữa biến phụ thuộc (dependent variable) và biến không phụ thuộc (independent variable) là một dấu hiệu tốt, thì sự liên quan giữa các biến không phụ thuộc (independent variable) lại là một dấu hiếu xấu nếu như sử dụng chúng để xây dựng Linear regression model. Hiện tượng này được gọi là cộng tuyến (collinearity), nó sẽ gây ra sự mất ổn định trong Linear regression model vậy nên hãy lưu ý đến nó khi xây dựng các Linear regression model nhé.

Trong quá trình thu thập dữ liệu, việc một vài giá trị có thể không được ghi lại dẫn đến tình trạng thiếu, hụt giá trị (missing values).

Source: medium.com

Giá trị trống (missing values) thường được biểu thị bằng ký hiệu NA (Not available) trong các ngôn ngữ lập trình. Thông thường khi thực hiện EDA chúng ta sẽ vẽ biểu đồ cột (Bar plot) để kiểm tra xem các biến nào có missing values. Nếu số lượng giá trị trống (missing value) là rất nhỏ so với tổng số dữ liệu đang có, chúng ta có thể dễ dàng xóa bỏ những cá thể (instance) có chứa missing value. Trường hợp số dữ liệu của chúng ta là khá ít, chúng ta có thể sử dụng các phương pháp để thay thế các giá trị trống (missing values) bằng các giá trị giả tạo (synthetic values). Các giá trị giả tạo này đơn giản có thể chỉ là giá trị trung bình (mean) của biến, hoặc phức tạp hơn thì sẽ sử dụng các phương pháp như K-Nearest Neighbor (KNN) để ra một giá trị giả tạo chính xác hơn và ít ảnh hưởng đến phân phối (distribution) tự nhiên của dữ liệu.

Dữ liệu thu thập được cũng có thể xảy ra các vấn đề mất cân bằng dữ liệu (imbalanced dataset), đây là vấn đề với các bài toán classification, ví dụ chúng ta đang giải quyết bài toán phân loại gian lận (fraud) thẻ tín dụng, có đến 99% dữ liệu là không gian lận và chỉ có 1% dữ liệu là gian lận, điều này vô hình chung tạo ra cho chúng ta một sư thiên vị (bias) cho model trong quá trình huấn luyện (training), khi đó nó sẽ hầu như phân loại tất cả các dữ liệu trong tương lai là không gian lận, như vậy quả thật là không tốt đúng không ! Phương pháp để giải quyết bài toán này đó là undersampling và oversampling, vậy chúng là gì, hãy xem hình minh họa dưới đây để hiểu rõ hơn nhé !

Source: kdnuggets.com

Nếu thực hiện Undersampling chúng ta sẽ “gọt” bớt dữ liệu ở nhóm có nhiều dữ liệu hơn (majority class) sao cho bằng với nhóm thiểu số (minority class). Ở chiều ngược lại Oversampling chúng ta sẽ sao chép lại dữ liệu của nhóm thiểu số (minority class) nhiều lần đến khi bằng dữ liệu của nhóm đa số (majority class). Có thể thấy nhược điểm của hai phương pháp này, Undersampling sẽ làm chúng ta thiếu hụt đi dữ liệu, trong khi Oversampling nếu như chỉ đơn thuần là sao chép lại dữ liệu sẽ làm ML model bị hiện tượng overfit một hiện tượng mà khi đó ML model quá vừa vặn (overfit) với dữ liệu training (training dataset) mà không thể đưa ra dự đoán chính xác cho các dữ liệu mới (unseen data). Do đó khi thực hiện Oversampling, chúng ta có thể sử dụng phương pháp SMOTE (Synthetic Minority Over-sampling Technique) một phương pháp tạo ra các giá trị giả tạo (synthetic values) cho nhóm thiểu số (minority class).

Như vậy chúng ta đã điểm qua 2 bước đầu tiên khi bắt tay vào việc giải quyết một bài toán bằng ML đó là thu thập và chuẩn bị dữ liệu. Ở bài tiếp theo chúng ta sẽ tiếp tục tìm hiểu 3 bước còn lại nhé ! 💪