One-hot với 50 nghìn giá trị tạo ma trận thưa khổng lồ và mỗi cột chỉ có vài mẫu — mô hình không học được gì ngoài nhiễu. Các hướng thay thế:
1. Gộp nhóm đuôi dài. Giữ top-N giá trị phổ biến, còn lại gộp thành OTHER. Đơn giản, hiệu quả bất ngờ, và ổn định khi gặp giá trị chưa từng thấy.
2. Thay bằng feature có ý nghĩa. Thay ma_san_pham bằng danh mục, khoảng giá, tuổi sản phẩm; thay quan_huyen bằng vùng, mật độ dân số, thu nhập bình quân. Thường tốt hơn mọi kỹ thuật encode.
3. Hashing (feature hashing). Ánh xạ giá trị vào k bucket cố định. Bộ nhớ có giới hạn, xử lý được giá trị mới, đổi lại có va chạm và mất khả năng diễn giải.
4. Target encoding. Thay mỗi giá trị bằng trung bình nhãn của nhóm đó. Mạnh với mô hình cây, nhưng rò rỉ nghiêm trọng nếu làm ngây thơ: giá trị chỉ xuất hiện 1 lần sẽ được mã hoá đúng bằng nhãn của chính hàng đó → mô hình học thuộc nhãn, CV đẹp, production sụp.
Khắc phục target encoding:
- Tính out-of-fold: với mỗi fold, trung bình nhãn lấy từ các fold còn lại. sklearn.preprocessing.TargetEncoder làm sẵn cross-fitting này.
- Smoothing về trung bình toàn cục theo số mẫu trong nhóm: nhóm ít mẫu bị kéo về trung bình chung, nhóm nhiều mẫu giữ giá trị riêng.
- Luôn đặt encoder trong Pipeline để nó chỉ fit trên phần train của mỗi fold.
- Có sẵn quy tắc cho giá trị chưa từng thấy lúc serve (trả về trung bình toàn cục).
5. Embedding — mạng nơ-ron học vector cho từng giá trị. Đáng dùng khi số giá trị rất lớn và có nhiều dữ liệu, ví dụ hệ gợi ý.
Lưu ý chung: nếu định danh (user_id) thực sự nằm trong feature, phải tách train/test theo nhóm để tránh cùng một thực thể xuất hiện ở cả hai bên.