Một mô hình dự báo sai đúng một đơn vị trên hai đơn hàng. Đơn đầu có số lượng thực là 100, đơn sau có số lượng thực là 1. Sai số tuyệt đối bằng nhau nhưng khi chia theo số lượng thực, một dòng đóng góp 1% và dòng kia đóng góp 100%. Nếu báo cáo chỉ cho một con số trung bình, nhóm vận hành khó thấy điều gì đã kéo kết quả lên.
Đọc mẫu số trước khi đọc điểm
MAPE lấy trung bình các tỷ lệ sai số tuyệt đối so với độ lớn của giá trị thực. Ở ví dụ này, mỗi hàng có trọng số như nhau trong phép trung bình, nhưng mẫu số nhỏ khiến cùng một đơn vị sai số tạo tỷ lệ lớn hơn. Đừng diễn giải 100% thành số đơn sai hoặc tỷ lệ dự báo sai hoàn toàn: đây là một phép đo độ lớn sai số.
Ví dụ dưới đây dùng Python chuẩn với số liệu tự tạo. Tài liệu scikit-learn 1.9.1 được đối chiếu ngày 12/11/2026. Hàm minh họa chủ động từ chối mẫu số 0 để bạn thấy quyết định nghiệp vụ; nó không tái hiện cách thư viện xử lý 0.
from math import isclose
def relative_errors(actual, predicted):
if not actual or len(actual) != len(predicted):
raise ValueError("Expected two nonempty sequences of equal length")
if any(value == 0 for value in actual):
raise ValueError("Zero actual needs a reporting policy")
return [abs(y - p) / abs(y) for y, p in zip(actual, predicted)]
errors = relative_errors([100, 1], [101, 2])
assert errors == [0.01, 1.0]
assert isclose(sum(errors) / len(errors), 0.505)
print(errors)
print(f"{100 * sum(errors) / len(errors):.1f}%")
Kết quả kiểm tra là hai tỷ lệ 0.01 và 1.0, trung bình hiển thị 50.5%. Tỷ lệ thô 0.505 và nhãn 50.5% mô tả cùng một giá trị. Khi chuyển metric giữa backend và dashboard, đặt tên trường hoặc đơn vị để tránh nhân 100 hai lần.
Giá trị thực bằng 0 cần một quy tắc riêng
Chạy cùng phép tính với giá trị thực 0 sẽ không có tỷ lệ theo công thức thông thường. Tài liệu scikit-learn cho biết hàm của thư viện dùng epsilon để tránh chia cho 0; khi dự báo khác 0, điểm có thể rất lớn. Giá trị hữu hạn ở đây không chứng minh phép so phần trăm đã có ý nghĩa nghiệp vụ.
Nếu dữ liệu có những ngày không có đơn, đừng bỏ chúng mà vẫn gọi kết quả là điểm trên toàn bộ ngày. Một báo cáo có thể trình bày MAE trên tất cả các ngày, MAPE trên nhóm ngày có mẫu số hợp lệ, và số ngày bị loại. Hai mẫu số của báo cáo cần được ghi rõ. Có thể giữ một bảng riêng cho lỗi dự báo ở những ngày bằng 0 để người đọc không mất thông tin.
Kiểm tra trước khi đưa lên dashboard
Tạo ba fixture: một dòng bình thường, một dòng có mẫu số nhỏ và một dòng có mẫu số 0. Đối chiếu từng tỷ lệ trước khi gộp. Với nhóm thật, hãy kiểm tra cả số hàng và khoảng giá trị thực; một số trung bình thay đổi có thể do cơ cấu dữ liệu thay đổi dù sai số tuyệt đối chưa tăng.
Ví dụ không xử lý NaN, vô cực, trọng số hay nhiều đầu ra, không chạy scikit-learn và không so hiệu năng mô hình. Mục đích là kiểm tra diễn giải của một phép tính nhỏ trước khi chọn metric cho hệ thống.
Kết luận
MAPE trả lời câu hỏi sai bao nhiêu so với giá trị thực của từng hàng. Khi giá trị thực có thể gần 0 hoặc bằng 0, hãy ghi rõ phạm vi tính điểm và đọc kèm sai số theo đơn vị gốc.


