Bạn đang đánh giá một bộ dự đoán giá trị số, chẳng hạn số phút cần cho một tác vụ. Một phương án sai ít ở phần lớn mẫu nhưng có một lỗi lớn; phương án khác sai đều hơn. Chỉ đổi metric từ MAE sang RMSE có thể đổi thứ tự ưu tiên, dù nhãn thật và các dự đoán vẫn giữ nguyên.
Bài đối chiếu tài liệu scikit-learn 1.9.1 ngày 10/11/2026. Phép tính chạy bằng Python 3.9.6 với thư viện chuẩn, không gọi scikit-learn hoặc huấn luyện mô hình. Dữ liệu được dựng để minh họa, không phải số đo thời gian hay chất lượng của một hệ thống thực tế.
Hai cách gộp cùng một danh sách sai số
MAE lấy trung bình độ lớn sai số tuyệt đối. RMSE lấy trung bình bình phương sai số rồi căn bậc hai. Bạn có thể đọc định nghĩa API trong mean_absolute_error và root_mean_squared_error.
Giả sử đầu ra đo bằng phút. Cả MAE lẫn RMSE cuối cùng đều có đơn vị phút, nhưng bước bình phương khiến các sai số lớn có ảnh hưởng khác. Đừng diễn giải RMSE như “mọi mẫu đều sai khoảng bằng ấy”, vì nó là một cách tổng hợp, không phải mô tả từng mẫu.
Tính trên hai phương án có thứ tự trái nhau
import math
def regression_errors(truth, predicted):
if not truth or len(truth) != len(predicted):
raise ValueError("Expected non-empty, equally sized lists")
if any(type(x) not in (int, float) or not math.isfinite(x)
for x in truth + predicted):
raise ValueError("Expected finite numbers")
errors = [abs(y - p) for y, p in zip(truth, predicted)]
squares = [error * error for error in errors]
if any(not math.isfinite(x) for x in errors + squares):
raise ValueError("Magnitude outside this example's range")
count = len(errors)
mae = math.fsum(error / count for error in errors)
rmse = math.sqrt(math.fsum(square / count for square in squares))
return mae, rmse
truth = [10, 10, 10, 10]
candidate_a = [11, 11, 11, 19]
candidate_b = [14, 14, 14, 14]
for name, predicted in [("A", candidate_a), ("B", candidate_b)]:
mae, rmse = regression_errors(truth, predicted)
print(name, round(mae, 6), round(rmse, 6))
Kết quả là A 3.0 4.582576 và B 4.0 4.0. Theo MAE, A có điểm nhỏ hơn; theo RMSE, B có điểm nhỏ hơn. Sai số tuyệt đối của A là 1, 1, 1, 9; B có bốn sai số cùng bằng 4. Một lần sai 9 đã làm hai cách gộp đưa ra cách nhìn khác nhau.
Hàm chỉ nhận hai list số hữu hạn có cùng độ dài. Nó từ chối số có độ lớn khiến phép tính trung gian không còn hữu hạn. Đây là helper minh họa một đầu ra và trọng lượng mẫu bằng nhau, không tái hiện toàn bộ khả năng multioutput hoặc sample_weight của thư viện.
Nhìn lại từng mẫu trước khi chọn metric chính
Đừng kết luận A hoặc B “tốt hơn” mà bỏ qua kiểu lỗi sản phẩm chấp nhận được. Nếu một lỗi lớn gây hậu quả khác nhiều so với nhiều lỗi nhỏ, cần thể hiện điều đó trong tiêu chí đánh giá. Ngược lại, một giá trị nhãn bị nhập sai có thể làm điểm tổng bị kéo lệch; metric không tự phát hiện nguồn dữ liệu sai.
Trong fixture, hãy tính tay tổng sai số tuyệt đối của A là 12 và tổng bình phương là 84. Chia cho 4 sẽ ra MAE 3 và MSE 21; căn 21 cho RMSE xấp xỉ 4.582576. Kiểm tra này giúp phát hiện việc quên căn hoặc báo nhầm MSE dưới tên RMSE.
Kiểm tra đơn vị và tập mẫu
Nếu đổi cả nhãn thật lẫn dự đoán từ phút sang giây bằng cách nhân 60, hai metric cũng tăng theo cùng hệ số 60. Không so trực tiếp một báo cáo tính bằng phút với báo cáo tính bằng giây. Cũng cần giữ cùng tập đánh giá trước khi so hai phương án.
Thử thêm ca dự đoán hoàn toàn đúng, một mẫu duy nhất và hai list lệch chiều dài. Ca đúng hoàn toàn phải trả cả hai điểm bằng 0. Ca chỉ một mẫu có MAE và RMSE bằng cùng độ lớn sai số. Các đầu vào rỗng hoặc không hữu hạn cần được xử lý rõ, không bỏ âm thầm rồi thay đổi mẫu số.
Phạm vi dùng trong báo cáo
Bài không xác minh phân bố sai số, độ tin cậy thống kê hoặc mức độ phù hợp của mô hình cho dữ liệu thật. Một bảng báo cáo có thể giữ cả MAE, RMSE và vài mẫu sai lớn để người đọc biết con số đến từ đâu. Không tự xóa mẫu khó chỉ để điểm đẹp hơn; nếu loại dữ liệu lỗi, ghi quy tắc và lý do.
Hãy chọn metric chính theo mục tiêu đã thống nhất trước khi xem kết quả cuối. Sau đó dùng metric còn lại như một góc kiểm tra bổ sung. Khác biệt giữa hai con số là tín hiệu cần đọc kỹ phân bố lỗi, thay vì lý do chọn tên metric làm phương án mình thích đứng đầu.

