Rumah >pembangunan bahagian belakang >Tutorial Python >Ramalan Permintaan dan Pengurusan Inventori di Kedai Runcit - Model SARIMA
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.
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 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)
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,
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!