无标题文章

> # **Udacity--毕业项目开题报告**

> ### 报告作者:MingJun-Li

# 一、定义

# 1.1项目概览

* ### 历史信息

Rossmann是欧洲的一家连锁药店,在7个欧洲国家拥有3,000家药店。 目前,罗斯曼店经理的任务是提前六周预测其日销量。 商店销售受到诸多因素的影响,包括促销,竞争,学校和国家假日,季节性和地点。 成千上万的个人经理根据其独特的情况预测销售量,结果的准确性可能会有很大的变化。

Rossmann希望你能通过给出的数据来预测德国各地1,115家店铺的6周销量。

在此次项目中,我将模拟自己参加kaggle比赛,用train.csv来建模,之后用test.csv来预测,通过提交到Kaggle来评估模型表现。

* ### 项目意义

可靠的销售预测使商店经理能够创建有效的员工时间表,从而提高生产力和动力,比如更好的调整供应链和合理的促销策略与竞争策略。 通过帮助Rossmann创建一个强大的预测模型,您将帮助仓库管理人员专注于对他们最重要的内容:客户和团队!

* ### 实现可能性

Rossmann给出的数据足够丰富,并且各个特征都和销售有关系。这是一个明显的监督学习的项目,有有标签的数据集。

* ### 引用说明

最后会用到xgboost这个现成的混合模型,不仅运算速度快,而且集成了一系列算法。因为源码涉及大量C语音因此没有太看懂,主要参见了几个大神的博客,了解了xgboost的运行原理以及此模型的参数设置与调整方案。

* ### 主要用到了3个数据集,并有1个数据集作为提交数据集得参考样本:

* train.csv - 历史数据包括sales的数据

* test.csv - 历史数据不包括sales的数据

* store.csv - 提供各个店铺的具体信息的数据

* sample_submission.csv - 一个最后提交数据集的参考样本

以上数据都由kaggle提供,没有引入其他的数据集,因为这个问题比较特定并且已经足够充分了,不像自然语言处理类需要额外的数据

###        - 数据集中大多数数据字段是不言自明的,符合我们的常识,以下是不是这些的字段具体描述:

* Id - 表示测试集中(存储,日期)副本的Id

* Store - 每个商店的独特Id

* Sales  - 任何一天的营业额(这是你预测的)

* Customers - 某一天的客户数量

* Open - 商店是否打开的指示器:0 =关闭,1 =打开

* StateHoliday - 表示一个国家假期。通常所有商店,除了少数例外,在国营假期关闭。请注意,所有学校在公众假期和周末关闭。 a =公众假期,b =复活节假期,c =圣诞节,0 =无

* SchoolHoliday - 表示(商店,日期)是否受到公立学校关闭的影响

* StoreType - 区分4种不同的商店模式:a,b,c,d

* Assortment - 描述分类级别:a = basic,b = extra,c = extended

* CompetitionDistance - 距离最接近的竞争对手商店的距离

* CompetitionOpenSince[Month/Year] ] - 给出最近的竞争对手开放时间的大约年和月

* Promo - 指示商店是否在当天运行促销

* Promo2 - Promo2是一些持续和连续推广的一些商店:0 =商店不参与,1 =商店正在参与

* Promo2自[年/周] - 描述商店开始参与Promo2的年份和日历周

* PromoInterval - 描述了Promo2的连续间隔开始,命名新的促销活动的月份。例如。 “二月,五月,八月,十一月”是指每一轮在该店的任何一年的二月,五月,八月,十一月份开始

### -数据集的使用方式:

sample只用来参考自己得出的答案是否符合格式和是否存在过大的差距

主要使用train.csv - test.csv - store.csv,前期会分别分析,之后会将store数据与train和test进行合并,用合并后的数据训练模型和验证。

# 1.2问题说明

## 问题描述

总的来说,就是需要根据Rossmann药妆店的信息(比如促销,竞争对手,节假日)以及在过去的销售情况,来预测Rossmann未来的销售额。

下面是具体要完成好此任务需要解决的一些问题

* ### 数据缺省的问题

无论是在train还是test还是store等数据集中大部分特征都不是全都数据完整的需要去合理补上这些特征的值

* ### 数据存在异常值

数据在记录的时候难免有出现记错或者发生特殊情况的时候,因此有些特征的数据并不可靠,噪音很大,会极大的影响整个模型的准确性,因此要去除这些异常值

* ### 数据的分离问题:

train和test数据集都与store产生了分离。而store中的特征又与预测结果息息相关。因此要做好一个完整的训练和测试集,必须用合理的方式把store的数据与train和test的合并起来

* ### 特征的重编码问题:

比如 Categorical Variabl数值化,而类似销售额等特征可以常识用log等等

* ### 对各个特征的理解:

只有理解各个特征的现实意义才能做出更合理的特征工程,而这个理解需要通过一些统计上的知识与实际生活中的常识

* ### 特征选择

通过挑选出最重要的 Feature,可以将它们之间进行各种运算和操作的结果作为新的 Feature,可能带来意外的提高。但是怎么选呢?

* ### 众多模型的选择困难

能运用的模型有很多种,选择哪一个更适合,是选一个还是混合多个模型,如果用混合模型那该用哪几个模型?

* ### 降低 Overfitting 的风险的办法

在提高分数的同时又降低 Overfitting 的风险,这个需要用到不少技巧,尤其是大多数单个模型很难实现test error的持续下降。

* ### 如何进行有效的可视化

可视化对我来说不是太熟练,需要补充大量的知识。

## 问题的解决方案

* ### 数据的缺省:

根据不同的特征的情况,选择继承临近的数据或者取平均值来进行填充,具体方案要case by case。

* ### 数据的缺省:

根据不同的特征的情况,选择继承临近的数据或者取平均值来进行填充,具体方案要case by case。

* ### 数据的分离问题

找到一个用于作为合并数据集标杆的特征,比如店铺id然后将store的数据与train和test的合并起来

* ### 数据存在异常值:

用可视化的方法找出存在异常值的特征,然后进行dropout。

* ### 特征的重编码问题:

利用panda的一些小技巧将Categorical Variabl数值化,而类似销售额等特征可以用log再多构造一个特征等等

* ### 对各个特征的理解

利用好matplot和seaborn的绘图工具中的统计工具对数据可视化后,洞察出数据之间的相关性。然后辅以自己对于购物的一些常识而和逻辑推理进一步理解特征。从而为更好地进行特征工程作充分准备。

* ### 特征选择

经过足够的可视化分析和特征理解之后就能大致清楚了不同特征的重要性了。也就可以进行特征选择了,通过挑选出最重要的 Feature,可以将它们之间进行各种运算和操作的结果作为新的 Feature,可能带来意外的提高,比如两个特征合并等。当然还有去掉那些没意义的特征和数据点,比如商店关门的日子,销售额为零的日子等等

* ### 模型的选择

根据数据的具体情况(如:特征维度数量,任务类别:分类还是回归,泛化能力,过拟合的风险等)选择几个适合的模型进行尝试,根据评估指标决定最后的选择

* ### 降低 Overfitting 的风险的办法

特征工程是不可或缺的,好的特征对于模型的精确度至关重要,然后要在模型选择和Ensemble上下功夫了,可以试试bagging,boosting或者stacking

* ### 如何进行有效的可视化

看大神们的博客,并自己动手实践

# 1.3指标

最终的评估结果主要是Kaggle在此项目中的pravite_data与自己预测结果的“均根方差rmspe”

自己训练的时候评估主要是看自己进行充分的特征工程后  合并后的数据集在经过训练后在train和test上的“均根方差rmspe”数值

# 二、分析

## 2.1数据研究

### 方法:

Data Exploration,对数据进行探索性的分析,从而为之后的处理和建模提供必要的结论,用 pandas 来载入数据,并 matplotlib 和 seaborn 提供的绘图功能做一些简单的可视化来理解数据。对 Numerical Variable,可以用 Box Plot 来直观地查看它的分布。

```python

```

# 5.基准模型

从多项式的线性回归开始,加入L1正则化,看看效果

再试试knn和逻辑回归,看看效果

然后可能会尝试用Bagging和boosting来进行优化或者用Blending将不相交的数据训练不同的 Base Model,将它们的输出取(加权)平均。或者使用较为复杂的Stacking。最终如何还是要看自己选择的模型和数据的具体情况了。

最后用称霸kaggle和各类数据挖掘比赛的综合模型xgboost来进行训练

根据评估标准找出最佳的模型|

# 7.项目流程设计

* 第一步:

Data Exploration,对数据进行探索性的分析,从而为之后的处理和建模提供必要的结论,用 pandas 来载入数据,并 matplotlib 和 seaborn 提供的绘图功能做一些简单的可视化来理解数据。对 Numerical Variable,可以用 Box Plot 来直观地查看它的分布。

* 第二步:

Statistical Tests,以对数据进行一些统计上的测试来验证一些假设的显著性。虽然大部分情况下靠可视化就能得到比较明确的结论,但有一些定量结果总是更理想的。

* 第三步:

Data Preprocessing,大部分情况下,在构造 Feature 之前,我们需要对比赛提供的数据集进行一些处理。具体的步骤有:处理 Missing Data,处理 Outlier,转换某些 Categorical Variable 的表示方式。

* 第四步:

Feature Encoding,Raw Feature 可能需要经过一些转换才能起到比较好的效果。比如时间序列转化成数值还有类别变量转化成数值,以及类似于sales这样的特征加log等等。最后将store数据集合并到train和test数据集上

* 第五步:

Model Selection,开始选用一些常见的模型进行训练了。先选用一些常规和简单的模型进行训练尝试,如多项式的线性回归和逻辑回归,之后根据效果和数据特定决定使用更适合的模型。

* 第六步:

Model Training,确定好自己训练和测试集,已经分好了,所以此步骤就相当于 Cross Validation,知道自己model有没有overfit。

* 第七步:

Ensemble Generation,尝试使Bagging来用训练数据的不同随机子集来训练每个 Base Model,最后进行每个 Base Model 权重相同的 Vote。也可以尝试使用Boosting来根据上一个迭代中预测错误的情况修改训练样本的权重。或者用Blending将不相交的数据训练不同的 Base Model,将它们的输出取(加权)平均,或者使用较为复杂的Stacking。最终如何还是要看自己选择的模型和数据的具体情况了。

* 第八步:

生成预测数据,并提交到kaggle上,查看自己的成绩,然后根据得分,思考自己可能存在的问题,并重复和优化第二到第七步,直到自己提升困难为止

## ----------------------------------------End!Thanks for reading----------------------------------------------------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,678评论 0 9
  • #用户出行偏好 **** **一、概览** 采用机器学习解决问题最关键的一步是找准问题: 1、这种问题能否用机器学...
    1ea082ad5d52阅读 547评论 0 2
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,837评论 1 10
  • 目录 [TOC] 引言 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来...
    雷达熊阅读 965评论 0 2
  • 1.我发现那些学霸真正牛的地方不是他们回答问题的能力,而是他们提出好问题的能力 。 2.好问题三要素 第一,首先,...
    CSir205阅读 196评论 0 0