Có bài viết học luyện thi AWS mới nhất tại https://cloudemind.com/ml-pipeline/ - Cloudemind.com
Nào hãy cùng xem xét 1 quy trình xây dựng một ứng dụng đơn giản nhất thông qua bài này nhé.
Hay còn gọi là thu thập dữ liệu, việc này giống như bạn đi chợ và mua nguyên vật liệu về nấu ăn.
Dữ liệu xem như là nguyên vật liệu để giải quyết các bài toán ML. Dữ liệu bạn thu thập càng nhiều thì giải bài ML sẽ càng chính xác. Việc thực hành với các bạn làm DS (Data Science) hay ML sẽ cần một số ví dụ về dữ liệu để hiểu hơn về công việc của mình. Có một số nguồn để thu thập dữ liệu ví dụ như Kaggle.com, UCI
Khi có dữ liệu giống như mình đi mua rất nhiều nguyên vật liệu ở chợ về, bước tiếp theo chúng ta cần sơ chế các nguyên vật liệu này để việc nấu ăn ngon và đảm bảo chất lượng hơn.
Dữ liệu cũng thế, ta cũng cần sơ chế để đảm bảo quy trình học sau này của máy (machine learning) được dễ dàng và đúng mục đích của chúng ta. Bước này gọi là EDA (Exploratory Data Analysis).
Với EDA ta có thể khám phá phân tích các thông tin về dataset tập dữ liệu như sau:
Instance – số lượng thực thể
Relationship between independent variables & dependent variables
Missing values – Dữ liệu trống
Imbalanced datasets – Mất cân bằng tập dữ liệu.
Một trong những công việc ở giai đoạn này chính là xác định ma trận tương quan (correlation matrix) bằng việc xác định biến phụ thuộc và độc lập.
Ví dụ: giá cả một ngôi nhà sẽ phụ thuộc vào các biến như diện tích, vị trí, số lượng phòng ngủ, hướng, số lượng toilet, máy lạnh.
Giá cả một ngôi nhà là hệ quả, nó là biến phụ thuộc.
Diện tích, vị trí, số lượng phòng ngủ, hướng, số lượng toilet, máy lạnh là các biến độc lập, gây ảnh hưởng lên biến phụ thuộc (Giá ngôi nhà).
Ngoài việc xác định mối quan hệ giữa biến phụ thuộc, biến độc lập, bạn cùng cần xác định tầm ảnh hưởng hay mức độ ảnh hưởng lẫn nhau của các biến này.
Missing value & Synthetic value (Giá trị trống và giá trị giả)
Trong khi xử lý dữ liệu có có thể có các dữ liệu trống. Nếu dữ liệu chúng ta nhiều chúng ta có thể thể bỏ qua các tập dữ liệu này, nhưng trong trường hợp quá ít dữ liệu ta phải giả lập các dữ liệu trống này gọi là Synthetic value (giá trị giả cho các missing value).
Về xác định các giá trị ảo này có thể sử dụng phương pháp đơn giản như giá trị trung bình Mean, hoặc tìm giá trị gần nhất thông qua algorithm KNN (K-Nearest Neighbor). KNN giúp ta tìm một giá trị giả có mức chính xác hơn và ít ảnh hưởng đến phân phối tự nhiên của dữ liệu (distribution).
Trong một số trường hợp chúng ta thu thập dữ liệu cũng có thể bị mất cân đối, ví dụ như các chương trình phòng chống gian lận tỉ lệ gian lận thì rất thấp thậm chí nhỏ hơn 1%. Như thế trong những trường hợp này mình huấn luyện máy có thể dẫn đến sự hiểu sai lệch và thiên vị (gọi là bias). Đây là một điều mà chúng ta ko muốn bị hiểu nhầm khi huấn luyện model. Có 02 cách để khắc phục vấn đề này.
Undersampling vs Oversampling
Undersampling là cắt bớt dữ liệu của nhóm đông (majority class) để bằng với nhóm ít (minority class). Oversampling thì ngược lại, chúng ta buff cho nhóm ít dữ liệu nhiều bằng với nhóm đông (majority class).
Mỗi phương pháp này đều có thể tiềm ẩn những nhược điểm mà chúng ta cần có nhiều kỹ thuật xử lý hơn. Ví dụ với Undersampling khiến ta bị thiếu hụt dữ liệu làm thiếu chính xác, với Oversampling việc tạo ra các tập dữ liệu giống nhau có thể dẫn đến hiện tượng Overfit (quá vừa vặn kiểu số giả) gây khó khăn cho các dữ liệu mới (unseen data). Để mài cho oversampling phù hợp hơn ta có một kỹ thuật khác gọi là SMOTE (Synthetic Minority Over-sampling Technique) tạo ra các giá trị giả (synthetic values) cho nhóm thiểu số (minority class).
Để huấn luyện một mô hình ML (ML Model) chúng ta cần lựa chọn model phù hợp với bài toán chúng ta cần giải quyết trước.
Regression problem có các model sau: Linear Regression, Polynomial Regression, Decision Tree (DT), Support Vector Machine (SVM), Artificial Neutral Network (ANN).
Classification problem có các model sau: Naive Bayes, Logistic Regression, DT, SVM, ANN.
Để lựa chọn đúng model để train cần xem xét đến sự phân phối distribution của các thực thể instance trong tập dữ liệu dataset.
Hình ở trên mô tả một tập dữ liệu dataset với 02 loại (class) dữ liệu là hình vuông và chéo. Mục tiêu đó là có một trained model giúp phân định 02 nhóm thực thể instance này gọi là đường bao phân định (decision boundary).
Linear – đường phân định đơn giản tuyến tính đã phân định được hai nhóm instance.
Piecewise Linear – hay còn gọi là phân định từng phần, ở mức độ này có sự phức tạp hơn khi kết hợp 02 đường tuyến tính mới phân định được nhóm.
Nonlinear – phi tuyến tính, phần này thực sự phức tạp để tạo ra Decision boundary, có thể cần phải sử dụng nonlinear ML model.
Training Process – Quá trình huấn luyện
Để thuận tiện cho Training process, dataset thường được chia làm 03 tập nhỏ hơn:
Training set – sử dụng trong quá trình training model.
Validation set – Sử dụng để kiểm thử xem quá trình training model có ổn ko.
Testing set – dùng để kiểm tra hiệu năng hay độ chính xác của ML Model dựa vào ma trận nhầm lẫn (Confusion Matrix)
Training Process cần được thực hiện để đảm bảo ML Model không bị underfit hay overfit. Có 02 chỉ số để nhận biết underfit hay overfit trong quá trình huấn luyện là training loss và validation loss.
Nếu training loss và validation loss đều cao => underfit. Cần train thêm cho ML Model.
Nếu training loss thấp và validation loss cao => overfit. Cần dừng việc huấn luyện cho ML Model.
Confusion Matrix – Ma trận nhầm lẫn
Confusion Matrix thường có 04 giá trị:
TPs – True Positive – Số instance dự đoán là Dương Tính Positive và Label của chúng cũng là Positive
TNs – True Negative – Số instance dự đoán là Âm Tính Negative và Label của chúng cũng là Negative
FPs – False Positive – Số instance dự đoán là Dương Tính Positive nhưng Label của chúng là Negative.
FNs – False Negative – Số instance dự đoán là Negative nhưng Label của chúng là Positive.
Accuracy = (TP+TN) / (TP+TN + FP + FN)
Đô chính xác accuracy cho ta biết mức độ chính xác của Train Model của chúng ta. Tuy nhiên đôi khi độ chính xác accuracy không phải là tất cả, một số trường hợp đặc biệt khi có sự mất cân bằng trong tập dữ liệu imbalanced dataset. Ví dụ trong trường hợp gian lận thẻ tín dụng xác xuất của dataset chỉ là 1%, giả sử ta bỏ testing dataset vào và cho 100% các instance này thuộc nhóm không gian lận thì độ chính xác accuracy của Model là 99%, đây đúng là một con số quá thuyết phục nhưng đây là một tiên đoán sai và vô nghĩa. Trong tình huống này bạn cần có nhiều chỉ số khác để kiểm thử ML Model của mình. Đó là độ bao phủ Recall và độ chuẩn xác (precision).
Độ bao phủ Recall & Độ chuẩn xác Precision
Recall đo lường độ chính xác của các instance dự đoán là dương tính là bao nhiêu.
TP dự đoán dương tính đúng
FN dự đoán dương tính sai ^^
Độ chuẩn xác Precision tính thực sự tỉ lệ dự đoán dương tính 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.
F1-Score = (2*precision*recall) / (precision+recall)
Quay lại ví dụ về dự đoán rủi ro tín dụng ở trên khi thêm phần tính toán Recall và Precision, F1-Score.
accuracy = (TP + TN)/ (TP + TN + FP + FN) = (0+99) / (100) = 99%
recall = TP / (TP + FN) = 0 / (0+1) = 0%
precision = TP / (TP+FP) = 0 / (0+0) = 0%
F1-Score = (2*precision*recall) / (precision + recall) = 0
Như thế recall, precision và F1-Score cho chúng ta cái nhìn toàn diện hơn về ML Model, giúp ta validate xem ML Model của có thực sự ngon (Performance) hay không.
Ngoài việc sử dụng Confusion Matrix, còn có nhiều phương pháp khác để kiểm thử hiệu năng của ML Model giả sử như AUC (Area Under Curve).
Sau quá trình kiểm thử ML Model nếu thấy Performance không tốt ta có thể cải thiện hiệu năng thông qua các thông số vận hành của ML Model (hyperparameter). Mỗi ML Model đều có những hyperparameter đặc trưng để vận hành. Việc thay đổi các chỉ số hyperparameter gọi là hyperparameter tuning.
Ví dụ SVM có các hyperparameter như kernel, gamma, cost.
Ví dụ DT có các hyperparameters như criterion, splitter, max_depth.
Trong nhiều trường hợp xấu nếu hyperparameter tuning cũng ko đem lại Performance như kỳ vọng chúng ta có thể cân nhắc tìm hiểu ML Model khác phù hợp hơn.
Xem thêm: https://cloudemind.com/ml-pipeline/