Train / Val / Test in YouTube Recommendations
YouTube chia train/val/test theo thời gian, không ngẫu nhiên
Công ty nào đang ứng dụng Tập train, val, test?
Bạn mở YouTube và trang chủ hiện ra danh sách video. Khoảng 70% thời gian xem trên YouTube đến từ gợi ý của thuật toán. Hệ thống này phục vụ hơn 2 tỷ người dùng, chọn lọc từ hơn 800 triệu video, xử lý hơn 80 tỷ tín hiệu mỗi ngày.
Nhưng không model gợi ý nào được triển khai ngay sau khi huấn luyện xong. YouTube có một quy trình chia dữ liệu nghiêm ngặt (train, validation, test) rồi kết hợp với A/B testing (thử nghiệm so sánh trên người dùng thật). Mục tiêu là bảo đảm model mới thực sự cải thiện trải nghiệm, không chỉ cải thiện con số trên giấy.
Cái bẫy: chia ngẫu nhiên dữ liệu có thứ tự thời gian
Chia ngẫu nhiên
Train có dữ liệu từ 2024, test có dữ liệu từ 2021. Model biết trước xu hướng. Offline metric cực đẹp, thực tế bị tụt thảm.
Chia theo thời gian
Train là 2020 đến 2022 (cũ), val là 2023 (trung), test là 2024 (mới). Mô phỏng đúng việc đoán tương lai từ quá khứ.
Vấn đề công ty cần giải quyết
YouTube thu thập dữ liệu tương tác từ 2 tỷ người dùng: lượt xem, thời gian xem, nhấn like, chia sẻ, bình luận, bỏ qua. Tổng cộng hơn 80 tỷ tín hiệu mỗi ngày. Thách thức không chỉ là model chính xác trên dữ liệu quá khứ, mà còn phải đoán đúng hành vi người dùng trong tương lai. Tương lai thì luôn thay đổi: xu hướng mới, sự kiện thời sự, creator mới.
Nếu chia dữ liệu ngẫu nhiên theo kiểu sách giáo khoa, YouTube sẽ phạm một lỗi chết người: thông tin tương lai lọt vào tập train. Model học trên dữ liệu đã nhìn thấy tương lai. Offline metric trông đẹp. Production thì thảm hại. Lối đúng là chia theo thời gian: train là dữ liệu cũ, val là dữ liệu trung gian, test là dữ liệu mới nhất. Cộng thêm A/B test trên người dùng thật để chốt quyết định.
Dữ liệu YouTube: vào liên tục theo thời gian
Ba tập dữ liệu offline cộng một tập test thật là A/B trên người dùng hiện tại. Chỉ model vượt qua cả bốn mới được triển khai.
Cách Tập train, val, test giải quyết vấn đề
Tập train: học từ lịch sử. YouTube dùng hàng tỷ sự kiện tương tác trong quá khứ để huấn luyện mạng nơ-ron sâu. Kiến trúc 2 giai đoạn (Covington et al., RecSys 2016) gồm mạng ứng viên (candidate generation) chọn vài trăm video từ 800 triệu, rồi mạng xếp hạng (ranking) sắp xếp chúng. Dữ liệu được cân bằng cẩn thận theo người dùng. Mỗi user đóng góp cùng số lượng ví dụ để tránh model bị chi phối bởi nhóm xem nhiều.
Tập val: chia theo user và theo thời gian. YouTube chia theo người dùng chứ không chia theo sự kiện ngẫu nhiên. Toàn bộ lịch sử của một user nằm hoàn toàn trong train hoặc hoàn toàn trong val, không bao giờ chia đôi. Đồng thời, cắt theo thời gian. Val là dữ liệu gần đây nhất so với train. Tập val dùng để chọn hyperparameter, so sánh kiến trúc, làm early stopping.
A/B test trên người dùng thật: đề thi thật. Sau khi model vượt qua đánh giá offline, YouTube chạy A/B test. Họ chia người dùng thành nhóm control (model cũ) và nhóm treatment (model mới), rồi so sánh chỉ số thực tế: watch time, lượt hài lòng, tỷ lệ dừng xem sớm. YouTube chạy hàng chục nghìn A/B test mỗi năm. Chỉ model vượt qua A/B test mới được triển khai rộng.
Quyết định từ chỉ số thực tế, không phải chỉ số offline. YouTube nhiều lần phát hiện ra một nghịch lý. Model có offline metric cao hơn nhưng lại giảm watch time trong A/B test. Nguyên nhân thường là model tối ưu cho click (nhấp chuột) thay vì sự hài lòng. Người dùng click nhiều hơn rồi thoát ra nhanh hơn. Chỉ A/B test mới phát hiện được sự khác biệt này. Đó là lý do A/B test được coi là test set thật.
Chia ngẫu nhiên hay chia theo thời gian. Cách chọn quyết định độ tin cậy.
Cùng dataset 12 tháng. Đổi cách chia để thấy hậu quả.
Random split: có leakage
Vấn đề:
T3 (tháng 3) nằm trong test, nhưng T5 và T9 (tháng 5, 9, vốn là tương lai so với T3) lại ở train. Model biết trước xu hướng tương lai khi đoán T3. Kết quả offline đẹp, production thảm.
Quy trình A/B test rollout của YouTube
Offline evaluation
Đo model mới trên val và test set đã chuẩn bị. Watch time prediction, recall@k, precision@k. Nếu không vượt baseline thì dừng ngay, không tốn tài nguyên.
Val acc: 82.3% → 83.1% ✓ | NDCG@20: 0.42 → 0.44 ✓
Offline metric và trải nghiệm thật không luôn đi cùng chiều
Ba tình huống thật từ nghiên cứu YouTube. Mỗi tình huống cho thấy vì sao A/B test là không thể thiếu.
Click-bait model
Offline (CTR (click-through rate))
+12%
Online (Watch time)
-4%
Model tối ưu CTR sẽ chọn thumbnail gây tò mò nhưng nội dung không hợp. User bỏ xem sớm.
Highly-relevant model
Offline (NDCG@20)
+2%
Online (Watch time)
+6%
Offline metric tăng nhẹ, nhưng user thích hơn rõ rệt. Trải nghiệm thật mới nói lên tất cả.
Diversity-boosting model
Offline (Độ chính xác)
-1%
Online (Satisfaction survey)
+8%
Độ chính xác giảm (model gợi ý đa dạng hơn, không phải an toàn nhất), nhưng user hài lòng hơn về dài hạn.
Kết luận: mọi chỉ số offline chỉ là proxy. Quyết định cuối cùng luôn thuộc về A/B test trên người dùng thật. Đây chính là đề thi thật của một hệ thống recommendation.
Bạn phát triển một model gợi ý video. Độ chính xác trên val tăng từ 82% lên 85%. Có nên triển khai ngay không?
Bạn có 3 năm dữ liệu hành vi user (2022 đến 2024). Chia thế nào cho đúng?
Kiến trúc 2 giai đoạn của YouTube. Mỗi giai đoạn chia tập riêng.
YouTube không có một model gợi ý. Họ có hai model, mỗi cái có dữ liệu train, val, test riêng, được đánh giá theo metric riêng.
Mỗi giai đoạn có data split và metric riêng. Candidate cần recall cao (không bỏ sót video hay), ranking cần thứ tự đúng. A/B test đánh giá cả hai cộng lại trên người dùng thật. Đây là kiến trúc điển hình cho các hệ thống recommendation lớn (Netflix, Spotify, Tiktok).
Con số thật
Nếu không có Tập train, val, test, app sẽ ra sao?
Không chia tập theo thời gian, YouTube sẽ nhìn thấy tương lai trong lúc huấn luyện. Model trông có vẻ chính xác trên val và test nhưng thảm hại khi gặp xu hướng mới mà nó chưa từng thấy. Không có A/B test, YouTube sẽ triển khai model chỉ dựa trên offline metric. Nhiều thay đổi tốt trên giấy sẽ làm giảm trải nghiệm thực: click-bait được ưu tiên, creator chất lượng bị thiệt.
Quy trình 3 bước (train trên quá khứ, val trên tập tách riêng đúng cách, A/B test trên người dùng thật) bảo đảm mỗi thay đổi thuật toán phải vượt qua cả đánh giá lý thuyết lẫn thử thách thực tế trước khi chạm đến 2 tỷ người dùng. Đây là áp dụng đúng của nguyên tắc test set: chỉ mở khi mọi quyết định đã chốt. Ở đây, mở nghĩa là A/B test thật.
- Chia theo thời gian: train cũ nhất, test mới nhất. Mô phỏng đúng tình huống production.
- Chia theo user: không để dữ liệu của cùng một user ở cả train và val hay test (data leakage).
- A/B test là test set thật: offline metric chỉ là sàng lọc, không phải quyết định cuối cùng.
Áp dụng cho dự án Việt Nam: các bước bắt đầu
- Bước 1: Xác định mũi tên thời gian trong dữ liệu của bạn. Nếu có (đơn hàng theo ngày, click theo giờ, lượt like theo tuần) thì chia theo thời gian là bắt buộc.
- Bước 2: Xác định nhóm tự nhiên (user, khách hàng, thiết bị, phiên). Nếu có, chia theo nhóm thay vì theo điểm dữ liệu riêng lẻ.
- Bước 3: Thiết lập một quy trình A/B test đơn giản. Ở startup nhỏ, A/B test có thể là dạng tuần 1 dùng model A, tuần 2 dùng model B. Vẫn tốt hơn dựa vào offline metric một mình.
- Bước 4: Luôn có model baseline cũ sẵn sàng rollback. Một A/B test có ý nghĩa khi bạn có thể dừng nó nếu phát hiện ảnh hưởng tiêu cực.
Không phải dự án nào cũng có quy mô YouTube, nhưng các nguyên tắc đều áp dụng được. Các startup e-commerce Việt Nam (Tiki, Shopee, Lazada VN) đều dùng quy trình tương tự, chỉ khác quy mô.
- Tác động dài hạn: A/B test 2 tuần không thấy được user bỏ nền tảng sau 6 tháng vì chất lượng giảm.
- Ảnh hưởng đến creator: model mới có thể ưu tiên video ngắn, bỏ qua creator làm video dài có giá trị. Cần theo dõi riêng.
- Tác động xã hội: tối ưu engagement có thể dẫn tới nội dung cực đoan. Chỉ số engagement đẹp nhưng hậu quả xã hội xấu.