Vertex AI 및 BigQuery ML을 사용한 시계열 예측

1. 개요

이 실습에서는 TensorFlow를 사용하여 시계열 예측 모델을 빌드하는 방법을 배우고, Vertex AI로 이러한 모델을 배포하는 방법을 알아봅니다.

학습 내용

다음 작업을 수행하는 방법을 배우게 됩니다.

  • ML 모델에서 사용할 수 있도록 데이터 변환
  • 데이터 시각화 및 탐색
  • BigQuery ML을 사용하여 시계열 예측 모델 만들기
  • LSTM 및 CNN 아키텍처를 사용하여 TensorFlow로 시계열 예측 모델 빌드

2. 시계열 예측 소개

이 Codelab에서는 Google Cloud Platform을 사용하여 시계열 예측 기법을 적용하는 방법을 중점적으로 살펴봅니다. 일반적인 시계열 예측 과정은 아니지만 개념을 간략히 둘러보면 사용자에게 도움이 될 수 있습니다.

시계열 데이터

먼저 시계열이란 무엇일까요? 일정한 시간 간격으로 데이터가 기록된 데이터 세트입니다. 시계열 데이터 세트에는 시간과 시간에 종속되는 하나 이상의 변수가 포함됩니다.

85af6a1ff05c69f2.png

구성요소

시계열은 구성요소로 분해할 수 있습니다.

  • 추세: 합리적으로 예측 가능한 패턴으로 위아래로 이동합니다.
  • 계절별: 일, 주, 월, 시즌 등 특정 기간에 반복됩니다.
  • 임의: 잔여 변동

시즌성에는 여러 계층이 있을 수 있습니다. 예를 들어 콜센터에서는 특정 요일과 특정 달에 통화량의 패턴을 확인할 수 있습니다. 잔차는 시간 외에 다른 변수로 설명할 수 있습니다.

6e8d45bbbbc388ec.png

스테이터리티

최상의 예측 결과를 얻으려면 평균 및 분산과 같은 통계 속성이 시간이 지남에 따라 일정하게 유지되는 시계열 데이터를 고정 상태로 만들어야 합니다. 미분 및 디트렌드와 같은 기법을 원시 데이터에 적용하여 보다 고정적으로 만들 수 있습니다.

예를 들어, 아래의 CO2 농도 그래프는 연간 반복 패턴이 증가 추세를 보인다는 것을 보여줍니다. ( 출처)

ab82857e2e7d0b89.png

선형 추세를 제거한 후에는 평균이 일정하므로 데이터가 예측에 더 적합합니다.

c936381ab1095528.png

머신러닝에 시계열 데이터 사용

머신러닝 문제에서 시계열 데이터를 사용하려면 이전 값을 사용하여 미래 값을 예측할 수 있도록 변환해야 합니다. 이 표는 타겟을 예측하는 데 도움이 되도록 지연 변수가 생성되는 방법의 예를 보여줍니다.

d667a941dbd470f5.png

몇 가지 기본 사항을 살펴보았으므로 이제 데이터 탐색 및 예측을 시작해 보겠습니다.

3. 노트북 환경 설정

데이터에 관해 간단히 소개했으니 이제 모델 개발 환경을 설정해 보겠습니다.

1단계: API 사용 설정

BigQuery 커넥터는 BigQuery Storage API를 사용합니다. 콘솔에서 BigQuery Storage API를 검색하고 API가 현재 사용 중지되어 있으면 사용 설정합니다.

9895a2fd3cdf8f8c.png

2단계: Vertex AI Workbench 노트북 만들기

Cloud 콘솔의 Vertex AI Workbench 섹션으로 이동하여 새 노트북을 클릭합니다. 그런 다음 GPU 없는 최신 TensorFlow Enterprise 2.x 노트북 유형을 선택합니다.

4e7b73eabf2bc061.png

기본 옵션을 사용한 다음 만들기를 클릭합니다. 인스턴스가 생성되면 JupyterLab 열기를 선택합니다.

18c9f3c462aafaee.png

그런 다음 JupyterLab에서 Python 3 노트북을 만듭니다.

58523671a252b95a.png

3단계: 실습 자료 다운로드하기

JupyterLab 인터페이스에서 새 터미널 창을 만듭니다(파일 ->). 신규 -> Terminal로 이동합니다

여기에서 다음 명령어로 소스 자료를 클론합니다.

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. 데이터 탐색 및 시각화

이 섹션에서 수행할 작업은 다음과 같습니다.

  • 데이터를 시계열로 그룹화하는 쿼리 만들기
  • 누락된 값 채우기
  • 데이터 시각화
  • 시계열을 트렌드 및 시즌 구성요소로 분해

1단계

Vertex AI Workbench에서 training-data-analyst/courses/ai-for-time-series/notebooks로 이동하여 01-explore.ipynb을 엽니다.

2단계

노트북의 셀을 모두 지우고 (수정 > 모든 출력 지우기) 처음 몇 개의 셀 중 하나에서 리전, 프로젝트, 버킷 설정을 변경한 다음 셀을 하나씩 실행합니다.

3단계

이 섹션에서는 데이터를 가져오고 데이터의 다양한 차원을 시각화했습니다. 데이터를 더 명확하게 파악했으니 이 데이터를 사용하여 머신러닝 모델링을 진행할 준비가 되었습니다.

55839e7bc0427915.png

5. BigQuery 시계열 예측으로 모델 만들기

이 섹션에서 수행할 작업은 다음과 같습니다.

  • 시계열 입력 데이터를 BigQuery 테이블로 가져오기
  • BQML 구문을 사용하여 시계열 모델 만들기
  • 모델 매개변수 및 정확성을 평가하는 방법 알아보기
  • 모델을 사용한 예측

1단계

방금 살펴본 CSV의 원시 데이터로 BigQuery 테이블을 만들어 보겠습니다. 먼저 노트북 환경에서 CSV를 다운로드하겠습니다.

training-data-analyst/courses/ai-for-time-series/notebooks/data 디렉터리에서 cta_ridership.csv를 마우스 오른쪽 버튼으로 클릭하고 로컬 환경에 다운로드합니다.

2단계

그런 다음 이 데이터를 BigQuery 테이블에 업로드합니다.

콘솔에서 BigQuery로 이동합니다 (이 링크를 검색하거나 사용).

649e7ab1c44b75e8.png

새 데이터 세트 또는 기존 데이터 세트에 테이블을 추가하여 관련 테이블을 그룹화할 수 있습니다. 아직 데이터 세트를 만들지 않은 경우 왼쪽 하단에서 프로젝트를 클릭한 다음 오른쪽 하단에서 데이터 세트 만들기를 선택합니다.

281b97020cd52f29.png

원하는 이름(예: demo)을 선택하고 기본값을 수락한 후 계속 진행합니다.

해당 데이터 세트를 선택하고 오른쪽 하단 모서리에서 테이블 만들기를 선택하여 새 테이블을 만듭니다.

ad47810d44cfb289.png

테이블 만들기 옵션에서 다음을 선택합니다.

  • 다음 항목으로 테이블 만들기: 업로드
  • 파일 선택: cta_ridership.csv
  • 테이블 이름: cta_ridership
  • 스키마: 스키마 및 입력 매개변수를 자동 감지하려면 체크박스를 선택합니다.

213e4177e9e79544.png

3단계

이제 모델을 만들 차례입니다. BigQuery ML은 SQL과 유사한 간단한 구문을 통해 다양한 모델 유형을 만들 수 있습니다.

쿼리 편집기에서 이 쿼리를 붙여넣거나 입력합니다. 필요한 경우 demo둘 다의 데이터 세트 이름으로 바꿉니다.

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

이해를 돕기 위해 구문의 주요 요소를 살펴보겠습니다.

CREATE OR REPLACE MODEL
demo.cta_ridership_model

이 문으로 모델이 생성됩니다. 이 구문의 변형이 있습니다(예: CREATE MODEL 하지만 여기서는 기존 모델을 같은 이름으로 바꾸기로 선택했습니다.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

여기서는 모델 옵션을 정의합니다. 첫 번째 옵션은 모델 유형입니다. ARIMA를 선택하면 시계열 예측 모델이 생성됩니다.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

날짜/시간 정보가 있는 열

TIME_SERIES_DATA_COL=‘total_rides'

데이터 열

HOLIDAY_REGION=‘us'

이 선택적 매개변수를 사용하면 모델에 휴일을 포함할 수 있습니다. 이전 단계의 데이터 탐색에서 휴일에는 탑승자가 낮았고 데이터의 출처는 미국 일리노이주 시카고이므로 모델에 미국 휴일을 포함했습니다.

AS SELECT ... FROM ...

이 섹션에서는 모델을 학습시키는 데 사용할 입력 데이터를 선택합니다.

이 외에도 여러 가지 옵션을 쿼리에 추가할 수 있습니다. 예를 들어 시계열이 여러 개인 경우 열을 정의하거나 ARIMA 모델 매개변수를 자동으로 검색할지 여부를 선택할 수 있습니다. 자세한 내용은 시계열 모델의 CREATE MODEL 문 구문 참조에서 확인할 수 있습니다.

4단계

우리 모델에 대해 좀 더 알아봅시다. 학습이 끝나면 다른 쿼리를 실행하여 필요에 따라 demo 부분을 다시 바꾸겠습니다.

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

결과를 해석해 보겠습니다. 각 행에는 매개변수 및 평가 통계와 함께 후보 모델이 표시됩니다. 결과는 모델 품질의 상대적 지표를 제공하는 AIC(Akaike 정보 기준)의 오름차순으로 반환됩니다. 따라서 첫 번째 행의 모델은 AIC가 가장 낮으며, 최상의 모델로 간주됩니다.

ARIMA 모델의 p, d, q 매개변수와 모델에서 발견된 계절성도 확인할 수 있습니다. 이 경우 상위 모델에는 주간 및 연간 시즌성이 모두 포함됩니다.

5b5b1e129c70a340.png

5단계

이제 ML.FORECAST 함수를 사용하여 예측할 준비가 되었습니다.

다음을 붙여넣거나 입력합니다 (필요한 경우 demo 대체).

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

이 쿼리는 단순히 모델을 사용하여 7일을 예측합니다. 아래에 반환된 7개 행을 확인할 수 있습니다. 예측에는 신뢰 구간도 포함됩니다. 기본값은 0.95이지만 쿼리에서 구성할 수 있습니다.

b8a7f22657dc2d27.png

수고하셨습니다. 몇 가지 BQML 쿼리만으로 시계열 모델을 만들었습니다.

6. 커스텀 예측 모델 빌드하기

이 섹션에서 수행할 작업은 다음과 같습니다.

  • 데이터에서 이상점 제거
  • 다단계 예측 수행하기
  • 시계열 모델에 추가 특성 포함
  • 시계열 예측을 위한 신경망 아키텍처 알아보기: LSTM 및 CNN
  • Holt-Winters 지수 평활화를 비롯한 통계 모델에 대해 알아보기
  • 앙상블 모델

1단계

Vertex AI Workbench에서 training-data-analyst/courses/ai-for-time-series/notebooks로 이동하여 02-model.ipynb을 엽니다.

2단계

노트북의 셀을 모두 지우고 (수정 > 모든 출력 지우기) 처음 몇 개의 셀 중 하나에서 리전, 프로젝트, 버킷 설정을 변경한 다음 셀을 하나씩 실행합니다.

3단계

이제 노트북에서 LSTM, CNN, 통계 모델 등 여러 모델 아키텍처를 살펴봤습니다. 각 모델에서 테스트 데이터에 대한 모델의 성능을 확인할 수 있습니다.

a528df58f4e6d372.png

7. 클라우드에서 학습 및 예측하기

이 섹션에서 수행할 작업은 다음과 같습니다.

  • 클라우드에서 학습을 위해 데이터 및 모델 준비
  • AI Platform Training을 사용하여 모델을 학습시키고 작업 진행 상황 모니터링
  • AI Platform Predictions에서 모델을 사용하여 예측

1단계

Vertex AI Workbench에서 training-data-analyst/courses/ai-for-time-series/notebooks로 이동하여 03-cloud-training.ipynb을 엽니다.

2단계

노트북의 셀을 모두 지우고 (수정 > 모든 출력 지우기) 처음 몇 개의 셀 중 하나에서 리전, 프로젝트, 버킷 설정을 변경한 다음 셀을 하나씩 실행합니다.

3단계

이전 섹션에서는 모델을 학습시키고 이를 사용하여 예측했으며, 이 모든 작업을 Workbench 노트북 내에서 수행했습니다. 이 섹션에서는 노트북에서 Vertex AI용 Python SDK를 사용하여 학습 및 배포에 Vertex AI 서비스를 사용하는 방법을 시연했습니다.

a3f6b5dc895a24fb.png

8. 도전과제

이 섹션에서는 배운 개념을 새 데이터 세트에 적용해 봅니다.

자세한 안내는 제공하지 않으며 원하는 경우 몇 가지 힌트만 제공합니다.

목표는 뉴욕시에서 발생하는 311건의 서비스 요청을 예측하는 것입니다. 이러한 긴급하지 않은 요청에는 소음 신고, 가로등 문제 등이 포함됩니다.

1단계

먼저 데이터 세트를 이해해 보겠습니다.

먼저 뉴욕시 311 서비스 요청 데이터 세트에 액세스합니다.

데이터를 더 잘 이해하기 위해 데이터 세트 설명에 나열된 샘플 쿼리를 사용해 보세요.

  • 아이스크림 트럭과 관련한 311 요청 건수는 얼마나 되나요?
  • 파티와 관련하여 311 요청이 가장 많은 날은 언제인가요?

BigQuery UI에서 쿼리 만들기를 선택하여 데이터 세트에 액세스하는 방법을 확인합니다. select 문은 bigquery-public-data.new_york_311.311_service_requests에서 쿼리합니다.

2단계

이제 시작할 준비가 되었습니다. 이 섹션에서 이 데이터를 사용하도록 탐색 및 시각화 노트북을 수정합니다.

힌트

  • 01-explore.ipynb 노트북을 복제하고 작업을 시작합니다.
  • 데이터를 탐색하려면 다음 쿼리를 사용해 보세요.
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • 월별 이슈 수를 가져오려면 다음 쿼리를 사용합니다.
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • 상수 섹션에서 열 변수를 업데이트합니다. 위 쿼리에서 타겟 열은 y이고 날짜 열은 ds입니다. 추가 기능은 없습니다.
  • 다음 실습을 위해 데이터를 내보낼 파일 이름을 변경해 보세요.
  • df.to_csv(YOUR-EXPORT-FILENAME, index=False)를 사용하여 데이터 내보내기

3단계

이제 월간 데이터로 시계열 모델을 만들어 보겠습니다.

힌트:

  • 02-model.ipynb 노트북을 복제하고 작업을 시작합니다.
  • 데이터 세트 매개변수를 업데이트합니다.
  • 새 데이터 세트와 일치하도록 target_colts_col 매개변수를 업데이트합니다.
  • 모델 매개변수를 업데이트합니다.
  • 월별 실행 빈도 (월 시작 코드는 'MS')
  • 입력 단계: 12 (전환 확인 기간: 12개월)
  • 출력 단계: 3 (3개월 후 예측)
  • 시즌: 12 (시즌성: 12개월)
  • 이전 노트북에서 입력 파일 이름을 변경한 경우 이 이름을 변경합니다.
  • 월 중간에 쿼리를 실행하면 마지막 달의 월별 총계가 예상보다 훨씬 낮아집니다. 이 실습의 목적에 맞게 df = df[:-1]를 사용하여 데이터 세트에서 마지막 달을 삭제해 보겠습니다.
  • 데이터에 명백한 이상점이 없으므로 해당 셀을 건너뛰거나 주석 처리합니다.
  • 이 새 모델의 LSTM 단위, CNN 필터, 커널 크기를 조정합니다.

9. 삭제

이 노트북을 계속 사용하려면 사용하지 않을 때 노트북을 끄는 것이 좋습니다. Cloud 콘솔의 Workbench UI에서 노트북을 선택한 후 중지를 선택합니다.

57213ef2edad9257.png

이 실습에서 만든 모든 리소스를 삭제하려면 워크벤치 노트북을 중지하는 대신 삭제하면 됩니다.

Cloud 콘솔의 탐색 메뉴를 사용하여 저장소로 이동한 다음 모델 애셋을 저장하기 위해 만든 두 버킷을 삭제합니다 (경고: 이 실습만을 위해 새 버킷을 만든 경우에만 삭제).