이 소단원에서는 SAP HANA의 PAL(Predictive Analysis Library)에서 AdditiveModelForecast 알고리즘을 사용하여 단일 변량 시계열 예측 모델을 훈련합니다. 훈련된 SAP HANA PAL 모델을 사용하여 월별 집계 숙박 시간을 입력 데이터로 사용하고 미래 값을 예측합니다. 이 단계는 운영 시계열 예측을 위해 SAP HANA를 사용하는 기본 단계입니다.
SAP HANA용 Python 기계 학습 클라이언트(hana-ml)는 SAP HANA DataFrames 입력 데이터를 기반으로 사용할 수 있도록 Python의 모든 SAP HANA Predictive Analysis Library(PAL) 함수와 Automated Predictive Library(APL) 함수를 표시합니다.
다음으로, AdditiveModelForecast 알고리즘 [1]을 사용하여 월별 집계에 대한 시계열 모델을 훈련합니다.
12amf = AdditiveModelForecast()
amf.fit(data=hdf_overnightstays_agg)<hana_ml.algorithms.pal.tsa.addantive_model_forecast.AdditiveModelForecast - 0x1d9bdeefb00>
추가 모델 시계열 분석은 시계열 데이터를 예측하기 위해 추가 모델을 사용합니다. 강력한 계절적 효과로 데이터를 처리하며 이력 추세를 변화시킬 수 있습니다.
추가 모델 시계열 분석 - 'Prophet'이라고도 함 - 세 가지 주요 구성요소(추세, 계절적 변동, 휴일 또는 이벤트)가 있는 분해 가능한 시계열 모델을 사용합니다.
아래와 같이 그래픽 리포트를 보고 훈련된 모델을 탐색할 수 있습니다.
1UnifiedReport(amf).build().display()100%|███████████| 6/6 [00:51<00:00:00, 8.57s/it]

예측을 위한 SAP HANA 데이터 프레임 생성
지금까지는 예측이 생성되지 않았습니다. 예측을 생성하려면 먼저 예상할 일자/월이 포함된 SAP HANA DataFrame을 생성해야 합니다.
따라서 아래에 표시되는 훈련 데이터세트의 가장 최근 일자를 확인해야 합니다.
123str_lastdate = hdf_overnightstays_agg.tail(1, ref_col='MONTH').collect().iloc[0,0]
str_lastdate = str(str_lastdate)[0:10]
print(str_lastdate)2024-05-01
다음으로, 위에 나와 있는 알려진 마지막 일자/월을 기준으로 다음 12개월을 표시하는 SAP HANA DataFrame을 새로 생성합니다.
123456months_to_forecast=12
hdf_future = binomial(conn, n=1, p=1, num_random=months_to_forecast)
hdf_future = hdf_future.select('*', (f'''ADD_MONTHS(TO_DATE ('{str_lastdate}', 'YYYY-MM-DD'), ID+1)''', 'MONTH') )
hdf_future = hdf_future.select('MONTH', ('0', 'TARGET'))
hdf_future.head(20).collect()| MONTH | 대상 | |
|---|---|---|
| 0 | 2024-06-01 | 0 |
| 1 | 2024-07-01 | 0 |
| 2 | 2024-08-01 | 0 |
| 3 | 2024-09-01 | 0 |
| 4 | 2024-10-01 | 0 |
| 5 | 2024-11-01 | 0 |
| 6 | 2024-12-01 | 0 |
| 7 | 2025-01-01 | 0 |
| 8 | 2025-02-01 | 0 |
| 9 | 2025-03-01 | 0 |
| 10 | 2025-04-01 | 0 |
| 11 | 2025-05-01 | 0 |
코드에서 이항 사용을 기록합니다.
이항 함수는 SAP HANA 데이터베이스 내에서 직접 이항 분포에 따라 난수를 생성하도록 설계된 함수입니다. 생성되는 두 열은 ID 와 GENERATED_NUMBER 입니다.
함수에 제공된 매개 변수를 기반으로 생성된 숫자가 항상 1.0이며, 이 셀에서는 실제로 사용되지 않습니다. 유용한 열은 0부터 11까지의 연속된 숫자인 ID입니다(12개의 생성된 난수와 연결됨).
열 ID는 훈련 데이터세트의 last_date로 합산되므로 예측 일자를 계산할 때 유용합니다. ID+1"로 합산된 훈련 데이터세트의 last_date 가 MONTH 열의 값이 되고 이 값이 예측에 사용됩니다.
요약하면, 이항(binomial)의 사용은 예측을 위한 타임스탬프를 생성하는 중간 단계(과학이 아닌 기술적 단계)입니다.

훈련된 모델 적용
그런 다음 훈련된 시계열 모델을 적용하여 다음 12개월 동안의 오버나이트 숙박을 예측합니다.
12hdf_predicted = amf.predict(data=hdf_future)
hdf_predicted.head(5).collect()| MONTH | YHAT | YHAT_LOWER | YHAT_UPPER | |
|---|---|---|---|---|
| 0 | 2024-06-01 | 3.892362e+06 | 3.818124e+06 | 3.963618e+06 |
| 1 | 2024-07-01 | 4.786169e+06 | 4.713556e+06 | 4.852429e+06 |
| 2 | 2024-08-01 | 4.817140e+06 | 4.743560e+06 | 4.891867e+06 |
| 3 | 2024-09-01 | 3.776572e+06 | 3.702854e+06 | 3.850597e+06 |
| 4 | 2024-10-01 | 3.535125e+06 | 3.459114+06 | 3.610827e+06 |
아래 그림과 같이 그래픽 리포트에 예측을 시각화합니다.
훈련 데이터세트에서 식별된 반복 패턴이 명확하게 관찰됩니다. 대부분의 하룻밤 숙박은 여름이지만, 겨울 시즌에도 그 봉우리가 있다.
1UnifiedReport(amf).build().display()100%|███████████| 6/6 [00:50<00:00:00, 8.44s/it]

SAP HANA DataFrame에 과거 값과 예측 값 결합
마지막으로, 아래와 같이 과거 데이터세트와 예측 값을 단일 SAP HANA DataFrame에 병합합니다.
시계열의 완전하고 연속적인 뷰를 생성하려면 과거 데이터를 미래 예측과 결합하는 것이 좋습니다. 병합된 이 데이터세트는 추세를 시각화하거나, 비즈니스 이해관계자와 공유하거나, SAP Analytics Cloud와 같은 시스템에서 데이터에 액세스할 수 있도록 하는 데 사용할 수 있습니다.
1234567891011hdf_predicted = hdf_predicted.select('MONTH',
('NULL', 'OVERNIGHTSTAYS_SUM'),
('YHAT', 'FORECAST'),
('YHAT_LOWER', 'FORECAST_LOWER'),
('YHAT_UPPER', 'FORECAST_UPPER'))
hdf_overnightstays_agg = hdf_overnightstays_agg.select('*',
('NULL', 'FORECAST'),
('NULL', 'FORECAST_LOWER'),
('NULL', 'FORECAST_UPPER'))
hdf_all = hdf_predicted.union(hdf_overnightstays_agg)
hdf_all.sort('MONTH').tail(5).collect()| MONTH | OVERNIGHTSTAYS_SUM | 예측 | FORECAST_LOWER | FORECAST_UPPER | |
|---|---|---|---|---|---|
| 0 | 2025-01-01 | 없음 | 2.719344e+06 | 2.644614e+06 | 2.794261e+06 |
| 1 | 2025-02-01 | 없음 | 3.456029e+06 | 3.376482e+06 | 3.543326e+06 |
| 2 | 2025-03-01 | 없음 | 3.412205e+06 | 3.326795e+06 | 3.500738e+06 |
| 3 | 2025-04-01 | 없음 | 2.878771e+06 | 2.786906e+06 | 2.965247e+06 |
| 4 | 2025-05-01 | 없음 | 3.346712e+06 | 3.245006e+06 | 3.435816e+06 |
선택적으로, 병합된 데이터세트를 SAP HANA Cloud의 테이블에 저장할 수 있습니다. 예를 들어 SAP Analytics Cloud는 이러한 데이터에 액세스할 수 있습니다.
1hdf_all.save('OVERNIGHTSTAYS_FORECAST_TOTAL', force=True)<hana_ml.dataframe.DataFrame at 0x1d9c242e0c0>