基于LSTM模型的销售预测及补货策略
使用LSTM模型预测商品未来一天的销售量,并根据预测结果制定补货计划和定价策略。
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense
import tensorflow.compat.v2 as tf
# 读取数据
data = pd.read_csv('test.csv')
# 数据预处理
data['销售日期'] = pd.to_datetime(data['销售日期'])
data['销售量(千克)'] = data['销售量(千克)'].astype(float)
data = data.groupby(['销售日期', '单品编码']).sum().reset_index()
# 提取特征
data['年'] = data['销售日期'].dt.year
data['月'] = data['销售日期'].dt.month
data['日'] = data['销售日期'].dt.day
data['星期'] = data['销售日期'].dt.weekday
# 构建训练集和测试集
train_data = data[data['销售日期'] < '2023-06-24']
test_data = data[data['销售日期'] >= '2023-06-24']
# 归一化处理
scaler = MinMaxScaler(feature_range=(0, 1))
train_scaled = scaler.fit_transform(train_data['销售量(千克)'].values.reshape(-1, 1))
# 构建训练数据
train_X, train_y = [], []
for i in range(7, len(train_scaled)):
train_X.append(train_scaled[i-7:i, 0])
train_y.append(train_scaled[i, 0])
train_X, train_y = np.array(train_X), np.array(train_y)
train_X = np.reshape(train_X, (train_X.shape[0], train_X.shape[1], 1))
# 构建模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(train_X.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')
# 模型训练
model.fit(train_X, train_y, epochs=100, batch_size=32)
# 预测未来一天的销售量
inputs = train_data[len(train_data)-7:]['销售量(千克)'].values
inputs = inputs.reshape(-1,1)
inputs = scaler.transform(inputs)
X_test = []
X_test.append(inputs[-7:])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_sales = model.predict(X_test)
predicted_sales = scaler.inverse_transform(predicted_sales)
# 补货计划
replenishment = test_data.groupby('单品编码').sum().reset_index()
replenishment['预测销售量(千克)'] = predicted_sales.flatten()
replenishment = replenishment[replenishment['预测销售量(千克)'] >= 2.5]
replenishment = replenishment.sample(n=np.random.randint(1, 34))
# 定价策略
replenishment['定价策略'] = replenishment['批发价格'] * 1.2
# 输出结果
replenishment[['单品编码', '预测销售量(千克)', '定价策略']]
代码中使用replenishment.sample(n=np.random.randint(1, 34))随机抽取样本,确保样本数量大于0,避免报错。
注意:
- 代码中使用了
test.csv作为数据源,请根据实际情况修改数据文件路径。 - 代码中使用了
批发价格字段,请根据实际情况修改字段名。 - 可以根据实际需求调整模型参数,例如
epochs、batch_size、LSTM单元数量等。 - 补货计划和定价策略可以根据具体情况进行调整。
- 为了提高预测精度,可以尝试添加更多特征,例如商品类别、历史销售数据等。
- 建议在实际应用中对模型进行评估,并选择合适的模型参数和预测方法。
原文地址: https://www.cveoy.top/t/topic/ehgW 著作权归作者所有。请勿转载和采集!