Bài toán học máy

Đặt ghế cho buổi sinh hoạt thứ Bảy

Chương 1 · Bài 1.1

2

Ta đang dự đoán điều gì?

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.

3

Mục tiêu

  • Xác định input, output, thời điểm dự đoán và metric của một bài toán.
  • Phân biệt classification, regression và học không giám sát.
  • Dựng baseline bằng scikit-learn và so với cách đoán hằng số.
  • Ghi file dự đoán đúng ID, đúng định dạng.
01

Dữ liệu và đầu ra

Dữ liệu và đầu ra5

Feature, target và ID

Từ thông tin chiều thứ Sáu, mô hình đoán số người đến; nhãn chỉ có sau buổi.X: biết chiều thứ Sáuy: đếm sáng thứ Bảyregisteredrainattendance210.0219210.8415540.4741mô hìnhf(x) = ŷso sánhmỗi hàng là một buổi sinh hoạt
Từ thông tin chiều thứ Sáu, mô hình đoán số người đến; nhãn chỉ có sau buổi.
Dữ liệu và đầu ra6

Ảnh cũng thành một hàng dữ liệu

Ảnh chữ số viết tay thật 8 × 8 trải thành một hàng 64 số: mỗi ảnh là một hàng của X, chữ số đúng là giá trị y.
Dữ liệu và đầu ra7

Kiểu đầu ra của bài toán

Loại bài toán do đầu ra quyết định: một nhãn, một số, hay chưa có nhãn.Classification≥ 30 người?Regressionbao nhiêu người?Clusteringkhông có nhãncókhông28.4một số thực
Loại bài toán do đầu ra quyết định: một nhãn, một số, hay chưa có nhãn.
Dữ liệu và đầu ra8

Classification hay regression?

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.

Dữ liệu và đầu ra9

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?

Dữ liệu và đầu ra10

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?

Dữ liệu và đầu ra11

Shape trước model

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.

Dữ liệu và đầu ra12

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?

02

Học, chọn và chấm

Học, chọn và chấm14

Ba phần, ba công việc

Chia theo thứ tự buổi: học trên quá khứ, chọn và chấm trên các buổi sau.train · 80valid · 20test · 20thời gian080100120
Chia theo thứ tự buổi: học trên quá khứ, chọn và chấm trên các buổi sau.
Học, chọn và chấm15

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?

Học, chọn và chấm16

MAE có đơn vị người

MAE⁡=1m∑i∣y^i−yi∣.\operatorname{MAE}=\frac1m\sum_i|\hat y_i-y_i|.

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.

Học, chọn và chấm17

Sai cao, sai thấp không bù nhau

MAE là trung bình độ dài các đoạn sai số, tính theo đơn vị người.buổi 116242buổi 226343buổi 336441thậtdự đoán(2 + 3 + 1) / 3= 2 người
MAE là trung bình độ dài các đoạn sai số, tính theo đơn vị người.

Lấy trị tuyệt đối để sai cao và sai thấp không triệt tiêu nhau.

Học, chọn và chấm18

Baseline hằng số và linear

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ọc, chọn và chấm19

Nhìn từng buổi validation

Trên 20 buổi validation: đường hằng số lệch xa, linear bám sát số người thật.0204060số người thậtlinear · MAE 1.6đoán hằng số · MAE 10.720 buổi validation
Trên 20 buổi validation: đường hằng số lệch xa, linear bám sát số người thật.
Học, chọn và chấm20

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?

Học, chọn và chấm21

Chốt rồi chấm

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.

03

Bảng dự đoán

Bảng dự đoán23

Kiểm bảng CSV

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
Bảng dự đoán24

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?

Bảng dự đoán25

Lần nộp đầu tiên: hình chữ nhật ẩ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.

Bảng dự đoán26

Hộp học được nằm trong hộp thật

Hộp học được luôn nằm trong hộp thật.hộp thậthộp học được
Hộp học được luôn nằm trong hộp thật.

Mọi lỗi là đoán 0 cho điểm sát biên.

Bảng dự đoán27

Khi đi thi

  • Một câu: mẫu, thông tin lúc dự đoán, metric.
  • Nộp baseline sớm.
  • Đúng ID cho từng dự đoán; đọc lại file.
04

Luyện đề

Luyện đề29

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?

Phỏng theoUSA-NA-AIO 2026 · Vòng 1 · Part 1.1

Luyện đề30

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?

Đề thiNOAI 2026 Singapore · Vòng sơ loại · Câu 286

Luyện đề31

Chốt ý

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.

Luyện đề32

Sau giờ học

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.