机器学习实战 | 综合项目-电商销量预估


1.案例介绍

在本篇内容中,ShowMeAI将基于Kaggle数据科学竞赛平台的Rossmann store sales大数据竞赛项目,给大家梳理和总结,基于Python解决电商建模的全过程:包括数据探索分析、数据预处理与特征工程、建模与调优。

本篇对应的结构和内容如下。

  • 第①节:介绍本篇中我们解决方案所用到的Python工具库。
  • 第②节:介绍Rossmann store sales项目基本情况,包括业务背景、数据形态、项目目标。
  • 第③节:介绍结合业务和数据做EDA,即探索性数据分析的过程。
  • 第④节:介绍应用Python机器学习工具库SKLearn/XGBoost/LightGBM进行建模和调优的过程。

2.工具库介绍

(1) Numpy

Numpy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy的主要特征如下:

  • 一个强大的N维数组对象ndarray
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

想对Numpy有详细了解的宝宝,欢迎查看ShowMeAI数据分析系列教程 中的Numpy部分。大家也可以查看ShowMeAI总结的Numpy速查表 数据科学工具速查 | Numpy使用指南 做一个快速了解。

(2) Pandas

Pandas是一个强大的序列数据处理工具包,项目开发之初是为了分析公司的财务数据以及金融数据。如今Pandas广泛地应用在了其他领域的数据分析中。它提供了大量能使我们快速便捷地处理数据的函数和方法,非常强大。

想对Pandas有详细了解的宝宝,欢迎查看ShowMeAI数据分析系列教程 中的Pandas部分。大家也可以查看ShowMeAI总结的Pandas速查表 数据科学工具速查 | Pandas使用指南 做一个快速了解。

(3) Matplotlib

Matplotlib是Python最强大的绘图工具之一,其主要用于绘制2D图形或3D图形的2D示意图。其在数据分析领域它有很大的地位,因为可视化可以帮助我们更清晰直观地了解数据分布特性。

想学习Matplotlib工具库的宝宝,也可以查看ShowMeAI总结的Matplotlib速查表 数据科学工具速查 | Matplotlib使用指南 做一个快速了解。

(4) Seaborn

Seaborn是基于Python且非常受欢迎的图形可视化库,在Matplotlib的基础上,进行了更高级的封装,使得作图更加方便快捷。即便是没有什么基础的人,也能通过极简的代码,做出具有分析价值而又十分美观的图形。

想对Seaborn有详细了解的宝宝,欢迎查看ShowMeAI数据分析系列教程 中的Seaborn部分。
大家也可以查看ShowMeAI总结的Seaborn速查表 数据科学工具速查 | Seaborn使用指南 做一个快速了解。

(5) Scikit-Learn

Python机器学习工具库Scikit-Learn,构建在Numpy,SciPy,Pandas和Matplotlib之上,也是最常用的Python机器学习工具库之一,里面的API的设计非常好,所有对象的接口简单,很适合新手上路。覆盖的模型非常多,适用场景广泛。

想对Scikit-Learn有详细了解的宝宝,欢迎查看ShowMeAI的机器学习实战教程中的SKLearn入门SKLearn指南 部分。也可以查看ShowMeAI总结的Scikit-Learn速查表 AI建模工具速查 | Scikit-Learn使用指南 做一个快速了解。

(6) XGBoost

XGBoost是eXtreme Gradient Boosting的缩写称呼,它是一个非常强大的Boosting算法工具包,优秀的性能(效果与速度)让其在很长一段时间内霸屏数据科学比赛解决方案榜首,现在很多大厂的机器学习方案依旧会首选这个模型。XGBoost在并行计算效率、缺失值处理、控制过拟合、预测泛化能力上都变现非常优秀。

想对XGBoost有详细了解的宝宝,欢迎查看ShowMeAI的文章 图解机器学习 | XGBoost模型详解 理解其原理,以及文章 XGBoost工具库建模应用详解 了解详细用法。

(7) LightGBM

LightGBM是微软开发的boosting集成模型,和XGBoost一样是对GBDT的优化和高效实现,原理有一些相似之处,但它很多方面比XGBoost有着更为优秀的表现。

想对LightGBM有详细了解的宝宝,欢迎查看ShowMeAI的文章 图解机器学习 | LightGBM模型详解 理解其原理,以及文章 LightGBM工具库建模应用详解 了解详细用法。

3.项目概况介绍

本项目源于Kaggle平台的大数据机器学习比赛 Rossmann Store Sales,下面对其展开做介绍。

3.1 背景介绍

Rossmann成立于1972年,是德国最大的日化用品超市,在7个欧洲国家有3000多家商店。商店不定时会举办短期的促销活动以及连续的促销活动以此来提高销售额。除此之外,商店的销售还受到许多因素的影响,包括促销、竞争、学校和国家假日、季节性和周期性。

3.2 数据介绍

数据以1115家Rossmann连锁商店为研究对象,从2013年1月1日到2015年7月共计录1017209条销售数据(27个特征)。

数据集一共涵盖了四个文件:

  • train.csv:含有销量的历史数据
  • test.csv:未含销量的历史数据
  • sample_submission.csv:以正确格式提交的示例文件
  • store.csv:关于每个商店的一些补充信息

其中,train.csv中的数据中一共含有9列信息:

  • store:为对应店铺的id序号
  • DayOfWeek:代表着每周开店的天数
  • Data:是对应销售额Sales产生的日期
  • Sales:就是销售额的历史数据
  • Customers:为进店的客人数量
  • Open:则表示这个店铺是否开门与否
  • Promo:表示商店是否在当天有促销活动
  • StateHoliday:与SchoolHoliday分别表示了是否是国定假日或是学校假日。

(1) train.csv

我们在Kaggle的data页面下部的数据概览可以大致查看每个数据的分布情况和部分数据样例如下:

(2) test.csv

test.csv中的数据列几乎和train.csv一样,但缺少了Sales(也就是销售数据)以及Customers(用户流量)这两列。而我们的最终目标就是利用test.csv以及store.csv中的补充信息预测出test.csv中缺失的Sales数据。

test.csv的数据分布情况,可以看到和上面相比缺少了Sales以及与Sales有强关联的Customer数据。

数据分布和部分示例数据如下:

(3) sample_submission.csv

结果文件sample_submission.csv中仅有id与Sales这两列,这个文件是我们将我们的预测答案提交至Kaggle的判题器上的标准格式模板。

在Python中我们只需要打开此文件,并将预测数据按照顺序填入Sales这一列后,使用Dataframe.to_csv(‘sample_submission.csv‘)后就可以将带有预测数据的sample_submission.csv保存至本地并准备后续上传。

(4) store.csv

大家可以看到,train.csvtest.csv中有对应的店铺id,这些店铺id的详细情况就对应在store.csv中,其中记录了一些店铺的地理位置信息以及营促销信息。

store.csv的数据分布情况,可以注意到这里有很多离散的类别标签。

数据分布和部分示例数据如下:

其中:

  • Store:对应表示了店铺的编号。
  • StoreType:店铺的种类,一共有a、b、c、d四种不同种类的店铺。大家可以把它想象成快闪店,普通营业店,旗舰店,或mini店这样我们生活中的类型。
  • Assortment:用a、b、c三种分类描述店铺内售卖产品的组合级别。例如旗舰店和mini店中组合的产品肯定是有很大不同的。
  • Competition DistanceCompetition Open Since YearCompetition Open Since Month:分别表示最近的竞争对手的店铺距离,开店时间(以年计算),开店时间(以月计算)。
  • Promo2:描述该店铺是否有长期的促销活动。
  • Promo2 Since YearPromo2 Since Week:分别表示商店开始参与促销的年份和日历周。
  • Promo Interval:描述promo2开始的连续间隔,以促销重新开始的月份命名。

3.3 项目目标

在了解了这些数据后我们就需要明确一下我们的项目目的,在Rossmanns销售预测中,我们需要利用历史数据,也就是train.csv中的数据进行监督学习。训练出的模型利用通test.csv中的数据进行模型推断(预测),将预测出的数据以sample_submission.csv的格式提交至Kaggle进行评分。在这过程中还可以结合store.csv中的补充信息加强我们模型获得数据的能力。

3.4 评估准则

模型所采纳的评估指标为Kaggle在竞赛中所推荐的 Root Mean Square Percentage Error (RMSPE)指标。

RMSPE=1ni=1n(yiy^iyi)2=1ni=1n(y^iyi1)2RMSPE = \sqrt{\frac{1}{n}\sum\limits_{i=1}^n\left(\frac{y_i-\hat{y}_i}{y_i}\right)^2} = \sqrt{\frac{1}{n}\sum\limits_{i=1}^n\left(\frac{\hat{y}_i}{{y}_i}-1\right)^2}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享