电商促销复盘项目

电商促销复盘项目


一、项目概述

有一个专门做特卖的网站(特卖一般是指在特定的时间段里,以优惠的价格出售指定的商品)。本文是对部分特卖商品在2019年双11销售情况的复盘,通过jupyter notebook,使用python的pandas和numpy包完成分析,通过分析结果,优化商品结构,让商品实现更好的销售情况。


二、数据查看

1、数据预览

数据集为一份Excel表格,包含三张表:商品信息表、商品热度表、用户销售明细表。
包含如下字段:
1、商品信息表:商品名、售卖价、吊牌价、折扣率、库存量、货值、成本价、利润率、SKU;
2、商品热度表:商品名、UV数、收藏数、加购物车数;
3、用户销售明细表:用户id、购买日期、商品名、购买数量、购买单价、购买金额、是否退货、退货件数、退货金额。

2、读取数据

导包:

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')  # 忽略警告

读取商品信息表:

# 读取商品信息
dt1 = pd.read_excel("销售数据.xlsx", sheet_name=0)
dt1.head()

读取商品热度表:

# 读取商品热度信息
dt2 = pd.read_excel("销售数据.xlsx", sheet_name=1)
dt2.head()

读取用户销售明细表:

# 读取销售明细表
dt3 = pd.read_excel("销售数据.xlsx", sheet_name=2)
dt3["是否退货"] = dt3["是否退货"].map({"是":1, "否":0}) 
dt3.head()

3、数据预处理

将三张表合并为一张表,便于后续计算和分析:

  • 首先通过’商品名‘字段,将商品信息表和商品热度表合并
  • 以’商品名‘为主,对用户销售明细表进行聚合
  • 再将以上两张表通过’商品名‘字段合并,完成三张表的合并

合并商品信息表和商品热度表:

dt_product = dt1.merge(dt2, how='left', on='商品名')
dt_product.head()

聚合用户销售明细表

# 统计每个商品的销售情况
product_sales = dt3.groupby("商品名").agg({"购买数量":"sum",
                                                 "购买金额":"sum",
                                                 "退货件数":"sum",
                                                 "退货金额":"sum",
                                                 "购买单价":"mean",
                                                 "用户id":pd.Series.nunique}).reset_index()
product_sales.rename(columns = {"购买数量":"商品销售数量",
                              "购买金额":"商品销售金额",
                              "是否退货":"商品退货数量",
                              "退货金额":"商品退货金额",
                              "购买单价":"商品销售单价",
                              "用户id":"购买用户数量"}, inplace=True)
product_sales.head()

完成三张表的合并

dt_product_sales = dt_product.merge(product_sales, how='left', on='商品名')
dt_prodcut_sales.head()


三、整体运营情况

1、指标查看

总体运营部分,主要关注销售额、售卖比、UV、转化率等指标,其他指标作为辅助指标。销售额用来和预期目标做对比,售卖比用来看商品流转情况。
所以,制定如下指标,通过汇总了解整体运营情况:

  • GMV:销售额
  • 实销:GMV - 退货金额
  • 销量:累计销售量(含退货)
  • 客单价:GMV / 客户数,客单价与毛利率相关,一般客单价越高,毛利率越高。
  • UV:商品所在页面的独立访问数
  • 转化率:客户数 / UV
  • 折扣率:GMV / 吊牌总额(吊牌总额 = 吊牌价 * 销量)
  • 备货值:吊牌价 * 库存数
  • 售卖比:也成售罄率,GMV / 备货值
  • 收藏数:收藏某款商品的用户数量
  • 加购数:加入购物车的人数
  • SKU:促销活动中SKU计数(一般指货号)
  • SPU:促销活动中的SPU计数(一般指款号)
  • 拒退量:拒收和退货的总数量
  • 拒退额:拒收和退货的总金额

2、指标计算

GMV

gmv = dt_product_sales['商品销售金额'].sum()
gmv

输出 3747167.0

实销

return_sales = dt_product_sales['商品退货金额'].sum()
return_money = gmv - return_sales
return_money

输出 2607587.0

累计销售量

all_sales = dt_product_sales['商品销售数量'].sum()
all_sales

输出 12017

客单价

custom_price = gmv / dt_product_sales['购买用户数量'].sum()
custom_price

输出 493.56783456269756

UV

uv_cons = dt_product_sales['UV数'].sum()
uv_cons

输出 1176103

转化率

uv_rate = dt_product_sales['购买用户数量'].sum() / uv_cons
uv_rate

输出 0.006455216932530569

折扣率

tags_sales = np.sum(dt_product)sales['吊牌价'] * dt_product_sales['商品销售数量'])
discount_rate = gmv / tags_sales
discount_rate

输出 0.4179229541452886

 备货值

goods_value = dt_product_sales['货值'].sum()
goods_value

输出 18916385

售卖比

sales_rate = gmv / goods_value
sales_rate

 输出 0.19809096817866195

收藏数

coll_cons = dt_product_sales['收藏数'].sum()
coll_cons

 输出 6224

 加购数

add_shop_cons = dt_product_sales['加购物车数'].sum()
add_shop_cons

输出 18690

SKU

sku_cons = dt_product_sales['SKU'] / sum()
sku_cons

 输出 125

SPU

spu_cons = dt_product_sales['SPU数'].sum()
spu_cons

输出 80 

 拒退量

reject_cons = dt_product_sales['退货件数'].sum()
reject_cons

输出 3643

拒退额

reject_money = dt_product_sales['商品退货金额'].sum()
reject_money

输出 1139580 

 数据汇总,并与去年数据进行同比

sales_state_dangqi = pd.DataFrame(
    {"GMV":[gmv,],"实际销售额":[return_money,],"销量":[all_sales,],"客单价":[custom_price,],
     "UV数":[uv_cons,],"UV转化率":[uv_rate,],"折扣率":[discount_rate,],"货值":[goods_value,],
     "售卖比":[sales_rate,],"收藏数":[coll_cons,],"加购数":[add_shop_cons,],"sku数":[sku_cons,],
     "spu数":[spu_cons,],"拒退量":[reject_cons,],"拒退额":[reject_money,],}, 
    ) #index=["今年双11",]

# 去年的数据是已经统计好了的,不需要计算
sales_state_tongqi = pd.DataFrame(
    {"GMV":[2261093,],"实际销售额":[1464936.517,],"销量":[7654,],"客单价":[609.34567,],
     "UV数":[904694,],"UV转化率":[0.0053366,],"折扣率":[0.46,],"货值":[12610930,],
     "售卖比":[0.1161,],"收藏数":[4263,],"加购数":[15838,],"sku数":[82,],
     "spu数":[67,],"拒退量":[2000,],"拒退额":[651188.57,],}, 
    ) #index=["去年双11",]

sales_date_now=pd.DataFrame([[gmv,],[return_money,],[all_sales,],[custom_price,],[uv_cons,],[uv_rate,],[discount_rate,],[goods_value,],[sales_rate,],[coll_cons,],[add_shop_cons,],[sku_cons,],[spu_cons,],[reject_cons,],[reject_money,]],\
 columns=['今年双十一'],
 index=['GMV','实销','销量','客单价','UV数','UV转化率','折扣率','备货值','售卖比','收藏数','加购数','SKU','SPU','拒退量','拒退额'])
sales_state_past=pd.DataFrame([2261093,1464936.517,7654,609.34567,904694,0.0053366,0.46,12610930,0.1161,4263,15838,82,67,2000,651188.57],
 index=['GMV','实销','销量','客单价','UV数','UV转化率','折扣率','备货值','售卖比','收藏数', '加购数','SKU','SPU','拒退量','拒退额'],\
 columns=['去年双十一'] ) 
sales_state=pd.merge(sales_date_now,sales_state_past,left_index=True,right_index=True)
sales_state_T=pd.DataFrame(sales_state.values.T, index=sales_state.columns, columns=sales_state.index)

sales_state['同比增长']=(sales_state['今年双十一']-sales_state['去年双十一'])/sales_state['去年双十一']
sales_state.sort_values(by='同比增长',inplace=True,ascending=False)
plt.figure(figsize=(16,6))
sales_state['同比增长'].plot(kind='bar',width=0.6,alpha=1,rot=0,edgecolor = 'k',fontsize=12)
plt.title('双十一指标同比去年情况')
plt.ylim([-0.25,1])
plt.ylabel('百分比')
for i,j in zip(range(15),sales_state['同比增长']):
   plt.text(i-0.2,j+0.01,'%.1f%%' % (j*100), color = 'k',fontsize = 12)

 

可见,今年双十一各项指标,除折扣率和客单价较去年降低之外,其余指标均有所增长。


四、优化商品结构

1、从价格区间优化商品结构

深入探究不同价格区间的数据,来优化后期的促销结构。首先需要找到本次促销活动中各区间的销售源数据,要显示款号、销售额、销售量的年该信息。然后计算每个款的转化率、折扣率等数据。

1.1 指标计算
首先对商品进行价格区间划分,氛围’1-200‘,‘200-400’,‘400及以上'
 

# 设置切分区域
listBins = [0, 200, 400, 100000]

# 设置切分后对应分组的标签
listLabels = ['1_200', '200_400', '400及以上']

#利用pd.cut进行数据离散化切分
dt_product_sales['价格分组'] = pd.cut(dt_product_sales['售卖价'], bins = listBins, labels = listLabels, include_lowers=Ture)

dt_product_sales.head()

对三个区间进行聚合统计:

dt_product_sales_info = dt_product_sales.groupby('价格分组').agg({
    '货值': 'sum',
    '商品销售金额': 'sum',
    '商品销售数量': 'sum',
    'UV数': 'sum',
    '购买用户数量': 'sum',
    '收藏数': 'sum',
    '加购物车数': 'sum'}).reset_index()
dt_product_sales_info.head()

计算货值占比、销售占比、客单价、转化率

dt_product_sales_info['货值占比'] = dt_product_sales_info['货值'] / dt_product_sales_info['货值'].sum()
dt_product_sales_info['销售占比'] = dt_product_sales_info['商品销售金额'] / dt_product_sales_info['商品销售金额'].sum()
dt_product_sales_info['客单价'] = dt_product_sales_info['商品销售金额'] / dt_product_sales_info['购买用户数量']
dt_product_sales_info['转化率'] = dt_product_sales_info['UV数'] / dt_product_sales_info['购买用户数量']
dt_product_sales_info.head()

根据聚合结果,价格400及以上的商品销售占比最大,达到53%;
购买转化率相差不大,均在0.6% - 0.7%之间;
下次促销需要重点销售价格分组在400及以上的商品,对该类商品进行优化。

取出400及以上价格区间的数据内容

product_400 = dt_product_sales_info[dt_product_sales['价格分组']=='400及以上']
product_400.head()

计算此类商品的转化率、备货值和售卖比

product_400['转化率'] = product_400['购买用户数量'] / product_400['UV数']
product_400['备货值'] = product_400['吊牌价'] * product_400['库存量']
product_400['售卖比'] = product_400['商品销售金额'] / product_400['备货值']
product_400.head()

1.2 观察数据的分布情况

product_400[["转化率"]].boxplot()
# 中位数
print(np.median(product_400["转化率"]))
# 25%分位数
print(np.percentile(product_400["转化率"], 25))
# 75%分位数
print(np.percentile(product_400["转化率"], 75))

product_400[["售卖比"]].boxplot(showbox=True)
# 中位数
print(np.median(product_400["售卖比"]))
# 25%分位数
print(np.percentile(product_400["售卖比"], 25))
# 75%分位数
print(np.percentile(product_400["售卖比"], 75))

优化方案:临界值选取的是分位数值,转化率选取50%分位数的值,意味着50%的商品转化率是大于0.007的。售卖比可以选择75%分位数,表示75%的商品转化率是小于0.318的。可以基于这个数值进行浮动,这里选择的临界值是:转化率0.007,售卖比0.36。
使用ABC分级方法,以转化率和售卖比作为关键指标,指定分级逻辑:

  • A级商品:转化率大于0.7%的商品,暂时保留,用于下次促销活动;
  • B级商品:转化率小于0.7%,但是售卖比大于36%的商品,虽然转化率不如A级商品高,但是具有一定售卖比,说明对访客具有吸引力,予以保留参加下次促销活动,
  • C级商品:转化率小于0.7%,并且售卖比小于36%的商品进行清仓处理。

1.3 挑选合格商品

# 转化率大于0.7%的商品,保留
stay_stocks1 = product_400[product_400['转化率'] > 0.007]
# 转化率小于0.7%,但售卖比大于36%的商品,保留
stay_stocks2 = product_400[(product_400['转化率] < 0.007) & (product_400['售卖比'] > 0.36)]
# 转化率小于0.7%,且售卖比小于36%的商品,清仓
stay_stocks3 = product_400[(product_400['转化率] < 0.007) & (product_400['售卖比'] < 0.36)]

2、从折扣区间优化商品结构

和从价格区间优化商品结构思路相同,选择下次促销需要重点销售的商品所在的折扣区间,再计算该类商品的转化率、售卖比,进行商品结构优化。

划分折扣区间

#设置切分区域
listBins = [0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 1]

#设置切分后对应标签
listLabels = ['0.15_0.2','0.2_0.25','0.25_0.3','0.3_0.35','0.35_0.4','0.4_0.45','0.45_0.5','0.5_0.55','0.55_0.6','0.6_0.65','0.65_0.7','0.7_1']

#利用pd.cut进行数据离散化切分
dt_product_sales['折扣区间'] = pd.cut(dt_product['折扣率'], bins=listBins, labels=listLabels, include_lowest=True)
dt_product_sales.head()

对折扣区间进行聚合统计:

dt_product_discount_info = dt_product_sales.groupby("折扣区间").agg({
                                        "货值":"sum",
                                        "商品销售金额":"sum",
                                        "商品销售数量":"sum",
                                        "UV数":"sum",
                                        "购买用户数量":"sum",
                                        "收藏数":"sum",
                                        "加购物车数":"sum"
                                        }).reset_index()
dt_product_discount_info

计算货值占比、销售占比、客单价、转化率

dt_product_discount_info["货值占比"]=dt_product_discount_info["货值"]/dt_product_discount_info["货值"].sum()
dt_product_discount_info["销售占比"]=dt_product_discount_info["商品销售金额"]/dt_product_discount_info["商品销售金额"].sum()
dt_product_discount_info["客单价"]=dt_product_discount_info["商品销售金额"]/dt_product_discount_info["购买用户数量"]
dt_product_discount_info["转化率"]=dt_product_discount_info["购买用户数量"]/dt_product_discount_info["UV数"]

dt_product_discount_info

根据统计结果,下次促销需要重点销售折扣区间在0.35-0.4的商品,对该类商品进行优化。

取出折扣区间0.35-0.4的数据内容

product_354 = dt_product_sales[dt_product_sales['折扣区间'] == '0.35_0.4]
product_354.head()

计算转化率、备货值、售卖比

product_354['转化率'] = product_354["购买用户数量"]/product_354["UV数"]
product_354["备货值"] = product_354["吊牌价"]*product_354["库存量"]
product_354["售卖比"] = product_354["商品销售金额"]/product_354["备货值"]

优化方案:

  • 找出转化率大于0.7%的商品予以保留,下次活动中可作为畅销商品进行引流造势;
  • 找出转化率小于0.7%且售卖比大于36.5%%的商品,予以保留参加下次促销活动;
  • 找出转化率小于0.7%且售卖比小于36.5%的商品,进行清仓处理。
stay_stocks = product_354[(product_354["售卖比"]>0.365)&(product_354["转化率"]>0.007)]
stay_stocks

五、总结

  • 在一级入口中,首页的流量占比最高,可以将以上分析选取出的畅销款(高转化率、高售卖比)布局在首页来引流。
  • 对于平销款商品(B级商品),作快抢和疯抢处理。
  • 对于以上分析选取出的C级商品,由于转化率和售卖比均较低,所以对该类商品进行清仓。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值