BigQuery ML 시작하기

1. 개요

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

빌드할 항목

샘플 애널리틱스 360 데이터 세트를 사용하여 방문자의 거래 여부를 예측하는 모델을 만듭니다.

학습할 내용

BigQuery에서 머신러닝 모델을 만들고, 평가하고, 사용하는 방법

필요한 항목

  • 브라우저(Chrome 또는 Firefox 등)
  • SQL 또는 BigQuery에 관한 기본 지식
  • BQML 문서

2. 설정 및 요구사항

자습형 환경 설정

  1. Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

BigQuery 콘솔 열기

Google Developer Console의 왼쪽 상단에 있는 메뉴 아이콘을 클릭합니다.

select-bq_0.png

메뉴를 아래로 스크롤하여 BigQuery:를 클릭합니다.

select-bq.png

그러면 다음과 같은 BigQuery 콘솔이 새 브라우저 탭에서 열립니다.

8b0218390329e8cf.png

하지만 여기에는 아무것도 없어요! 다행히 BigQuery에는 살펴볼 수 있는 공개 데이터 세트가 다양하게 마련되어 있습니다.

3. 데이터 세트 만들기

데이터 세트를 만들려면 프로젝트 이름 옆에 있는 화살표를 클릭하고 새 데이터 세트 만들기를 선택합니다.

4f51bf57291a59db.png

다음으로 데이터 세트 이름을 bqml_codelab으로 지정하고 확인을 클릭합니다.

63e32478a5652fbc.png

4. 모델 만들기

애널리틱스 360의 로지스틱 회귀

이제 작업으로 넘어가 보겠습니다. 다음은 방문자의 거래 여부를 예측하는 모델을 만드는 방법입니다.

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.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 '20170631'
LIMIT 100000;

여기서는 거래가 이루어졌는지 확인하기 위한 기준으로 방문자가 사용한 기기의 운영체제, 해당 기기가 모바일 기기인지 여부, 방문자의 국가, 페이지 조회수가 사용됩니다.

이 경우 'codelab'은 데이터 세트의 이름이고 'sample_model'은 모델의 이름입니다. 지정된 모델 유형은 바이너리 로지스틱 회귀입니다. 이 경우 label이 맞추고자 하는 대상입니다. 1열에만 관심이 있는 경우 이 방법으로 input_label_cols를 설정할 수도 있습니다. 또한 학습 데이터는 2016년 8월 1일부터 2017년 6월 30일까지 수집된 데이터로 제한됩니다. 이는 '예측' 작업을 수행하기 위해 지난달의 데이터를 남겨두기 위함입니다. 또한 시간 절약을 위해 데이터 포인트를 100,000개로 제한하였습니다. 급하지 않다면 마지막 줄을 삭제해도 됩니다.

CREATE MODEL 명령어를 실행하면 비동기적으로 실행되는 쿼리 작업을 만들어 BigQuery UI 창을 닫거나 새로고침하는 등의 작업을 수행할 수 있습니다.

[선택사항] 모델 정보 및 학습 통계

관심이 있는 경우 UI에서 bqml_codelab 데이터 세트 아래의 sample_model을 클릭하여 모델에 관한 정보를 가져올 수 있습니다. 세부정보에서 몇 가지 기본적인 모델 정보와 모델을 만드는 데 사용된 학습 옵션을 확인할 수 있습니다. 학습 통계에 다음과 비슷한 표가 표시됩니다.

b8bd9548a0d89165.png

5. 모델 평가하기

모델 평가

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.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'));

선형 회귀 모델과 함께 사용한 경우 위 쿼리는 mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score, explained_variance 열을 반환합니다. 로지스틱 회귀 모델과 함께 사용한 경우 위 쿼리는 precision, recall, accuracy, f1_score, log_loss, roc_auc 열을 반환합니다. 각 측정항목이 어떻게 계산되었고 무엇을 의미하는지 알아보려면 머신러닝 용어집을 참조하거나 Google에서 검색해 보세요.

구체적으로 쿼리의 SELECTFROM 부분이 학습 중에 사용된 것과 동일하다는 사실을 확인할 수 있습니다. WHERE 부분은 기간 변화를 반영하고 FROM 부분은 ml.EVALUATE를 호출하고 있음을 나타냅니다. 다음과 비슷한 테이블이 표시됩니다.

1c7779f6028730cc.png

6. 모델 사용

국가별 구매 예측

여기서는 국가별 방문자의 거래 수를 예측하고, 결과를 정렬하고, 구매 건수 기준 상위 10개 국가를 선택합니다.

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.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;

이 쿼리는 이전 섹션에서 실행했던 평가 쿼리와 매우 유사합니다. 여기서는 ml.EVALUATE 대신 ml.PREDICT를 사용하고 쿼리의 BQML 부분을 표준 SQL 명령어로 래핑합니다. 구체적으로는 국가 및 각 국가의 구매 건수 합계가 중요하므로 SELECT, GROUP BY, ORDER BY를 사용합니다. 여기에서는 LIMIT를 사용하여 상위 10개 결과만 가져옵니다. 다음과 비슷한 테이블이 표시됩니다.

e639f7a409741dcb.png

사용자별 구매 예측

여기에 또 다른 예시가 있습니다 이번에는 각 방문자가 수행할 거래 수를 예측해 보고, 결과를 정렬하고, 거래 수 기준 상위 10명의 방문자를 선택합니다.

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.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;

다음과 비슷한 테이블이 표시됩니다.

2be1d8fa96e10178.png

7. 축하합니다.

이 Codelab을 완료했습니다. 도전 과제를 찾고 계신가요? BQML로 선형 회귀 모델을 만들어 보세요.

학습한 내용

  • 이진 로지스틱 회귀 모델 만들기
  • 모델 평가
  • 모델을 사용하여 예측하기

다음 단계

  • BQML에 대한 자세한 내용은 문서를 참고하세요.