다중 시계열 예측을 위한 데이터 준비

Objective

After completing this lesson, you will be able to 여러 시계열 예측을 지원하도록 데이터세트를 구성하고 그룹화하는 방법을 설명합니다.

복수 예측을 위한 데이터 구조화

단일 변량 예측에서는 모든 숙박이 하나의 결합된 시계열로 모델링되었습니다. 그러나 실제 시나리오에서는 지역, 제품 또는 거주 국가와 같은 각 하위 그룹에 대해 별도의 예측이 필요한 경우가 많습니다. 이 소단원에서는 국가별로 데이터를 필터링하고 집계하여 그룹화된 시계열 예측을 지원하도록 데이터세트를 준비하는 방법에 대해 알아봅니다.

다변량 시나리오를 위한 데이터세트 준비

이전 섹션에서는 모든 숙박일을 월별 값으로 집계하고 다음 12개월을 예측한 단일 변량 시계열 모델링 시나리오에 초점을 맞췄습니다.

이 섹션에서는 대부분의 방문자가 오는 국가에 대한 개별 예측을 생성하는 다변량 시계열 모델링 시나리오를 중점적으로 살펴봅니다.

따라서 숙박이 가장 많은 상위 10개 국가에 대해 알아보겠습니다.

Code Snippet
12
hdf_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 절"에 대해 쉼표로 구분된 값 리스트를 생성하는 것입니다.

Code Snippet
12345678
countries = 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개 국가에 대한 정보만 보관합니다.

다음으로 데이터세트를 다시 집계하지만 이번에는 모두 월과 국가별로 집계합니다. 따라서 국가별 예측을 생성할 수 있습니다.

Code Snippet
12
hdf_overnightstays = hdf_overnightstays.filter(f'''"COUNTRYOFRESIDENCE" IN {countries}''') hdf_overnightstays.head(10).collect()
 MONTHREGIONCOUNTRYOFRESIDENCE당좌 대월
02022-01-01프리부르 주인도0
12022-01-01Graubünden이탈리아10083
22022-01-01Graubünden스페인1586
32022-01-01스위스 동부이탈리아1167
42022-01-01스위스 동부스페인212
52022-01-01취리히 주스페인2949
62022-01-01Lucerne / Lake Lucerne스페인523
72022-01-01바젤 지역이탈리아1356
82022-01-01바젤 지역스페인672
92022-01-01베른 주이탈리아2724

이제 오버나이트 숙박이 아래와 같이 월별 및 국가별로 집계됩니다.

Code Snippet
123
hdf_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()
 MONTHCOUNTRYOFRESIDENCEOVERNIGHTSTAYS_SUM
02022-01-01인도4701
12022-01-01프랑스63084
22022-01-01이탈리아43065
32022-01-01독일206477
42022-01-01벨기에26172

그런 다음 다음과 같이 각 국가별로 오버나이트 숙박 시간을 표시하기 위한 데이터세트를 준비해 보겠습니다.

Code Snippet
12
hdf_overnightstays_plot = hdf_overnightstays_agg.pivot_table(values='OVERNIGHTSTAYS_SUM', index='MONTH', columns='COUNTRYOFRESIDENCE', aggfunc='sum').collect() hdf_overnightstays.collect()
 MONTHREGIONCOUNTRYOFRESIDENCE당좌 대월
02022-01-01프리부르 주인도0
12022-01-01Graubünden이탈리아10083
22022-01-01Graubünden스페인1586
32022-01-01스위스 동부이탈리아1167
42022-01-01스위스 동부스페인212
...............
37652024-05-01제네바 주인도6887
37662024-05-01발레 주인도4866
37672024-05-01티치노 주인도2215
37682024-05-01프리부르 주인도157
37692024-05-01Aargau 및 Solothurn 지역인도3954

3770행 × 4열

플롯은 다음과 같이 생성됩니다.

Code Snippet
12345
hdf_overnightstays_plot.plot(x='MONTH').legend(loc='center left',bbox_to_anchor=(1.0, 0.5)); plt.xticks(rotation='vertical') plt.grid() plt.show()
10개국 각 시간에 따라 야간 숙박과 관련된 데이터를 보여주는 선 그래프

이전 플롯은 밀집되어 있습니다. 따라서 가장 인기 있는 2위권 외국에 집중하기로 한다.

다음으로 독일과 미국에 대해서만 플롯을 생성합니다.

Code Snippet
12345
hdf_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()
독일과 미국의 시간에 따른 숙박 관련 데이터를 보여주는 선 그래프

위의 플롯을 보면 여름 시즌이 더 뚜렷해지는 양국의 하룻밤 체류에서 유사점을 파악한다.

각 국가에 대한 개별 예측은 이러한 개별 패턴을 캡처할 수 있습니다.