BigQuery ML Beta 사용기


  • 최근 발표되고 이슈가 되었던 Google Cloud BigQuery ML Beta를 사용하며 남긴 글입니다. Beta라서 많이 바뀔 것 같지만 그래도 남겨봅니다!
  • 공식 문서를 보고 작성했습니다

BigQuery ML


  • BigQuery ML에 대해 설명할 필요 없이 위 Gif를 참고하면 될 것 같습니다
  • 이 서비스가 충격적이고 Hot한 이유는 쿼리문으로 쉽게 모델을 만들 수 있는 점과 AutoML을 보여주기 때문이라 생각합니다
  • BigQuery의 standard SQL 쿼리로 머신러닝 모델을 생성하고 실행할 수 있습니다
    • 예측 Table을 만든 후, REST API처럼 사용할 수 있습니다

제공하는 모델

  • 현재(18.8월) 베타 기준으로 2가지 모델이 제공됩니다
  • 다음 달에 classification, recommendation 등이 지원될 예정이라 합니다
  • Linear regression
    • numerical value를 예측할 때 사용
  • Binary Logistic regression
    • 이메일 스팸 필터처럼 2개의 클래스를 분류할 때 사용

사용할 수 있는 곳

  • BigQuery web UI
  • bq command-line tool
  • BigQuery REST API
  • Jupyter Notebook 같은 외부 툴

BigQuery ML의 장점

  • Python이나 Java를 몰라도 SQL문으로 Machine Learning 모델을 생성할 수 있음. 즉 쉽게 모델을 만들 수 있습니다
  • 데이터웨어 하우스(BigQuery)에서 데이터를 Export하지 않고 모델링이 진행되기 때문에 속도가 빠릅니다
  • 학습 파라미터, Feature, Weight 등의 정보도 제공합니다

가격 정책

  • BigQuery의 가격 정책을 그대로 따릅니다
    • 데이터 저장비용
    • 쿼리 비용(쿼리할 때 탐색하는 데이터양에 비례해 비용이 부과)
  • 허나 아직 베타라서 이런 듯! 추후 가격 정책이 생길 것 같습니다

Getting Started with BigQuery ML


  • Data Analyst와 Data Scientist를 위한 글로 나뉘어져 있는데, 전자는 BigQuery Console에서 진행하고 후자는 Datalab에서 진행합니다(데이터셋은 동일)
  • 저는 BigQuery Console에서 Data Scientist에 나와있는 내용을 진행했습니다
    • Google Analytics 샘플 데이터를 사용해 website 방문자가 결제를 할지 예측하는 모델을 만듭니다

Method 정리

  • 모델 생성할 때 : CREATE MODEL
  • Evalute할 때 : ML.EVALUATE
  • Predcit할 때 : ML.PREDICT

1. Dataset 생성

  • BigQuery Console에서 리소스 - 프로젝트 아이디 클릭해주세요
  • 데이터세트 만들기 클릭! : id는 bqml_tutorial

2. 분류 모델 생성하기

  • 우리가 다룰 데이터는 다음과 같습니다
  • label은 0, 1로 transcation이 있으면 1 없으면 0
  • os, mobile 유무, 국가, pageviews가 feature

  • 모델 생성은 아래와 같은 쿼리로 수행합니다
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'
  • label이란 컬럼이 꼭 필요합니다(label2라고 하면 에러 뿜음)
  • 20160801부터 20170630까지 약 11개월치 데이터를 학습했는데 약 8분 소요
  • Test로 20170601부터 20170630까지 1개월 데이터를 학습했는데 99초 소요 (UI가 다른 이유는 이 테스트는 과거 BigQuery Console에서 진행했기 때문입니다! 과거 UI에서도 정상 작동함)

3. 학습 모델 정보 보기

  • 생성된 Table에서 정보 확인
  • 모델 유형, loss 유형, 학습 옵션도 보임!!! Early Stopping이 적용된 듯
  • 위 방법 이외에도 모델의 정보를 보고 싶은 경우엔 ML.TRAINING_INFO 를 사용하면 됩니다

    SELECT
    *
    FROM
    ML.TRAINING_INFO(MODEL `bqml_tutorial.sample_model`)
    
  • training_run은 새로 생성된 모델은 값이 0이고 warm_start 옵션을 사옹할 경우, 다시 학습시 값이 증가합니다

  • Feature의 정보를 보고싶을 경우

    SELECT
    *
    FROM
    ML.FEATURE_INFO(MODEL `bqml_tutorial.sample_model`)
    
  • Weights의 정보를 보고싶을 경우

    SELECT
     *
    FROM
     ML.WEIGHTS(MODEL `bqml_tutorial.sample_model`)
    
  • 이런 식으로 weight도 나옵니다! 충격적…

4. 모델 평가하기

  • ML.EVALUATE를 사용해 모델 평가합니다
  • 학습할 때 사용하지 않은 20170701 ~ 20170801 데이터로 평가했습니다
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'))
  • 1초가 지난 후 아래와 같은 결과가 나왔습니다

5. 모델로 예측하기

  • ML.PREDICT을 사용해 예측한 후, 국가별 총 예측 구입량을 계산했습니다
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
  • 역시 1초 뒤 아래와 같은 결과가 나왔습니다

BigQuery ML 문법


  • CREATE MODEL : 링크
    • l1_reg, l2_reg, max_iterations, learn_rate_strategy, learn_rate, early_stop, min_rel_progress, data_split_method, warm_start 등을 설정할 수 있음
  • ML.EVALUATE : 링크
    • logistic regression은 precision, recall, accuracy, f1_score, log_loss, roc_auc로 결과가 나옴
    • linear regression은 mae, mse, msle, mae, r2_score, explained_variance로 결과가 나옴
  • ML.PREDICT : 링크
  • ML.TRAINING_INFO : 링크
  • ML.FEATURE_INFO : 링크
  • ML.WEIGHTS : 링크

Tutorial


사용 후기


  • 원래 BigQuery에 대한 만족이 높았는데, 이번 BigQuery ML로 더욱 만족도가 높아졌습니다
  • Structured된 데이터라면 더 쉽게 모델을 만들 수 있을 것 같습니다
  • 단, BigQuery 특성상 딥러닝 모델까지 나올진 의문이 듭니다
    • BigQuery는 쿼리할 때 탐색하는 데이터의 양에 따라 비용이 부과되는데 비정형 데이터는 데이터가 크기 때문에 비용도 들고.. 비효율성이 나타날 것 같음
    • BigQuery에 데이터를 적재하기도 어려운 상황
  • 아마 구조화된 데이터는 BigQuery ML로 비정형 데이터는 AutoML로 커버하지 않을까 생각됩니다
  • 그래도 갓구글님들이 이런 제품을 내놓아서 리스펙.. 자꾸 내놓으면 저같은 데이터쟁이는 어떻게 되나요(..)

Reference


카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza