Préparation des données pour la prévision de plusieurs séries temporelles

Objective

After completing this lesson, you will be able to expliquez comment organiser et regrouper le jeu de données pour prendre en charge la prévision de plusieurs séries temporelles.

Structuration des données pour plusieurs prévisions

Dans la prévision univariée, nous avons modélisé toutes les nuitées comme une série chronologique combinée. Cependant, les scénarios réels nécessitent souvent des prévisions distinctes pour chaque sous-groupe, telles que les régions, les produits ou, dans ce cas, les pays de résidence. Dans cette leçon, vous apprendrez à préparer le jeu de données pour prendre en charge la prévision de séries temporelles groupées en filtrant et en agrégeant les données par pays.

Préparation de l'ensemble de données pour le scénario multivarié

Dans la section précédente, nous nous sommes concentrés sur le scénario de modélisation de séries chronologiques univariées dans lequel nous avons agrégé toutes les nuitées restantes en valeurs mensuelles et prévu les 12 mois suivants.

Dans cette section, nous nous concentrons sur le scénario de modélisation de séries temporelles multivariées dans lequel nous créons des prévisions individuelles pour les pays d'où viennent la plupart des visiteurs.

Par conséquent, découvrons le top 10 des pays avec le plus de nuitées.

Code Snippet
12
hdf_overnightstays = conn.table('OVERNIGHTSTAYS') hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'TOTAL')], group_by='COUNTRYOFRESIDENCE' ).sort('TOTAL', desc=True).head(10).collect()
 COUNTRYOFRESIDENCETOTAL
0Suisse50087144
1Allemagne8885041
2United States6365130
3Royaume-Uni3726785
4France3279915
5Italie2027511
6Pays-Bas1676202
7Belgique1282186
8Inde1210124
9Espagne1056512

Nous devons utiliser la liste des pays susmentionnés comme filtre sur l'ensemble de la table.

Pour ce faire, vous pouvez créer une liste de valeurs séparées par des virgules pour une "clause where" comme indiqué ci-dessous :

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

"('Suisse', 'Allemagne', 'États-Unis', 'Royaume-Uni', 'France', 'Italie', 'Pays-Bas', 'Belgique', 'Inde', 'Espagne')"

Pour le moment, le DataFrame SAP HANA contient uniquement des informations sur les 10 premiers pays susmentionnés.

Ensuite, nous agrégeons à nouveau le jeu de données, mais cette fois-ci par mois et par pays. Par conséquent, nous sommes en mesure de créer des prévisions propres à chaque pays.

Code Snippet
12
hdf_overnightstays = hdf_overnightstays.filter(f'''"COUNTRYOFRESIDENCE" IN {countries}''') hdf_overnightstays.head(10).collect()
 MOISREGIONCOUNTRYOFRESIDENCEOVERNIGHTSTAYS
02022-01-01Oblast de FribourgInde0
101/01/2022GrisonsItalie10083
201/01/2022GrisonsEspagne1586
301/01/2022Suisse orientaleItalie1167
401/01/2022Suisse orientaleEspagne212
501/01/2022Région de ZurichEspagne2949
601/01/2022Lucerne / Lac de LucerneEspagne523
701/01/2022Région de BâleItalie1356
801/01/2022Région de BâleEspagne672
901/01/2022Région de BerneItalie2724

Maintenant, nous agrégeons les nuitées par mois et par pays comme indiqué ci-dessous :

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()
 MOISCOUNTRYOFRESIDENCESOMMES_HTSTAYS_OVERNIGHTSTAYS
001/01/2022Inde4701
101/01/2022France63084
201/01/2022Italie43065
301/01/2022Allemagne206477
401/01/2022Belgique26172

Préparons ensuite l'ensemble de données pour tracer les nuitées dans le temps pour chaque pays comme suit :

Code Snippet
12
hdf_overnightstays_plot = hdf_overnightstays_agg.pivot_table(values='OVERNIGHTSTAYS_SUM', index='MONTH', columns='COUNTRYOFRESIDENCE', aggfunc='sum').collect() hdf_overnightstays.collect()
 MOISREGIONCOUNTRYOFRESIDENCEOVERNIGHTSTAYS
001/01/2022Oblast de FribourgInde0
101/01/2022GrisonsItalie10083
201/01/2022GrisonsEspagne1586
301/01/2022Suisse orientaleItalie1167
401/01/2022Suisse orientaleEspagne212
...............
37652024-05-01GenèveInde6887
376601/05/2024ValaisInde4866
376701/05/2024TessinInde2215
376801/05/2024Oblast de FribourgInde157
376901/05/2024Région d'Argovie et de SoleureInde3954

3770 lignes × 4 colonnes

Nous générons le tracé comme suit :

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()
Graphique linéaire montrant les données relatives aux nuitées en fonction du temps pour chacun des 10 pays

L'intrigue précédente est densément peuplée. Ainsi, nous décidons de nous concentrer sur les deux premiers pays étrangers les plus populaires.

Ensuite, nous créons un complot uniquement pour l'Allemagne et les États-Unis.

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()
Graphique linéaire affichant les données relatives aux nuitées en fonction du temps pour l'Allemagne et les États-Unis

En regardant l'intrigue ci-dessus, nous identifions des similitudes dans les nuitées pour les deux pays, où la saison estivale est plus évidente.

Les prévisions individuelles pour chaque pays peuvent saisir ces modèles individuels.