ホームページ >バックエンド開発 >Python チュートリアル >小売店における需要予測と在庫管理 - SARIMA モデル

小売店における需要予測と在庫管理 - SARIMA モデル

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-27 04:21:20545ブラウズ

小売店は毎日大規模な在庫を処理するため、在庫の監視と管理がさらに面倒になっています。従来の小売店の在庫管理は、非効率的な監視、追跡、管理を伴う面倒な方法論です。このため、小売店の在庫分析をシームレスに実行して、手作業を減らして手元在庫を減らし、より多くの販売在庫を実現する、堅牢なデジタル化された在庫管理システムの必要性が生じています。

この記事では、時系列機械学習モデルである SARIMA を使用して、小売店の在庫分析を効率的に実行し、時間の経過とともに顧客のニーズに応えるために必要な在庫パラメーターを計算して、小売店に最大の利益をもたらす方法を説明します。

Demand Forecasting and Inventory Management in Retail Store - SARIMA Model


データセット

まず、データセットをダウンロードします。このデータセットには、日付、製品の需要、現在の在庫レベルに関する情報を含む、特定の製品の履歴記録が含まれています。


コード

需要予測と在庫管理を実行するための Python コードは次のとおりです。

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)

コードを理解する

まず、季節パターンを観察できる「長期にわたる需要」と「長期にわたる在庫」を視覚化します。そこで、需要を予測するために SARIMA (季節的自己回帰移動平均) を使用します。

SARIMA を使用するには、p (自己回帰順序)、d (差分の次数)、q (移動平均順序)、P (季節 AR 順序)、D (季節差分)、Q (季節 MA 順序) が必要です。 。 ACF — 自己相関関数および PACF — 偏自己相関関数は、パラメーター値を見つけるためにプロットされます。

ここで予測するために、いくつかの値を初期化します。今後のステップ、つまり予測日数を 10、リード タイム、つまり在庫を補充する日数を 1、その他の小売店に依存する値に設定します。

最後に、在庫の最適な結果を計算するために、NewsVendor の式を使用します。 NewsVendor の式は、最適な在庫レベルを決定するために使用される数学的モデルである NewsVendor モデルから派生しています。 NewsVendor の式について詳しくは、この記事をご覧ください。

評価された最終結果は次のとおりです。

  1. 最適発注量 — 在庫レベルが一定の点に達したときにサプライヤーに発注する必要がある製品の数量を指します。
  2. 再注文ポイント — 在庫がなくなる前に補充するために新しい注文を行う必要がある在庫レベル。
  3. 安全在庫 — 需要と供給の不確実性を考慮して手元に保管される追加在庫。需要やリードタイムの​​予期せぬ変動に対する緩衝材として機能します。
  4. 総コスト — 在庫管理に関連する合計コストを表します。

提案された SARIMA モデルは、ニュースベンダーの式を使用して効率的な方法で小売店の在庫管理をデジタル化し、小売業者に最大の利益をもたらしながら顧客を満たすために必要な最適な在庫を計算しました。


この記事があなたが探していたものに役立つことを願っています。記事に関する改善や提案は大歓迎です。乾杯:)

ここで私のソーシャルをチェックして、お気軽に接続してください ^_^

以上が小売店における需要予測と在庫管理 - SARIMA モデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。