SQL을 사용한 BQML로 영화 평점 예측

1. 소개

이 Codelab에서는 SQL만 사용하여 BigQuery ML 맞춤 모델로 영화 평점 예측 모델을 만들고 VertexAI에 모델을 배포합니다. 학습 내용

  1. Cloud Shell을 사용하여 BigQuery 데이터 세트를 만들고 파일에서 데이터를 로드하는 방법
  2. 지도 학습에 BigQuery ML을 사용하여 코딩 없이 SQL 쿼리만 사용하여 영화 점수 예측을 위한 다중 클래스 회귀 예측 모델을 만드는 방법

빌드할 항목

다음을 만듭니다.

  • 테이블 및 모델 구성요소를 포함하는 BigQuery 데이터 세트
  • SQL 쿼리를 사용하여 영화 평점을 예측하는 BigQuery ML 모델
  • Vertex AI Model Registry에 모델 배포

요구사항

  • 브라우저(Chrome 또는 Firefox 등)
  • 결제가 사용 설정된 Google Cloud 프로젝트

2. 프로젝트 만들기

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  3. BigQuery로 이동하여 API를 사용 설정합니다. 브라우저에 다음 URL(https://console.cloud.google.com/bigquery)을 입력하여 BigQuery 웹 UI를 직접 열 수도 있습니다.

3. Cloud Shell 활성화

  1. bq가 미리 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Cloud 콘솔의 오른쪽 상단에서 Cloud Shell 활성화를 클릭합니다. 6757b2fb50ddcc2d.png
  2. Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 이미 설정된 것을 볼 수 있습니다. Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
  1. 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <PROJECT_ID>

gcloud 명령어 및 사용법은 문서를 참조하세요.

4. 학습 데이터 준비

이는 최적의 데이터 세트를 준비하고 ML 프로젝트에 사용할 수 있도록 준비하는 기술 외에도 많은 도메인 전문 지식이 필요한 모든 데이터 관련 프로젝트, 제품, 앱의 주요 단계입니다. 이 Codelab에서는 이미 준비된 data 파일을 사용합니다.

5. 데이터 세트 만들기 및 로드

BigQuery 데이터 세트는 테이블 모음입니다. 데이터 세트의 모든 테이블은 동일한 데이터 위치에 저장됩니다. 맞춤 액세스 제어를 연결하여 데이터 세트 및 해당 테이블에 대한 액세스를 제한할 수도 있습니다.

  1. Cloud Shell에서 bq mk 명령어를 사용하여 'movies'라는 데이터 세트를 만듭니다.
bq mk --location=<<LOCATION>> movies

위치를 리전 (asia-south1)으로 설정합니다.

  1. 데이터 파일 (.csv)이 준비되어 있는지 확인합니다. Cloud Shell에서 다음 명령어를 실행하여 저장소를 클론하고 프로젝트로 이동합니다.
git clone <<repository link>>

cd movie-score
  1. bq load 명령어를 사용하여 CSV 파일을 BigQuery 테이블에 로드합니다 (BigQuery UI에서 직접 업로드할 수도 있음).
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string

옵션 설명: –source_format=CSV - 데이터 파일을 파싱할 때 CSV 데이터 형식을 사용합니다. –skip_leading_rows=1 - CSV 파일의 첫 번째 줄은 헤더 행이므로 건너뜁니다. Movies.movies - 첫 번째 위치 인수로, 데이터를 로드할 테이블을 정의합니다. 두 번째 위치 인수인 ./movies.csv는 로드할 파일을 정의합니다. bq load 명령어는 로컬 파일 외에도 gs://my_bucket/path/to/file URI를 사용하여 Cloud Storage에서 파일을 로드할 수 있습니다. JSON 스키마 파일이나 쉼표로 구분된 목록으로 정의할 수 있는 스키마 (여기서는 쉼표로 구분된 목록을 사용함) 정답입니다. 이제 CSV 데이터가 movies.movies 테이블에 로드되었습니다.

  1. 다음 세 가지 방법 중 하나로 쿼리합니다.

BigQuery와 상호작용하는 방법에는 세 가지가 있습니다. 그중 두 가지를 사용해 보겠습니다. a. BigQuery UI b. bq 명령어 c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

BigQuery 웹 SQL 워크스페이스를 사용하여 쿼리를 실행했습니다. SQL 워크스페이스는 다음과 같습니다.

109a0b2c7155e9b3.png

bq 명령어 사용:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. 1~10점의 영화 평점 예측

BigQuery ML은 로지스틱 회귀 모델 유형으로 감독형 학습을 지원합니다. 바이너리 로지스틱 회귀 모형 유형을 사용하여 값이 두 범주 중 하나에 속할지 예측할 수 있습니다. 또는 멀티클래스 회귀 모델 유형을 사용하여 값이 여러 범주 중 하나에 속할지 예측할 수 있습니다. 데이터를 둘 이상의 범주로 분류하려고 하기 때문에 분류 문제라고 합니다.

모델 선택에 관한 간단한 메모: 여기에서 선택한 모델은 실험용 모델입니다. 처음에 몇 가지 모델을 실행한 결과를 평가한 후 간단하게 유지하고 여러 데이터베이스의 실제 영화 평점에 더 가까운 결과를 얻기 위해 로지스틱 회귀를 선택했습니다. 이는 모델을 구현하기 위한 샘플로 간주되어야 하며 이 사용 사례에 반드시 권장되는 모델은 아닙니다. 이를 구현하는 또 다른 방법은 점수를 예측하는 대신 이 로지스틱 회귀 모델을 사용하여 영화의 결과를 GOOD / BAD로 예측하는 것입니다.

학습 데이터 선택

이미 테이블에서 영화 데이터(csv)를 3가지 값(TRAIN, TEST, PREDICT) 중 하나가 있는 'data_cat' 필드를 사용하여 3가지 카테고리로 분할했습니다. 테스트 및 학습 목적으로 데이터 세트를 분할하는 것은 모델의 중요한 측면입니다. 데이터 세트 분할에 관해 자세히 알아보려면 문서를 참고하세요.

로지스틱 회귀 모델 만들기

'LOGISTIC_REG' 옵션과 함께 CREATE MODEL 문을 사용하여 로지스틱 회귀 모델을 만들고 학습시킬 수 있습니다.

BigQuery 웹 UI SQL 워크스페이스에서 아래 쿼리를 실행합니다.

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

쿼리 세부정보:

  1. CREATE MODEL 문은 SELECT 문의 학습 데이터를 사용하여 모델을 학습시킵니다.
  2. OPTIONS 절은 모델 유형과 학습 옵션을 지정합니다. 여기서 LOGISTIC_REG 옵션은 로지스틱 회귀 모델 유형을 지정합니다. 바이너리 로지스틱 회귀 모델과 멀티클래스 로지스틱 회귀 모델을 구분하여 지정할 필요는 없습니다. BigQuery ML은 라벨 열의 고유 값 수를 기반으로 학습할 대상을 결정할 수 있습니다.
  3. data_split_method=‘NO_SPLIT'은 BQML이 쿼리 조건 (data_cat = ‘TRAIN')에 따라 데이터를 학습하도록 강제합니다. 또한 이 옵션에서'AUTO_SPLIT'을 사용하여 프레임워크 (또는 이 경우 서비스)가 학습/테스트 분할의 파티션을 무작위로 지정하도록 하는 것이 좋습니다.
  4. input_label_cols 옵션은 SELECT 문에서 라벨 열로 사용할 열을 지정합니다. 여기서 라벨 열은 score이므로 모델은 각 행에 있는 다른 값을 기반으로 score의 10가지 값 중 가장 가능성이 높은 값을 학습합니다.
  5. 'auto_class_weights=TRUE' 옵션은 학습 데이터에서 클래스 라벨의 균형을 맞춥니다. 기본적으로 학습 데이터는 가중치가 더해지지 않습니다. 학습 데이터 라벨의 균형이 맞지 않는 경우 모델은 가장 인기 있는 라벨 클래스에 더 가중치를 둬서 예측하도록 학습할 수 있습니다.
  6. SELECT 문은 csv 데이터로 로드한 테이블을 쿼리합니다. WHERE 절은 이 단계에서 TRAIN 데이터 세트만 선택되도록 입력 테이블의 행을 필터링합니다.

생성되면 BigQuery SQL 워크스페이스의 SCHEMA 섹션에 아래가 표시됩니다.

라벨

93efd0c1a7883690.png

기능

8c539338df1a9652.png

로지스틱 회귀 모델 평가하기

모델을 만든 후에는 ML.EVALUATE 함수를 사용하여 모델의 성능을 평가합니다. ML.EVALUATE 함수는 실제 데이터를 기준으로 예측 값을 평가합니다. 모델을 평가하는 데 사용되는 쿼리는 다음과 같습니다.

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

ML.EVALUATE 함수는 이전 단계에서 학습한 모델과 SELECT 서브 쿼리에서 반환된 평가 데이터를 가져옵니다. 이 함수는 모델에 대한 단일 행의 통계를 반환합니다.

b54b0ebd6514a498.png

로지스틱 회귀를 수행했으므로 결과에 위의 스크린샷에 표시된 측정항목(정밀도, 재현율, 정확성, f1-score, log_loss, roc_auc)이 포함되며, 이는 모델 성능을 평가하는 데 매우 중요합니다. 입력 데이터를 제공하지 않고도 ML.EVALUATE를 호출할 수 있습니다. ML.EVALUATE는 자동으로 예약된 평가 데이터 세트를 사용하는 학습 중에 파생된 평가 측정항목을 검색합니다.

주요 측정항목 한눈에 보기

정밀도 - 양성으로 식별된 사례 중 실제로 양성이었던 사례의 비율은 어느 정도인가요? 정밀도 = 참양성 / (참양성 + 거짓양성) 재현율 - 실제 양성 중 정확히 양성이라고 식별된 사례의 비율은 어느 정도인가요? 재현율 = 참양성 / (참양성 + 거짓음성) 정확성 - 분류 모델을 평가하기 위한 측정항목으로, 모델이 실제로 올바르게 예측한 예측의 비율입니다. 정확성 = 올바른 예측 수 / 총 예측 수

ML.PREDICT를 사용하여 영화 평점 예측

다음 쿼리는 데이터 세트의 PREDICT 부분에 있는 각 영화의 점수를 예측합니다.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

다음은 결과의 스니펫입니다.

1efb91967acc1f0c.png

모델 결과는 1~10의 척도로 영화의 예측 점수 (분류)를 보여줍니다. 각 영화에 대해 여러 개의 예측 행이 있는 이유가 궁금할 것입니다. 이는 모델이 가능한 예측 라벨과 각 라벨의 발생 확률을 내림차순으로 반환했기 때문입니다.

예측 결과 및 모델 분석

또한 예측 결과의 일부로 다음과 같은 두 가지 유용한 분석 단계를 수행할 수 있습니다.

  1. 모델에서 이러한 예측 결과를 생성하는 이유를 알아보려면 ML.EXPLAIN_PREDICT 함수를 사용하면 됩니다.
  2. 일반적으로 소득 계층을 결정하는 데 가장 중요한 특성이 무엇인지 알아보려면 ML.GLOBAL_EXPLAIN 함수를 사용하면 됩니다.

이러한 단계에 관한 자세한 내용은 문서를 참고하세요.

7. BigQuery AutoML을 사용하여 영화 평점 예측

AutoML은 BigQuery 서비스가 모델을 생성하도록 하고 모델 결과가 생성될 때까지 기다리려는 경우에 적합합니다. AUTOML 기능은 BQML (model_type=AUTOML_CLASSIFIER 또는 AUTOML_REGRESSOR)에서 직접 사용할 수 있으며 데이터가 이미 BigQuery에 있는 경우 훨씬 더 쉽게 호출할 수 있습니다.

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

모델이 생성되면 맞춤 BQML 모델에서 설명한 것처럼 EVALUATE, PREDICT, EXPLAIN_PREDICT 단계를 실행할 수 있습니다. 문서에서 BigQuery AutoML에 대해 자세히 알아보세요.

8. 클릭 한 번으로 Vertex AI 모델 레지스트리에 BQML 모델 배포

이제 Vertex AI 모델 레지스트리에서 모든 ML 모델을 볼 수 있으므로 조직에서 모델을 더 쉽게 관리하고 배포할 수 있습니다. 여기에는 BigQuery ML, AutoML로 빌드된 모델과 맞춤 학습된 모델이 포함됩니다. 방법은 다음과 같습니다.

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
   model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

BigQuery ML이 Vertex AI 모델 레지스트리에 명시적으로 등록할 모델을 선택할 수 있도록 CREATE MODEL 쿼리에 model_registry="vertex_ai" 옵션을 포함합니다. 자세한 내용은 이 블로그를 참고하세요.

9. 요약

30분 이내에 다음 작업이 완료됩니다.

  1. BigQuery를 분석 프로젝트의 데이터베이스로 설정
  2. 다른 코딩 없이 BigQuery 데이터 SQL만 사용하여 맞춤 예측 모델을 만들었습니다.
  3. SQL 쿼리만 사용하여 BQ Auto ML 모델을 만들었습니다.
  4. Vertex AI Model Registry에 BQML 모델 배포

10. 삭제

이 게시물에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
  2. 프로젝트 목록에서 삭제하려는 프로젝트를 선택한 후 '삭제'를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 '종료'를 클릭하여 프로젝트를 삭제합니다.

11. 마무리

축하합니다. BQML 맞춤 및 AutoML로 영화 점수 예측 모델을 만들고 Vertex AI 모델 레지스트리에 모델을 배포했으며 이 모든 작업을 SQL만 사용하여 완료했습니다.