Python使用LSTM时间序列预测商品销量及定价策略
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('---')
代码说明:
- 数据读取和预处理: 读取CSV文件,将日期转换为日期格式,将销售量转换为浮点数,并按日期和单品编码进行分组汇总。
- 构建时间序列数据: 使用
pivot函数将数据转换为时间序列格式,缺失值填充为0。 - 数据归一化: 使用
MinMaxScaler对数据进行归一化,将数据缩放到0-1之间。 - 划分训练集和测试集: 将数据划分为训练集和测试集,这里使用最后7天的数据作为测试集。
- 构建输入和输出: 使用
create_dataset函数构建LSTM模型的输入和输出数据,lookback参数表示使用过去多少天的数据进行预测。 - 构建模型: 构建LSTM模型,包含一个LSTM层和一个Dense层,使用均方误差作为损失函数,Adam作为优化器。
- 模型训练: 使用训练数据训练模型,设置 epochs 和 batch_size 参数。
- 预测: 使用训练好的模型对训练集和测试集进行预测。
- 反归一化: 将预测结果反归一化,得到实际的销售量预测值。
- 输出预测结果: 打印7月1日的单品补货量和定价策略,根据预测的销售量制定相应的策略。
原文地址: https://www.cveoy.top/t/topic/ehmq 著作权归作者所有。请勿转载和采集!