Data Partition

Chia dữ liệu ban đầu thành train và validate sử dụng stratify sampling

Mục lục

Tổng quan

Overfitting

Overfitting là hiện tượng mô hình quá khớp với dữ liệu training. Việc quá khớp chỉ với một dữ liệu dẫn đến việc dự đoán nhầm, nhiễu và mô hình không còn tốt trên các dữ liệu khác. Hình sau đây minh họa hiện tượng overfitting.

Overfitting
Minh họa overfitting

Từ hình minh họa, ta thấy rằng:

  • Mô hình 1: Quá đơn giản và quá yếu.
  • Mô hình 2: Cân bằng giữa độ phức tạp và khả năng dự báo của mô hình.
  • Mô hình 3: Mô hình có khả năng dự báo rất mạnh nhưng độ phức tạp cao, đồng thời không tốt trên mẫu test.

Tránh overfitting

Để tránh overfittling, ta thường sử dụng quy trình như sau:

  • Dữ liệu ban đầu thường được chia thành tập train và validate (out-of sampe).
  • Xây dựng mô hình theo độ phức tạp tăng dần trên mẫu train, dùng mô hình này để score cho mẫu validate.
  • Theo dõi performance đồng thời trên dữ liệu train và validate.
  • Chọn điều kiện dừng phù hợp (early stopping): thường là khi performance của model trên dữ liệu validate bắt đầu xấu đi.

Hình sau đây minh họa phương pháp tránh overfitting:

Train & Validate
Minh họa tránh overfitting bằng train & validate

Với hình minh họa trên, ta thấy rằng, khi độ phức tạp của mô hình tăng dần thì sai số trên dữ liệu train giảm dần. Trong khi đó sai số trên dữ liệu validate lúc đầu giảm dần nhưng sau đó lại tăng lên. Căn cứ vào đồ thị, ta thấy dừng tại bước số 9 là hợp lý.

Nếu số lượng quan sát trong dữ liệu đủ lớn, ta có thể chia dữ liệu ban đầu thành dữ liệu train (chiếm 70% quan sát) và dữ liệu validate (chiếm 30%) quan sát. Tỉ lệ này có thể là 70/30 hoặc 80/20. Khi chia dữ liệu thành hai phần cần chú ý các vấn đề như sau:

  • Sử dụng kỹ thuật Stratify sample cho biến target (good/bad) nhằm đảm bảo tỉ lệ Good/Bad của mẫu validation và train là tương tự nhau.

  • Sử dụng seed là giá trị định danh nhằm đảm bảo cách chia train/validate là tương tự nhau trong mỗi lần chia (mỗi lần chạy code).

Minh họa cho stratify sampling được minh họa như sau:

Example of tratify sampling
Minh họa tratify sampling

Sử dụng Macro

Syntax

Để chia dữ liệu thành tập dữ liệu train và validate theo stratify sampling, ta dùng Macro Data_Partition. Tham số của macro như sau:

%Data_Partition(ds_in, train, valid, percent, target, seed=123456);

Trong đó:

  • ds_in (data[target]): Dữ liệu ban đầu cần chia (input).
  • train (data): Dữ liệu train (output).
  • valid (data): Dữ liệu validate (output).
  • percent (float): (Số quan sát dữ liệu train)/ (Số quan sát dữ liệu validate) *100.
  • target (variable): Thực hiện stratify sampling dựa trên biến target. Biến target có thể là binary hoặc interval và phải nằm trong dữ liệu ds_in. -seed (int) giá trị để cố định sự ngẫu nhiên trong các lần chia. Sử dụng số này để đảm bảo kết của của mỗi lần chạy macro là không khác nhau.

Detail

Các bước xử lý trong macro như sau:

  • Bước 1: Check số lượng \(n\) các giá trị phân biệt của biến target. Nếu n nhỏ hơn hoặc bảng 20 thì chuyển sang bước 2. Còn lại chuyển sang bước 3.
  • Bước 2: Sử dụng Proc HPSample để chia dữ liệu ds_in thành hai dữ liệu trainvalid theo tỉ lệ percent: (100- percent).
  • Bước 3: Chia biến target thành 20 nhóm theo quantile. Sử dụng biến group mới này để thực hiện stratify sampling. Sử dụng Proc HPSample để chia dữ liệu ds_in thành hai dữ liệu trainvalid theo tỉ lệ percent: (100- percent).

Output

Report

Với biến target là biến nhị phân (nhận giá trị 0 hoặc 1). Kết quả nhận được như sau:

Với biến target là biến liên tục. Kết quả nhận được như sau:

Trong đó:

  • Target là các giá trị khác nhau của biến target.
  • Num Input, Num Train, Num Valid là số lượng quan sát ứng với từng giá trị khác nhau của cột target của các dữ liệu input, train, valid tương ứng.
  • Pct Train, Pct Valid là tỉ lệ phần trăm qua sát trong dữ liệu train, valid so với dữ liệu input. Các giá trị trong cột này bằng nhau thể hiện macro chạy chúng theo stratify sampling.

Dữ liệu

Kết quả đầu ra của Macro là hai dữ liệu trainvalid với các biến và tỉ lệ target tương tự như dữ liệu đầu vào. Tỉ lệ số lượng quan sát ở hai dữ liệu trainvalid so với dữ liệu ds_inpercent/100 và 1-percent/100.

Example

Ví dụ sau dùng để chia dữ liệu data.import thành hai dữ liệu train (data.train) và validate (data.valid) theo tỷ lệ 70% và 30% tương ứng.

%data_partition (
   ds_in=data.import, 
   train=data.train, 
   valid=data.valid, 
   percent=70, 
   target=bad);