단일 변량 예측에서는 모든 숙박이 하나의 결합된 시계열로 모델링되었습니다. 그러나 실제 시나리오에서는 지역, 제품 또는 거주 국가와 같은 각 하위 그룹에 대해 별도의 예측이 필요한 경우가 많습니다. 이 소단원에서는 국가별로 데이터를 필터링하고 집계하여 그룹화된 시계열 예측을 지원하도록 데이터세트를 준비하는 방법에 대해 알아봅니다.
다변량 시나리오를 위한 데이터세트 준비
이전 섹션에서는 모든 숙박일을 월별 값으로 집계하고 다음 12개월을 예측한 단일 변량 시계열 모델링 시나리오에 초점을 맞췄습니다.
이 섹션에서는 대부분의 방문자가 오는 국가에 대한 개별 예측을 생성하는 다변량 시계열 모델링 시나리오를 중점적으로 살펴봅니다.
따라서 숙박이 가장 많은 상위 10개 국가에 대해 알아보겠습니다.
12hdf_overnightstays = conn.table('OVERNIGHTSTAYS')
hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'TOTAL')], group_by='COUNTRYOFRESIDENCE' ).sort('TOTAL', desc=True).head(10).collect()| COUNTRYOFRESIDENCE | 총계(Total) | |
|---|---|---|
| 0 | 스위스 | 50087144 |
| 1 | 독일 | 8885041 |
| 2 | 미국 | 6365130 |
| 3 | 영국 | 3726785 |
| 4 | 프랑스 | 3279915 |
| 5 | 이탈리아 | 2027511 |
| 6 | 네덜란드 | 1676202 |
| 7 | 벨기에 | 1282186 |
| 8 | 인도 | 1210124 |
| 9 | 스페인 | 1056512 |
앞서 언급한 국가 리스트를 전체 테이블의 필터로 사용해야 합니다.
이를 위해 아래와 같이 "where 절"에 대해 쉼표로 구분된 값 리스트를 생성하는 것입니다.
12345678countries = hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'TOTAL')], group_by='COUNTRYOFRESIDENCE') \
.sort('TOTAL', desc=True).select('COUNTRYOFRESIDENCE').head(10).collect() \
.iloc[:,0].tolist()
countries = str(countries)
countries = countries.replace('[', '(')
countries = countries.replace(']', ')')
countries"('스위스', '독일', '미국', '영국', '프랑스', '이탈리아', '네덜란드', '벨기에', '인도', '스페인')"
현재 SAP HANA DataFrame은 앞서 언급한 상위 10개 국가에 대한 정보만 보관합니다.
다음으로 데이터세트를 다시 집계하지만 이번에는 모두 월과 국가별로 집계합니다. 따라서 국가별 예측을 생성할 수 있습니다.
12hdf_overnightstays = hdf_overnightstays.filter(f'''"COUNTRYOFRESIDENCE" IN {countries}''')
hdf_overnightstays.head(10).collect()| MONTH | REGION | COUNTRYOFRESIDENCE | 당좌 대월 | |
|---|---|---|---|---|
| 0 | 2022-01-01 | 프리부르 주 | 인도 | 0 |
| 1 | 2022-01-01 | Graubünden | 이탈리아 | 10083 |
| 2 | 2022-01-01 | Graubünden | 스페인 | 1586 |
| 3 | 2022-01-01 | 스위스 동부 | 이탈리아 | 1167 |
| 4 | 2022-01-01 | 스위스 동부 | 스페인 | 212 |
| 5 | 2022-01-01 | 취리히 주 | 스페인 | 2949 |
| 6 | 2022-01-01 | Lucerne / Lake Lucerne | 스페인 | 523 |
| 7 | 2022-01-01 | 바젤 지역 | 이탈리아 | 1356 |
| 8 | 2022-01-01 | 바젤 지역 | 스페인 | 672 |
| 9 | 2022-01-01 | 베른 주 | 이탈리아 | 2724 |
이제 오버나이트 숙박이 아래와 같이 월별 및 국가별로 집계됩니다.
123hdf_overnightstays_agg = hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'OVERNIGHTSTAYS_SUM')], group_by=['MONTH', 'COUNTRYOFRESIDENCE'])
hdf_overnightstays_agg = hdf_overnightstays_agg.sort('MONTH')
hdf_overnightstays_agg.head(5).collect()| MONTH | COUNTRYOFRESIDENCE | OVERNIGHTSTAYS_SUM | |
|---|---|---|---|
| 0 | 2022-01-01 | 인도 | 4701 |
| 1 | 2022-01-01 | 프랑스 | 63084 |
| 2 | 2022-01-01 | 이탈리아 | 43065 |
| 3 | 2022-01-01 | 독일 | 206477 |
| 4 | 2022-01-01 | 벨기에 | 26172 |
그런 다음 다음과 같이 각 국가별로 오버나이트 숙박 시간을 표시하기 위한 데이터세트를 준비해 보겠습니다.
12hdf_overnightstays_plot = hdf_overnightstays_agg.pivot_table(values='OVERNIGHTSTAYS_SUM', index='MONTH', columns='COUNTRYOFRESIDENCE', aggfunc='sum').collect()
hdf_overnightstays.collect()| MONTH | REGION | COUNTRYOFRESIDENCE | 당좌 대월 | |
|---|---|---|---|---|
| 0 | 2022-01-01 | 프리부르 주 | 인도 | 0 |
| 1 | 2022-01-01 | Graubünden | 이탈리아 | 10083 |
| 2 | 2022-01-01 | Graubünden | 스페인 | 1586 |
| 3 | 2022-01-01 | 스위스 동부 | 이탈리아 | 1167 |
| 4 | 2022-01-01 | 스위스 동부 | 스페인 | 212 |
| ... | ... | ... | ... | ... |
| 3765 | 2024-05-01 | 제네바 주 | 인도 | 6887 |
| 3766 | 2024-05-01 | 발레 주 | 인도 | 4866 |
| 3767 | 2024-05-01 | 티치노 주 | 인도 | 2215 |
| 3768 | 2024-05-01 | 프리부르 주 | 인도 | 157 |
| 3769 | 2024-05-01 | Aargau 및 Solothurn 지역 | 인도 | 3954 |
3770행 × 4열
플롯은 다음과 같이 생성됩니다.
12345hdf_overnightstays_plot.plot(x='MONTH').legend(loc='center left',bbox_to_anchor=(1.0, 0.5));
plt.xticks(rotation='vertical')
plt.grid()
plt.show()
이전 플롯은 밀집되어 있습니다. 따라서 가장 인기 있는 2위권 외국에 집중하기로 한다.
다음으로 독일과 미국에 대해서만 플롯을 생성합니다.
12345hdf_overnightstays_plot[['MONTH', 'Germany', 'United States']].plot(x='MONTH').legend(loc='center left',bbox_to_anchor=(1.0, 0.5));
plt.xticks(rotation='vertical')
plt.grid()
plt.show()
위의 플롯을 보면 여름 시즌이 더 뚜렷해지는 양국의 하룻밤 체류에서 유사점을 파악한다.
각 국가에 대한 개별 예측은 이러한 개별 패턴을 캡처할 수 있습니다.