데이터셋을 만들고 모델링까지 한 번에 할 수 있지만 (feat. BQML)

구글에서 움파룸파를 시켜서 만든 것 같은 BigQuery에서 모델링까지 한 번에 해서 예측 결과 저장까지 가능하도록 만든 BQML (BigQuery Machine Learning framework) 을 내놓았다. 이런 게 있다는 것 정도만 알고 있다가 최근 모델링 고민을 하다가 BQML을 한 번 써보았다. 물론 실제 업무는 아니고 가볍게 돌려본 정도다.

BQML에 대한 설명은 각설하자. 사실 그냥 구문 하나 가지고 이것저것 하는 거라 크게 쓸 것도 없다. 매뉴얼을 따라 하면 샘플 데이터 셋 받아서 개인 계정 만들어서 간단히 테스트할 수 있다. 테스트 비용을 무료로 처리하는 법에 대해서도 매뉴얼에 잘 나와있다.

각설하고, 테스트하면서 느낀 점은.

  1. 현재 빅쿼리의 최대 강점 중 하나가 GA 로그를 빅쿼리로 바로 보내는 것인데, 이 데이터를 다른 데로 옮기지 않고 바로 간단한 모델링이 가능하다. (심지어 샘플 예제도 대놓고 GA 로그를 사용한다. 이 정도 대용량도 쉽고 빠르게 모델 생성이 가능하다고 자랑하는 방법도 여러가지다.)
  2. SQL의 CTAS 구문을 조금 틀어서 CMAS(CREATE MODEL … AS SELECT …) 로 만들어서 정말 간단한 모델은 한 큐에 생성 가능하다. 데이터 처리만 SQL로 잘 해주면, 알고는 있었지만 손으로 써서 돌아가는 걸 보니 좀 새롭고 짜릿한 게 확실히 있다. 이래서 사람이 실제로 뭘 돌려봐야 해.
  3. 빅쿼리의 장점(?)인 ARRAY나 STRUCT 데이터는 사용할 수 없다.
  4. STRING은 알아서 범주형으로 처리한다.
  5. 용량 적은 데이터를 쓰기는 했지만 정말 빠르기는 빠르다. 구글 움파룸파 만세. 데이터셋이 커지면 이 비용을 무시하기는 쉽지 않을 것이다.
  6. 현재 지원하는 모델이 선형 회귀, 로지스틱(단일/멀티) 회귀, K-means 클러스터링밖에 없음. 하지만 생각보다 많은 튜닝 옵션을 지원하고, 결과 통계 수치도 기본적인 내용은 제공한다.
  7. 여러 모델을 혼합해서 사용해야 하거나, 실제 활용 가능한 지 간단히 테스트 할 때는 확실히 유용할 듯 하다. 간단한 모델로 많은 데이터를 처리해야 할 때(물론 이후에 여러 다른 모델이 나오리라 믿어 의심치 않지만). 모델링 지점을 다른 서버에 두어서 부하가 생기거나 하지 않고 빅쿼리에서 간단히 모델링 결과를 돌려서 테이블로 저장한 다음에 이를 바로 가져다 쓰게 한다던가 등의 방식으로 사용할 수도 있을 것이다. 분류와 회귀를 같이 응용하거나 하는 경우도 활용한다든가 등등. 요즘에 고민하는 포인트 중에 하나를 좀 쉽게 해볼까 하고 테스트 해 본 것인데 나쁘지 않을 수도 있겠다는 생각을 했다.
  8. 단 여기서 포인트는, 그렇다고 이것저것 마구 돌려보기에는… 빅쿼리는 쓰는 만큼 돈이 나간다는 것이다. 물론 모델링에 사용하는 경우 10GB까지는 무료라고 되어 있으나, 모델링 한 번 할 때 여러 번 스캔을 하는 것으로 보였다(대략 동일 SELECT 구문의 20배 정도 스캔을 하는 것으로 확인되었다.) . 그렇다면 빅쿼리에서 아주 많은 양의 데이터에 모델을 돌리고, 가중치 조절해서 다시 돌리고 하면…. 이후의 내용은 각자의 상상에 맡기도록 하겠다.\ 모델을 일부만 다른 데에서 테스트를 해 본 후에 빅쿼리에서 실제 데이터들 돌려서 만들어 보는 방식 등등으로 금액 부담을 줄이는 방법 등 여러 가지 활용 방안이 있을 것이다.

가격 고민은 조금 더 해봐야 겠지만, 많은 도구들이 그렇듯이 BQML도 빅쿼리를 쓰고 있는 곳이라면, 잘 쓴다면 간단한 머신 러닝을 실제 적용하는 데에 꽤 도움을 줄 수 있는 수단으로 보인다. 도구함에 잘 넣어둬 볼까.

Written on April 26, 2020