Ads Data Hub의 회귀 모델링

선형 및 로지스틱 회귀는 광고 데이터에서 유의미한 예측을 생성할 수 있는 머신러닝 모델입니다.

  • 선형 회귀에서는 데이터 포인트와 선 간의 거리가 최소화되도록 데이터에 선분을 맞추는 함수를 만듭니다. 그런 다음 구매, 이전 상호작용 등을 기반으로 사용자의 평생 가치를 예측하는 등 입력을 기반으로 숫자 값을 예측하는 데 이 모델을 사용할 수 있습니다.
  • 로지스틱 회귀는 예측 분류 문제에 사용됩니다. 이 모델은 제공되는 변수의 수에 따라 다음 두 가지 유형 중 하나입니다.
    • 바이너리 로지스틱 회귀는 전환 이벤트가 발생할 가능성이 얼마나 되는가와 같은 '예/아니요' 질문에 대한 답변을 제공합니다.
    • 멀티클래스 로지스틱 회귀는 고객이 '낮은 가치', '중간 가치' 또는 '높은 가치' 고객인지 결정하는 것과 같이 가능한 여러 값을 예측하는 데 사용됩니다.

선형 및 로지스틱 회귀 모두 학습 데이터(이 경우 광고 데이터)를 학습하여 광고 관련 결정을 내리기 위한 예측 모델을 제공합니다. 일반적으로 더 많은 고품질 데이터를 제공하면 모델의 정확성이 향상됩니다. 클러스터링된 학습 데이터를 제공하면 두 모델 모두 성능이 향상됩니다.

개인 정보 차등 보호

선형 및 로지스틱 회귀 모두 Ads Data Hub의 다른 작업에서 사용하는 것과 다른 개인 정보 보호 검사 시스템인 개인 정보 차등 보호를 사용합니다. 개인 정보 차등 보호는 학습 과정 중 결과에 노이즈를 삽입하여 최종 사용자의 개인 정보를 보호합니다. 이 노이즈는 여전히 유용한 최종 결과를 얻을 수 있지만 최종 사용자를 식별할 수는 없을 정도의 수준으로 유지됩니다. 또한 노이즈 수준은 비확정적이어서 결과에 일관되지 않은 노이즈 수준이 포함되므로 최종 사용자의 개인 정보가 더 보호됩니다.

쿼리 제한

기본 EPSILON_PER_MODEL 사용 시 '데이터 일'당 선형 및 로지스틱 회귀 모델링 쿼리는 100개 선형으로 제한됩니다. '데이터 일'은 지정된 날짜에 생성된 이벤트를 의미합니다. 이러한 이벤트는 쿼리를 실행할 때 제공하는 시작 및 종료일, 학습에 사용되는 임시 테이블과 같이 쿼리에서 사용하는 테이블을 만들 때 사용되는 시작 및 종료일에 해당합니다. 즉, 1일의 데이터는 100개 이하의 모델에서 사용할 수 있습니다. EPSILON_PER_MODEL을 기본값보다 크게 지정하면 더 적은 수의 모델을 만들 수 있지만 모델의 품질이 높아집니다. EPSILON_PER_MODEL 값을 더 작게 선택하면 더 많은 모델을 학습시킬 수 있지만 모델의 품질이 낮아집니다.

작동 방식

워크플로는 다음 필수 단계를 따릅니다.

  1. 학습 데이터 준비
  2. 모델 만들기
  3. 모델에서 유용한 정보 수집

학습 데이터 준비

위에서 언급했듯이 일반적으로 대규모 고품질 데이터 세트를 사용하면 더 나은 결과를 얻을 수 있습니다. 또한 입력 데이터는 최소-최대 배율을 사용하여 크기가 조정되므로 밀집도가 낮은 데이터나 중대한 이상점이 있는 데이터는 평균을 이동하여 모델에 악영향을 미칠 수 있습니다.

기본적으로 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_STRATEGYCONSTANT로 설정된 경우 경사하강법의 학습률입니다. 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_valueBOOL이며 기본값은 TRUE입니다.

min_max_scaled_cols

(선택사항) 지정된 각 number_expression 특성 열을 0~1 범위에서 조정하며 모든 행에서 MINMAX로 제한됩니다. 동일한 MINMAX가 자동으로 예측에 사용됩니다. 예측 데이터가 MIN, MAX 범위를 벗어나면 0 또는 1로 제한됩니다.

인수

string_value 배열이며, 여기서 각 string_value는 변환될 열 이름을 나타내는 STRING입니다.

standard_scaled_cols

(선택사항) 모든 행에서 지정된 numerical_expression 특성 열을 표준화합니다. 표현식 표준화를 위해 계산된 STDDEVMEAN이 자동으로 예측에 사용됩니다.

인수

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