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

1. 소개

이 Codelab에서는 SQL만 사용하여 BigQuery ML 커스텀 모델로 영화 점수 예측 모델을 만들고 Vertex AI에 모델을 배포합니다. 학습 내용

  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를 사용 설정합니다. 브라우저에 https://console.cloud.google.com/bigquery URL을 입력하여 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

location을 지역 (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. 다음 3가지 방법 중 하나로 쿼리합니다.

세 가지 방법으로 BigQuery와 상호작용할 수 있습니다. 그중 두 가지를 시도해 보겠습니다. a. BigQuery UI b. bq 명령어 c. API

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

BigQuery Web SQL Workspace를 사용해 쿼리를 실행한 적이 있습니다. 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은 로지스틱 회귀 모델 유형으로 지도 학습을 지원합니다. 바이너리 로지스틱 회귀 모델 유형을 사용하여 값이 다음 두 카테고리 중 하나에 속하는지 여부를 예측할 수 있습니다. 또는 다중 클래스 회귀 모델 유형을 사용하여 값이 여러 카테고리 중 하나에 속하는지 여부를 예측할 수 있습니다. 데이터를 두 개 이상의 범주로 분류하려고 하므로 분류 문제라고 합니다.

모델 선택에 대한 간단한 참고사항: 이 모델은 실험적으로 선택한 모델입니다. 처음에 몇 가지 모델을 통해 실행한 결과의 평가에 기반하고, 마지막으로 여러 데이터베이스에서 실제 영화 등급에 가까운 결과를 얻기 위해 LOGISTIC REG를 사용했습니다. 이는 모델 구현을 위한 샘플로 간주해야 하며 이 사용 사례에 권장되는 모델일 필요는 없습니다. 이를 구현하는 또 다른 방법은 점수를 예측하는 대신 이 로지스틱 회귀 모델을 사용하여 영화의 결과를 좋음 / 나쁨으로 예측하는 것입니다.

학습 데이터 선택

이미 'data_cat' 필드를 사용하여 영화 데이터 (csv)를 표에서 3개의 카테고리로 분할했습니다. 학습, 테스트, 예측의 세 값 중 하나가 포함됩니다. 테스트 및 학습 목적으로 데이터 세트를 분할하는 것은 모델의 중요한 측면입니다. 데이터 세트 분할을 이해하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.

로지스틱 회귀 모델 만들기

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

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&#39; 쿼리 조건 (data_cat = 'TRAIN')에 따라 BQML이 데이터를 학습하도록 합니다. 또한 ‘AUTO_SPLIT’ 이 옵션에서는 프레임워크 (또는 이 경우 서비스)가 학습/테스트 분할의 파티션을 무작위로 지정하도록 허용합니다.
  4. input_label_cols 옵션은 SELECT 문의에서 라벨 열로 사용할 열을 지정합니다. 여기서 라벨 열은 점수이므로 모델은 각 행에 있는 다른 값을 기반으로 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 Model Registry에 BQML 모델 배포

이제 Vertex AI Model Registry 내에서 모든 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';

model_registry="vertex_ai"를 포함합니다. 옵션을 제공하여 BigQuery ML에서 명시적으로 Vertex AI Model Registry에 등록할 모델을 선택하고 선택할 수 있도록 합니다. 자세한 내용은 이 블로그를 참조하세요.

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 Model Registry에 모델을 배포했으며 이 모든 작업은 SQL만 사용하여 수행했습니다.