- 查看数据是否为空: 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()


文章介绍了如何使用Python和XGBoost对Rossmann商店的销售数据进行预测,包括数据清洗、特征工程、模型训练和优化。通过预处理数据,处理缺失值,创建新特征,并使用XGBoost进行模型训练,最终目的是提高销售预测的准确性,帮助店铺管理决策。

2012

被折叠的 条评论
为什么被折叠?



