Maison >développement back-end >Tutoriel Python >Prévision de la demande et gestion des stocks dans les magasins de détail - Modèle SARIMA
Le magasin de détail gère quotidiennement des stocks à grande échelle, ce qui rend le suivi et la gestion des stocks plus fastidieux. La gestion traditionnelle des stocks des magasins de détail est une méthodologie lourde avec une surveillance, un suivi et une gestion inefficaces. Cela nécessite un système de gestion des stocks numérisé robuste qui effectue de manière transparente des analyses des stocks des magasins de détail afin de réduire les stocks disponibles et d'augmenter les stocks en vente avec moins de travail manuel.
Cet article montre comment SARIMA, un modèle d'apprentissage automatique de séries chronologiques, peut être utilisé pour effectuer efficacement une analyse des stocks des magasins de détail et calculer le paramètre d'inventaire nécessaire pour répondre aux besoins des clients au fil du temps, bénéficiant ainsi au magasin de détail avec un profit maximal.
Pour commencer, téléchargez l'ensemble de données. Cet ensemble de données contient un enregistrement historique d'un produit spécifique qui comprend des informations sur la date, la demande du produit et les niveaux de stock actuels.
Le code Python pour effectuer la prévision de la demande et la gestion des stocks est le suivant.
import pandas as pd import numpy as np import plotly.express as px from statsmodels.graphics.tsaplots import plot_acf, plot_pacf import matplotlib.pyplot as plt from statsmodels.tsa.statespace.sarimax import SARIMAX data = pd.read_csv("demand_inventory.csv") print(data.head()) data = data.drop(columns=['Unnamed: 0']) fig_demand = px.line(data, x='Date', y='Demand', title='Demand Over Time') fig_demand.show() fig_inventory = px.line(data, x='Date', y='Inventory', title='Inventory Over Time') fig_inventory.show() data['Date'] = pd.to_datetime(data['Date'], format='%Y/%m/%d') time_series = data.set_index('Date')['Demand'] differenced_series = time_series.diff().dropna() # Plot ACF and PACF of differenced time series fig, axes = plt.subplots(1, 2, figsize=(12, 4)) plot_acf(differenced_series, ax=axes[0]) plot_pacf(differenced_series, ax=axes[1]) plt.show() order = (1, 1, 1) seasonal_order = (1, 1, 1, 2) model = SARIMAX(time_series, order=order, seasonal_order=seasonal_order) model_fit = model.fit(disp=False) future_steps = 10 predictions = model_fit.predict(len(time_series), len(time_series) + future_steps - 1) predictions = predictions.astype(int) print(predictions) # Create date indices for the future predictions future_dates = pd.date_range(start=time_series.index[-1] + pd.DateOffset(days=1), periods=future_steps, freq='D') # Create a pandas Series with the predicted values and date indices forecasted_demand = pd.Series(predictions, index=future_dates) # Initial inventory level initial_inventory = 5500 # Lead time (number of days it takes to replenish inventory) lead_time = 1 # Service level (probability of not stocking out) service_level = 0.95 # Calculate the optimal order quantity using the Newsvendor formula z = np.abs(np.percentile(forecasted_demand, 100 * (1 - service_level))) order_quantity = np.ceil(forecasted_demand.mean() + z).astype(int) # Calculate the reorder point reorder_point = forecasted_demand.mean() * lead_time + z # Calculate the optimal safety stock safety_stock = reorder_point - forecasted_demand.mean() * lead_time # Calculate the total cost (holding cost + stockout cost) holding_cost = 0.1 # it's different for every business, 0.1 is an example stockout_cost = 10 # # it's different for every business, 10 is an example total_holding_cost = holding_cost * (initial_inventory + 0.5 * order_quantity) total_stockout_cost = stockout_cost * np.maximum(0, forecasted_demand.mean() * lead_time - initial_inventory) # Calculate the total cost total_cost = total_holding_cost + total_stockout_cost print("Optimal Order Quantity:", order_quantity) print("Reorder Point:", reorder_point) print("Safety Stock:", safety_stock) print("Total Cost:", total_cost)
Nous commençons par visualiser la « Demande au fil du temps » et l’« Inventaire au fil du temps » à partir desquels un modèle saisonnier peut être observé. Nous utilisons donc SARIMA — Moyenne mobile autorégressive saisonnière pour prévoir la demande.
Pour utiliser SARIMA, nous avons besoin de p (ordre auto-régressif), d (degré de différenciation), q (ordre de moyenne mobile), P (ordre AR saisonnier), D (différence saisonnière) et Q (ordre MA saisonnier) . ACF — Fonction d'autocorrélation et PACF — Fonction d'autocorrélation partielle sont tracées pour trouver les valeurs des paramètres.
Maintenant, pour prévoir, nous initialisons quelques valeurs. Nous définissons les étapes futures, c'est-à-dire les jours pour prévoir, à 10, le délai, c'est-à-dire le nombre de jours pour réapprovisionner l'inventaire, à 1 et d'autres valeurs dépendantes du magasin de détail.
Enfin, pour calculer le résultat optimal de l'inventaire, nous utilisons la formule NewsVendor. La formule NewsVendor est dérivée du modèle NewsVendor qui est un modèle mathématique utilisé pour déterminer le niveau de stock optimal. Vous pouvez en savoir plus sur la formule NewsVendor à partir de cet article.
Les résultats finaux évalués sont,
Le modèle SARIMA proposé a numérisé la gestion des stocks des magasins de détail de manière efficace en utilisant la formule Newsvendor pour calculer l'inventaire optimal nécessaire pour satisfaire les clients tout en bénéficiant aux détaillants avec un profit maximum.
J'espère que cet article vous a aidé avec ce que vous recherchiez. Toute amélioration ou suggestion pour l’article est la bienvenue. Bravo :)
Consultez mes réseaux sociaux ici et n'hésitez pas à vous connecter ^_^
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!