본문 바로가기
AI 빅데이터/Google Cloud Platform

[GCP] Cloud Data Fusion과 AutoML로 코드 한 줄 없이 AI 하기

by 마고커 2020. 4. 21.


Google Cloud Blog에 코드 한 줄 없이 AI하기라는 재미있는 글이 올라와서 따라서 해 보았다. Azure의 ML Studio의 UI 기반 전처리가 구글에 왜 없을까하는 의문이 있었는데, 몰랐던 것 뿐이었다. Cloud Data Fusion은 19년 Next 행사에서도 이미 소개되어 있다. 

 

 

Turn your raw data into a machine learning model without Python or SQL | Google Cloud Blog

How to build an entire ML pipeline, including data transformation and model training, without code

cloud.google.com

사용된 예제는 뉴욕 소방청(Fire Department of New York City, FDNY)의 출발 대응 시간을 예측하는 것인데, 아래 사이트에서 확보 가능하다. Export를 선택해서 CSV로 저장한 뒤, GCS에 Upload하면 작업 준비는 끝난다.

 

 

FDNY Monthly Response Times | NYC Open Data

 

data.cityofnewyork.us

Data Fusion은 CDAP(Cloud Data Analytic Platform)의 공개 소스 기반을 Google Cloud에 가져온 것으로 UI 조작만으로 ETL이 가능하도록 되어있다. 예제에서는 ETL 후 BigQuery에 저장한다.

 

Data Fusion 메뉴로 들어가 우선 ETL작업을 수행할 Instance를 하나 만든다. Instance가 만들어지면  인스턴스 보기를 눌러 이동하면 되는데, 간단한 경고는 살짝 무시해주고 가면 된다.

 

왼쪽 메뉴 화면에서 Pipeline -> Studio를 선택해서 ETL을 수행할 파이프라인을 만들어준다. GCS에 업로드된 파일을 가공(Wrangling)하여 BigQuery에 저장할 것이므로 GCS를 Source, Wrangler를 Transform, BigQuery를 Sink에서 선택하여 화살표를 서로 이어준다. 주의할 점은 GCS, BigQuery 모두 Source, Sink에 있기 때문에 정확하게 끌어 온다.

 

Data Fusion Pipeline Studio

GCS의 Properties를 눌러 가져올 CSV를 선택한다.

 

GCS에서 파일 가져오기

다음 Wrangler에서 GCS에 위치한 파일을 지정해 주면 body Field 아래 Raw로 데이터를 가져온다. 이 데이터를 가공해야 한다.

 

Wrangler로 입력된 Raw

Wrangling은 아래 순서로 진행한다.

 

  1. Separator로 Field 나눔: body 옆의 화살표를 눌러 parse->csv 선택. custom delimiter로 ;, 첫 행은 header로 지정
  2. YEARMONTH를 Date형식으로 바꿈: parse->simple data 선택. custom format으로 yyyy/MM 지정
    ※ 형식이 바뀐다고 되어 있으나, 잘되지 않는다. 추후 BigQuery에서 간단히 바꿀 예정이다.
  3. INCIDENTCLASSIFICATION이 'All Fire/Emergency Incident'인 항목 제외: filter->Remove Row하여 value 지정
  4. INCIDENTBOROUGH가 'Citywide'인 항목 지정: filter -> Remove Row하여 value 지정
  5. INCIDENTCOUNT와 BODY 칼럼 삭제: Delete Column
  6. AVERAGERESPONSETIME을 초단위로 변경: find and replace에서 ':'을 ''로 대체하고, custom transform을 선택하여 (AVERAGERESPONSETIME / 100) * 60 + (AVERAGERESPONSETIME % 100) 입력

 

최종적으로 아래의 형태가 된다.

 

Wrangling 된 테이블

Insight 탭을 눌러보면 데이터 분포를 Visual하게 살펴 볼 수도 있다.

 

Wrangling 테이블의 Insight

 

우측 상단의 Apply 버튼을 눌러보면 변경 작업에 문제가 없는 지 확인해 볼 수 있다. 문제가 없어야 하는데 YEARMONTH를 수정하지 못한게 문제가 된다. 일단, 이전 화면(Data Table)에서 우측의 Column Name을 선택하여 cleanse를 한다. _yearmonth의 '_'가 문제가 되는 것 같아서 해당 언더바를 삭제하였다. (좌측 테이블의 컬럼 이름에서)

 

 

다시 Apply 해보니 성공. validate하여 문제가 없는 지 끝까지 확인하면 아무 에러가 없다는 표시가 나온다. 이제 마지막 단계로 BigQuery로 내보내는 세팅만 해 주면 끝이다. 아래와 같이 미리 만들어 놓은 BigQuery Table을 지정해 주고, 하단에 Update Table Schema를 On으로 바꿔주면 된다.

 

BigQuery 내보내기 설정

이 과정을 마치고 메뉴 상단의 'Run'을 선택하면 ETL 작업을 수행하는데, 주의할 점은 Data Fusion이 CPU 5개와 최소 디스크로 3T를 요구한다는 점이다. Free Tier의 CPU는 8개라 넉넉하지만 디스크가 2T 밖에 안되어 불가피하게 계정 업그레이드가 필요하다. 업그레이드 후 디스크는 4T가 기본이 된다. 다시 Run을 수행하면 ETL이 완료된다.

 

BigQuery에 저장된 테이블

BigQuery에 Table에 제대로 저장되었다. 그런데 yearmonth의 중간에 회계년도 표시(FY 2014)가 보인다. 이 때문에 제대로 변환이 안되었던 듯하다. 아래의 Query를 통해 걸러내고, yearmonth를 timestamp 형식으로 바꾸어 다른 table (fdny_mod)에 저장하였다.

 

 

#standardSQL
SELECT
  PARSE_DATE("%Y/%m", yearmonth) AS yearmonth, incidentclassification, incidentborough,  averageresponsetime
FROM fdny.fdny_response_time
where yearmonth not like "FY%"

 

이렇게 재정리된 테이블을 automl tables에 넣으면 AI 모델을 만들 수 있다.

 

AutoML Tables 데이터 세트 가져오기

이렇게 BigQuery에서 데이터세트를 가져온 후 모델링 시작을 누르면 끝인데(간단히 학습 노드 시간은 1로), 추가 매개 변수의 시간열을 아래와 같이 지정해 주면 타임 시리즈 데이터의 경우 학습 효과가 높다고 되어 있다.

 

매개 파라미터 수정

1시간 후 아래와 같이 모델과 예측 결과를 보여 준다.

 

학습 결과

백분율 오차는 낮지만 R Square는 0.8 정도로 아주 훌륭한 모델은 아닌듯 싶다. 아마도 데이터가 적고, 학습을 최소화 했기 때문인듯하다. 특이했던 점은 매개변수 설정(시간열)을 안한 경우가 살짝 결과가 더 좋았던 것인데, 데이터를 더 충분히 확보해서 테스트 할 필요가 있다.

 

오류를 수정하느라 간단한 SQL문 하나를 작성했지만, 거의 UI 조작만으로 2시간 이내에 AI 모델을 만들어낼 수 있었다. 



댓글