销售额预测分析

  • 快消企业,分析目的

    • 对商超门店的销售额进行预测

    • 量化自身所能控制的各种促销因素所能产生的效果

    • 对营销资源做出合理规划

  • 传统快消企业,数据特点

    • 聚合类的数据

    • 渠道众多,无法精准了解用户

  • 本例中,通过回归分析实现对各类因素投入产出比做出评估

    • 分析数据

      • 电视广告,线上,线下,门店内,微信渠道等促销投入和销售额之间的关系

    • 数据说明 (以月为观测窗口)

      • Revenue 门店销售额

      • Reach 微信广告次数

      • Local_tv 本地电视广告投入

      • Online 线上广告投入

      • Instore 门店内海报等投入

      • Person 门店促销人员

      • Event 促销事件

        • cobranding 品牌联合促销

        • holiday 节假日

        • special 门店特别促销

        • non-event 无促销活动

    • 分析流程:数据概况分析->单变量分析->相关性分析与可视化->回归模型

      • 数据概况分析

        • 数据行/列数量

        • 缺失值分布

      • 单变量分析

        • 数字型变量的描述指标(平均值,最大最小值,标准差)

        • 类别型变量(多少个分类,各自占比)

      • 相关性分析与可视化

        • 按类别交叉对比

        • 变量之间的相关性分析

        • 散点图/热力图

      • 回归分析

        • 模型建立

        • 模型评估与优化

import pandas as pd#数据读取#
#index_col=0 ,数据的第一列是索引,指定索引列.后续则不用另外做删除索引Unnamed: 0的操作
store=pd.read_csv('store_rev.csv',index_col=0)store.head()revenue   reach   local_tv    online  instore person  event
845 45860.28    2   31694.91    2115    3296    8   non_event
483 63588.23    2   35040.17    1826    2501    14  special
513 23272.69    4   30992.82    1851    2524    6   special
599 45911.23    2   29417.78    2437    3049    12  special
120 36644.23    2   35611.11    1122    1142    13  cobrandingstore.info()  #数据查看后得出event需要做类型转换,local_tv有缺失值
<class 'pandas.core.frame.DataFrame'>
Int64Index: 985 entries, 845 to 26
Data columns (total 7 columns):#   Column    Non-Null Count  Dtype
---  ------    --------------  -----  0   revenue   985 non-null    float641   reach     985 non-null    int64  2   local_tv  929 non-null    float643   online    985 non-null    int64  4   instore   985 non-null    int64  5   person    985 non-null    int64  6   event     985 non-null    object
dtypes: float64(2), int64(4), object(1)
memory usage: 61.6+ KBstore.describe()  revenue         reach      local_tv        online      instore     person
count 985.000000    985.000000  929.000000      985.000000  985.000000  985.000000
mean  38357.355025  3.395939    31324.061109    1596.527919 3350.962437 11.053807
std   11675.603883  1.011913    3970.934733     496.131586  976.546381  3.041740
min   5000.000000   0.000000    20000.000000    0.000000    0.000000    0.000000
25%   30223.600000  3.000000    28733.830000    1253.000000 2690.000000 9.000000
50%   38159.110000  3.000000    31104.520000    1607.000000 3351.000000 11.000000
75%   45826.520000  4.000000    33972.410000    1921.000000 4011.000000 13.000000
max   79342.070000  7.000000    43676.900000    3280.000000 6489.000000 24.000000

#这几个类别对应的local_tv(本地电视广告投入)是怎样的
store.groupby(['event'])['local_tv'].describe()

#将类别变量转化为哑变量
store=pd.get_dummies(store)
#生成event的4个标签,每个标签取值0/1
store.head(10)revenue   reach   local_tv    online  instore person  event_cobranding    event_holiday   event_non_event event_special
845 45860.28    2   31694.91    2115    3296    8   0   0   1   0
483 63588.23    2   35040.17    1826    2501    14  0   0   0   1
513 23272.69    4   30992.82    1851    2524    6   0   0   0   1
599 45911.23    2   29417.78    2437    3049    12  0   0   0   1
120 36644.23    2   35611.11    1122    1142    13  1   0   0   0
867 36172.81    4   22372.59    2001    1881    17  1   0   0   0
847 43797.03    3   31443.74    1667    1846    15  1   0   0   0
950 41629.80    4   35775.75    1155    2715    12  0   0   0   1
942 21303.48    2   24888.31    1853    3677    4   0   0   1   0
550 20746.15    4   26623.48    1497    3075    9   0   1   0   0#确认类别变量已经转换成数字变量
store.info()#确认类别变量已经转换成数字变量
store.info()
#确认类别变量已经转换成数字变量
store.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 985 entries, 845 to 26
Data columns (total 10 columns):#   Column            Non-Null Count  Dtype
---  ------            --------------  -----  0   revenue           985 non-null    float641   reach             985 non-null    int64  2   local_tv          929 non-null    float643   online            985 non-null    int64  4   instore           985 non-null    int64  5   person            985 non-null    int64  6   event_cobranding  985 non-null    uint8  7   event_holiday     985 non-null    uint8  8   event_non_event   985 non-null    uint8  9   event_special     985 non-null    uint8
dtypes: float64(2), int64(4), uint8(4)
memory usage: 57.7 KB

查看目标值和特征之间是否有比较强的关联

#所有变量,任意两个变量相关分析
#local_tv,person,instore是比较好的指标,与revenue相关度高
store.corr()

#其他变量与revenue的相关分析
#sort_values 将revenue排序,ascending默认升序,False为降序排列
#看到前3个相关变量为local_tv,person,instore;
#0.2到0.3会有一个很明显的相关性,如果到0.3以上有明显的相关性;0.5以上有强相关性
store.corr()[['revenue']].sort_values('revenue',ascending=False)
             revenue
revenue         1.000000
local_tv        0.602114
person          0.559208
instore         0.311739
online          0.171227
event_special   0.033752
event_cobranding-0.005623
event_holiday   -0.016559
event_non_event -0.019155
reach           -0.155314
#可视化分析
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#%matplotlib inline 可以在Ipython编译器里直接使用,功能是可以内嵌绘图,并且可以省略掉plt.show()这一步。
#线性关系可视化
#斜率与相关系数有关;sns.regplot():绘图数据和线性回归模型拟合
sns.regplot('local_tv','revenue',store)

#线性关系可视化
sns.regplot('person','revenue',store)

#线性关系可视化
sns.regplot('instore','revenue',store)

#缺失值处理,填充0
store=store.fillna(0)
#缺失值处理,均值填充
store=store.fillna(store.local_tv.mean())
store.info()<class 'pandas.core.frame.DataFrame'>
Int64Index: 985 entries, 845 to 26
Data columns (total 10 columns):#   Column            Non-Null Count  Dtype
---  ------            --------------  -----  0   revenue           985 non-null    float641   reach             985 non-null    int64  2   local_tv          985 non-null    float643   online            985 non-null    int64  4   instore           985 non-null    int64  5   person            985 non-null    int64  6   event_cobranding  985 non-null    uint8  7   event_holiday     985 non-null    uint8  8   event_non_event   985 non-null    uint8  9   event_special     985 non-null    uint8
dtypes: float64(2), int64(4), uint8(4)
memory usage: 57.7 KB

线性回归分析

#线性回归分析
from sklearn.linear_model import LinearRegression
model=LinearRegression()  #y=kx+b
#设定自变量和因变量
y=store['revenue']
#第一次三个
x=store[['local_tv','person','instore']]
model.fit(x,y)
#自变量系数
model.coef_
#模型的截距
model.intercept_
#计算分数
score=model.score(x,y)#x和y打分
#模型的评估,x为'local_tv','person','instore'
predictions=model.predict(x)#计算y预测值;利用特征预测结果
error=predictions-y#计算误差
rmse=(error**2).mean()**.5#计算rmse
mae=abs(error).mean()#计算maeprint(rmse)
print(mae)
#8321.491623472051
#6556.036999600779#第二次四个
x=store[['local_tv','person','instore','online']]
model.fit(x,y)
#自变量系数
model.coef_
#模型的截距
model.intercept_
score=model.score(x,y)#x和y打分
score
#0.517440904944027#模型的评估,x为'local_tv','person','instore'
predictions=model.predict(x)#计算y预测值;利用特征预测结果
error=predictions-y#计算误差
print(rmse)
print(mae)  #计算rmse,mae值越小越好
#8106.512169325369
#6402.202883441895
什么时候使用线性回归?
  • 目标值是连续的
  • 特征和目标之间有关联
  • 直接根据若干特征去预测目标
  • 或者找到特征之间的关系(哪个特征对目标值的影响更大)
数据处理
  • 线性回归一定要填充缺失值/删除
  • 如果量纲不同意可以去归一化/标准化
  • 非数值类型的数据,可以做one-编码
  • 相关性分析 dataframe.corr()
  • sns.regplot("local_tv","revenue",'store')可视化分析
均方根误差(RMSE)也称标准误差    ;预测值-真实值的平方除以样本数量
MAE(平均绝对误差)

促销策略和销量关系的回归分析相关推荐

  1. 操作系统的不确定性是指程序执行结果的不确定性_用不确定性促销策略提高用户购买意愿...

    本文作者整理了关于不确定性促销策略的相关问题,结合案例对其一一展开了分析探究. 一.前言 促销玩法是电商运营的重要组成部分,我们整理了目前有关不确定性促销策略的前沿学术研究成果,希望以此解答以下问题, ...

  2. 开店攻略: 现代促销的七种促销策略

    商业企业目前可以采用的与当地消费者收入水平.消费观念.风俗习惯等相适应的七种促销策略. 传统的促销手法一般包括广告.人员推销.销售促进和宣传.这几种促销手段长期以来一直在商业企业的促销活动中居于主导地 ...

  3. 决策树算法分析天气、周末和促销活动对销量的影响

    决策树算法分析天气.周末和促销活动对销量的影响 作者:AOAIYI 作者简介:Python领域新星作者.多项比赛获奖者:AOAIYI首页

  4. 烧烤促销--策略模式

    ​小kim菌:菜菜,刚才我去买烧烤,满5块减2块!烧烤大叔算得手忙脚乱! 小菜菌:哈哈,买5块减2块,那买10块,减4块... 小kim菌:那买10086块呢 饥饿的小菜菌想了想,甩出一行代码. // ...

  5. 策略模式(示例1:通过实现Comparator接口定义不同的比较策略;示例2:促销策略)-设计模式

    目录 1.基本说明 2.比较一般对象大小,实现对象排序 (1)实现Comparable接口,定义了单种比较的规则 (2)实现Comparator接口,对于多种比较规则做到扩展兼容 3.另一个例子:促销 ...

  6. 赛题分析:AI决策•强化学习落地挑战赛——学习指定平等的促销策略

    赛事官方入口:https://codalab.lisn.upsaclay.fr/competitions/823#learn_the_details-overview 深度强化实验室的中文说明: ht ...

  7. 大话设计模式笔记(二)——商品促销 策略模式

    第二章商品促销--策略模式 需求:商品价格计算,并增加折扣条件 工厂模式UML图 在工厂模式中,调用端代码会通过折扣工厂类生成折扣对象,折扣对象调用折扣方法.这里关联了两个类,工厂类和抽象折扣类. 策 ...

  8. 促销策略管理的规则引擎实现

    生产型企业销售渠道的建设,一般都采用代理商政策.根据地区.产品等情况,设立不同级别的代理商,并且定期对于不同的产品线进行一定的促销政策调整. 生产型企业需要每个季度,根据最新的促销政策,需要计算每个代 ...

  9. 2.商场促销 - 策略模式 (大话设计模式Kotlin版)

    编程题:制作商场收银软件 利用编程做一个简易的商场收银系统,营业员根据客户购买的商品的单价与数量,向客户收费. 快速实现 马上想到的解决思路:无非是提供两个输入,分别对应商品单价与数量,然后通过计算得 ...

最新文章

  1. python Tkinter Text的简单用法
  2. NeurIPS 2021 | 港中文周博磊组:基于实例判别的数据高效生成模型
  3. android String.charAt的使用
  4. web 后台返回json格式数据的方式(status 406)
  5. websocket的加密和解密
  6. 计算机电缆 耐火,耐火计算机电缆ZR-NH-DJVVP
  7. html选择按钮select,Html选择使用select来改变一个按钮的链接使用Javascript
  8. 黄聪:bootstrap中模态框modal在苹果手机上会失效
  9. UI实用素材|下拉菜单细节设计,分层呈现
  10. JAVA面试速记,面试速记之computed与watch的区别
  11. Opera Mobile Classic Emulator
  12. 前端----表格的具体使用(jquery)
  13. android 字体css样式,css字体设置
  14. 产品需求文档模板,不用找了(附“简”例)【转】
  15. c++ 调用meshlab程序慢_从Meshlab学架构
  16. 珍惜生命,战胜自己,活出精彩
  17. 图片怎么做雕刻路径_精雕图怎么做路径
  18. python api接口10060_Python请求错误10060
  19. Swift-ScrollView轮播图的简易封装和使用
  20. 使用苹果cms建视频类的网站

热门文章

  1. 骨科专家:它比跑步更毁膝盖!危害极大,您却天天在做...
  2. Bomb后端云exception9015,请检查网络是否可用!
  3. 怎样做一名“技术布道者”
  4. idea创建maven项目 [超详细]
  5. Base64和Base64URL
  6. Handlebars+tpl模块化开发html
  7. 小明学PostgreSQL : 自旋锁浅析
  8. 修改mysql 视图字段类型_记一次mysql视图创建时自定义字段类型不同环境不同的原因...
  9. 关于Android 中的Activity,Application和Task
  10. 我的画作(在photoshop里面画的)