Cloud Datalab을 사용하여 BigQuery ML 시작하기

이 가이드에서는 Cloud Datalab과 함께 BigQuery ML을 사용하는 방법을 소개합니다. BigQuery 웹 UI를 사용하는 보다 자세한 버전의 가이드를 웹 UI를 사용하여 BigQuery ML 시작하기를 참조하세요.

BigQuery ML을 사용하면 BigQuery에서 SQL 쿼리를 사용하여 머신러닝 모델을 만들고 실행할 수 있습니다. BigQuery ML의 목표는 SQL 실무자가 기존 도구를 사용하여 모델을 빌드할 수 있도록 지원하여 머신러닝을 대중화하고 데이터 이동의 필요성을 제거하여 개발 속도를 향상시키는 것입니다.

이 가이드에서는 BigQuery용 Google 애널리틱스 샘플 데이터세트를 사용하여 웹사이트 방문자의 트랜잭션 여부를 예측하는 모델을 만듭니다. 애널리틱스 데이터세트 스키마에 대한 자세한 내용은 Google 애널리틱스 고객센터의 BigQuery Export 스키마를 참조하세요.

목표

이 가이드에서는 다음을 사용합니다.

  • CREATE MODEL 문을 사용하여 바이너리 로지스틱 회귀 모델을 만들기 위한 BigQuery ML
  • ML 모델을 평가하는 ML.EVALUATE 함수
  • ML 모델을 사용하여 예측을 수행하는 ML.PREDICT 함수

비용

이 가이드는 비용이 청구될 수 있는 다음과 같은 Cloud Platform 구성요소를 사용합니다.

  • BigQuery
  • BigQuery ML
  • Cloud Datalab

BigQuery 비용에 대한 자세한 내용은 BigQuery 가격 책정 페이지를 참조하세요.

BigQuery ML 비용에 대한 자세한 내용은 BigQuery ML 가격 책정 페이지를 참조하세요.

Cloud Datalab 비용에 대한 자세한 내용은 Cloud Datalab 가격 책정 페이지를 참조하세요.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Platform 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. 새 프로젝트에서는 BigQuery가 자동으로 사용 설정됩니다. 기존 프로젝트에서 BigQuery를 활성화하려면 다음으로 이동하세요. BigQuery API를 사용 설정합니다.

    API 사용 설정

여기에 제시된 개념에 대한 설명은 다음을 참조하세요.

1단계: Cloud Datalab 설정

이 가이드에서는 Cloud Shell을 사용하여 Cloud Datalab을 설정합니다. Cloud Datalab은 BigQuery ML 및 BigQuery 작업에 사용하는 Jupyter 기반 노트북 환경을 제공합니다.

Cloud Datalab을 설정하기 전에 Compute Engine API 및 Cloud Source Repositories API를 사용 설정해야 합니다. 이러한 API를 사용 설정하는 방법에 대한 자세한 내용은 서비스 사용 설정 및 중지를 참조하세요.

Compute Engine VM에서 Cloud Datalab을 설정하려면 다음 안내를 따르세요.

  1. GCP Console로 이동합니다.

    GCP Console

  2. Cloud Shell 활성화를 클릭합니다.

    Cloud Shell 활성화 아이콘

  3. Cloud Shell 창에서 다음 명령어를 입력하여 gcloud 도구에서 us-central1-a를 Cloud SDK의 기본 영역으로 사용하도록 구성합니다. 이 영역에는 Cloud Datalab 인스턴스가 포함됩니다.

    gcloud config set compute/zone us-central1-a
    
  4. 다음 명령어를 입력하여 Cloud Datalab 컨테이너를 실행하는 데 사용되는 mltutorial이라는 Compute Engine VM을 만듭니다. 이 명령어는 VM에 대한 SSH 연결도 만들고 원격 Cloud Datalab 웹 인터페이스를 localhost 포트 8081에 매핑합니다. 메시지가 표시되면 기본 Compute Engine 영역에 해당하는 번호를 입력합니다.

    datalab create mltutorial
    

    The connection to Datalab is now open and will remain until this command is killed라는 메시지가 표시되면 인스턴스에 연결된 것입니다. SSH 연결이 설정되면 명령줄 인터페이스가 더 이상 출력을 생성하지 않을 수 있습니다.

  5. Cloud Shell 창에서 웹 미리보기 아이콘 웹 미리보기 아이콘을 클릭합니다.

  6. 포트 변경을 선택합니다.

  7. 미리보기 포트 변경 대화상자에서 8081을 입력한 다음 변경 및 미리보기를 클릭합니다. 그러면 새 탭에서 Cloud Datalab이 열립니다.

    gcloud compute ssh --quiet --zone "us-central1-a" --ssh-flag="-N" --ssh-flag="-L" --ssh-flag="localhost:8081:localhost:8080" "${USER}@mltutorial"
    
  8. 노트북을 클릭하여 새 노트북을 만듭니다. 노트북이 새 탭에 열립니다.

  9. 제목 표시줄에서 제목 없는 노트북을 클릭하여 노트북 이름을 변경합니다.

  10. 노트북 이름 변경 대화상자에서 BigQuery ML tutorial을 입력한 다음 확인을 클릭합니다.

  11. 첫 번째 코드 셀에서 다음 명령어를 입력하여 BigQuery Python 클라이언트 라이브러리의 최신 버전으로 업데이트합니다.

    !pip install --upgrade google-cloud-bigquery
    
  12. 실행 > 이 셀에서 실행을 클릭합니다. 쿼리 결과가 코드 블록 아래에 나타납니다. 설치가 완료되면 다음 메시지가 표시됩니다.

    Successfully installed ...

  13. 이 코드에서 생성되는 출력 양이 꽤 많습니다. 출력을 숨기려면 셀 메뉴를 클릭하고 접기를 선택하여 셀을 접습니다.

    셀 메뉴

  14. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  15. 다음 코드를 입력하여 BigQuery Python 클라이언트 라이브러리를 가져오고 클라이언트를 초기화합니다. BigQuery 클라이언트는 BigQuery API에서 메시지를 주고받는 데 사용됩니다.

    from google.cloud import bigquery
    client = bigquery.Client(location="US")
    
  16. 실행 > 이 셀에서 실행을 클릭합니다. 이 명령어는 출력을 생성하지 않습니다.

2단계: 데이터세트 만들기

다음으로 ML 모델을 저장할 BigQuery 데이터세트를 만듭니다. 데이터세트를 만들려면 다음 안내를 따르세요.

  1. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  2. 다음 명령어를 입력하여 데이터세트를 만듭니다.

    dataset = client.create_dataset('bqml_tutorial')
    
  3. 실행 > 이 셀에서 실행을 클릭합니다. 이 명령어는 출력을 생성하지 않습니다.

3단계: 모델 만들기

다음으로 BigQuery용 Google 애널리틱스 샘플 데이터세트를 사용하여 로지스틱 회귀 모델을 만듭니다. 이 모델은 웹사이트 방문자의 거래 여부를 예측하는 데 사용됩니다. 표준 SQL 쿼리는 CREATE MODEL 문을 사용하여 모델을 만들고 학습시킵니다.

CREATE MODEL 쿼리를 실행하여 모델을 만들고 학습시키려면 다음 안내를 따르세요.

  1. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  2. BigQuery Python 클라이언트 라이브러리는 최소한의 코드로 쿼리를 실행할 수 있는 매직 명령어를 제공합니다. 클라이언트 라이브러리에서 매직 명령어를 로드하려면 다음 코드를 입력합니다.

    %load_ext google.cloud.bigquery
    
  3. 실행 > 이 셀에서 실행을 클릭합니다. 이 명령어는 출력을 생성하지 않습니다.

  4. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  5. BigQuery 클라이언트 라이브러리는 SQL 쿼리를 실행하고 Pandas DataFrame으로 결과를 반환하는 셀 매직 %%bigquery를 제공합니다. 셀에 다음 표준 SQL 쿼리를 입력합니다. #standardSQL 프리픽스는 이 클라이언트 라이브러리에 필요하지 않습니다. 표준 SQL이 기본 쿼리 구문입니다.

    %%bigquery
    CREATE OR REPLACE MODEL `bqml_tutorial.sample_model`
    OPTIONS(model_type='logistic_reg') AS
    SELECT
      IF(totals.transactions IS NULL, 0, 1) AS label,
      IFNULL(device.operatingSystem, "") AS os,
      device.isMobile AS is_mobile,
      IFNULL(geoNetwork.country, "") AS country,
      IFNULL(totals.pageviews, 0) AS pageviews
    FROM
      `bigquery-public-data.google_analytics_sample.ga_sessions_*`
    WHERE
      _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
    
  6. 실행 > 이 셀에서 실행을 클릭합니다.

  7. 쿼리를 완료하는 데 몇 분 정도 걸립니다. 첫 번째 반복이 완료된 후 BigQuery 웹 UI의 탐색 패널에 모델(sample_model)이 나타납니다. 쿼리는 테이블을 만드는 데 CREATE MODEL 문을 사용하므로 쿼리 결과가 표시되지 않습니다. 출력은 빈 문자열입니다.

4단계: 학습 통계 가져오기

모델 학습의 결과를 확인하려면 ML.TRAINING_INFO 함수를 사용하거나 BigQuery 웹 UI에서 통계를 확인하면 됩니다. 이 기능은 현재 BigQuery 기본 BigQuery 웹 UI에서 사용할 수 없습니다. 이 가이드에서는 ML.TRAINING_INFO 함수를 사용합니다.

머신러닝 알고리즘은 많은 예를 검사하고 손실을 최소화하는 모델을 찾으려고 시도함으로써 모델을 빌드합니다. 이 프로세스를 경험적 위험 최소화라고 합니다.

손실은 잘못된 예측에 대한 페널티입니다. 예를 들어 모델 예측이 얼마나 잘못되었는지를 나타내는 숫자입니다. 모델의 예측이 완벽하면 손실은 0이고 그렇지 않으면 손실은 그보다 커집니다. 모델 학습의 목표는 모든 예에서 평균적으로 손실이 적은 가중치 집합을 찾는 것입니다.

CREATE MODEL 쿼리를 실행할 때 생성된 모델 학습 통계를 확인하려면 다음 안내를 따르세요.

  1. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  2. 셀에 다음 표준 SQL 쿼리를 입력합니다.

    %%bigquery
    SELECT
      *
    FROM
      ML.TRAINING_INFO(MODEL `bqml_tutorial.sample_model`)
    
  3. 실행 > 이 셀에서 실행을 클릭합니다.

  4. 쿼리가 완료되면 쿼리 아래에 결과가 나타납니다. 결과는 다음과 같이 표시됩니다.

    ML.TRAINING_INFO 출력

    loss 열은 학습 데이터세트에서 지정된 반복 후에 계산된 손실 통계를 나타냅니다. 로지스틱 회귀를 수행했으므로 이 열은 로그 손실입니다. eval_loss 열은 홀드아웃 데이터세트(모델을 검증하기 위해 학습에서 보류된 데이터)에서 계산된 손실 통계와 같습니다.

    ML.TRAINING_INFO 함수에 대한 자세한 내용은 BigQuery ML 구문 참조를 확인하세요.

5단계: 모델 평가

모델을 만든 후에 ML.EVALUATE 함수를 사용하여 분류 기준의 성능을 평가합니다. 로지스틱 회귀 특정 측정항목에 ML.ROC_CURVE 함수를 사용할 수도 있습니다.

분류 기준은 라벨의 열거된 타겟 값 집합 중 하나입니다. 예를 들어 이 가이드에서는 거래를 감지하는 이진 분류 모델을 사용합니다. 두 클래스는 label 열의 값으로, 0(거래 없음)과 1(거래 수행)이 있습니다.

모델을 평가하는 ML.EVALUATE 쿼리를 실행하려면 다음 안내를 따르세요.

  1. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  2. 셀에 다음 표준 SQL 쿼리를 입력합니다.

    %%bigquery
    SELECT
      *
    FROM ML.EVALUATE(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IF(totals.transactions IS NULL, 0, 1) AS label,
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(geoNetwork.country, "") AS country,
        IFNULL(totals.pageviews, 0) AS pageviews
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
    
  3. 실행 > 이 셀에서 실행을 클릭합니다.

  4. 쿼리가 완료되면 쿼리 아래에 결과가 나타납니다. 결과는 다음과 같이 표시됩니다.

    ML.EVALUATE 출력

    로지스틱 회귀를 수행했으므로 결과에 다음 열이 포함됩니다.

6단계: 모델을 사용하여 결과 예측

모델을 평가했으므로 다음 단계는 이 모델을 사용하여 결과를 예측하는 것입니다. 모델을 사용하여 각 국가의 웹사이트 방문자가 수행한 거래 수를 예측합니다. 또한 사용자당 구매를 예측하는 데도 이 모델을 사용할 수 있습니다.

모델을 사용하여 거래 수를 예측하는 쿼리를 실행하려면 다음 안내를 따르세요.

  1. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  2. 셀에 다음 표준 SQL 쿼리를 입력합니다.

    %%bigquery
    SELECT
      country,
      SUM(predicted_label) as total_predicted_purchases
    FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(totals.pageviews, 0) AS pageviews,
        IFNULL(geoNetwork.country, "") AS country
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
      GROUP BY country
      ORDER BY total_predicted_purchases DESC
      LIMIT 10
    
  3. 실행 > 이 셀에서 실행을 클릭합니다.

  4. 쿼리가 완료되면 쿼리 아래에 결과가 나타납니다. 결과는 다음과 같이 표시됩니다. 모델 학습은 확정적이지 않으므로 결과가 다를 수 있습니다.

    ML.PREDICT 출력 1

다음 예에서는 웹사이트 방문자가 수행할 거래 수를 예측하고자 합니다. 이 쿼리는 GROUP BY 절을 제외하고 이전 쿼리와 동일합니다. 여기에서 GROUP BY 절인 GROUP BY fullVisitorId는 방문자 ID별로 결과를 그룹화하는 데 사용됩니다.

사용자당 구매를 예측하는 쿼리를 실행하려면 다음 안내를 따르세요.

  1. 코드 추가를 클릭하여 새 코드 셀을 만듭니다.

  2. 셀에 다음 표준 SQL 쿼리를 입력합니다.

    %%bigquery
    SELECT
      fullVisitorId,
      SUM(predicted_label) as total_predicted_purchases
    FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(totals.pageviews, 0) AS pageviews,
        IFNULL(geoNetwork.country, "") AS country,
        fullVisitorId
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
      GROUP BY fullVisitorId
      ORDER BY total_predicted_purchases DESC
      LIMIT 10
    
  3. 실행 > 이 셀에서 실행을 클릭합니다.

  4. 쿼리가 완료되면 쿼리 아래에 결과가 나타납니다. 결과는 다음과 같이 표시됩니다.

    ML.PREDICT 출력 2

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.

  • 만든 프로젝트를 삭제할 수 있습니다.
  • 또는 프로젝트를 유지하고 Cloud Datalab VM을 삭제할 수 있습니다.

Cloud Datalab VM 삭제

프로젝트를 삭제하면 Cloud Datalab VM이 삭제됩니다. Cloud Platform 프로젝트를 삭제하지 않으려는 경우 Cloud Datalab VM을 삭제할 수 있습니다.

Cloud Datalab VM을 삭제하려면 다음 안내를 따르세요.

  1. Compute Engine VM 인스턴스 페이지를 엽니다.

    VM 인스턴스 페이지로 이동

  2. mltutorial 인스턴스를 선택한 다음 삭제를 클릭합니다.

  3. 확인 메시지가 표시되면 삭제를 클릭합니다.

프로젝트 삭제

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

BigQuery ML 문서