선형 및 로지스틱 회귀는 광고 데이터에서 유의미한 예측을 생성할 수 있는 머신러닝 모델입니다.
- 선형 회귀에서는 데이터 포인트와 선 간의 거리가 최소화되도록 데이터에 선분을 맞추는 함수를 만듭니다. 그런 다음 구매, 이전 상호작용 등을 기반으로 사용자의 평생 가치를 예측하는 등 입력을 기반으로 숫자 값을 예측하는 데 이 모델을 사용할 수 있습니다.
- 로지스틱 회귀는 예측 분류 문제에 사용됩니다. 이 모델은 제공되는 변수의 수에 따라 다음 두 가지 유형 중 하나입니다.
- 바이너리 로지스틱 회귀는 전환 이벤트가 발생할 가능성이 얼마나 되는가와 같은 '예/아니요' 질문에 대한 답변을 제공합니다.
- 멀티클래스 로지스틱 회귀는 고객이 '낮은 가치', '중간 가치' 또는 '높은 가치' 고객인지 결정하는 것과 같이 가능한 여러 값을 예측하는 데 사용됩니다.
선형 및 로지스틱 회귀 모두 학습 데이터(이 경우 광고 데이터)를 학습하여 광고 관련 결정을 내리기 위한 예측 모델을 제공합니다. 일반적으로 더 많은 고품질 데이터를 제공하면 모델의 정확성이 향상됩니다. 클러스터링된 학습 데이터를 제공하면 두 모델 모두 성능이 향상됩니다.
개인 정보 차등 보호
선형 및 로지스틱 회귀 모두 Ads Data Hub의 다른 작업에서 사용하는 것과 다른 개인 정보 보호 검사 시스템인 개인 정보 차등 보호를 사용합니다. 개인 정보 차등 보호는 학습 과정 중 결과에 노이즈를 삽입하여 최종 사용자의 개인 정보를 보호합니다. 이 노이즈는 여전히 유용한 최종 결과를 얻을 수 있지만 최종 사용자를 식별할 수는 없을 정도의 수준으로 유지됩니다. 또한 노이즈 수준은 비확정적이어서 결과에 일관되지 않은 노이즈 수준이 포함되므로 최종 사용자의 개인 정보가 더 보호됩니다.
쿼리 제한
기본 EPSILON_PER_MODEL
사용 시 '데이터 일'당 선형 및 로지스틱 회귀 모델링 쿼리는 100개 선형으로 제한됩니다. '데이터 일'은 지정된 날짜에 생성된 이벤트를 의미합니다. 이러한 이벤트는 쿼리를 실행할 때 제공하는 시작 및 종료일, 학습에 사용되는 임시 테이블과 같이 쿼리에서 사용하는 테이블을 만들 때 사용되는 시작 및 종료일에 해당합니다. 즉, 1일의 데이터는 100개 이하의 모델에서 사용할 수 있습니다. EPSILON_PER_MODEL을 기본값보다 크게 지정하면 더 적은 수의 모델을 만들 수 있지만 모델의 품질이 높아집니다. EPSILON_PER_MODEL 값을 더 작게 선택하면 더 많은 모델을 학습시킬 수 있지만 모델의 품질이 낮아집니다.
작동 방식
워크플로는 다음 필수 단계를 따릅니다.
- 학습 데이터 준비
- 모델 만들기
- 모델에서 유용한 정보 수집
학습 데이터 준비
위에서 언급했듯이 일반적으로 대규모 고품질 데이터 세트를 사용하면 더 나은 결과를 얻을 수 있습니다. 또한 입력 데이터는 최소-최대 배율을 사용하여 크기가 조정되므로 밀집도가 낮은 데이터나 중대한 이상점이 있는 데이터는 평균을 이동하여 모델에 악영향을 미칠 수 있습니다.
기본적으로 Ads Data Hub에서는 검증에 사용할 학습 데이터의 18%를 무작위로 선택합니다. 검증에 사용되는 데이터의 비율은 data_split_eval_fraction
옵션으로 관리할 수 있습니다.
모델 만들기
모델 학습을 위한 매개변수 및 입력 데이터를 지정합니다.
권장사항
모델 품질에서 가장 중요한 요소는 학습 세트의 크기입니다. 하지만 크기/품질의 절충점은 문제 및 아래에 나열된 요소에 따라 달라집니다. 여러분의 경험을 알려주세요. * 사용자가 100,000명 이상인 학습 세트에서 만든 로지스틱 회귀 모델의 경우 정확성이 0.70보다 높습니다. * 사용자가 800,000명 이상인 학습 세트에서 만든 선형 회귀 모델의 경우 r-제곱이 0.70보다 큽니다.
모델의 품질을 저하시킬 수 있는 다른 요소가 있습니다. * 한 클래스가 다른 클래스보다 훨씬 더 잘 표현된 로지스틱 모델. 특히 한 라벨에 학습 세트 사용자가 거의 없는 경우 다른 라벨에 학습 세트 사용자가 많아도 작은 라벨에 대한 모델의 정확성에 큰 도움이 되지 않을 수 있습니다. 예를 들어 두 라벨의 학습 세트 사용자 20,000명과 및 1,000명이면 10,000명 및 2,000명일 때보다 정확성이 떨어집니다. * 라벨에 대해 강력한 신호를 제공하지 않는 특성 데이터. * 보다 광범위한 특성 추출이 필요한 원시 데이터. 예를 들어 일부 필드에 가능한 값이 매우 많을 수도 있습니다. 이 유형의 데이터를 개선하는 한 가지 방법은 값을 카테고리 또는 버킷 수가 더 적은 특성으로 변환하는 것입니다.
유용한 정보 수집
함수를 호출하여 검증 데이터에 대한 모델의 성능을 평가하고, 학습 반복에 대한 특성 및 정보를 검사하고(예: 예측 중에 모델에서 사용하는 기본 가중치), 학습에 사용하지 않은 데이터를 예측할 수 있습니다.
CREATE MODEL 문
CREATE MODEL
문은 지정된 이름과 데이터 세트로 모델을 만듭니다. 모델 이름이 이미 있는 경우 CREATE MODEL
은 기존 모델을 대체합니다.
CREATE MODEL 문법
CREATE MODEL
model_name
OPTIONS
(
// model_option_list:
// Required parameter.
MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}
// Optional tuning parameters.
[, L1_REG = float64_value ]
[, L2_REG = float64_value ]
[, DATA_SPLIT_EVAL_FRACTION = float64_value ]
[, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
'NORMAL_EQUATION' } ]
[, MAX_ITERATIONS = int64_value ]
[, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
[, LEARN_RATE = float64_value ]
[, EARLY_STOP = { TRUE | FALSE } ]
[, MIN_REL_PROGRESS = float64_value ]
[, LS_INIT_LEARN_RATE = float64_value ]
[, EPSILON_PER_MODEL = float64_value ]
[, AUTOMATIC_IMPUT_SCALING = bool_value ]
[, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
[, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
[, QUANTILE_BUCKETIZED_COLS = [
STRUCT(string_value AS col_name, int64_value AS num_buckets),
STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement
model_name
밑줄과 대시를 포함하는 영숫자 이름입니다. 점은 포함할 수 없습니다. 제공된 모델 이름이 이미 있는 경우 이전 모델을 덮어씁니다.
query_statement
학습 데이터를 생성하는 데 사용되는 표준 SQL 쿼리를 지정합니다. 동일한 학습 데이터를 사용하여 여러 모델을 만드는 경우 학습 데이터로 임시 테이블을 만들고 여기에서 참조하세요. 이 방법을 사용하면 삭제 또는 지연된 스팸으로 인한 잠재적인 데이터 차이 검사 오류가 방지됩니다.
model_option_list
model_type
(필수) 유일한 필수 옵션입니다. 'adh_linear_regression
' 또는 'adh_logistic_regression
'입니다.
l1_reg
(선택사항) 적용된 L1 정규화의 양입니다. L1 정규화는 가중치의 절댓값 합계에 비례하여 가중치에 페널티를 적용합니다. 음수가 아닌 모든 숫자일 수 있으며 기본값은 0입니다.
l2_reg
(선택사항) 적용된 L2 정규화의 양입니다. L2 정규화는 가중치의 제곱 합의 제곱근에 비례하여 가중치에 페널티를 적용합니다. 음수가 아닌 모든 숫자일 수 있으며 기본값은 0입니다.
data_split_eval_fraction
(선택사항) .01에서 .99 사이여야 하며 기본값은 .18입니다. 평가 세트에 포함되는 데이터의 비율을 결정합니다. 이렇게 하면 모델에 포함되는 행의 수가 줄어들어 모델 정확성에 영향을 미치지만 사용자가 실행할 수 있는 모델 수가 증가합니다. 다음은 지정된 데이터 세트에서 모든 모델의 비율이 동일한 것으로 가정했을 때 관계를 보여주는 차트입니다.
검증 비율 | 허용되는 쿼리 |
---|---|
0.01 | 7 |
0.1 | 8 |
0.15 | 8 |
0.18 | 9 |
0.2 | 9 |
0.3 | 10 |
0.5 | 14 |
0.9 | 50 |
optimize_strategy
(선택사항) 선형 회귀 모델을 학습시키기 위한 전략입니다.
인수
'AUTO_STRATEGY
'는 다음과 같이 학습 전략을 결정합니다.
l1_reg
또는warm_start
를 지정하면batch_gradient_descent
전략이 사용됩니다.- 학습 특성의 총 카디널리티가 10,000을 초과하면
batch_gradient_descent
전략이 사용됩니다. - 과적합 문제(학습 예의 수가 10개 미만 • 총 카디널리티)가 있으면
batch_gradient_descent
전략이 사용됩니다. - 다른 모든 경우에는
NORMAL_EQUATION
전략이 사용됩니다.
'BATCH_GRADIENT_DESCENT
'(로지스틱만 해당)는 경사 함수를 사용하여 손실 함수를 최적화하는 배치 경사하강법을 사용하여 모델을 학습시킵니다.
'NORMAL_EQUATION
'(선형만 해당)은 분석 공식을 사용하여 선형 회귀 문제의 최소 제곱 해법을 직접 계산합니다. 다음과 같은 경우에는 표준 방정식을 사용할 수 없습니다.
l1_reg
를 지정한 경우warm_start
를 지정한 경우- 학습 특성의 총 카디널리티가 10,000을 초과하는 경우
- 기본값은 '
AUTO_STRATEGY
'입니다.
max_iterations
(선택사항) 학습 반복 또는 단계 수입니다. 이 쿼리는 반복 시마다 트리를 하나씩 빌드하므로 트리 수도 됩니다. 1보다 큰 정수여야 합니다. 기본값은 20입니다.
learn_rate_strategy
(선택사항, 로지스틱만 해당) 학습 중 학습률을 지정하기 위한 전략입니다.
인수
'LINE_SEARCH
'는 선형 탐색 방법을 사용하여 학습률을 계산합니다. 선형 탐색 초기 학습률은 LS_INIT_LEARN_RATE
에 지정된 값입니다.
- 선형 탐색은 학습 속도를 느리게 하고 처리되는 바이트 수를 늘리지만 일반적으로 초기 지정된 학습률이 크더라도 수렴됩니다.
'CONSTANT
'는 학습률을 LEARN_RATE
에 지정된 값으로 설정합니다.
기본값은 'LINE_SEARCH
'입니다.
learn_rate
(선택사항, 로지스틱만 해당) LEARN_RATE_STRATEGY
가 CONSTANT
로 설정된 경우 경사하강법의 학습률입니다. LEARN_RATE_STRATEGY
를 'LINE_SEARCH
'로 설정하면 오류가 반환됩니다.
인수
float64_value
는 64비트 부동 소수점 숫자입니다. 기본값은 0.1(10%)입니다.
early_stop
(선택사항) 상대 손실 개선이 MIN_REL_PROGRESS
에 지정된 값보다 적은 첫 번째 반복 후 학습을 중지해야 하는지를 지정합니다.
인수
'예'인 경우 TRUE
이고 '아니요'인 경우 FALSE
입니다. 기본값은 TRUE
입니다.
min_rel_progress
(선택사항) EARLY_STOP
을 true로 설정할 때 학습을 계속하기 위해 필요한 최소 상대 손실 개선입니다. 예를 들어 0.01 값은 학습을 계속하려면 반복할 때마다 손실을 1%씩 줄여야 함을 지정합니다.
인수
float64_value
는 64비트 부동 소수점 숫자입니다. 기본값은 0.1(10%)입니다.
ls_init_learn_rate
(선택사항) LEARN_RATE_STRATEGY='LINE_SEARCH'
가 사용하는 초기 학습률을 설정합니다. LINE_SEARCH
가 지정된 경우에만 이 옵션을 사용할 수 있습니다.
ML.TRAINING_INFO
에 표시된 대로 모델 LEARN_RATE
가 반복될 때마다 2배로 나타나는 경우 LS_INIT_LEARN_RATE
를 마지막 학습률 2배로 설정합니다. 최적의 초기 학습률은 모델마다 다릅니다. 한 모델에 좋은 초기 학습률이 다른 모델에는 좋은 초기 학습률이 아닐 수 있습니다.
인수
float64_value
는 64비트 부동 소수점 숫자입니다.
epsilon_per_model
(선택사항) 이 모델을 학습시키는 데 사용할 개인 정보 보호 예산의 금액을 지정합니다. 각 광고 데이터 고객에게는 데이터 일당 10.0의 개인 정보 보호 예산이 부여됩니다. 성공적으로 학습된 모델은 쿼리를 실행할 때 지정된 기간의 각 데이터 일에 대해 예산의 EPSILON_PER_MODEL을 지출합니다. 기본값 ln(3)/10을 사용하면 약 100개의 모델을 만들 수 있습니다. 더 높은 값을 사용하면 더 적은 수의 모델을 만들 수 있지만 모델의 품질이 높아집니다. 더 작은 값을 사용하면 더 낮은 품질의 모델을 더 많이 만들 수 있습니다.
인수
float64_value
는 ln(3)(약 1.0986)보다 작은 양의 64비트 부동 소수점 수일 수 있습니다. 기본값은 ln(3)/10입니다.
automatic_input_scaling
(선택사항) TRUE
인 경우 min_max_scaled_cols
옵션에서 열 이름이 명시적으로 호출된 것처럼 모든 숫자 특성 열에 자동으로 min_max_scaling
이 적용되지만 standard_scaled_cols
또는 quantile_bucketized_cols
옵션에서 명시적으로 호출된 열은 예외입니다.
인수
bool_value
는 BOOL
이며 기본값은 TRUE
입니다.
min_max_scaled_cols
(선택사항) 지정된 각 number_expression 특성 열을 0~1 범위에서 조정하며 모든 행에서 MIN
및 MAX
로 제한됩니다.
동일한 MIN
및 MAX
가 자동으로 예측에 사용됩니다. 예측 데이터가 MIN
, MAX
범위를 벗어나면 0 또는 1로 제한됩니다.
인수
string_value
배열이며, 여기서 각 string_value
는 변환될 열 이름을 나타내는 STRING입니다.
standard_scaled_cols
(선택사항) 모든 행에서 지정된 numerical_expression
특성 열을 표준화합니다.
표현식 표준화를 위해 계산된 STDDEV
및 MEAN
이 자동으로 예측에 사용됩니다.
인수
string_value
배열이며, 여기서 각 string_value
는 변환될 열 이름을 나타내는 STRING
입니다.
quantile_bucketized_cols
지정된 연속적인 숫자 특성 열을 버킷 이름이 분위수 기반 값인 STRING
으로 버킷화합니다.
동일한 분위수가 자동으로 예측에 사용됩니다.
인수
STRUCT(string_value AS col_name, int64_value AS num_buckets)
배열이며, 여기서 각 string_value는 변환될 연속적인 숫자 열 이름을 나타내는 STRING
이고 각 int64_value
는 숫자 값을 분할할 버킷 수입니다.
검증
- 이 쿼리에 대해 지정된 기간의 각 데이터 일에는 개인 정보 보호 예산이 충분해야 합니다. 즉, EPSILON_PER_MODEL보다 커야 하며, 그렇지 않으면 쿼리가 실패합니다.
- 미세 조정 매개변수(선택사항)는 위에 표시된 범위에 대해 검증됩니다(지정된 경우).
- 하나의 필수 model_type 매개변수만 명시적으로 지정해야 합니다.
- 학습 세트의 열 하나는 이름을 'label'로 지정해야 합니다. 여러 라벨은 현재 지원되지 않습니다.
- 라벨 열에는 NULL 값이 포함될 수 없습니다. 라벨 열에 NULL 값이 있으면 쿼리가 실패합니다.
- user_id에서는 특성 열이 파생되지 않습니다.
- 각 행은 정확히 한 명의 순 사용자를 나타내야 합니다. 한 행이 사용자 두 명 이상의 데이터를 나타낼 수 없습니다. 특정 조인(예: CROSS JOIN)을 사용하는 경우 이러한 문제가 발생할 수 있습니다.
- 어떠한 사용자도 별도의 두 행에 포함될 수 없습니다.
- 개인 정보 보호를 위해 구문 섹션에 설명된 옵션만 사용할 수 있습니다. BQML CREATE MODEL 쿼리 문서에 있는 기타 옵션은 현재 지원되지 않습니다.
평가 함수
ML.EVALUATE
ML.EVALUATE
함수를 사용하여 모델 측정항목을 평가합니다. ML.EVALUATE
함수는 선형 회귀 또는 로지스틱 회귀 모델과 함께 사용할 수 있습니다.
SELECT
*
FROM ML.EVALUATE(MODEL `linear_model_test`);
ML.ROC_CURVE
ML.ROC_CURVE
함수를 사용하여 로지스틱 회귀 관련 측정항목을 평가합니다. ML.ROC_CURVE
는 로지스틱 회귀 모델만 평가합니다.
SELECT
*
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);
예측 함수
ML.PREDICT
ML.PREDICT
함수를 사용하면 모델을 통해 결과를 예측할 수 있습니다. ML.PREDICT
를 사용하여 얻은 결과에는 Ads Data Hub의 다른 결과에 적용되는 것과 동일한 개인 정보 보호 검사가 적용됩니다. 개인 정보 보호 검사에 대해 자세히 알아보기
선형 회귀
/* This example outputs the average value for labels that the model predicted */
SELECT
AVG(predicted_label) AS average_predicted_label
FROM
ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);
로지스틱 회귀
/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
label,
predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
COUNT(*) AS num /* a tally of users */
FROM
ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;
모델 및 특성 검사 함수
ML.TRAINING_INFO
ML.TRAINING_INFO
함수를 사용하면 모델의 학습 반복에 대한 정보를 볼 수 있습니다.
SELECT
*
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);
ML.FEATURE_INFO
ML.FEATURE_INFO
함수를 사용하면 모델 학습에 사용되는 입력 특성 정보를 확인할 수 있습니다.
SELECT
*
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);
ML.WEIGHTS
ML.WEIGHTS
함수를 사용하면 예측 중에 모델에서 사용되는 기본 가중치를 확인할 수 있습니다.
SELECT
*
FROM ML.WEIGHTS(MODEL `linear_model_test`);
예
모델 만들기
다음 예에서는 모두 natality
샘플 테이블을 사용하여 모델을 만드는 방법을 보여줍니다.
inner-select(선형)의 학습 데이터
다음 예에서는 출생 시 체중, 성별, 임신 기간(주), 산모 연령, 산모 인종을 사용하여 아이의 출생 시 체중을 예측합니다.
CREATE MODEL `natality_model`
OPTIONS
(model_type='adh_linear_regression') AS
SELECT
weight_pounds as label,
is_male,
gestation_weeks,
mother_age,
CAST(mother_race AS string) AS mother_race
FROM
`bigquery-public-data.samples.natality`
WHERE
weight_pounds IS NOT NULL
inner-select(로지스틱)의 학습 데이터
다음 예에서는 출생 시 체중, 성별, 임신 기간(주), 산모 연령, 산모 인종을 사용하여 아이의 성별을 예측합니다.
CREATE MODEL `natality_model`
OPTIONS
(model_type='adh_logistic_regression') AS
SELECT
weight_pounds,
is_male as label,
gestation_weeks,
mother_age,
CAST(mother_race AS string) AS mother_race
FROM
`bigquery-public-data.samples.natality`
WHERE
weight_pounds IS NOT NULL
잠재고객 활성화
모델 자체에 대한 액세스 권한이 없어도 ML.PREDICT
를 사용하지 않고 가중치를 알고 있는 기존 선형 회귀 모델을 사용하여 예측할 수 있습니다. 방법을 알아보려면 잠재고객 활성화 Codelab의 회귀 모델링을 참고하세요.