Hồi quy tuyến tính: từ đường thẳng đến baseline đáng tin cậy
Xây dựng mô hình dự đoán số, hiểu squared loss và đánh giá sai số trên dữ liệu chưa dùng để fit.
Hồi quy tuyến tính là điểm bắt đầu hữu ích khi đầu ra là một đại lượng liên tục. Bài viết xây dựng một baseline dự đoán thời gian xử lý từ số tác vụ bằng dữ liệu tự tạo; ví dụ không đại diện cho một hệ thống vận hành thực tế.
Mục tiêu học tập
- Phân biệt dự đoán trung bình với quan hệ nhân quả.
- Tính hệ số và sai số của mô hình một biến.
- Thiết kế phép so sánh baseline không làm rò rỉ nhãn kiểm tra.
Dự đoán một con số có nghĩa gì?
Giả sử số tác vụ tăng thì thời gian xử lý thường tăng. Ta đặt một đường thẳng qua các quan sát để dự đoán thời gian của một lô mới. Đường không cần đi qua mọi điểm: đo lường có nhiễu và còn nhiều yếu tố chưa được ghi lại.
Hệ số dốc cho biết dự đoán thay đổi bao nhiêu khi tăng một tác vụ. Điểm cắt là dự đoán tại đầu vào bằng không, nhưng có thể không có ý nghĩa vận hành nếu chưa từng quan sát lô rỗng.
Với một đặc trưng, mô hình là . Đầu vào x phải có đơn vị nhất quán; y là giá trị cần dự đoán. Khi có nhiều đặc trưng, thay wx bằng tổng trọng số của các đặc trưng. Tuyến tính ở đây nói về tham số.
Chọn đặc trưng có sẵn tại thời điểm dự đoán. Ví dụ thời gian hoàn thành cuối cùng của một lô không thể làm đầu vào cho việc dự đoán trước khi lô bắt đầu.
Mô hình xấp xỉ kỳ vọng có điều kiện bằng . Nếu quan hệ thật phi tuyến, thêm dữ liệu không tự sửa được sai lệch biểu diễn. Có thể thêm đặc trưng đa thức nhưng cần kiểm soát độ phức tạp.
Hệ số quan sát không xác lập nhân quả: cấu hình máy có thể đồng thời ảnh hưởng số tác vụ và thời gian. Diễn giải tác động của việc tăng tải cần giả định hoặc thiết kế nghiên cứu riêng.
Fit bằng bình phương sai số
Mỗi điểm tạo một khoảng cách theo trục đầu ra giữa dự đoán và giá trị quan sát. Bình phương khoảng cách làm sai số lớn bị phạt nhiều hơn. Fit nghĩa là tìm đường có tổng hình phạt nhỏ nhất trên tập học.
Một điểm nhập sai rất xa có thể kéo đường lệch nhiều. Trước khi đổi thuật toán, kiểm tra đơn vị, lỗi nhập và điều kiện thu thập điểm đó.
Mục tiêu là . Trong một biến, hệ số dốc bằng tổng tích độ lệch chia tổng bình phương độ lệch của x; sau đó . Ví dụ mã tính trực tiếp công thức này.
Nếu mọi x bằng nhau thì mẫu số bằng không. Dữ liệu đó không đủ xác định độ dốc; dự đoán trung bình có thể làm baseline thay vì chia cho không.
Gradient theo w là . Với nhiều biến, giải least squares bằng QR hoặc SVD thường đáng tin cậy hơn tự lấy nghịch đảo ma trận . Các cột gần phụ thuộc làm hệ số nhạy với nhiễu.
Ridge thêm hình phạt , thường không phạt intercept. Chọn lambda bằng validation; chuẩn hóa đặc trưng bằng thống kê của tập học để hình phạt không bị chi phối bởi đơn vị đo.
Đánh giá ngoài dữ liệu fit
Đường khớp đẹp trên những điểm đã nhìn thấy chưa chứng minh dự đoán tốt cho ngày mai. Giữ lại vài điểm làm bài kiểm tra và chỉ dùng chúng sau khi đã chọn cách học.
Trong ví dụ, so mô hình với cách luôn trả về thời gian trung bình của tập học. Baseline giúp biết đường thẳng có thêm ích lợi so với một câu trả lời cố định hay không.
MAE là trung bình trị tuyệt đối của sai số, có cùng đơn vị với y. RMSE phạt sai số lớn mạnh hơn. Tính cả hai trên cùng tập kiểm tra; đừng so các mô hình trên các tập khác nhau.
Nếu dữ liệu được thu theo ngày hoặc nhiều lần trên cùng máy, tách theo thời gian hoặc theo nhóm phù hợp. Random split từng dòng có thể để cùng điều kiện xuất hiện ở cả train và test.
Xem residual theo giá trị dự đoán và theo từng nhóm vận hành. Mẫu cong gợi ý mô hình thiếu cấu trúc; độ phân tán tăng có thể cho thấy phương sai sai số không đồng nhất. Đây là dấu hiệu chẩn đoán, không phải kết luận tự động.
R-squared có thể âm ngoài mẫu khi mô hình kém hơn mốc trung bình của tập đánh giá. Báo cả sai số có đơn vị, cách chia dữ liệu và số mẫu; một chỉ số riêng lẻ không đủ mô tả độ tin cậy.
Ngoại suy và bài thực hành có kiểm soát
Nếu chỉ thấy lô từ một đến bốn tác vụ, dự đoán cho một trăm tác vụ là một bước nhảy lớn. Khi tải cao, hàng đợi hoặc giới hạn bộ nhớ có thể làm quan hệ thay đổi.
Chạy mã rồi thêm một điểm học có thời gian bất thường. So đường trước và sau, nhưng đừng gọi bộ số nhỏ này là bằng chứng mô hình đã sẵn sàng triển khai.
Mã dùng bốn điểm học và hai điểm kiểm tra tách sẵn, không cần thư viện. Dữ liệu cố ý rất đơn giản để kiểm tra công thức và baseline. Đổi các giá trị y, tính lại MAE, rồi giải thích thay đổi bằng residual thay vì chỉ đọc hệ số.
Với dự án thật, cố định tiêu chí, chia dữ liệu trước preprocessing và lưu phiên bản đặc trưng. Test chỉ mở khi phương pháp đã chốt.
Thêm nhiễu có kiểm soát, lặp trên nhiều tập sinh độc lập và quan sát độ dao động hệ số. Không dùng điểm test để chọn mức nhiễu hoặc regularization. Nếu cần khoảng dự đoán, phải mô hình hóa cả bất định quan sát chứ không chỉ bất định hệ số.
Baseline tuyến tính giúp phát hiện lỗi dữ liệu nhanh, nhưng điểm tốt trên phân bố hiện tại không bảo đảm bền vững khi thay quy trình thu thập hoặc phần cứng.
Workflow & kiến trúc
Ứng dụng & giới hạn
- Ước lượng đại lượng liên tục từ dữ liệu bảng.
- Tạo baseline có thể kiểm tra trước khi thử mô hình phức tạp.
Điểm mạnh
Ít tham số, tính toán đơn giản và dễ kiểm tra phép tính bằng một ví dụ nhỏ.
Giới hạn cần nhớ
Quan hệ phi tuyến, ngoại lệ và đặc trưng phụ thuộc có thể làm baseline không phù hợp. Hệ số không tự mang ý nghĩa nhân quả.
Thử trong một project nhỏ
Chạy mã, tự thêm một ngoại lệ vào train, rồi ghi MAE của hai cách dự đoán. Giữ nguyên test. Viết hai tình huống mà dự đoán ngoài khoảng x của train có thể thất bại.
from statistics import mean
# Synthetic observations; not a real performance benchmark.
train = [(1.0, 3.0), (2.0, 5.0), (3.0, 7.0), (4.0, 9.0)]
test = [(5.0, 11.0), (6.0, 13.0)]
x_bar = mean(x for x, _ in train)
y_bar = mean(y for _, y in train)
denominator = sum((x - x_bar) ** 2 for x, _ in train)
if denominator == 0:
raise ValueError("Cannot identify a slope with constant input")
w = sum((x - x_bar) * (y - y_bar) for x, y in train) / denominator
b = y_bar - w * x_bar
mae = mean(abs(w * x + b - y) for x, y in test)
baseline_mae = mean(abs(y_bar - y) for _, y in test)
assert abs(w - 2.0) < 1e-12 and abs(b - 1.0) < 1e-12
assert mae < baseline_mae
print({"slope": w, "intercept": b, "mae": mae,
"constant_baseline_mae": baseline_mae})Python chuẩn; dữ liệu tuyến tính tự tạo để kiểm tra công thức, không phải kết quả đánh giá trên dữ liệu thật.
