Đặt ghế cho buổi sinh hoạt thứ Bảy
Chương 1 · Bài 1.1
Chiều thứ Sáu: biết số đăng ký và dự báo mưa.
Thứ Bảy: mới biết số người thật sự đến.
Mỗi hàng = một buổi.
Một dự đoán = một con số người.
Thông tin đầu vào phải có đúng lúc sử dụng.
Có ít nhất 30 người không?
Classification: một nhãn.
Có bao nhiêu người?
Regression: một giá trị số.
Đặt tên lớp bằng số 0, 1, 2 không biến classification thành regression.
Hỏi nhanh
Input là ảnh chụp một bài giải. Output là một trong ba nhãn “đúng”, “sai”, “chưa đủ bước”. Đây là loại bài toán nào?
Mã 0, 1, 2 chỉ là tên lớp, lớp 2 không “lớn gấp đôi” lớp 1, nên đây không phải hồi quy. Đề đã cho sẵn ba lớp, và “sai” khác “chưa đủ bước”, nên cũng không gộp thành bài nhị phân.
Hỏi nhanh
Câu lạc bộ muốn chạy mô hình vào chiều thứ Sáu để đoán số người đến buổi sáng thứ Bảy. Cột nào không được dùng làm feature?
Số người quét mã sáng thứ Bảy chính là điều ta đang muốn đoán. Mô hình dùng cột này sẽ đạt điểm rất cao trên bảng cũ, nhưng chiều thứ Sáu thì chưa có cột ấy để đưa vào.
X = data[["registered", "rain_forecast"]]
y = data["attendance"]
print(X.shape, y.shape)
print(data.head(3).round(2).to_string(index=False))
Kết quả(120, 2) (120,)
session_id registered rain_forecast attendance
0 21 0.02 19.0
1 21 0.84 15.0
2 54 0.47 41.0
X có 120 hàng và 2 feature. y có 120 phần tử. Mỗi hàng là một buổi.
Hỏi nhanh
session_id chạy từ 0 đến 119 theo thứ tự thời gian. Vì sao không đưa cột này vào X?
ID chỉ là số thứ tự. Mô hình bám vào ID thì gặp buổi mới, có ID lớn hơn mọi ID đã thấy, sẽ kéo dài một xu hướng không có thật. Nếu có xu hướng theo thời gian, hãy tạo feature có nghĩa như tháng hay mùa.
Hỏi nhanh
Có hai mô hình, ta cần chọn một. Ta so điểm của chúng trên tập nào?
Validation là phần giữ riêng để so và chọn. Trên train, mô hình đã thấy chính các mẫu ấy nên điểm đẹp mà không nói lên gì. Test chỉ mở ra sau khi đã chốt phương án.
Với m buổi đang chấm, MAE có đơn vị người.
Càng nhỏ càng tốt. Giá trị này không nói mọi buổi đều sai bằng nhau.
Lấy trị tuyệt đối để sai cao và sai thấp không triệt tiêu nhau.
for name, model in models.items():
model.fit(X_train, y_train)
prediction = model.predict(X_valid)
assert prediction.shape == y_valid.shape
valid_mae[name] = mean_absolute_error(
y_valid, prediction)
print(name, f"valid MAE = {valid_mae[name]:.3f}")
chosen_name = min(valid_mae, key=valid_mae.get)
print("Chọn bằng validation:", chosen_name)
models: DummyRegressor(strategy="mean") và LinearRegression, cùng train và validation.
Kết quảmean valid MAE = 10.740
linear valid MAE = 1.561
Chọn bằng validation: linear
Hằng số sai gần 11 người, linear khoảng 1.6 người trên cùng 20 buổi.
Hỏi nhanh
Trên cùng 20 buổi validation, một mô hình mới có MAE 11.5 người, còn baseline đoán hằng số có MAE 10.74. Ta nên làm gì tiếp?
Thua cả cách đoán không nhìn feature nào là dấu hiệu có lỗi: cột bị lệch, shape sai, dùng nhầm tập, hay quên chuẩn hóa. Mở test ra để “hỏi thêm” thì test không còn độc lập nữa.
final_model = models[chosen_name]
final_model.fit(X.iloc[:100], y.iloc[:100])
test_prediction = final_model.predict(X_test)
print(f"Test MAE = {mean_absolute_error(y_test, test_prediction):.3f}")
Kết quảTest MAE = 1.317
Học lại trên train cộng validation, rồi chấm test một lần: MAE 1.317 người.
Xem điểm test xong mà sửa model thì test không còn độc lập.
Một hàng cho mỗi ID.
Đúng tên cột, đúng thứ tự, số hữu hạn.
Dùng index=False.
Kết quả session_id attendance
100 16.19
101 26.21
102 42.31
Số hàng: 20
Hỏi nhanh
Một bạn sắp xếp cột dự đoán từ nhỏ đến lớn nhưng để nguyên cột ID. File nộp còn đúng không?
MAE so dự đoán với nhãn có cùng ID. Sắp lại cột dự đoán thì các số bị chuyển sang ID khác, nên điểm sai dù tập giá trị vẫn y nguyên. Điều bắt buộc là mỗi ID đi với đúng dự đoán của nó.
Đề Hình chữ nhật ẩn: điểm trong hình chữ nhật ẩn có nhãn 1.
Cách đơn giản: hộp nhỏ nhất chứa mọi điểm train nhãn 1.
Kết quảsố điểm nhãn 1 trong train: 5
hộp học được: [20.3, 50.3, 32.0, 79.9]
accuracy đoán toàn 0: 0.773
accuracy hộp nhỏ nhất: 0.917
Nộp submission.zip trên LQDOJ, kiểu Output.
Mọi lỗi là đoán 0 cho điểm sát biên.
Luyện đề 1
Bảng chỉ có feature của từng buổi, không có cột nhãn. Ta muốn gom các buổi giống nhau thành từng nhóm. Đây là loại bài toán nào?
Không có nhãn thì không có cặp feature và nhãn để học, nên đây không phải học có giám sát. Clustering chỉ tìm cấu trúc trong feature để gom nhóm.
Phỏng theoUSA-NA-AIO 2026 · Vòng 1 · Part 1.1
Luyện đề 2
Một mô hình được huấn luyện và kiểm trên dữ liệu năm 2023: đúng 99.8% trên train, 92% trên validation. Đem dùng cho dữ liệu năm 2025 thì chỉ còn đúng 64%. Vấn đề chính nằm ở đâu?
Con số 92% đã ước lượng tốt cho dữ liệu cùng thời kỳ. Điểm chỉ tụt khi sang năm khác, tức là dữ liệu đã thay đổi. Vì vậy nên lấy giai đoạn gần nhất trước lúc dùng làm validation.
Train để học. Validation để chọn. Test chấm một lần sau khi đã chọn.
Baseline là mốc; thua baseline thường là có lỗi.
Làm 10 câu kiểm tra cuối bài trên trang bài học.
Nộp bài Thực hành đầu tiên: Hình chữ nhật ẩn.