Prophet으로 예측

Prophet은 메타를 통해 유지되는 예측 모델입니다. 알고리즘 세부정보는 Prophet 자료, 라이브러리에 대한 자세한 내용은 해당 문서를 참조하세요.

BigQuery ML ARIMA_PLUS와 마찬가지로 Prophet은 각 시계열을 트렌드, 계절, 공휴일로 분할하고 이러한 모델의 예측 집계를 사용하여 예측을 생성하려고 시도합니다. 하지만 중요한 차이점은 BQML ARIMA+는 ARIMA를 사용하여 트렌드 구성요소를 모델링하는 반면 Prophet은 개별 로지스틱 또는 선형 모델을 사용하여 곡선에 맞추려 시도한다는 것입니다.

Google Cloud는 Prophet 모델 학습을 위한 파이프라인과 Prophet 모델에서 일괄 예측을 가져오기 위한 파이프라인을 제공합니다. 두 파이프라인 모두 Google Cloud 파이프라인 구성요소(GCPC)의 Vertex AI Pipelines의 인스턴스입니다.

Prophet을 Vertex AI와 통합하면 다음을 수행할 수 있습니다.

  • Vertex AI 데이터 분할윈도잉 전략을 사용합니다.
  • BigQuery 테이블 또는 Cloud Storage에 저장된 CSV에서 데이터를 읽습니다. Vertex AI는 각 행의 형식이 Vertex AI 예측과 동일한 형식을 가질 것으로 예상합니다.

Prophet은 다변량 모델이지만 Vertex AI는 일변량 버전만 지원합니다.

이 워크플로에 사용되는 서비스 계정에 대한 자세한 내용은 테이블 형식 워크플로의 서비스 계정을 참조하세요.

워크플로 API

이 워크플로에서는 다음 API를 사용합니다.

  • Vertex AI
  • Dataflow
  • BigQuery
  • Cloud Storage

Prophet으로 모델 학습

Prophet은 단일 시계열을 위해 설계되었습니다. Vertex AI는 시계열 ID로 데이터를 집계하고 각 시계열에 대해 Prophet 모델을 학습합니다. 모델 학습 파이프라인은 그리드 검색 및 Prophet의 기본 제공되는 백테스트 논리를 사용하여 초매개변수 조정을 수행합니다.

여러 시계열을 지원하기 위해 파이프라인은 Vertex AI 커스텀 학습 작업Dataflow를 사용하여 여러 Prophet 모델을 병렬로 학습합니다. 전반적으로 학습되는 모델 수는 시계열 수와 초매개변수 조정 시도 횟수의 곱입니다.

다음 샘플 코드에서는 Prophet 모델 학습 파이프라인을 실행하는 방법을 보여줍니다.

job = aiplatform.PipelineJob(
    ...
    template_path=train_job_spec_path,
    parameter_values=train_parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

job.run()의 선택사항인 service_account 매개변수를 사용하면 Vertex AI Pipelines 서비스 계정을 원하는 계정으로 설정할 수 있습니다.

파이프라인과 매개변수 값은 다음 함수로 정의됩니다.

(
    train_job_spec_path,
    train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
    ...
)

다음은 get_prophet_train_pipeline_and_parameters 매개변수의 하위 집합입니다.

매개변수 이름 유형 정의
project 문자열 프로젝트 ID
location 문자열 리전.
root_dir 문자열 출력을 저장할 Cloud Storage 위치입니다.
target_column 문자열 이 모델에서 예측할 열(값)입니다.
time_column 문자열 시간 열. 시간 열을 지정해야 하며 이 열에 모든 행의 값이 있어야 합니다. 시간 열은 지정된 관찰이 수행된 시간을 나타냅니다.
time_series_identifier_column 문자열 시계열 식별자 열입니다. 시계열 식별자 열을 지정해야 하며 이 열에는 모든 행의 값이 있어야 합니다. 예측 학습 데이터에는 일반적으로 여러 시계열이 포함되며, 식별자는 학습 데이터에서 지정된 관찰이 속한 시계열을 Vertex AI에 알려줍니다. 특정 시계열의 모든 행은 시계열 식별자 열의 값이 동일합니다. 일반적인 시계열 식별자는 제품 ID, 매장 ID 또는 리전일 수 있습니다. 시계열 식별자 열에 있는 모든 행에 동일한 값을 사용해서 단일 시계열로 예측 모델을 학습시키는 것이 가능합니다. 그러나 Vertex AI는 시계열이 두 개 이상 포함된 학습 데이터에 더 적합합니다. 최상의 결과를 얻으려면 모델을 학습시키는 데 사용되는 모든 열에 시계열을 10개 이상 사용합니다.
data_granularity_unit 문자열 학습 데이터, 예측 범위, 컨텍스트 윈도우의 세부사항에 사용할 단위입니다. minute, hour, day, week, month, 또는 year일 수 있습니다. 데이터 세부사항 선택 방법을 알아보세요.
data_source_csv_filenames 문자열 Cloud Storage에 저장된 CSV의 URI입니다.
data_source_bigquery_table_path 문자열 BigQuery 테이블의 URI입니다.
forecast_horizon 정수 예측 범위는 모델이 예측 데이터 각 행의 타겟 값 예측을 수행할 향후 기간을 결정합니다. 예측 범위는 데이터 세부사항 단위로 지정됩니다. 자세히 알아보기
optimization_objective 문자열 모델의 최적화 목표입니다. 자세히 알아보기
max_num_trials 정수 시계열당 수행할 최대 조정 시도 횟수입니다.

Dataflow 매개변수

다음은 Dataflow 맞춤설정을 위한 get_prophet_train_pipeline_and_parameters 매개변수의 하위 집합입니다.

매개변수 이름 유형 정의
trainer_dataflow_machine_type 문자열 학습에 사용할 Dataflow 머신 유형입니다.
trainer_dataflow_max_num_workers 정수 학습에 사용할 Dataflow 작업자의 최대 개수입니다.
evaluation_dataflow_machine_type 문자열 평가에 사용할 Dataflow 머신 유형입니다.
evaluation_dataflow_max_num_workers 정수 평가에 사용할 최대 Dataflow 작업자 수입니다.
dataflow_service_account 문자열 Dataflow 작업을 실행하기 위한 커스텀 서비스 계정입니다. 비공개 IP와 특정 VPC 서브넷을 사용하도록 Dataflow 작업은 비공개 IP와 특정 VPC 서브넷을 사용하도록 구성할 수 있습니다. 이 매개변수는 기본 Dataflow 작업자 서비스 계정을 재정의하는 역할을 합니다.

Prophet 학습 작업은 Dataflow에서 실행되므로 초기 시작 시간은 5~7분입니다. 추가 런타임을 줄이려면 수직 확장 또는 수평 확장을 수행할 수 있습니다. 예를 들어 수직 확장을 수행하려면 머신 유형을 n1-standard-1에서 e2-highcpu-8로 변경하면 됩니다. 수평 확장하려면 작업자 수를 1에서 200으로 늘릴 수 있습니다.

데이터 분할 매개변수

학습 파이프라인은 데이터 분할을 위해 다음과 같은 옵션을 제공합니다.

데이터 분할 설명 매개변수
기본 분할 Vertex AI는 학습 데이터 세트의 80%를 학습 세트로, 10%를 검증 세트로, 10%를 테스트 세트로 무작위 선택합니다. Vertex AI는 시간 열을 사용하여 데이터 행의 시간 순서를 결정합니다. 없음
비율 분할 Vertex AI는 사용자가 제공하는 값을 사용해서 데이터를 학습 세트, 검증 세트, 테스트 세트로 분할합니다. Vertex AI는 시간 열을 사용하여 데이터 행의 시간 순서를 결정합니다.
  • training_fraction
  • validation_fraction
  • test_fraction
타임스탬프 분할 Vertex AI는 training_fraction, validation_fraction, test_fraction 값을 사용하여 데이터를 학습 세트, 검증 세트, 테스트 세트로 분할합니다. Vertex AI는 timestamp_split_key 열을 사용하여 데이터 행의 시간 순서를 결정합니다.
  • training_fraction
  • validation_fraction
  • test_fraction
  • timestamp_split_key
수동(사전 정의) 분할 Vertex AI는 predefined_split_key 열의 TRAIN, VALIDATE, TEST 값을 사용하여 데이터를 분할합니다.
  • predefined_split_key

다음과 같이 get_prophet_train_pipeline_and_parameters에서 데이터 분할 매개변수를 정의합니다.

매개변수 이름 유형 정의
predefined_split_key 문자열 TRAIN, VALIDATE, TEST 값을 포함한 열의 이름입니다. 수동(사전 정의) 분할을 사용하는 경우 이 값을 설정합니다.
training_fraction 부동 소수점 학습 세트에 할당할 데이터의 백분율입니다. 비율 분할 또는 타임스탬프 분할을 사용하는 경우 이 값을 설정합니다.
validation_fraction 부동 소수점 검증 세트에 할당할 데이터의 백분율입니다. 비율 분할 또는 타임스탬프 분할을 사용하는 경우 이 값을 설정합니다.
test_fraction 부동 소수점 테스트 세트에 할당할 데이터의 백분율입니다. 비율 분할 또는 타임스탬프 분할을 사용하는 경우 이 값을 설정합니다.
timestamp_split_key 문자열 데이터 분할을 위해 타임스탬프가 포함된 열의 이름입니다. 타임스탬프 분할을 사용하는 경우 이 값을 설정합니다.

기간 매개변수

Vertex AI는 순환 기간 전략을 사용하여 입력 데이터에서 예측 기간을 생성합니다. 기간 매개변수를 설정하지 않은 상태로 두면 Vertex AI에서 기본 최대값이 100,000,000인 Count 전략을 사용합니다. 학습 파이프라인은 다음과 같은 순환 기간 전략을 제공합니다.

순환 기간 전략 설명 매개변수
개수 Vertex AI에서 생성된 구간 수는 사용자가 제공한 최댓값을 초과하지 않아야 합니다. 입력 데이터 세트의 행 수가 최대 구간 수보다 적으면 모든 행이 구간을 생성하는 데 사용됩니다. 그렇지 않으면 Vertex AI가 무작위 샘플링을 수행하여 행을 선택합니다. 최대 구간 수의 기본값은 100,000,000입니다. 최대 구간 수는 100,000,000개를 초과할 수 없습니다. window_max_count
스트라이드 Vertex AI는 모든 X 입력 행 중 하나를 사용하여 최대 100,000,000개의 구간을 생성합니다. 이 옵션은 계절별 또는 기간별 예측에 유용합니다. 예를 들어 스트라이드 길이 값을 7로 설정하여 예측을 특정 요일로 제한할 수 있습니다. 값은 1에서 1000 사이일 수 있습니다. window_stride_length
값이 True 또는 False인 열을 입력 데이터에 추가할 수 있습니다. Vertex AI는 열의 값이 True인 모든 입력 행의 구간을 생성합니다. True 행의 총 개수가 100,000,000 미만이면 TrueFalse 값을 원하는 순서로 설정할 수 있습니다. 불리언 값이 선호되지만 문자열 값도 허용됩니다. 문자열 값은 대소문자를 구분하지 않습니다. window_column

get_prophet_train_pipeline_and_parameters에서 기간 매개변수를 다음과 같이 정의합니다.

매개변수 이름 유형 정의
window_column 문자열 TrueFalse 값이 있는 열의 이름입니다.
window_stride_length 정수 스트라이드 길이의 값입니다.
window_max_count 정수 최대 윈도우 수입니다.

Prophet으로 예측 수행

Prophet을 위한 Vertex AI 모델 학습 파이프라인은 데이터의 각 시계열에 대해 하나의 Propet 모델을 만듭니다. 예측 파이프라인은 입력 데이터를 시계열 ID별로 집계하고 각 시계열에 대한 예측을 개별적으로 계산합니다. 그런 후 파이프라인은 Vertex AI 예측 형식과 일치하도록 예측 결과를 분리합니다.

다음 샘플 코드는 Prophet 예측 파이프라인을 실행하는 방법을 보여줍니다.

job = aiplatform.PipelineJob(
    ...
    template_path=prediction_job_spec_path,
    parameter_values=prediction_parameter_values,
    ...
)
job.run(...)

파이프라인과 매개변수 값은 다음 함수로 정의됩니다.

(
    prediction_job_spec_path,
    prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
    ...
)

다음은 get_prophet_prediction_pipeline_and_parameters 매개변수의 하위 집합입니다.

매개변수 이름 유형 정의
project 문자열 프로젝트 ID
location 문자열 리전.
model_name 문자열 모델 리소스의 이름입니다. 문자열의 형식을 projects/{project}/locations/{location}/models/{model}로 지정합니다.
time_column 문자열 시간 열. 시간 열을 지정해야 하며 이 열에 모든 행의 값이 있어야 합니다. 시간 열은 지정된 관찰이 수행된 시간을 나타냅니다.
time_series_identifier_column 문자열 시계열 식별자 열입니다. 시계열 식별자 열을 지정해야 하며 이 열에는 모든 행의 값이 있어야 합니다. 예측 학습 데이터에는 일반적으로 여러 시계열이 포함되며, 식별자는 학습 데이터에서 지정된 관찰이 속한 시계열을 Vertex AI에 알려줍니다. 특정 시계열의 모든 행은 시계열 식별자 열의 값이 동일합니다. 일반적인 시계열 식별자는 제품 ID, 매장 ID 또는 리전일 수 있습니다. 시계열 식별자 열에 있는 모든 행에 동일한 값을 사용해서 단일 시계열로 예측 모델을 학습시키는 것이 가능합니다. 그러나 Vertex AI는 시계열이 두 개 이상 포함된 학습 데이터에 더 적합합니다. 최상의 결과를 얻으려면 모델을 학습시키는 데 사용되는 모든 열에 시계열을 10개 이상 사용합니다.
target_column 문자열 이 모델에서 예측할 열(값)입니다.
data_source_csv_filenames 문자열 Cloud Storage에 저장된 CSV의 URI입니다.
data_source_bigquery_table_path 문자열 BigQuery 테이블의 URI입니다.
bigquery_destination_uri 문자열 원하는 대상 데이터 세트의 URI입니다. 이 값을 설정하지 않으면 리소스가 프로젝트에서 새 데이터 세트 아래에 생성됩니다.
machine_type 문자열 일괄 예측에 사용할 머신 유형입니다.
max_num_workers 정수 일괄 예측에 사용할 최대 작업자 수입니다.