利用LSTM对一维销量数据进行销量预测(内附数据集)

1、数据概况

数据十分简单,就只有日期,以及对应的销量。

 2、代码

本次我使用jupyter notebook 来整,,主要是可以更方便的看出每组代码的输出结果。代码如下,

#导入相关库
import numpy
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
import  pandas as pd
import  os
from keras.models import Sequential, load_model
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from sklearn.preprocessing import MinMaxScaler

然后进行数据导入和相关处理

dataframe = pd.read_csv(r"D:\桌面文件夹哦\数据统计\悠度数据\2特征.CSV", usecols=[1], engine='python', skipfooter=3)
dataset = dataframe.values
# 将整型变为float
dataset = dataset.astype('float32')
#归一化
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
train_size = int(len(dataset) * 0.80)
trainlist = dataset[:train_size]
testlist = dataset[train_size:]

定义一个划分测试集和训练集的函数

def create_dataset(dataset, look_back):
#这里的look_back与timestep相同
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back)]
        dataX.append(a)
        dataY.append(dataset[i + look_back])
    return numpy.array(dataX),numpy.array(dataY)
#训练数据太少 look_back并不能过大
look_back = 1
trainX,trainY  = create_dataset(trainlist,look_back)
testX,testY = create_dataset(testlist,look_back)
trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1] ,1 ))

拟合并保存模型

# create and fit the LSTM network
model = Sequential()
model.add(LSTM(5, input_shape=(None,1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=2, verbose=2)
model.save("D:\桌面文件夹哦\预测模型保存")#模型保存位置

加载保存好的模型,进行测试(将训练集,测试集数据输入,输出对应预测结果,对输出的结果进行反归一化,再与真实的训练测试数据进行对比)

model = load_model(r"D:\桌面文件夹哦\预测模型保存")
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
#反归一化
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform(trainY)
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform(testY)

将预测的结果与真实结果进行作图

plt.plot(trainY)
plt.plot(trainPredict[1:])
plt.show()
plt.plot(testY)
plt.plot(testPredict[1:])
plt.show()
测试集预测结果(蓝色为真实数据,橙色为预测数据)

 

训练集预测结果

 最后用r2、rmse等指标来衡量预测结果

r_2 = r2_score(testPredict,testY)
print('Test r_2: %.3f' % r_2)
# 计算MAE
mae = mean_absolute_error(testPredict,testY)
print('Test MAE: %.3f' % mae)
# 计算RMSE
from math import sqrt
rmse = sqrt(mean_squared_error(testPredict,testY))
print('Test RMSE: %.3f' % rmse)

预测结果如下 

 拟合的还行,误差也比较小。

数据集如下(永久有效)

链接:https://pan.baidu.com/s/1VGWpGuNM4PUVzoULaCUyGA 
提取码:zxt1

  • 9
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
数据分析案例—天猫品牌店铺运营报告 背景: 前段时间去的某家天猫店铺⾯试数据分析的岗位,想在⾯试前对该店铺做⼀个简单的了解。通过获取到的数据,分析该品牌店铺的销售情 况,了解店铺定位和运营⽅向,在客观的⾓度对该店铺有⼀个清晰的了解。 1、出售商品的类⽬分布情况 2、商品特点和⼈群定位 3、销量和成交额处于什么阶段 4、商品购买评价信息反馈 数据来源: import pandas as pd df = pd.read_excel('D:\\MyProject\\TaoBao\\CandyLaVie_Tmall\\Data.xlsx') df.describe() 数据简述 1、店铺主营类⽬是⽂胸,全店共有81件商品在售 2、商品销量最多的是2334件,最少是4件,平均每个单品有286的销量 3、在售商品中,原价(均值)227元,实际售价206元,折扣率为9折 df['categoryId'].value_counts() from matplotlib import pyplot as plt %matplotlib inline plt.rc('font', family='SimHei', size=11) # 显⽰中⽂ plt.figure(figsize=(8,4)) # 图⽚尺⼨ category_df = df['categoryId'].value_counts() x = list(category_df.index) y = list(category_df) # plt.xlabel('类⽬') plt.ylabel('商品(个)') plt.title('类⽬商品数分布图') plt.bar(x, y) for a,b in zip(x,y): plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=12) plt.show() categorySell_df = df.groupby('categoryId')['sellCount'].sum() x = list(categorySell_df.index) y = list(categorySell_df) plt.figure(figsize=(8,4)) plt.ylabel('销量(件)') plt.title('类⽬销量分布图') plt.bar(x, y) for a,b in zip(x,y): plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=12) plt.show() 商品类⽬分布情况 1、全店出售的商品中 ⽂胸 类⽬占多数,主营为该类⽬商品 2、⽂胸类⽬销量20026件,其次是⽂胸套装商品销量为1322件,内裤类⽬的单品销量也有562件 3、背⼼、搭扣、胸垫,该三个类⽬上架的商品都只有⼀件,但均有产出销量 4、全店共经营6个类⽬商品,动销率100% price = df['price'][df['categoryId']=='⽂胸'] sellCount = df['sellCount'][df['categoryId']=='⽂胸'] plt.scatter(price, sellCount) plt.xlabel("售价(元)") plt.ylabel("销量(件)") plt.grid(linestyle='-.') plt.show() # 爆款数 hot = df['price'][df['categoryId']=='⽂胸'][df['sellCount']>1500].count() # 热卖数 selling = df['price'][df['categoryId']=='⽂胸'][df['sellCount']>500][df['sellCount']<1500].count() # 常规数 normal = df['price'][df['categoryId']=='⽂胸'][df['sellCount']<500].count() 商品销量 1、按销量对产品热卖程度划分等级:爆款数(>1500):4,热销数(500-1000):9,常规(<500):50 price = df['price'][df['categoryId']=='⽂胸'] group_names = ['100-150', '150-200', '200-250', '250-300','300-350'] # 分组名 bins = [100,150,200,250,300,350] # 价格区间 a = pd.cut(price, bins,labels=group_name
对于基于TensorFlow和LSTM进行时序数据的提前多步预测,你可以按照以下步骤进行操作: 1. 导入所需的库: ```python import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense ``` 2. 准备数据集: 假设你有一个包含时序数据的数组 `data`,其中每个元素都代表一个时间步。你需要将数据集划分为输入和输出部分,以便训练模型。对于多步预测,你可以使用滑动窗口的方式生成输入和输出数据。 ```python def generate_sequences(data, n_steps): X, y = [], [] for i in range(len(data)-n_steps-1): X.append(data[i:i+n_steps]) y.append(data[i+n_steps]) return np.array(X), np.array(y) n_steps = 10 # 滑动窗口的大小 X, y = generate_sequences(data, n_steps) ``` 3. 划分训练集和测试集: 你可以将数据集划分为训练集和测试集,通常是按照某个比例进行划分。 ```python train_size = int(len(X) * 0.8) X_train, y_train = X[:train_size], y[:train_size] X_test, y_test = X[train_size:], y[train_size:] ``` 4. 构建和训练模型: 这里使用一个基本的LSTM模型进行多步预测。 ```python model = Sequential() model.add(LSTM(50, activation='relu', input_shape=(n_steps, 1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') model.fit(X_train, y_train, epochs=100, batch_size=32) ``` 5. 进行预测: 使用训练好的模型进行预测,并评估预测结果。 ```python y_pred = model.predict(X_test) mse = np.mean((y_pred - y_test)**2) ``` 这就是基于TensorFlow和LSTM进行时序数据的提前多步预测的基本步骤。你可以根据实际情况对模型进行调优,并根据需要进行进一步的数据处理和特征工程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值