import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM

# 读取数据
data = pd.read_csv('test.csv')

# 数据预处理
data['销售日期'] = pd.to_datetime(data['销售日期'])
data['销售量(千克)'] = data['销售量(千克)'].astype(float)
data = data[['销售日期', '单品编码', '销售量(千克)']]
data = data.groupby(['销售日期', '单品编码']).sum().reset_index()

# 构建时间序列数据
timeseries_data = data.pivot(index='销售日期', columns='单品编码', values='销售量(千克)')
timeseries_data = timeseries_data.fillna(0)

# 归一化
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(timeseries_data)

# 划分训练集和测试集
train_data = scaled_data[:-7]
test_data = scaled_data[-7:]

# 构建输入和输出
def create_dataset(dataset, lookback=1):
    X, Y = [], []
    for i in range(len(dataset)-lookback):
        X.append(dataset[i:(i+lookback)])
        Y.append(dataset[i+lookback])
    return np.array(X), np.array(Y)

lookback = 3
train_X, train_Y = create_dataset(train_data.values, lookback)
test_X, test_Y = create_dataset(test_data.values, lookback)

# 构建模型
model = Sequential()
model.add(LSTM(50, input_shape=(lookback, train_X.shape[2])))
model.add(Dense(train_X.shape[2]))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(train_X, train_Y, epochs=100, batch_size=16, verbose=0)

# 预测
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)

# 反归一化
train_predict = scaler.inverse_transform(train_predict)
train_Y = scaler.inverse_transform(train_Y)
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform(test_Y)

# 输出预测结果
print('7月1日的单品补货量和定价策略:')
for i in range(len(test_predict)):
    for j in range(len(test_predict[i])):
        if test_predict[i][j] > 2.5:
            print('单品编码:', timeseries_data.columns[j])
            print('补货量:', test_predict[i][j])
            print('定价策略:根据市场需求和成本进行定价')
            print('---')

代码说明:

  1. 数据读取和预处理: 读取CSV文件,将日期转换为日期格式,将销售量转换为浮点数,并按日期和单品编码进行分组汇总。
  2. 构建时间序列数据: 使用 pivot 函数将数据转换为时间序列格式,缺失值填充为0。
  3. 数据归一化: 使用 MinMaxScaler 对数据进行归一化,将数据缩放到0-1之间。
  4. 划分训练集和测试集: 将数据划分为训练集和测试集,这里使用最后7天的数据作为测试集。
  5. 构建输入和输出: 使用 create_dataset 函数构建LSTM模型的输入和输出数据,lookback 参数表示使用过去多少天的数据进行预测。
  6. 构建模型: 构建LSTM模型,包含一个LSTM层和一个Dense层,使用均方误差作为损失函数,Adam作为优化器。
  7. 模型训练: 使用训练数据训练模型,设置 epochs 和 batch_size 参数。
  8. 预测: 使用训练好的模型对训练集和测试集进行预测。
  9. 反归一化: 将预测结果反归一化,得到实际的销售量预测值。
  10. 输出预测结果: 打印7月1日的单品补货量和定价策略,根据预测的销售量制定相应的策略。
Python使用LSTM时间序列预测商品销量及定价策略

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

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