ML.PREDICT 함수

ML.PREDICT 함수

ML.PREDICT 함수를 사용하면 모델을 통해 결과를 예측할 수 있습니다. 모델을 만드는 중, 모델을 만든 후 또는 실패 후(최소 1회 반복이 완료된 경우)에 예측을 수행할 수 있습니다. ML.PREDICT는 항상 마지막으로 성공한 반복의 모델 가중치를 사용합니다.

ML.PREDICT 함수의 출력에는 행이 입력 테이블과 같은 개수로 있으며 입력 테이블의 모든 열과 모델의 모든 출력 열이 포함됩니다. 모델의 출력 열 이름은 predicted_<label_column_name>이고 로지스틱 회귀 모델의 경우에는 predicted_<label_column_name>_probs입니다. 두 열 모두에서 label_column_name은 학습 시 사용되는 입력 라벨 열의 이름입니다.

  • 로지스틱 회귀 모델:

    • predicted_<label_column_name>_probs 출력 열은 각 라벨의 예측 확률이 포함된 [<label, prob>] 유형의 STRUCT 배열입니다.
    • predicted_<label_column_name> 출력 열은 두 입력 라벨 중 하나이며 예측 확률이 더 높은 라벨을 따릅니다.
  • 멀티클래스 로지스틱 회귀 모델:

    • predicted_<label_column_name>_probs 출력 열은 softmax 함수를 사용하여 계산되는 각 클래스 라벨의 확률입니다.
    • predicted_<label_column_name> 출력 열은 예측 확률 점수가 가장 높은 라벨입니다.
  • 선형 회귀 모델:

    • predicted_<label_column_name> 출력 열은 라벨의 예측 값입니다.
  • k-평균 모델:

    • centroid_idnearest_centroids_distance 라벨의 열을 반환합니다. nearest_centroids_distance는 가장 가까운 클러스터 k개까지의 거리가 포함된 nearest_centroids_distance라는 STRUCT의 ARRAY를 포함하며, 여기서 knum_clusters와 5 중 작은 값입니다. standardize_features 옵션을 TRUE로 설정하여 이 모델을 만든 경우 모델은 표준화된 특성을 사용하여 이 거리를 계산합니다. 그렇지 않은 경우 표준화되지 않은 특성으로 이 거리를 계산합니다.
  • TensorFlow 모델:

    • 입력은 모델에서 예상되는 유형으로 변환될 수 있어야 합니다.
    • 출력은 TensorFlow 모델 예측 메서드의 출력입니다.

ML.PREDICT 권한

ML.PREDICT를 실행하려면 bigquery.models.createbigquery.models.getData가 모두 필요합니다.

ML.PREDICT 구문

ML.PREDICT(MODEL model_name,
          {TABLE table_name | (query_statement)}
          [, STRUCT<threshold FLOAT64> settings)])

model_name

model_name은 평가할 모델의 이름입니다. 기본 프로젝트를 구성하지 않았으면 백틱을 포함하여 `[PROJECT_ID].[DATASET].[MODEL]` 형식(예: `myproject.mydataset.mymodel`)으로 모델 이름 앞에 프로젝트 ID를 붙입니다.

table_name

table_name은 평가 데이터가 포함된 입력 테이블의 이름입니다. 기본 프로젝트를 구성하지 않았으면 백틱을 포함하여 `[PROJECT_ID].[DATASET].[TABLE]` 형식(예: `myproject.mydataset.mytable`)으로 테이블 이름 앞에 프로젝트 ID를 붙입니다.

테이블의 입력 열 이름에는 모델의 열 이름이 포함되어야 하며 유형은 BigQuery 암시적 강제 변환 규칙에 따라 호환되어야 합니다.

테이블에 사용되지 않는 열이 있으면 출력 열로 전달됩니다.

query_statement

query_statement 절은 평가 데이터 생성에 사용되는 표준 SQL 쿼리를 지정합니다. 지원되는 query_statement 절의 SQL 구문은 표준 SQL 쿼리 구문 페이지를 참조하세요.

쿼리의 입력 열 이름에는 모델의 열 이름이 포함되어야 하며 유형은 BigQuery 암시적 강제 변환 규칙에 따라 호환되어야 합니다.

쿼리에 사용되지 않는 열이 있으면 출력 열로 전달됩니다.

model_name을 만든 CREATE MODEL 문에 TRANSFORM 절이 있으면 TRANSFORM 절에 있는 입력 열만 query_statement에 나타나야 합니다.

threshold

(선택사항) threshold는 바이너리 로지스틱 회귀 모델의 커스텀 임계값이며 두 라벨 사이의 컷오프로 사용됩니다. 임계값 위의 예측은 긍정적 예측으로 취급됩니다. 임계값 아래의 예측은 부정적 예측입니다. 임계값은 FLOAT64 유형이며 STRUCT 설정의 일부입니다. 기본값은 0.5입니다.

대치

통계에서 대치는 누락된 데이터를 대체된 값으로 바꾸는 데 사용됩니다. BigQuery ML에서 모델을 학습시킬 때 NULL 값은 누락된 데이터로 취급됩니다. BigQuery ML에서 결과를 예측하면서 BigQuery ML이 NULL 값 또는 이전에 본 적이 없는 값을 발견하는 경우 누락된 값이 생길 수 있습니다. BigQuery ML은 열이 숫자인지, 원-핫 인코딩인지 또는 타임스탬프인지에 따라 누락된 데이터를 처리합니다.

숫자 열

학습과 예측에서 숫자 열의 NULL 값은 원본 입력 데이터의 특성 열로 계산되는 평균 값으로 대체됩니다.

원-핫/멀티-핫 인코딩 열

학습과 예측 모두에서 인코딩 열의 NULL 값은 데이터에 추가되는 부가 카테고리에 매핑됩니다. 이전에 본 적이 없는 데이터에는 예측 중에 가중치 0이 할당됩니다.

타임스탬프 열

TIMESTAMP 열은 표준화된 열과 원-핫 인코딩 열의 대치 방법을 혼합하여 사용합니다. 생성된 unix 시간 열에서 BigQuery ML은 모든 원본 열에서 값을 평균 unix 시간으로 대체합니다. 다른 생성된 값의 경우 BigQuery ML은 추출된 특성마다 각각의 NULL 카테고리에 값을 할당합니다.

STRUCT 열

학습과 예측 모두에서 STRUCT의 각 필드는 유형에 따라 귀속됩니다.

ML.PREDICT 예시

다음 예시에서는 모델과 입력 테이블이 기본 프로젝트에 있다고 가정합니다.

결과 예측

다음 쿼리는 ML.PREDICT 함수를 사용하여 결과를 예측합니다. 쿼리는 다음 열을 반환합니다.

  • predicted_label
  • label
  • column1
  • column2
SELECT
  *
FROM
  ML.PREDICT(MODEL `mydataset.mymodel`,
    (
    SELECT
      label,
      column1,
      column2
    FROM
      `mydataset.mytable`))

다른 두 모델의 예측 비교

이 예에서 다음 쿼리는 첫 번째 모델을 만드는 데 사용됩니다.

CREATE MODEL
  `mydataset.mymodel1`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['label'],
  ) AS
SELECT
  label,
  input_column1
FROM
  `mydataset.mytable`

다음 쿼리는 두 번째 모델을 만드는 데 사용됩니다.

CREATE MODEL
  `mydataset.mymodel2`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['label'],
  ) AS
SELECT
  label,
  input_column2
FROM
  `mydataset.mytable`

다음 쿼리는 ML.PREDICT 함수를 사용하여 두 모델의 출력을 비교합니다.

SELECT
  label,
  predicted_label1,
  predicted_label AS predicted_label2
FROM
  ML.PREDICT(MODEL `mydataset.mymodel2`,
    (
    SELECT
      * EXCEPT (predicted_label),
          predicted_label AS predicted_label1
    FROM
      ML.PREDICT(MODEL `mydataset.mymodel1`,
        TABLE `mydataset.mytable`)))

커스텀 임계값 지정

다음 쿼리는 입력 데이터와 0.55의 커스텀 임계값을 지정하여 ML.PREDICT 함수를 사용합니다.

SELECT
  *
FROM
  ML.PREDICT(MODEL `mydataset.mymodel`,
    (
    SELECT
      custom_label,
      column1,
      column2
    FROM
      `mydataset.mytable`),
    STRUCT(0.55 AS threshold))

가져온 TensorFlow 모델로 결과 예측

다음 쿼리는 ML.PREDICT 함수를 사용하여 가져온 TensorFlow 모델로 결과를 예측합니다. input_data 테이블에는 my_model에 필요한 스키마의 입력이 포함되어 있습니다. 자세한 내용은 TensorFlow 모델의 CREATE MODEL 문을 참조하세요.

SELECT *
FROM ML.PREDICT(MODEL `my_project`.my_dataset.my_model,
               (SELECT * FROM input_data))

TRANSFORM 절을 사용하여 학습된 모델로 결과 예측

다음 쿼리는 TRANSFORM 절을 사용하여 모델을 학습시킵니다.

CREATE MODEL m
  TRANSFORM(f1 + f2 as c, label)
  OPTIONS(...)
AS SELECT f1, f2, f3, label FROM t;

f3 열은 TRANSFORM 절에 나타나지 않으므로 다음 예측 쿼리는 query_statement에서 이 열을 생략합니다.

SELECT * FROM ML.PREDICT(
  MODEL m, (SELECT f1, f2 FROM t1));

f3SELECT 문에 제공하면 예측 계산에 사용되는 대신 SQL 문의 나머지 부분에 사용되도록 전달됩니다.