ARIMA_PLUS 시계열 모델의 예측 값 한도

이 튜토리얼에서는 한도를 사용하여 ARIMA_PLUS 시계열 모델에서 반환하는 예측 결과의 범위를 좁히는 방법을 설명합니다. 이 튜토리얼에서는 동일한 데이터를 사용하여 두 개의 시계열 모델을 만듭니다. 하나는 한도를 사용하는 모델과 다른 하나는 한도를 사용하지 않는 모델입니다. 이를 통해 모델에서 반환된 결과를 비교하고 한도를 지정할 때의 차이점을 이해할 수 있습니다.

이 튜토리얼에서는 new_york.citibike_trips 데이터를 사용하여 모델을 학습시킵니다. 이 데이터 세트에는 Citi Bike를 이용한 뉴욕시 여행에 관한 정보가 포함되어 있습니다.

튜토리얼을 진행하기 전에 단일 시계열 예측을 잘 알고 있어야 합니다. 이 주제에 대한 소개는 Google 애널리틱스 데이터에서 단일 시계열 예측 튜토리얼을 완료하세요.

필수 권한

  • 데이터 세트를 만들려면 bigquery.datasets.create IAM 권한이 필요합니다.

  • 모델을 만들려면 다음 권한이 필요합니다.

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 추론을 실행하려면 다음 권한이 필요합니다.

    • bigquery.models.getData
    • bigquery.jobs.create

BigQuery에서 IAM 역할 및 권한에 대한 자세한 내용은 IAM 소개를 참조하세요.

목표

이 튜토리얼에서는 다음을 사용합니다.

비용

이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud구성요소를 사용합니다.

  • BigQuery
  • BigQuery ML

BigQuery 비용에 대한 자세한 내용은 BigQuery 가격 책정 페이지를 참조하세요.

BigQuery ML 비용에 대한 자세한 내용은 BigQuery ML 가격 책정을 참조하세요.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. 데이터 세트 만들기

    ML 모델을 저장할 BigQuery 데이터 세트를 만듭니다.

    콘솔

    1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

      BigQuery 페이지로 이동

    2. 탐색기 창에서 프로젝트 이름을 클릭합니다.

    3. 작업 보기 > 데이터 세트 만들기를 클릭합니다.

    4. 데이터 세트 만들기 페이지에서 다음을 수행합니다.

      • 데이터 세트 IDbqml_tutorial를 입력합니다.

      • 위치 유형에 대해 멀티 리전을 선택한 다음 US(미국 내 여러 리전)를 선택합니다.

      • 나머지 기본 설정은 그대로 두고 데이터 세트 만들기를 클릭합니다.

    bq

    새 데이터 세트를 만들려면 --location 플래그와 함께 bq mk 명령어를 실행합니다. 사용할 수 있는 전체 파라미터 목록은 bq mk --dataset 명령어 참조를 확인하세요.

    1. 데이터 위치가 US로 설정되고 설명이 BigQuery ML tutorial datasetbqml_tutorial 데이터 세트를 만듭니다.

      bq --location=US mk -d \
       --description "BigQuery ML tutorial dataset." \
       bqml_tutorial

      --dataset 플래그를 사용하는 대신 이 명령어는 -d 단축키를 사용합니다. -d--dataset를 생략하면 이 명령어는 기본적으로 데이터 세트를 만듭니다.

    2. 데이터 세트가 생성되었는지 확인합니다.

      bq ls

    API

    데이터 세트 리소스가 정의된 datasets.insert 메서드를 호출합니다.

    {
      "datasetReference": {
         "datasetId": "bqml_tutorial"
      }
    }

    BigQuery DataFrames

    이 샘플을 사용해 보기 전에 BigQuery DataFrames를 사용하여 BigQuery 빠른 시작의 BigQuery DataFrames 설정 안내를 따르세요. 자세한 내용은 BigQuery DataFrames 참고 문서를 확인하세요.

    BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 ADC 설정을 참조하세요.

    import google.cloud.bigquery
    
    bqclient = google.cloud.bigquery.Client()
    bqclient.create_dataset("bqml_tutorial", exists_ok=True)

    예측하려는 시계열 시각화

    모델을 만들기 전에 입력 시계열의 모양을 확인하는 것이 좋습니다.

    SQL

    다음 쿼리에서 FROM bigquery-public-data.new_york.citibike_trips 절은 new_york 데이터 세트에서 citibike_trips 테이블을 쿼리 중임을 나타냅니다.

    SELECT 문에서 쿼리는 EXTRACT 함수를 사용하여 starttime 열에서 날짜 정보를 추출합니다. 이 쿼리는 COUNT(*) 절을 사용하여 일간 총 도심 자전거 여행 수를 가져옵니다.

    #standardSQL
    SELECT
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    GROUP BY date

    쿼리를 실행하려면 다음 단계를 따르세요.

    1. Google Cloud 콘솔에서 새 쿼리 작성 버튼을 클릭합니다.

    2. 쿼리 편집기에 다음과 같은 GoogleSQL 쿼리를 입력합니다.

      #standardSQL
      SELECT
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
      FROM
       `bigquery-public-data`.new_york.citibike_trips
      GROUP BY date
    3. 실행을 클릭합니다. 다음과 유사한 쿼리 결과가 표시됩니다.

      쿼리 출력

    4. Google Cloud 콘솔을 사용하여 시계열 데이터를 차트로 표시합니다. 쿼리 결과 창에서 시각화 탭을 클릭합니다. 시각화 구성 창에서 시각화 유형으로 막대를 선택합니다.

      Result_visualization.

    BigQuery DataFrames

    이 샘플을 사용해 보기 전에 BigQuery DataFrames를 사용하여 BigQuery 빠른 시작의 BigQuery DataFrames 설정 안내를 따르세요. 자세한 내용은 BigQuery DataFrames 참고 문서를 확인하세요.

    BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 ADC 설정을 참조하세요.

    다음 샘플에서 bigquery-public-data.new_york.citibike_tripsnew_york 데이터 세트에서 citibike_trips 테이블을 쿼리 중임을 나타냅니다.

    import bigframes.pandas as bpd
    
    df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips")
    
    features = bpd.DataFrame(
        {
            "num_trips": df.starttime,
            "date": df["starttime"].dt.date,
        }
    )
    num_trips = features.groupby(["date"]).count()
    
    num_trips.plot.line()

    결과는 다음과 비슷합니다. Result_visualization

    시계열 모델 만들기

    NYC 도심 자전거 여행 데이터를 사용해서 시계열 모델을 만듭니다.

    다음 GoogleSQL 쿼리는 일간 총 자전거 여행 수를 예측하는 모델을 만듭니다. CREATE MODEL 문은 bqml_tutorial.nyc_citibike_arima_model이라는 모델을 만들고 학습시킵니다.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
      OPTIONS (
        model_type = 'ARIMA_PLUS',
        time_series_timestamp_col = 'date',
        time_series_data_col = 'num_trips',
        time_series_id_col = 'start_station_id')
    AS
    SELECT
      EXTRACT(DATE FROM starttime) AS date,
      COUNT(*) AS num_trips,
      start_station_id
    FROM
      `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;

    OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) 절은 ARIMA 기반 시계열 모델을 만들고 있음을 나타냅니다. 기본적으로 auto_arima=TRUE이므로 auto.ARIMA 알고리즘이 ARIMA_PLUS 모델에서 초매개변수를 자동으로 조정합니다. 이 알고리즘은 후보 모델 십여 개를 접합하고 Akaike 정보 기준(AIC)가 가장 낮은 최적 후보를 선택합니다. 또한 기본값이 data_frequency='AUTO_FREQUENCY'이므로 학습 프로세스가 입력 시계열의 데이터 빈도를 자동으로 추론합니다. CREATE MODEL 문은 기본적으로 decompose_time_series=TRUE를 사용하므로 시계열의 기록과 예측 부분이 모두 모델에 저장됩니다. time_series_id_col = 'start_station_id' 매개변수를 설정하면 모델이 start_station_id를 기반으로 단일 쿼리를 사용하여 여러 시계열을 접합하고 예측합니다. 이 정보를 사용하여 계절성 기간과 같은 개별 시계열 구성요소를 가져와 시계열이 예측되는 방식을 더 자세히 이해할 수 있습니다.

    CREATE MODEL 쿼리를 실행하여 모델을 만들고 학습시킵니다.

    1. Google Cloud 콘솔에서 새 쿼리 작성 버튼을 클릭합니다.

    2. 쿼리 편집기에 다음과 같은 GoogleSQL 쿼리를 입력합니다.

      #standardSQL
      CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
      OPTIONS (
        model_type = 'ARIMA_PLUS',
        time_series_timestamp_col = 'date',
        time_series_data_col = 'num_trips',
        time_series_id_col = 'start_station_id')
      AS
      SELECT
      EXTRACT(DATE FROM starttime) AS date,
      COUNT(*) AS num_trips,
      start_station_id
      FROM
      `bigquery-public-data`.new_york.citibike_trips
      WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
      GROUP BY date, start_station_id;
    3. 실행을 클릭합니다.

      이 쿼리는 완료하는 데 약 80초가 소요되며 이후에는 (nyc_citibike_arima_model) 모델에 액세스할 수 있습니다. 이 쿼리에서는 CREATE MODEL 문을 사용하여 모델을 만들므로 쿼리 결과가 없습니다.

    시계열 예측 및 결과 시각화

    시계열이 예측되는 방식을 설명하려면 ML.FORECAST 함수를 사용하여 계절성 및 트렌드와 같은 하위 시계열 구성요소를 시각화합니다.

    이를 위해 다음 단계를 따르세요.

    1. Google Cloud 콘솔에서 새 쿼리 작성 버튼을 클릭합니다.

    2. 쿼리 편집기에 다음과 같은 GoogleSQL 쿼리를 입력합니다.

      #standardSQL
      SELECT
      forecast_timestamp AS forecast_timestamp,
      start_station_id AS start_station_id,
      history_value AS history_value,
      forecast_value AS forecast_value
      FROM
      (
        (
           SELECT
           DATE(forecast_timestamp) AS forecast_timestamp,
           NULL AS history_value,
           forecast_value AS forecast_value,
           start_station_id AS start_station_id,
           FROM
           ML.FORECAST(
              MODEL bqml_tutorial.`nyc_citibike_arima_model`,
              STRUCT(
                 365 AS horizon,
                 0.9 AS confidence_level))
        )
        UNION ALL
        (
           SELECT
           DATE(date_name) AS forecast_timestamp,
           num_trips AS history_value,
           NULL AS forecast_value,
           start_station_id AS start_station_id,
           FROM
           (
              SELECT
                 EXTRACT(DATE FROM starttime) AS date_name,
                 COUNT(*) AS num_trips,
                 start_station_id AS start_station_id
              FROM
                 `bigquery-public-data`.new_york.citibike_trips
              WHERE
                 starttime > '2014-07-11'
                 AND starttime < '2015-02-11'
              GROUP BY
                 date_name, start_station_id
           )
        )
      )
      WHERE start_station_id = 79
      ORDER BY
      forecast_timestamp, start_station_id
    3. 실행을 클릭합니다. 다음과 유사한 쿼리 결과가 표시됩니다.

      BQUI_chart.

    4. Google Cloud 콘솔을 사용하여 시계열 데이터를 차트로 표시합니다. 쿼리 결과 창에서 시각화 탭을 클릭합니다.

      Result_visualization.

    이 차트는 일간 총 도심 자전거 여행 수에 대한 예측 값을 표시하며 start_station_id=79가 음수이므로 유용하지 않습니다. 대신 모델을 한도와 함께 사용하면 예측 데이터가 향상됩니다.

    한도가 있는 시계열 모델 만들기

    NYC 도심 자전거 여행 데이터를 사용하여 한도가 있는 시계열 모델을 만듭니다.

    다음 GoogleSQL 쿼리는 일간 총 자전거 여행 수를 예측하는 모델을 만듭니다. CREATE MODEL 문은 bqml_tutorial.nyc_citibike_arima_model_with_limits이라는 모델을 만들고 학습시킵니다. 이 모델과 이전에 만든 모델의 주요 차이점은 forecast_limit_lower_bound=0 옵션이 추가된다는 점입니다. 이 옵션을 사용하면 모델이 time_series_data_col 인수로 지정된 열의 값(이 경우 num_trips)을 기반으로 0보다 큰 값만 예측합니다.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
       OPTIONS (
          model_type = 'ARIMA_PLUS',
          time_series_timestamp_col = 'date',
          time_series_data_col = 'num_trips',
          time_series_id_col = 'start_station_id',
          forecast_limit_lower_bound = 0)
       AS
       SELECT
       EXTRACT(DATE FROM starttime) AS date,
       COUNT(*) AS num_trips,
       start_station_id
       FROM
       `bigquery-public-data`.new_york.citibike_trips
       WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
       GROUP BY date, start_station_id;

    CREATE MODEL 쿼리를 실행하여 모델을 만들고 학습시킵니다.

    1. Google Cloud 콘솔에서 새 쿼리 작성 버튼을 클릭합니다.

    2. 쿼리 편집기에 다음과 같은 GoogleSQL 쿼리를 입력합니다.

      #standardSQL
      CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
      OPTIONS (
        model_type = 'ARIMA_PLUS',
        time_series_timestamp_col = 'date',
        time_series_data_col = 'num_trips',
        time_series_id_col = 'start_station_id',
        forecast_limit_lower_bound = 0)
      AS
      SELECT
      EXTRACT(DATE FROM starttime) AS date,
      COUNT(*) AS num_trips,
      start_station_id
      FROM
      `bigquery-public-data`.new_york.citibike_trips
      WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
      GROUP BY date, start_station_id;
    3. 실행을 클릭합니다.

      이 쿼리는 완료하는 데 약 100초가 소요되며 이후에는 (nyc_citibike_arima_model_with_limits) 모델에 액세스할 수 있습니다. 이 쿼리에서는 CREATE MODEL 문을 사용하여 모델을 만들므로 쿼리 결과가 없습니다.

    한도가 있는 모델을 사용하여 시계열 예측

    1. Google Cloud 콘솔에서 새 쿼리 작성 버튼을 클릭합니다.

    2. 쿼리 편집기에 다음과 같은 GoogleSQL 쿼리를 입력합니다.

      #standardSQL
      SELECT
      forecast_timestamp AS forecast_timestamp,
      start_station_id AS start_station_id,
      history_value AS history_value,
      forecast_value AS forecast_value
      FROM
      (
        (
           SELECT
           DATE(forecast_timestamp) AS forecast_timestamp,
           NULL AS history_value,
           forecast_value AS forecast_value,
           start_station_id AS start_station_id,
           FROM
           ML.FORECAST(
              MODEL bqml_tutorial.`nyc_citibike_arima_model`,
              STRUCT(
                 365 AS horizon,
                 0.9 AS confidence_level))
        )
        UNION ALL
        (
           SELECT
           DATE(date_name) AS forecast_timestamp,
           num_trips AS history_value,
           NULL AS forecast_value,
           start_station_id AS start_station_id,
           FROM
           (
              SELECT
                 EXTRACT(DATE FROM starttime) AS date_name,
                 COUNT(*) AS num_trips,
                 start_station_id AS start_station_id
              FROM
                 `bigquery-public-data`.new_york.citibike_trips
              WHERE
                 starttime > '2014-07-11'
                 AND starttime < '2015-02-11'
              GROUP BY
                 date_name, start_station_id
           )
        )
      )
      WHERE start_station_id = 79
      ORDER BY forecast_timestamp, start_station_id
    3. 실행을 클릭합니다.

      BQUI_chart.

    4. Google Cloud 콘솔을 사용하여 시계열 데이터를 차트로 표시합니다. 쿼리 결과 창에서 시각화 탭을 클릭합니다.

      Result_visualization.

    ARIMA PLUS 모델에서 일간 총 도심 자전거 여행 수를 감지하며 start_station_id=79가 감소하고 있습니다. 향후 예측 값은 이 추세를 따르고 더 먼 미래로 갈수록 상대적으로 더 작은 예측 수치를 제공합니다. 이 차트는 총 도심 자전거 여행 수의 예측 값을 표시하며 start_station_id=79가 양수이므로 더 유용합니다. 한도가 있는 모델은 일간 총 도심 자전거 여행 수를 감지하며 start_station_id=79가 감소하고 있지만 여전히 의미 있는 예측 값을 제공합니다.

    이 튜토리얼에 나와 있는 것처럼 forecast_limit_lower_boundforecast_limit_upper_bound 옵션을 사용하면 주가나 향후 판매 수치를 예측할 때와 같이 여기에 표시된 것과 유사한 시나리오에서 더 의미 있는 예측 값을 얻는 데 도움이 될 수 있습니다.

    데이터 세트 삭제

    프로젝트를 삭제하면 프로젝트의 데이터 세트와 테이블이 모두 삭제됩니다. 프로젝트를 다시 사용하려면 이 튜토리얼에서 만든 데이터 세트를 삭제할 수 있습니다.

    1. 필요한 경우Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.

      BigQuery 페이지로 이동

    2. 앞서 만든 bqml_tutorial 데이터 세트를 탐색에서 선택합니다.

    3. 창의 오른쪽에 있는 데이터 세트 삭제를 클릭합니다. 데이터 세트, 테이블, 모든 데이터가 삭제됩니다.

    4. 데이터 세트 삭제 대화상자에서 데이터 세트 이름(bqml_tutorial)을 입력하고 삭제를 클릭하여 삭제 명령어를 확인합니다.

    프로젝트 삭제

    프로젝트를 삭제하는 방법은 다음과 같습니다.

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    다음 단계