实例介绍
基于Xgboost的商业销售预测,以德国Rossmann商场的数据为例,通过对数据的探索性分析,以相关背景业务知识体系为基础,通过可视 化分析,提取隐含在数据里的特征,使用性能较优的Xgboost方法进行规则挖掘,取得较好效果。
第3期 饶泓等:基于 Boost的商业销售预测 277· (3)eta:收缩步长,即学习速率,取值范围是,3.1数据来源 默认为0.3。在更新叶子节点的时候,权重乘以 本文所有数据均来自 Haggle中的 Rossmann eta,以避免在更新过程中的过拟合。 商店销售额数据集。 Rossmann是商人 Dirk ross (4) max _ depth:每棵树的最大深度,取值范围mann创立的德国首家平价日用品商店,现在的 是,默认为6。树越深,越容易过拟合。 Rossmann公司逼布欧洲7个国家,分店达100多 (5) subsample:训练的实例样本占整体实例样家。论文通过位于德国的1115所 Rossmann连锁 本的比例取值范围是(0.1],默认为1。值为0.5商店的历史数据预测未来48天商店的销售额 时意味着 Boost随机抽取一半的数据实例来生成 Haggle给出了三个数据集: train、test、 store,分 树模型,这样能防止过拟合 别是训练集测试集和商店基本信息的数据集,对训 (6) colsample bytree:在构建每棵树时,列(特练集建模训练,对测试集进行预测。 征)的子样本比,参数值的范围是(0,1] 数据集基本信息如下 (7) objective:默认为reg: linear; (1)训练集 train.csv:时间范围为2013年01月 (8)sccd:随机数种子,为确保数据的可重现01日到2015年07月31日,共942天,1017209条 性,默认为0。 数据。 2.2K折交叉验证方法(K一CV (2)测试集test.csv:时间范围为2015年08月 论文采用K折交叉验证方法。将原始数据0日到2015年09月17日,共48天,41088条数 分为K个子集,每个子集分别验证一次,剩余的K据 组子集作为训练数据,这样可得到K组训练集 (3)商店基本信息数据集 store.csv:1115条数 和测试集以最终的分类平均精度作为性能指标。据,共1115家商店的信息。 在实际应用中,K值一般大于或等于2,需要建立K3.2数据的可视化分析及原始特征提取 个模型来进行K折交叉验证的实验,并计算K次 为了获取影响销售额的基本数据特征,论文对 测试集的平均辨识率 Gaggle提供的 Rossmann数据集进行了可视化分 K折交叉验证的结果能较好说明模型效果,有析,提取原始特征集。 效地避免欠拟合与过拟合。在 Boost中,通过 (1)顾客数和销售额之间的关系 xgb.cv函数来做交叉验证。 从图1中可以看出,顾客数和销售额之间存在 2.3独热编码(One- hot encoding 紧密的正相关关系。 由于 Boost仅适用于处理数值型向量,因 此处理训练集和测试集时需要将所有其它形式的数 10.0 据转换为数值型向量,本文采用独热编码将特征值 转专换为数值。 50 独热编码也称一位有效编码,即对于任意时 间任意给定的状态,状态向量中只有一位为1,其余 6 各位为0,将n类特征值转化成n位二进制数串,将 顾客数 特征的每个对应类设置为1。独热编码将每一个特 图1顾客数与销售额的关系曲线 征的个取值通过独热编码后转换成了n个二元特 (2)促销对销售的影响的可视化分析 征,通过该方法将特征转变成稀疏矩阵6。独热编 图2和图3中 Promo取1表示当天有促销活 码能够解决分类器不好处理属性数据的问题并在动取0表示没有促销活动。从图中可以看出促销 一定程度上扩充了特征 活动对顾客数并没有太大影响,但销售量却明显提 3数据预处理 高了,即促销活动并没有吸引更多的顾客,但提高了 顾客的购买力,从而提高了销售额。通过查询原始 为了获取数据中的有效特征,论文采用探索性数据发现没有促销的情况下顾客平均消费8.94欧 数据分析方法对数据进行可视化分析获得数据分元,有促销活动的情况下平均消费10.18欧元 布特征,理解原始数据的基本特征,发现数据之间的 (3)星期( DayOf Week)对销售影响的可视化分 潜在模式.找出数据中的有效特征 析 21994-2017ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net 278 南昌大学学报(理科版) 2017年 40000 表2商店薮据基本特征集 30000 特征名称 含义 值 批20000 ore 商店号 取值:1到1115 商店类型 10000 商店类别 分类:逢础类 met最近的党争对手的距薮卷:桊 商店 0 离 里有761个商店有 Promo Competition- 图2促销对销售额的影响 Open SinceMonth 竞争对手开张的月份月份 Open since year 竞争对手开张的年份年份数据 6000 P 持续性的促销活动 0:无,1:有 的4000 Prom2 Since Week开始参加Pomo2促销日历上的第几周数 的日历周 值 2000 Pomo2 Sincerer开始参加Pm2i年份数据 Promo PromoInterval 参加Pomn2促销开始Jan,Apr,Jo)e 的月份列表 Feb, May, Aug, Nov". 图3促销对顾客数的影响 Mar, Jun, Sept, Dec 从图中可以看出,星期日的销售额中位数和上 不同的分类特征在训练集和测试集中的比例见 四分位数远远高出正常营业日,但是下四分位数却表3~6 低于正常营业日,即有些商店星期日营业额高于平 表3Open特征取值比例 时,但也有一部分商店的销售额低于正常营业日。 从图中也可以看出,从周一到周六,周一的销售额偏 16.99 高一些,星期六的销售额偏低一些 test/yo 14.55 85,44 40000 表4Prom特征取值比例 30000 P ramo 0 凝 train 61.85 38,15 批2000 test/%5 0.42 39.58 10000 表5 Stateholiday特征取值比例 y 星期几 1.99 0.66 0.40 图4销售额在星期1~7中的分布情况 test/% 99.560.44 由于篇幅的关系,对数据的可视化分析不 表6 Schoolholiday特征取值比例 列岀。根据这些数据的可视化化析,我们提取出如 Schoclholiday 表1所示和表2所示的训练数据和测试数据原始特 test/% 55.65 44.35 征集以及商店数据基本特征集。 表1数据原始特征集 3.3数据预处理 持征名称 含义 3.3.1数据清洗为获得可训练用数据,我们对原 tcre 有店号 取值:1到1115 始数据进行清洗,具体过程如下: DayOfWeek星期几 取值:1到7 (1)标记异常数据。如商店是开门的,但是销 Date 时间 如2013-01-01 Sales 销售额 数值 售额为零的数据为异常数据 Customers顾客数 数值 (2)对训练集的 Sales销售额字段取对数,设置 是否开店 关店,1:开店 为 Saleslog字段; P 当天是否有促销0:无促销,1:促销 0:非假日,a:公共假日;b: (3)缺失值用一1填充; State Holiday假日 复活节,c:圣诞节 (4)合并训练集和测试集,添加Set字段,用以 SchoclHoliday学校假日 0非假日,1:假日 分训练集和测试集,值1为训练集,0为测试集; (3)数值化分类特征值。原始数据集中, State 21994-2017ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net 第3期 饶泓等:基于 Boost的商业销售预测 holiday分类特征取值为0、a、b、c,无法代入模型计 算因此重新编码为0、1、2、3; Store Type分类特4实验结果及分析 值为a、b、c、d, Assortment分类特征值为a、b、c,采4.1实验条件 用同样方法用整型数据重新编码 (1)软件环境 (6)分解特征。将原始数据集中Date特征分 (a)操作系统: Windows7x64 解为 DatcDay、 Datc Wcck、 DatcMonth、 Datc ycar (b)开发平台: Python2.7+R3.4.2 DateDay OfYear5个特征 (c)第三方库: Python: numpy+ pandas+ (7)增加字段 PateNt,即Date转换为整型的 atplotlib I xgboost;R3.4.2库: data table|gg 形式 lot2tlubridate-zoo-dplyr+scales+xgboost+ (8)规范化特征表达。对 Competition- forecast glmnet pen sinceRer和 CompetitionOpenSinceMonth字 (2)硬件环境 段合并成普通年月的表达,并转化为整型;将Pro 处理器:Iner(R)Core(TM)i3-4160CPUc moZsincc ycar 和 Promo2 Since wcck字段合并成普3.60GHz 通年月的表达,并转化为整型,增加字段 内存:8GB Promo2 SinccInt 4.2单 Boost模型 ()删除偏差大于2.5的异常数据。 对特征工程后的所有特征用 Boost模型进行 (10)删除存在异常的数据点,如图5所示的异训练,参数如表7所示。 常数据。 表7单 Boost模型参数 25000 参数 值 参数 值 15000 thread 500M4M小人A ctive reg: linear subsample grounds 20000 colsample byt early stop. round 25000 4.3组合模型 0%时你以 根据模型的作用将模型分为三类:商店模式模 型、数据合并模型、混合模型。 商店模式模型:下面采用单个模型是对每个商 图5异常数据 店进行单独拟合。这类模型关注商店各自的特性, 3.3.2特征处理论文根据相关信息背景对数据但是它也错过了可在其他相似商店的模式中获取的 进行特征处理: 信息 (1)增加字段 Competition OpenInt (1)线性模型lm拟合趋势,不带特征交互的 (2)添加一些额外的特征,如商店的位置特征 Boost模型拟合残差 StoreState发薪日效应特征 PayDay(在一个月的第 (2)线性模型lm拟合趋势,带特征交互的Ⅹg 个工作日设置特征值为3在随后的两天设置为 boost模型拟合残差 2、1) (3)线性模型lm拟合趋势,不同参数值的 (3)增加商店平均每天的销售额 Sales PerDay、 glmnet模型拟合残差 平均每天的顾客数 CustomersPerDay、平均每天每 (4)tslm模型拟合趋势丨季节性,Ⅹ gboost模 位顾客的销售额 SalesPerCustomers Per Day作为新型拟合残差。 的特征。 (5)tslm模型拟合趋势十季节性, glmnet模型 (4)增加特征组合,如: store; DayofWeek,拟合残差 store: Dayofweek: Promo等等。 (6)tslm模型拟合趋势十季节性,Ⅹ gboost模 型+ gemnet模型拟合残差。 (7)每个商店直接用Ⅹ gboost模型拟合残差。 21994-2017ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net ·280· 南昌大学学报(理科版) 2017年 这些模型中,含有 Boost模型的模型参数设 1.5 - A. train-rmspe - B. train-rmspe 置如表8,其中模型7中参数 rounds值设为500。 1.0 -A.validation-rmspe-B validation 表8组合 Boost的模型参数 0.5 参数值 0150030004500600075009000 参数 值 RMSPE reg: linear eta 0.01 3C0 max _ depth 图6在训练集 train和验证集 validation上的 RMSPE值 colsamplc bytrcc 0.8 subsample 3.95 图7给出了 Boost模型中非组合特征的重要 数据合并模型:下列模型使用合并有 store数度得分,从图中可以看出时间类特征和有关竞争对 据集和trai训练集的数据集。各个模型的参数设手的特征得分非常髙,这意味着这些特征对模型具 置如表9-11 有非常大的影响。 表9没有特征工程的 Boost模型 DateWeek 参数 参数 CompetitionopenInt reg: linear eta 0.01 SalesperDay Promo rounds 3000 max _depth colsample bytree subsample Assortment 152 1000000 2000000 3000000 F score 特征重要度 表10有特征工程的 Boost模型 图?特征重要度得分 参数 参数 值 bjective reg: linear eta 为了对比各模型的泛化效果,我们给出了单类 模型(线性模型LM、时间序列线性模型TSLM、基 4000 subsoIl 0.9 于 Lasso和 Elastic net正则广义线性模型 glmnet、 early stop. round 100 cclsample bytree 极端梯度上升模型ⅹ gboost)和它们之间的组合模 型在测试集上 RMSPE值,从而评价模型在测试集 表11153个特征十特征交互的 Xgboost模型 上的泛化能力。如表13所示 参数 值 参数 表13各模型 RMSPE值比较 objective reg: linear eta C.015 max depth 18 模型 RMSPE值 .20657 300C LM一简单的特征处理 rounds. 1l .7 TSLM+筒单的特征处理 cCan vTree 0.12751 early stop. round 100 random forest-简单的特征处理 glmnet+简单的特征工程 3.11974 组合模型:通过组合数据合并模型来获取跨多个商 Boost十简单的特征工程 0.11839 店之间共同的特质。模型的残差用商店模式模型中 Boost+特征工程 Boost+ glmnet+特征工程 0.11262 的模型来拟合,从而获得每个商店的特质。用 Igloos+ glmnet+tslm+lm+特征工程 0.1114G prcomp函数从数据中提取50个主成分,并用Xg 从表中可以看出,Ⅹ ghost单模型的能力就优 bost模型来拟合、计算残差。模型说明如下: 于其它模型,在进行了简单特征工程后, Boost (1)使用线性模型lm拟合趋势,带特征交互的 和 gemnet模型相比, Boost模型依然效果更好。 glmnet模型+ Boost模型拟合残差, 最后我们结合TSLM|LM在处理趋势和季节性上 (2)使用tslm拟合趋势和季节性,带特征交互 的优势,采用集成方法对 Xgboost+ glmnet进行组 的 Boost模型拟合残差。 合得出优化模型Ⅹ gboost+ glmnet+tslm+lm+特 图6给出模型在训练集和验证集上的 RMSPE 征工程, RMSPE值得到较大提升,泛化性能最优 的变化过程,横坐标是次数,纵坐标是 RMSPE的 值A是人工删除了异常点的数据中的异常数据5结论 并没有删除。可以发现在训练集上训练的前500次 本论文研究基于 Boost方法对实体零售业销 RMSPE的值就迅速的降低到0.2,然后在1750次售额进行预测。论文以德国零售业 Rossmann公 就在0.1左右了,可以看出在训练集上效果很好。 司1115家实体门店的商场信息和销售数据为薮据 21994-2017ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net 第3期 饶泓等:基于 Boost的商业销售预测 281· 源,采用 Boost方法对公司销售额进行预测。 参考文献 通过在特征工程中对原始数据进行特征提取、L1」赵啸彬.基于数据挖掘的零售业销售预测LD.上海: 选择和构建,筛选岀用于训练的特征属性;对比Xα 上海交通大学.2010 boost、随机森林、 GLMNET以及IM、TSIM模型2 CHEN T,HET. Higgs Boson Discovery with boosted 等不同方法对销售额的预测结果,表明 Xgboosτ方 TreesLCI.JMLR: Workshop and Conference Proceed 法无论是训练速度还是在 RMSPE评价标准上都具 2015.42:6980 有明显的优势。 3 ROBERT E. Banfield, Lawrence (. Hall. Kevin W Bowyer. W. P. Kegelmeyer, A Comparison of Decision 为了进一步提高 Boost预测模型的精度和泛 Tree Ensemble Creation Techniques LI]. IEEE Trans- 化能力,本文通过大量的特征工程,尝试多种模型的 actions on Pattcrn Analysis and machinc intelligence 集成学习方法和参数调优,利用 GLMNET和Xg 2007,29(1):173-180 boost模型拟合残差,并结合IM、TSLM在趋势和[]李航.统计学习方法[M]北京:清华大学出版社, 李节性预测的优点,获得组合优化模型。实验表明 2012 该组合模型在性能上优于单一 Boost预测模型。[5]闻玲·移动平均季节模型在商品销售收入预测中的应 这种基于Xⅹ gboost的组合模型不仅适用于对德 AJ. Market Modernization, 2010(28):43-45 国零售业销售额的预测还可以将此方法应用于国6黄伟陶俊才.一种基于k- means聚类和关监督学习 内零售实体业甚至电商平台的销售额预测,对于提 的医学图像分割算法[J].南吕大学学报(理科版), 2(14,33(1):31-35 高商店的运营生产模式、日常管理、价格管理、配送 [7 RICE J Mathematical Statics and Data Analysis[M] 方式及精准营销具有重要的意义 cand Edition, Plymouth: Duxbury Press, 2006: 221- 21994-2017ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论