Feature Engineering

Mục lục

1. Tổng quan

Các kỹ thuật để chuẩn bị, biến đổi và tạo ra các đặc trưng (features) từ dữ liệu thô (raw data) dành cho các mô hình ML.

2. Xử lý Dữ liệu bị thiếu

2.1 Thay thế bằng Số trung bình cộng (Mean Imputation)

  • “Mean” = Giá trị trung bình cộng của feature đó
  • Thay thế các giá trị bị thiếu bằng trung bình cộng của các giá trị hiện có
  • Ví dụ: Tuổi là [25, 30, ?, 40], thay dấu ? bằng trung bình = (25+30+40)/3 = 31.67
  • Ưu điểm: Đơn giản, hiệu quả cho dữ liệu dạng số (numerical data)
  • Nhược điểm: Làm giảm phương sai (variance), không nắm bắt được mối quan hệ giữa các features với nhau
  • Khi nào nên dùng: Dữ liệu bị thiếu hoàn toàn ngẫu nhiên (Missing Completely At Random - MCAR)

2.2 Thay thế bằng Số trung vị (Median Imputation)

  • Thay thế các giá trị bị thiếu bằng số trung vị (giá trị nằm ở chính giữa khi dãy số được sắp xếp)
  • Ví dụ: Tuổi là [25, 30, ?, 40, 100], thay dấu ? bằng trung vị = 30
  • Ưu điểm: Kháng cự tốt với các điểm dị biệt (outliers), tốt hơn số trung bình khi phân phối dữ liệu bị lệch (skewed)
  • Nhược điểm: Vẫn làm giảm phương sai
  • Khi nào nên dùng: Dữ liệu có chứa outliers hoặc bị lệch phân phối #exam-tip
  • Tốt hơn số trung bình khi: Phân phối dữ liệu không chuẩn (not normal)

2.3 Các phương pháp Imputation khác

  • Thay thế bằng Mode - Dùng giá trị xuất hiện nhiều nhất (dành cho dữ liệu phân loại - categorical data)
  • Forward/backward fill - Sử dụng giá trị liền trước/liền sau (dành cho chuỗi thời gian - time series)
  • Dựa trên mô hình (Model-based) - Dự đoán giá trị bị thiếu bằng cách dùng các features khác
  • Xóa dòng (Drop rows) - Xóa luôn các dòng bị thiếu dữ liệu (chỉ dùng nếu số lượng dòng thiếu là cực kỳ nhỏ)

3. Xử lý Mất cân bằng lớp #important

3.1 Lấy mẫu dưới (Undersampling)

  • Định nghĩa: Giảm bớt số lượng mẫu của lớp đa số (majority class)
  • Ví dụ: 1000 ca gian lận (thiểu số) vs 10,000 ca không gian lận (đa số) → Xóa bỏ ngẫu nhiên 9,000 ca không gian lận
  • Ưu điểm: Cân bằng được các lớp, giảm thời gian huấn luyện
  • Nhược điểm: Mất đi dữ liệu tiềm năng, có thể gây ra underfitting
  • Khi nào nên dùng: Tập dữ liệu khổng lồ mà việc mất đi một phần dữ liệu là hoàn toàn chấp nhận được

3.2 Lấy mẫu quá (Oversampling)

  • Nhân bản (Duplicate) hoặc tạo ra các mẫu nhân tạo (synthetic) cho lớp thiểu số
  • Ưu điểm: Không bị mất mát dữ liệu
  • Nhược điểm: Nguy cơ cao bị overfitting, tốn nhiều thời gian huấn luyện hơn

3.3 SMOTE (Synthetic Minority Over-sampling Technique) #exam-tip

  • Định nghĩa: Tạo ra các mẫu nhân tạo (synthetic) cho lớp thiểu số bằng phương pháp nội suy (interpolation)
  • Cách hoạt động:
    1. Chọn một mẫu thuộc lớp thiểu số
    2. Tìm k-hàng xóm gần nhất của nó (thường k=5) trong cùng lớp thiểu số
    3. Chọn ngẫu nhiên một hàng xóm
    4. Tạo một mẫu nhân tạo nằm trên đường nối giữa mẫu ban đầu và người hàng xóm đó
    5. Mẫu mới = Mẫu gốc + random(0,1) × (Hàng xóm - Mẫu gốc)
  • Ưu điểm: Tốt hơn nhiều so với việc nhân bản đơn thuần, giúp giảm overfitting
  • Nhược điểm: Có thể tạo ra các mẫu nhiễu ở những vùng giao nhau giữa các lớp
  • Có sẵn trên: SageMaker Data Wrangler
  • Best practice: Chỉ được áp dụng SMOTE trên tập training data, tuyệt đối không áp dụng trên tập validation/test #gotcha

3.4 Trọng số lớp (Class Weights)

  • Gán hình phạt cao hơn (higher penalty) cho việc phân loại sai lớp thiểu số
  • Không cần tác động hay chỉnh sửa gì vào dữ liệu gốc
  • Được hầu hết các thuật toán ML hỗ trợ

4. Tiền xử lý Dữ liệu (Data Preprocessing)

4.1 Xáo trộn (Shuffling) trong ML #important

  • Định nghĩa: Sắp xếp lại thứ tự các mẫu training data một cách ngẫu nhiên
  • Mục đích:
    • Ngăn không cho mô hình học các mẫu phụ thuộc vào thứ tự (order-dependent patterns)
    • Đảm bảo các batches được chia ngẫu nhiên trong quá trình training
    • Phá vỡ các mối tương quan theo thời gian hoặc tuần tự
    • Cải thiện tốc độ hội tụ (convergence) của gradient descent
  • Khi nào nên Xáo trộn:
    • Luôn luôn làm đối với dữ liệu không có tính tuần tự (dữ liệu dạng bảng, hình ảnh)
    • Trước khi chia tập train/validation/test
    • Bắt đầu mỗi training epoch
  • Khi nào KHÔNG NÊN Xáo trộn: Dữ liệu Chuỗi thời gian (Time series) (vì cần phải bảo toàn thứ tự thời gian) #gotcha
  • Trong SageMaker: Thiết lập ShuffleConfig trong training job

4.2 Chuẩn hóa / Co giãn (Normalization/Scaling)

  • Min-Max Scaling - Co giãn các giá trị về khoảng [0,1]
  • Standardization (Z-score) - Đưa về Mean=0, Độ lệch chuẩn (StdDev)=1
  • Robust Scaling - Sử dụng số trung vị và IQR (xử lý tốt các outliers)

4.3 Mã hóa Biến phân loại (Encoding Categorical Variables)

  • One-hot encoding - Tạo các cột nhị phân cho từng danh mục
  • Label encoding - Chuyển danh mục thành số nguyên (dùng cho dữ liệu có tính thứ bậc - ordinal data)
  • Target encoding - Thay thế danh mục bằng giá trị trung bình của biến mục tiêu (target)

5. Feature Selection

  • Các phương pháp Filter - Sự tương quan (Correlation), Chi-square
  • Các phương pháp Wrapper - Chọn lọc tiến/lùi (Forward/backward selection)
  • Các phương pháp Embedded - Chuẩn hóa L1 (L1 regularization), độ quan trọng của nhánh cây (tree importance)

6. Các công cụ của AWS dành cho Kỹ nghệ Đặc trưng

6.1 SageMaker Data Wrangler #hands-on

  • Giao diện trực quan để chuẩn bị dữ liệu
  • Hơn 300+ phép biến đổi (transformations) tích hợp sẵn
  • Hỗ trợ SMOTE, encoding, scaling, imputation
  • Tự động sinh ra code để mang lên production

6.2 SageMaker Processing Jobs

  • Chạy các kịch bản (scripts) tiền xử lý ở quy mô khổng lồ
  • Hỗ trợ scikit-learn, Spark, và các custom containers

6.3 AWS Glue DataBrew

  • Công cụ chuẩn bị dữ liệu không cần viết code (No-code data preparation)
  • Hơn 250 phép biến đổi
  • Cực kỳ phù hợp cho quá trình Exploratory Data Prep (chuẩn bị dữ liệu thăm dò)

7. Tips #exam-tip

  • Mean vs Median: Dùng Median khi dữ liệu bị lệch (skewed) hoặc có outliers
  • Undersampling vs SMOTE: Khuyên dùng SMOTE khi bạn không muốn bị mất đi dữ liệu quý giá
  • Luôn luôn Shuffling: Ngoại trừ dữ liệu Time series
  • Xử lý missing data trước khi scaling: Phải Imputation trước, sau đó mới Normalization
  • Chỉ SMOTE trên training data: Tuyệt đối không dùng cho test set