数据分析项目实战:大型商场销售预测(带你挤进比赛前100名)

本文是作者参加Analiytics Vidhya的销售预测竞赛的心得,使用R语言进行数据预处理、特征工程,通过xgboost构建模型并调优,最终模型进入前100名。分析了商店类型、商品价格、展示比例等因素对销量的影响,强调了特征工程的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


作者简介Introduction

Joffy Zhong:咨询顾问 | 写作爱好者 | 数据分析 | 互联网创业者 R语言中文社区专栏作者

知乎ID:https://www.zhihu.com/people/joffy/posts

背景:

此项目为Analiytics Vidhya的竞赛题目,大型商场销售额预测,该项目提供了从不同城市的10家商店中收集的1559种产品的2013年销售数据。目的是通过2013年的销售数据,建立一个销售额预测模型,预测每个产品在特定商店的销售情况。

写此篇文章的目的是记录我分析和思考的整个过程,并与各位分析师朋友一起交流,帮助自己未来持续改善和提升模型效果。

截止到写此文章为止,我的模型预测效果得分目前是前100名。

竞赛截止到2019年1月1号,如果您在零售行业工作,且在寻找一个优秀的模型或者对此类问题感兴趣,这个项目值得大家参与和探索,相信会有收获。

分析工具为R语言,并且最后通过xgboost提升整个模型效果。

你可以通过这个链接访问到竞赛主页 Big Mart Sales III(https://datahack.analyticsvidhya.com/contest/practice-problem-big-mart-sales-iii/)


提出假设:

目标是预测商店的每个产品的销量,对销售额可能的影响因素如下:

与商店有关的假设:

与商品有关的假设:


数据集

变量描述:

探索数据:

#加载包

 library(ggplot2)

 library(grid)

 library(gridExtra)

 library(caret)

 library(randomForest)

 library(xgboost)

 library(Hmisc)

 library(dplyr)

 library(rpart)

 library(rpart.plot)


#加载数据

 train.data <- read.csv("train.csv",stringsAsFactors = F)

 test.data <- read.csv("test.csv",stringsAsFactors = F) test.data$Item_Outlet_Sales <- NA 

#合并数据集,特征工程需要,避免重复执行相同代码

 all_bms <- rbind(train.data,test.data) 

#描述统计量

 describe(all_bms)

数据描述信息:

  • Item_Weight 产品重量存在缺失值,需要处理

  • Outlet_Size 商店大小存在缺失值,需要处理

  • Item_Outlet_Sales 商品销售额的缺失值符合测试集的数目,不用处理

  • Item_Fat_Content 商品低脂变量,有LF,low fat,Low Fat,reg,Regular五个类别,从类别描述看可以分为Low Fat和Regular两个变量,表示低脂和常规

  • Item_Visibility 商品的展示百分比数据中存在最低值为0,由于训练集的每个商品数据都有对应的销售额,因此这是异常的值,需要处理

  • Item_Type 产品类别归类较多,需要进一步看看能够生成新的归类变量

  • Item_MRP 给出了商品的标价,能够计算出对应商品的销量(相对于销售额,销量更易于理解和探索)

  • Outlet_Establishment_Year 商店的开店年份19xx年,这样的数据不直观,可以调整为年数


清洗数据

1、处理缺失值:商品重量

由于每个商品的重量应该是相同的,所以用商品的重量均值补插缺失的值

#计算商品重量均值,默认移除缺失值

 tmp <- aggregate(Item_Weight~Item_Identifier,data = all_bms,FUN = mean)

 #将均值赋值给对应缺失的重量值

 for (i in which(is.na(all_bms$Item_Weight))) {

  all_bms$Item_Weight[i] <- tmp$Item_Weight[tmp$Item_Identifier == all_bms$Item_Identifier[i]]

 } 

#检查缺失值,处理后没有缺失值 

sum(is.na(all_bms$Item_Weight))

2、处理缺失值:商店大小

由于商店大小的值跟我们的前面的假设比较相关,商店的面积可能还与商店的类型等有关联,

#检查商店大小与商店类型的关系

<

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值