07- Rossmann商店销售预测 (Xgboost集成算法) (项目七)

文章介绍了如何使用Python和XGBoost对Rossmann商店的销售数据进行预测,包括数据清洗、特征工程、模型训练和优化。通过预处理数据,处理缺失值,创建新特征,并使用XGBoost进行模型训练,最终目的是提高销售预测的准确性,帮助店铺管理决策。
  • 查看数据是否为空: train.isnull().sum()
  • 查看特征元素:  train['StateHoliday'].unique()   # array(['0', 'a', 'b', 'c'], dtype=object)
  • 绘制热力图: sns.heatmap(df_train.corr(),cmap = 'RdYlGn_r',annot=True,vmin = -1,vmax=1)
  • 合并商店信息和销售数据:  train = pd.merge(train, store, on = 'Store', how = 'left')
  • 画柱状图:  _ = plt.hist(y_train,bins = 100)
  • 保存模型:  gbm.save_model('./train_model.json')
  • 查看预测值发现整体偏高, 集体调整.
  • Xgboost模型训练:
params = {'objective':'reg:linear',
          'booster':'gbtree',
          'eta':0.03,
          'max_depth':10,
          'subsample':0.9,
          'colsample_bytree':0.7,
          'silent':1,
          'seed':10}

num_boost_round = 6000
dtrain = xgb.DMatrix(X_train,y_train)
dtest = xgb.DMatrix(X_test,y_test) # 保留的验证数据

print('模型训练开始……')
evals = [(dtrain,'train'),(dtest,'validation')]
gbm = xgb.train(params,# 模型参数
          dtrain, # 训练数据
          num_boost_round, # 轮次,决策树的个数
          evals = evals,# 验证,评估的数据
          early_stopping_rounds=100, # 在验证集上,当连续n次迭代,分数没有提高后终止训练
          feval=rmspe_xg,# 模型评估的函数
          verbose_eval=True)# 打印输出log日志,每次训练详情


1、项目的背景与目的

使用商店、促销和竞争对手数据预测销售Rossmann在欧洲国家经营着3000多家日化用品超市。目前,Rossmann商店经理的任务是提前6周预测他们的日销售额。商店的销售受到许多因素的影响,包括促销、竞争、学校和国家假日、季节性和地域性。由于数以千计的管理者根据自己的特殊情况预测销售,结果的准确性可能会有很大的差异。
因此使用机器学习算法对销量进行预测,Rossmann要求预测德国1115家商店的6周日销售额。可靠的销售预测使商店经理能够制定有效的员工时间表,提高生产力和积极性。

这就是算法和零售、物流领域的一次深度融合,从而提前备货,减少库存、提升资金流转率,促进公司更加健康发展,为员工更合理的工作、休息提供合理安排,为工作效率提高保驾护航。

2、数据介绍

  • train.csv - 包含销售情况的历史数据文件
  • test.csv - 不包含销售情况的历史数据文件
  • sample_submission.csv - 数据提交样本文件
  • store.csv - 商店更多信息文件

字段说明

Store:  每个商店唯一的ID

Sales:  销售额

Customers:  销售客户数

Open商店是否营业 0=关闭,1=开业

StateHoliday:  国家假日

SchoolHoliday:  学校假期

StoreType 店铺类型:  a, b, c, d

Assortment 产品组合级别:  a = 基本, b = 附加, c = 扩展

CompetitionDistance:  距离最近的竞争对手距离(米)

CompetitionOpenSince[Month/Year]:  最近的竞争对手开业时间

Promo:  指店铺当日是否在进行促销

Promo2:  指店铺是否在进行连续促销 0 = 未参与, 1 = 正在参与

Promo2Since[Year/Week]:  商店开始参与Promo2的时间

PromoInterval:  促销期

StateHoliday:通常所有商店都在国家假日关门:a = 公共假日, b = 复活节假日,c = 圣诞节,0= 无

3、数据加载

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import xgboost as xgb
import time

3.1、查看数据

# 加载数据时,为特定字段指定了数据类型
train = pd.read_csv('./data/train.csv',dtype={'StateHoliday':np.string_}) 
test = pd.read_csv('./data/test.csv',dtype={'StateHoliday':np.string_})
store = pd.read_csv('./data/store.csv') # 每个店铺的详情
display(train.head(),test.head(),store.head())
print(train.shape,test.shape,store.shape)   # (1017209, 9) (41088, 8) (1115, 10)

  •  数据中存在空数据,一次需要处理空数据

3.2.1、训练数据处理

train.isnull().sum() 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值