Comment choisir les bonnes visualisations et les mettre en œuvre dans Streamlit pour mieux déboguer vos modèles de prévision ?
TL ; DR
Lorsqu'il s'agit de modèles de prévision, la meilleure approche est souvent d'itérer en permanence, en ajoutant des sources de data, en améliorant l'ingénierie des fonctionnalités, en peaufinant les paramètres du modèle... La plupart du temps, les scientifiques de Data ont tendance à être fixés à un seul indicateur de performance clé (KPI) (c'est-à-dire. RMSE, précision des prévisions...). Il y a souvent beaucoup plus d'informations derrière ces KPI qui doivent être analysées pour améliorer la prédiction. Construire un outil de visualisation approprié est un excellent moyen de plonger dans le comportement du modèle, de repérer rapidement les points faibles de votre modèle, et donc de gagner en précision de manière efficace.
Cet article développera les questions clés que l'on doit se poser lors de l'évaluation d'un modèle de prévision, puis présentera les visualisations indispensables pour répondre à ces questions et enfin proposera une implémentation rapide sous un outil unifié pour rassembler toutes ces visualisations à l'aide de Streamlit.
Contexte
Cet article résume ce que nous avons appris en construisant un outil de visualisation unifié pour aider les scientifiques de Data, les ingénieurs logiciels, les propriétaires de produits et les planificateurs de la demande (experts commerciaux) à développer des modèles de prévision des ventes pour plus de 10 unités commerciales au sein d'une entreprise de produits alimentaires et de boissons. Nos modèles établissaient des prévisions au niveau quotidien x entrepôt x produit, pour les 14 semaines à venir. Ils ont été développés à l'aide de méthodes d'optimisation et prennent en compte les caractéristiques des produits, les ventes historiques, les événements et les promotions data.
Questions clés à poser lors de l'évaluation d'un modèle de prévision
1. Le modèle est-il bon par rapport à la référence ?
Il est très utile d'avoir accès aux prévisions actuelles (par exemple les prévisions du planificateur de la demande) sur le même périmètre. Cela permet de bien comprendre le comportement de l'entreprise sur une période, un produit ou un lieu spécifique. Plus vous interrogez l'entreprise, plus vous obtenez d'informations et plus vous pouvez mettre en œuvre les fonctionnalités appropriées.
2. Chasse aux sur ou sous-prédictions et baisse de la précision des prévisions
Les questions incontournables sont les suivantes : Est-ce que je suis la tendance globale ? Le modèle prend-il en compte les événements récurrents connus tels que les vacances, les fermetures d'entrepôts, les congés scolaires ? Y a-t-il des baisses de précision sur des périodes particulières ?
Pourquoi est-ce important ?
Repérer ces événements est un excellent moyen d'obtenir des prévisions plus précises. Ces événements sont souvent bien connus des planificateurs de la demande et assez simples à mettre en œuvre dans votre modèle lorsque vous disposez des informations nécessaires. Par exemple, dans bon nombre de nos unités commerciales, certains produits sont vendus pour les déjeuners scolaires. L'introduction et la préparation d'une caractéristique représentant les vacances scolaires ont permis d'améliorer considérablement notre précision sur ces périodes particulières.
3. Traiter les spécificités des produits
Mes performances sont-elles homogènes sur mes marques / familles de produits ? Y a-t-il d'autres distinctions entre mes produits (produits vendus uniquement en période de promotion, produits best-sellers vs. produits à faible volume, produits ) ?
Pourquoi est-ce important ?
Ces questions vous aident à comprendre l'entreprise plus précisément. Par exemple, la division des modèles en fonction de l'importance des produits en termes de volume permet souvent d'accroître les performances. En effet, la demande de produits réguliers est très différente de la demande de produits promotionnels ou de produits moins courants, qui peuvent être fortement corrélés aux périodes de promotion ou avoir un profil de vente très épars. Dans la plupart des cas, nous avons formé des modèles distincts pour traiter ces différents types de produits.
4. Les effets constitutifs sont-ils correctement pris en compte ?
Le modèle saisit-il correctement les effets des promotions ? Existe-t-il des effets de cannibalisation ? Le modèle s'adapte-t-il bien aux phénomènes exogènes (ex : grèves) ?
Pourquoi est-ce important ?
N'hésitez pas à vous référer à l'article précédent de notre série sur les prévisions pour aborder la promotion data : 5 conseils pour mieux prendre en compte la promotion data
Comment analyser votre modèle de prévision : des macro-IPC à l'évaluation sur un périmètre spécifique
Quelles sont les visualisations indispensables ?
Pour construire votre outil d'évaluation, vous devez combiner deux éléments :

La partie filtre doit permettre de filtrer sur plusieurs axes : la période d'analyse, les lieux (détaillant, entrepôt...), les produits (un ensemble de produits), et enfin les catégories de produits.
Nous recommandons au moins les 4 visualisations suivantes :
Comment commencer à construire votre tableau de bord de studio de prévision en utilisant Streamlit ?
Streamlit est une bibliothèque python open source qui permet de créer des applications web partageables en quelques minutes et qui continue de gagner en popularité au sein de la communauté scientifique Data. Dans cet article, nous ne présenterons pas l'outil car de nombreux articles sont déjà disponibles sur ce sujet, mais nous nous concentrerons sur la mise en œuvre facile d'une visualisation.
Le choix d'utiliser Streamlit pour ce type de projet a été motivé par plusieurs pré-requis :
1. Structure globale de votre tableau de bord prévisionnel
Avant de plonger dans la mise en œuvre, la condition préalable à la construction d'un tableau de bord est de dessiner les parties de votre application.
Pour une mise en œuvre propre, vous pouvez diviser votre code en plusieurs parties :
| ├── config.py | ||
| ├── forecasting_studio | ||
| │ ├─── forecast_analysis | ||
| │ │ └── fig_forecast_analysis.py | ||
| │ └─── pages | ||
| │ └── forecast_analysis.py | ||
|
La page principale présente la structure globale de votre application, c'est-à-dire la disposition globale de votre application : dans notre cas, une disposition large, et une barre latérale pour afficher le nom de votre application et les pages disponibles.
| l'importation éclairé par un courant comme st | |
| de studio_de_prévision.pages l'importation analyse_prévisionnelle | |
| PAGES = | |
| déf page_écrite(page): | |
| page.écrire() | |
| déf principal(): | |
| st.barre latérale.titre("Forecasting Studio") | |
| sélection = st.barre latérale.boîte de sélection("", liste(PAGES.clés())) | |
| page = PAGES[sélection] | |
| page_écrite(page) | |
| si __name__ == "__main__": | |
| st.set_page_config(disposition="large") | |
| principal() |
Le fichier de configuration, dans lequel nous rassemblons les couleurs et les différentes configurations pour toutes vos figures Plotly.
| MODÈLE D'AXE X = dictée(showline=Vrai, | |
| grille d'affichage=Faux, | |
| étiquettes d'affichage=Vrai, | |
| couleur de ligne=“gris”, | |
| largeur de trait=2, | |
| tiques=“à l'extérieur”, | |
| tickfont=dictée(famille=“Arial”, taille=12, couleur=“rgb(82, 82, 82)”)) | |
| MODÈLE DE L'AXE DES ORDONNÉES = dictée(showline=Vrai, | |
| grille d'affichage=Vrai, | |
| couleur de ligne=“gris”, | |
| couleur de la grille=“gris clair”) | |
| LÉGENDE = dictée(l'orientation=“h”, ancre=“bas”, y=1.02, xanchor=“droit”, x=1) | |
| COLORDISCRETE = [“#002244”, “#ff0066”, “#66cccc”, “#ff9933”, “#337788”, | |
| “#429e79”, “#474747”, “#f7d126”, “#ee5eab”, “#b8b8b8”] |
2.Bâtiment “Évolution de la visualisation de la précision des prévisions”
Tout d'abord, nous allons rassembler nos chiffres Plotly dans un script :
| l'importation pandas comme pd | |
| de dactylographie l'importation Liste | |
| l'importation complot.objets_graphiques comme aller | |
| de config l'importation COLORDISCRETE, LÉGENDE, MODÈLE D'AXE X, MODÈLE DE L'AXE DES ORDONNÉES | |
| déf fig_evolution_of_fa(prévisions_par_cible_date: pd.DataFrame, | |
| événements: Liste = Aucun) -> aller.Chiffre: | |
| “Figure représentant l'évolution de la précision des prévisions | |
| sur la période de backtest | |
| Paramètres | |
| ---- | |
| prévisions_par_cible_date : pd.Datarame | |
| Prévision dataset contenant au moins 3 colonnes : | |
| - ‘target_date’ : la date pour laquelle vous faites des prévisions | |
| - ‘forecast_accuracy’ : votre ICP de précision | |
| - ‘week_nb’ : identifiant de la semaine (de 0 à 52) | |
| - (facultatif) ‘demand_planner_forecast_accuracy’ : votre prévision de base | |
| Clé primaire : ‘target_date’ | |
| événements : Liste, optionnel | |
| une liste de couples de dates, représentant des périodes, par défaut None | |
| “”” | |
| fig_fa_score = aller.Chiffre() | |
| fig_fa_score.ajouter_trace( | |
| aller.Dispersion( | |
| nom=“Précision des prévisions du modèle”, | |
| x=prévisions_par_cible_date[‘date_cible’], | |
| y=prévisions_par_cible_date[‘Précision de la prévision’], | |
| texte en surimpression=prévisions_par_cible_date[‘semaine_nb’], | |
| couleur_du_marqueur=COLORDISCRETE[0])) | |
| # Si vous disposez d'une ligne de base, vous pouvez ajouter une colonne supplémentaire à votre | |
| # dataset pour l'afficher sur un tracé linéaire | |
| si ‘Précision des prévisions du planificateur de la demande’ en prévisions_par_cible_date.colonnes: | |
| fig_fa_score.ajouter_trace( | |
| aller.Dispersion( | |
| nom=“Précision des prévisions des planificateurs de la demande”, | |
| x=prévisions_par_cible_date[‘date_cible’], | |
| y=prévisions_par_cible_date[‘Précision des prévisions du planificateur de la demande’], | |
| texte en surimpression=prévisions_par_cible_date[‘semaine_nb’], | |
| couleur_du_marqueur=COLORDISCRETE[2])) | |
| fig_fa_score.update_xaxes(gamme=(min(prévisions_par_cible_date[‘date_cible’]), | |
| max(prévisions_par_cible_date[‘date_cible’]))) | |
| fig_fa_score.update_traces(mode=‘lignes+marques’, forme_ligne=‘spline’) | |
| fig_fa_score.update_layout( | |
| xaxis_title=“Date cible”, | |
| titre de l'axe des ordonnées=“Score FA”, | |
| plot_bgcolor=‘blanc’, | |
| légende=LÉGENDE, | |
| axe des x=MODÈLE D'AXE X, | |
| axe des ordonnées=MODÈLE DE L'AXE DES ORDONNÉES) | |
| si événements: | |
| fig_fa_score.update_layout( | |
| formes=[get_vertical_filled_area(segment[0], segment[1], ‘rgb(102, 204, 204)’.’) | |
| pour segment en événements]) | |
| retour fig_fa_score | |
| déf get_vertical_filled_area(commencer: flotteur, fin: flotteur, couleur: str = “bleu”) -> dictée: | |
| “””Retourne une dictée de forme verticale tracée, utilisée pour mettre en évidence des événements sur des figures”” | |
| retour dictée(type=“rect”, | |
| xref=“x”, | |
| yref=“papier”, | |
| x0=commencer, | |
| y0=0, | |
| x1=fin, | |
| y1=1, | |
| couleur de remplissage=couleur, | |
| couche=“en dessous”, | |
| largeur_de_ligne=0, | |
| opacité=0.5) |
Nous allons enfin mettre en place notre page d'analyse des prévisions, qui chargera notre dataset, répartira nos chiffres sur différentes colonnes, ...
| l'importation pandas comme pd | |
| l'importation éclairé par un courant comme st | |
| de studio_de_prévision.analyse_prévisionnelle.fig_forecast_analysis l'importation fig_evolution_of_fa | |
| déf écrire() -> Aucun: | |
| st.titre(‘Analyse des prévisions’) | |
| df = pd.read_csv(‘votre_dataset.csv’) | |
| # Vous pouvez charger ici des événements personnalisés à afficher | |
| # ex : events = [(‘2019-07-01’, ‘2019-09-01’), (‘2020-07-01’, ‘2020-09-01’)] | |
| événements = Aucun | |
| evo_cont1, evo_cont2 = st.colonnes_bêta(2) | |
| evo_cont1.sous-titre(‘Évolution de la précision des prévisions’) | |
| fig_evo_fa = fig_evolution_of_fa(df, événements) | |
| evo_cont1.plolty_fig(fig_evo_fa) | |
| si __name__ == “__main__”: | |
| écrire() |
Tadam ! Voici notre application :

Jetons un coup d'œil à la figure présentée. En ce qui concerne les points précédents que nous avons discutés, voici les points clés de notre figure :
Conclusion :
Une fois que vous avez construit votre outil de visualisation, il est temps de le déployer. Voici une excellente ressource pour partager votre application : Comment déployer et sécuriser votre application Streamlit dans GCP ?
Merci beaucoup d'avoir lu jusqu'à présent, n'hésitez pas à nous contacter si vous avez des questions. Vous pouvez en savoir plus sur nos projets en visitant notre site web blog.

BLOG







