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[['单品编码', '预测销售量(千克)', '定价策略']]


# 报错解决内容:该报错是由于`np.random.randint(0, 34)`生成的随机数为0,而`replenishment.sample()`函数的参数`n`不能为0。

要解决这个问题,可以将`np.random.randint(0, 34)`修改为`np.random.randint(1, 34)`,确保生成的随机数大于0。修改后的代码如下:

```python
replenishment = replenishment.sample(n=np.random.randint(1, 34))

这样就可以避免报错。

基于LSTM模型的销售预测和补货计划制定

原文地址: https://www.cveoy.top/t/topic/ehht 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录