소매점에서는 매일 대규모의 재고를 처리하기 때문에 재고 모니터링 및 관리가 더욱 번거롭습니다. 전통적인 소매점 재고 관리는 모니터링, 추적 및 관리가 비효율적이어서 번거로운 방법입니다. 따라서 소매점 재고 분석을 원활하게 수행하여 더 적은 수작업으로 보유 재고를 줄이고 판매 재고를 늘리는 강력한 디지털 재고 관리 시스템이 필요합니다.
이 기사에서는 시계열 기계 학습 모델인 SARIMA를 사용하여 소매점 재고 분석을 효율적으로 수행하고 시간이 지남에 따라 고객의 요구를 충족하는 데 필요한 재고 매개변수를 계산하여 소매점에 최대 이익을 제공하는 방법을 보여줍니다.
먼저 데이터 세트를 다운로드하세요. 이 데이터 세트에는 날짜, 제품 수요 및 현재 재고 수준에 대한 정보가 포함된 특정 제품의 기록 기록이 있습니다.
수요예측과 재고관리를 수행하는 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 공식에 대해 자세히 알아볼 수 있습니다.
최종 평가 결과는
제안된 SARIMA 모델은 Newsvendor 공식을 사용하여 소매점 재고 재고 관리를 효율적인 방식으로 디지털화하여 고객을 만족시키는 데 필요한 최적의 재고를 계산하는 동시에 소매업체에 최대 이익을 제공합니다.
이 기사가 귀하가 찾고 있던 내용에 도움이 되기를 바랍니다. 기사에 대한 개선이나 제안을 환영합니다. 건배 :)
여기에서 내 소셜을 확인하고 자유롭게 연결하세요 ^_^
위 내용은 소매점의 수요 예측 및 재고 관리 - SARIMA 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!