Rumah >pembangunan bahagian belakang >Tutorial Python >Ramalan Permintaan dan Pengurusan Inventori di Kedai Runcit - Model SARIMA

Ramalan Permintaan dan Pengurusan Inventori di Kedai Runcit - Model SARIMA

Linda Hamilton
Linda Hamiltonasal
2024-11-27 04:21:20538semak imbas

Kedai runcit mengendalikan stok secara besar-besaran setiap hari, menjadikan pemantauan dan pengurusan inventori lebih membosankan. Pengurusan inventori kedai runcit tradisional ialah metodologi yang menyusahkan dengan pemantauan, pengesanan dan pengurusan yang tidak cekap. Ini membawa keperluan untuk sistem pengurusan inventori berdigital yang teguh yang melaksanakan analisis stok kedai runcit dengan lancar untuk mencapai kurang inventori di tangan dan lebih banyak stok dijual dengan kurang tenaga kerja manual.

Artikel ini menunjukkan cara SARIMA, model pembelajaran mesin siri masa boleh digunakan untuk melaksanakan analisis inventori stok kedai runcit dengan cekap dan mengira parameter inventori yang diperlukan untuk memenuhi keperluan pelanggan dari semasa ke semasa yang memanfaatkan kedai runcit dengan keuntungan maksimum.

Demand Forecasting and Inventory Management in Retail Store - SARIMA Model


DATASET

Untuk bermula, muat turun set data. Set data ini mempunyai rekod sejarah produk tertentu yang merangkumi maklumat tentang tarikh, permintaan produk dan tahap inventori semasa.


KOD

Kod Python untuk melaksanakan ramalan permintaan dan pengurusan inventori adalah seperti di bawah.

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)

MEMAHAMI KOD

Kami mulakan dengan memvisualisasikan 'Permintaan dari semasa ke semasa' dan 'Inventori dari semasa ke semasa' di mana corak bermusim boleh diperhatikan. Jadi kami menggunakan SARIMA — Purata Pergerakan Autoregresif Bermusim untuk meramalkan permintaan.

Untuk menggunakan SARIMA kita memerlukan p (urutan auto-regresif), d (darjah pembezaan), q (perintah purata bergerak), P (perintah AR bermusim), D (perbezaan bermusim) dan Q (perintah MA bermusim) . ACF — Fungsi Autokorelasi dan PACF — Fungsi Autokorelasi Separa diplot untuk mencari nilai parameter.

Sekarang untuk meramalkan kami memulakan beberapa nilai. Kami menetapkan langkah masa hadapan iaitu hari untuk diramalkan sebagai 10, masa pendahuluan iaitu bilangan hari untuk mengisi semula inventori sebagai 1 dan nilai bergantung kedai runcit yang lain.

Akhir sekali untuk mengira hasil optimum inventori, kami menggunakan formula NewsVendor. Formula NewsVendor diperoleh daripada model NewsVendor yang merupakan model matematik yang digunakan untuk menentukan tahap inventori yang optimum. Anda boleh mengetahui lebih lanjut tentang formula NewsVendor daripada artikel ini.

Keputusan akhir yang dinilai ialah,

  1. Kuantiti pesanan optimum — Merujuk kepada kuantiti produk yang perlu dipesan daripada pembekal apabila tahap inventori mencapai tahap tertentu.
  2. Titik pesanan semula — Tahap inventori di mana pesanan baharu perlu dibuat untuk mengisi semula stok sebelum kehabisan.
  3. Stok keselamatan — Inventori tambahan disimpan di tangan untuk mengambil kira ketidaktentuan dalam permintaan dan bekalan. Ia bertindak sebagai penampan terhadap variasi yang tidak dijangka dalam permintaan atau masa pendahuluan.
  4. Jumlah kos — Mewakili gabungan kos yang berkaitan dengan pengurusan inventori.

Model SARIMA yang dicadangkan mendigitalkan pengurusan inventori stok kedai runcit dengan cara yang cekap menggunakan formula Newsvendor untuk mengira inventori optimum yang diperlukan untuk memenuhi pelanggan sambil memanfaatkan peruncit dengan keuntungan maksimum.


Semoga artikel ini mungkin telah membantu anda dengan perkara yang anda cari. Sebarang penambahbaikan atau cadangan untuk artikel adalah dialu-alukan. Tahniah :)

Lihat sosial saya di sini dan jangan ragu untuk berhubung ^_^

Atas ialah kandungan terperinci Ramalan Permintaan dan Pengurusan Inventori di Kedai Runcit - Model SARIMA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn