Comment calculer un forecast ?
Calculer un forecast, c'est transformer en valeur notre analyse de l'avenir.
Pour que cette valeur soit robuste et ait du sens, il faut une méthode de calcul.
Méthodologie de création
La construction d'un modÚle de prévision doit répondre aux conditions suivantes. La méthode doit :
- Produire une prévision de la demande en unité de vente sur la période de réservation considérée, en fonction de la stratégie tarifaire, du segment et des canaux.
- RĂ©pondre Ă nâimporte quelle structure de prix
- Permettre de quantifier la précision de la prévision.
- Uniquement utiliser des données observables.
- Montrer une stabilité des paramÚtres dans le temps et une robustesse des prévisions
- Minimiser lâerreur de prĂ©vision.
- Estimer les paramĂštres conjointement pour ĂȘtre cohĂ©rente avec elle-mĂȘme.
Création d'un forecast simple
La méthode suivante produit un modÚle simple de forecast d'atterissage, répondant aux conditions ci-dessus.
Le modĂšle ci-dessous va :
- Produire une prévision en occupation pour une période de réservation donnée (par exemple, en chambre, sur une date donnée), en considérant les prix, la structure tarifaire, la segmentation client, la segmentation de l'inventaire et les canaux comme exogÚne.
- Des mesures d'incertitude pourront ĂȘtre calculĂ© sur les valeurs produites
- Les données utilisées sont des données passées, une montée en charge de référence, et des données actuelles, le portefeuille de la période de réservation considérée.
- Il n'y a pas de paramĂštres pour ce modĂšle.
Soit les variables suivantes, pour exemple.
import numpy as np
J0=0
Jx = 30
leadtime = np.linspace(J0, Jx, 30)[::-1] # création du booking horizon
Soit les montées en charges ci-dessous.

La montée en charge de référence MEC_ref termine autour de 152 unités de ventes.
Mon portefeuille MEC_N montre 26 unités vendues. à combien vais-je terminer dans 10 jours ?
Forecast additif
Une premiÚre technique consiste à se dire que je vais garder, en valeur absolue, mon écart avec la MEC de référence.
JX = -10 # on est Ă J-10 !
delta = mec_N[JX] - mec_ref[JX] # avance retard.
forecast = np.zeros(leadtime.size)
forecast[:JX+1] = np.nan
forecast[JX+1:] = mec_ref[JX+1:] + delta # on propage l'avance retard en valeur absolue
Le retard est de 12 unités, ainsi le forecast additif va donner un atterrissage pour N à 140 unités.

forecast multiplicatif
Une deuxiÚme technique consiste à se dire que je vais garder l'écart relatif avec la MEC de référence.
JX = -10 # on est Ă J-10 !
delta = (mec_N[JX] - mec_ref[JX])/ mec_ref[JX] # avance retard.
forecast = np.zeros(leadtime.size)
forecast[:JX+1] = np.nan
forecast[JX+1:] = mec_ref[JX+1:]*(1+ delta) # on propage l'avance retard en écart relatif
Le retard est de 30%, ainsi le forecast multiplicatif va donner un atterrissage pour N à 103 unités.

Convergence
Les deux techniques ne donnent pas les mĂȘmes rĂ©sultats, et c'est normal.
Le graphique ci-dessous représente l'évolution de la prévision en fonction de l'anticipation d'analyse (de J-30 à J-1). Les deux forecasts sont mis en parallÚle de la montée en charge et du réalisé (valeur que nous cherchons à prévoir)

Les constats suivants peuvent ĂȘtre Ă©tablis :
- Les prĂ©visions convergent toutes les deux vers la valeur du rĂ©alisĂ©, ce qui est logique puisque plus l'anticipation diminue, plus lâincertitude sur le âreste Ă prendreâ diminue Ă©galement.
- Le forecast multiplicatif a anticipé plus rapidement la tendance des ventes que la méthode additive
- La forecast multiplicatif a une plus grande variance que le forecast additif.
- Le forecast additif surestime le réalisé (plus grand biais). On peut montrer que lorsque la montée en charge est en avance par rapport à la montée en charge de référence, alors le forecast additif sous estime le réalisé.
plus d'informations sur le dilemme biais-variance ici
Les questions Ă se poser :
Cet exemple-jouet nous permet de soulever les questions suivantes :
Qu'est-ce je choisis de prévoir ?
- Qu'est-ce que je dois choisir de prévoir : la valeur finale ou les valeurs intermédiaires ?
- Est-ce que je choisis de prévoir en valeur absolue (valeur du portefeuille) ou en différentiel (valeur du pick up à chaque anticipation)
Quelle est ma référence ?
- Que doit contenir ma montée en charge de référence (ou plus simplement, à quoi est-ce que je compare mon portefeuille ?)
- La mĂȘme date que lâan dernier ? Le mĂȘme jour de semaine que l'an dernier ?
- Est-ce que je fais plutÎt un modÚle synthétique ? Si oui, qu'est-ce que je choisis d'agréger ? Qu'est-ce que je choisis d'exclure ?
Quel est mon modĂšle ?
- Est-ce que j'utilise des modÚles simples comme ceux présentés ici ou je souhaite aller vers des modÚles plus complexes ? (Séries temporelles, Réseaux de neurones etc)
Qu'est-ce qui n'est pas pris en compte dans mon modĂšle ?
- Comment est-ce que je gĂšre la saturation ?
- Comment réagit mon forecast si j'agis sur mes contrÎles de vente ? (prix, disponibilités des plans tarifaires, du stock, ...)
Pour aller plus loin
Les deux pistes suivantes ouvrent sur le vaste sujet de la prévision
- A Comparative Analysis of Pickup Forecasting Methods
- Forecasting: Principles and Practice, the Pythonic Way
Mes préconisations sont les suivantes :
- Rester simple, car la simplicité permet une meilleure compréhension.
- Se rappeler que le rĂŽle mĂȘme du revenue manager est de faire mentir le forecast. Le rĂŽle du RM est d'affirmer ou d'infirmer une tendance, le forecast est donc plus une boussole car il sera inexacte Ă partir du moment oĂč le RM aura pris une dĂ©cision.
Vous souhaitez de l'accompagnement pour aller plus loin ? échangeons :)