BigQueryML에서 TRANSFORM
BigQueryML에서 TRANSFORM
은 모델 학습 전에 데이터 전처리를 선언적으로 지정할 수 있는 기능입니다. 이를 통해 훈련/예측 시 일관된 전처리 파이프라인을 적용할 수 있으며, 특히 파이프라인 재사용이나 자동 특성 엔지니어링에 유용합니다.
✅ 기본 개념
BigQueryML의 TRANSFORM
구문은 CREATE MODEL
문에서 사용되며, 주로 다음과 같이 구성됩니다:
CREATE MODEL project.dataset.model_name
TRANSFORM (
-- 변환 정의
)
OPTIONS (...) AS
SELECT ...
🔧 예제: 범주형 인코딩 + 스케일링
CREATE OR REPLACE MODEL my_dataset.my_model
TRANSFORM (
one_hot_encoded_country AS
one_hot_encode(country),
scaled_age AS
standard_scaler(age)
)
OPTIONS (
model_type = 'logistic_reg',
input_label_cols = ['label']
) AS
SELECT
country,
age,
label
FROM
my_dataset.training_data;
one_hot_encode(country)
: 범주형 변수 인코딩standard_scaler(age)
: 평균 0, 표준편차 1로 정규화TRANSFORM
블록에서 정의된 컬럼은 아래SELECT
의 컬럼을 전처리하여 학습에 사용됨
🧠 지원되는 주요 변환 함수
함수 | 설명 |
---|---|
one_hot_encode(col) |
범주형 변수 → 원-핫 인코딩 |
log(col) |
로그 변환 |
normalize(col) |
0~1 정규화 |
standard_scaler(col) |
표준화 (Z-score) |
bucketize(col, boundaries) |
수치형 변수 → 구간화 |
clip(col, min, max) |
값 제한 |
cast(col AS TYPE) |
형변환 |
📌 참고 사항
TRANSFORM
은 모델 정의 내부에서만 사용 가능합니다.SELECT
쿼리에서는 사용 불가합니다.TRANSFORM
블록의 출력 컬럼명은 모델이 학습에 사용하는 특성명입니다.SELECT
절에서는 원본 컬럼을 제공해야 합니다. (전처리는TRANSFORM
안에서 수행됨)
🔍 예제: 날짜 파싱 및 로그 변환
CREATE OR REPLACE MODEL my_dataset.sales_model
TRANSFORM (
log_price AS log(price),
day_of_week AS EXTRACT(DAYOFWEEK FROM DATE(timestamp))
)
OPTIONS (
model_type = 'linear_reg',
input_label_cols = ['sales']
) AS
SELECT
price,
timestamp,
sales
FROM
my_dataset.sales_data;
필요하다면 TRANSFORM
없이도 SQL로 사전 전처리를 해서 CREATE MODEL
에 넘길 수 있지만, TRANSFORM
을 쓰면 학습-예측 간 일관성이 보장됩니다.
어떤 모델(logistic_reg
, boosted_tree_classifier
등)을 쓰시려는지 알려주시면 더 맞춤 예제를 드릴 수 있어요.