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월 31일까지 수집된 데이터로 제한됩니다. 이것은 '예측'을 위해 지난 달의 데이터를 저장하기 위해서입니다. 또한 시간을 절약하기 위해 데이터 포인트를 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를 구합니다. 여기서는 상위 10개 결과만 얻기 위해 LIMIT를 사용합니다. 다음과 비슷한 테이블이 표시됩니다.

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에 대한 자세한 내용은 문서를 참고하세요.