(电商)唯品会双十一促销活动复盘——数据分析

项目背景:

    唯品会是一个专门做特卖的网站,什么是特卖呢。特卖一般是指在特定的时间段里,以优惠的价格出售指定的商品,一般以商城或者专卖店为多。该模式在线下早已存在(比如商场促销、街边的尾货甩卖),在国外成熟的大商场内也有针对滞销商品的打折特卖,如奥特莱斯。特卖一般是商家清库存,不过也有一些专门生产商品做特卖的商家。

    特卖行业也是有个真实存在的产业链,只是因为快速分销渠道,地理位置等关系,大多数都集中在一线城市,部分生活在一线城市的都基本或多或少去过几次各个品牌的特卖仓,但是二三线甚至四五线城市的就比较难接触到,后来就有一群人成了品牌搬运工,和各大品牌联系通过微信等渠道快速分销大牌库存,达到快速低价消除库存,加快周转回笼资金等目的。

    在货源上,由于品牌尾货具备天然的清仓需求,是折扣零售最常见的货源,但实际上,只要成本足够低,新品首发、定制包销、自有品牌均可以成为折扣特卖零售的可持续货源。成立初期,唯品会货源以尾货为主,但随着唯品会在电商领域的不断发展,新品和专供品的占比不断提升,早在 2016 年 Q2 分析中,唯品会当季新品和平台特供品就已经占 37%了。

此次分析的目标:

    评估每次促销活动的结果,并根据情况优化商品结构,以便让自己的商品卖的更好。

分析流程:

  • 1、总体运营指标
  • 2、从价格区间找出表现不好的产品,优化商品结构
  • 3、从折扣区间来找出表现不好的产品,优化商品结构
import pandas as pd
import numpy as np

import warnings
warnings.filterwarnings('ignore')

〇、数据清洗与准备

1、读取数据,更改列名
import sqlalchemy

engine = sqlalchemy.create_engine('mysql+pymysql://ID:PASSWORD@localhost:3306/datdabase')

# 读取数据
# 商品信息表
sql_cmd = "select * from sales_info1"

# 执行sql语句,获取数据
dt= pd.read_sql(sql=sql_cmd, con=engine)

dt.rename(columns={"sale_name":"商品名",
                    "sale_price":"售卖价",
                    "tag_price":"吊牌价",
                    "discout":"折扣率",
                    "stocks":"库存量",
                    "stocks_value":"货值",
                    "cost_price":"成本价",
                    "profit_rate":"利润率",
                    "skus":"SKU"},
          inplace=True)

dt.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

0

A001

15

70

0.214286

501

35070

14

0.066667

2

1

A002

236

610

0.386885

423

258030

75

0.682203

1

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

3

A004

320

835

0.383234

624

521040

279

0.128125

2

4

A005

15

82

0.182927

179

14678

27

-0.800000

1

# 读取数据
# 商品热度表
sql_cmd = "select * from sales_info2"

# 执行sql语句,获取数据
dt2 = pd.read_sql(sql=sql_cmd, con=engine)

dt2.rename(columns={"sale_name":"商品名",
                    "uvs":"UV数",
                    "collections":"收藏数",
                    "carts":"加购物车数"},
          inplace=True)

dt2.head()



商品名

UV数

收藏数

加购物车数

0

A001

10926

48

372

1

A002

13124

84

193

2

A003

25657

45

173

3

A004

20833

5

273

4

A005

19371

71

356

# 读取数据
# 用户销售明细表
sql_cmd = "select * from sales_info3"

# 执行sql语句,获取数据
dt3 = pd.read_sql(sql=sql_cmd, con=engine)

dt3.rename(columns={"user_id":"用户id",
                    "buy_date":"购买日期",
                    "sale_name":"商品名",
                    "buy_cons":"购买数量",
                    "buy_price":"购买单价",
                    "cost_price":"购买金额",
                    "is_tui":"是否退货",
                    "tui_cons":"退货件数",
                    "tui_price":"退货金额"},
          inplace=True)

dt3['是否退货']=dt3["是否退货"].map({"是":1,"否":0})
dt3.head()



用户id

购买日期

商品名

购买数量

购买单价

购买金额

是否退货

退货件数

退货金额

0

1

20191111

F001

1

920.0

920.0

1

1

920.0

1

2

20191111

B007

2

548.0

1096.0

0

0

0.0

2

2

20191111

E007

1

930.0

930.0

1

1

930.0

3

3

20191111

A004

2

320.0

640.0

1

2

640.0

4

3

20191111

H007

2

750.0

1500.0

0

0

0.0

2、合并商品信息表和商品热度表数据
# 把商品信息加上该商品的热度信息
# 得到基础的商品信息,以及商品的一些热度信息:加购物车数量,收藏数量、uv数
dt_products=pd.merge(dt1,dt2,how='left',on='商品名')
dt_products.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

0

A001

15

70

0.214286

501

35070

14

0.066667

2

10926

48

372

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

84

193

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

5

273

4

A005

15

82

0.182927

179

14678

27

-0.800000

1

19371

71

356

3、合并商品信息表和商品热度表数据和用户销售明细表
dt3.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8036 entries, 0 to 8035
Data columns (total 9 columns):
用户id    8036 non-null object
购买日期    8036 non-null int64
商品名     8036 non-null object
购买数量    8036 non-null int64
购买单价    8036 non-null float64
购买金额    8036 non-null float64
是否退货    8036 non-null int64
退货件数    8036 non-null int64
退货金额    8036 non-null float64
dtypes: float64(3), int64(4), object(2)
memory usage: 565.2+ KB
# 统计每个商品的一个销售情况
product_sales=dt3.groupby('商品名').agg({'购买数量':sum,
                                      '购买金额':sum,
                                   '退货件数':sum,
                                   '退货金额':sum,
                                   '购买单价':np.mean,
                                   '用户id':pd.Series.nunique}).reset_index()

product_sales.rename(columns={'购买数量':'商品销售数量',
                             '购买金额':'商品销售金额',
                             '是否退货':'商品退货数量',
                             '退货金额':'商品退货金额',
                             '购买单价':'商品销售单价',
                             '用户id':'购买用户数量'},inplace=True)

product_sales.head()



商品名

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

0

A001

185

2775.0

59

885.0

15.0

116

1

A002

146

34456.0

31

7316.0

236.0

87

2

A003

144

68112.0

31

14663.0

473.0

94

3

A004

172

55040.0

56

17920.0

320.0

111

4

A005

122

1830.0

32

480.0

15.0

81

# 合并商品信息
dt_product_sales=pd.merge(dt_products,product_sales,how='left',on='商品名')
dt_product_sales.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

0

A001

15

70

0.214286

501

35070

14

0.066667

2

10926

48

372

185

2775.0

59

885.0

15.0

116

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

84

193

146

34456.0

31

7316.0

236.0

87

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

144

68112.0

31

14663.0

473.0

94

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

5

273

172

55040.0

56

17920.0

320.0

111

4

A005

15

82

0.182927

179

14678

27

-0.800000

1

19371

71

356

122

1830.0

32

480.0

15.0

81

一、总体运营情况评价

总体运营部分,主要关注销售额、售卖比、UV、转化率等指标,其他指标作为辅助指标。销售额用来和预期目标做对比,售卖比用来看商品流转情况。

  • GMV:销售额,在唯品会里称为到手价。
  • 实销:GMV – 拒退金额。
  • 销量:累计销售量(含拒退)。
  • 客单价:GMV / 客户数,客单价与毛利率息息相关,一般客单价越高,毛利率越高。
  • UV:商品所在页面的独立访问数。
  • 转化率:客户数 / UV。
  • 折扣率:GMV / 吊牌总额(吊牌总额 = 吊牌价 * 销量),在日常工作中,吊牌额是必不可少的。
  • 备货值:吊牌价 * 库存数。
  • 售卖比:又称售罄率,GMV / 备货值。
  • 收藏数:收藏某款商品的用户数量。
  • 加购数:加购物车人数。
  • SKU数:促销活动中的SKU计数(一般指货号)。
  • SPU数:促销活动中的SPU计数(一般指款号)。
  • 拒退量:拒收和退货的总数量。
  • 拒退额:拒收和退货的总金额。
#1、GMV:销售额,包含退货的金额
GMV=dt_product_sales.商品销售金额.sum()
GMV
3747167.0
#2、实际销售额=GMV - 退货金额
ruturn_sales=dt_product_sales.商品退货金额.sum()
实际销售额=GMV-ruturn_sales
实际销售额
2607587.0
#3、销量:累计销售量(含拒退)
销量=dt_product_sales.商品销售数量.sum()
销量
12017
#4、客单价:GMV / 客户数,客单价与毛利率息息相关,一般客单价越高,毛利率越高。
# dt3.user_id.unique().count()
客单价=GMV/dt_product_sales.购买用户数量.sum()
客单价
493.56783456269756
# 5、UV:商品所在页面的独立访问数
UV=dt_product_sales.UV数.sum()
UV
1176103
# 6、转化率:客户数 / UV。
转化率 = dt_product_sales.购买用户数量.sum()/UV
转化率
0.006455216932530569
# 7、折扣率:GMV / 吊牌总额(吊牌总额 = 吊牌价 * 销量),在日常工作中,吊牌额是必不可少的。
吊牌总额=(dt_product_sales.吊牌价*dt_product_sales.商品销售数量).sum()
折扣率=GMV/吊牌总额
折扣率
0.4179229541452886
# 8、备货值:吊牌价 * 库存数。
备货值=(dt_product_sales.吊牌价*dt_product_sales.库存量).sum()
备货值
18916395
# 9、售卖比:又称售罄率,GMV / 备货值。
售卖比=GMV/备货值
售卖比
0.19809096817866195
# 10、收藏数:收藏某款商品的用户数量。
收藏数=dt_product_sales.收藏数.sum()
收藏数
6224
# 11、加购数:加购物车人数。
加购数=dt_product_sales.加购物车数.sum()
加购数
18690
# 12、SKU数:促销活动中的最小品类单元(一般指货号)。
SKU数=dt_product_sales.SKU.sum()
SKU数
125
# 13、SPU数:促销活动中的SPU计数(一般指款号)。
SPU数=dt_product_sales.商品名.nunique()
SPU数
80
# 14、拒退量:拒收和退货的总数量。退货件数
拒退量=dt_product_sales.退货件数.sum()
拒退量
3643
# 15、拒退额:拒收和退货的总金额。
拒退额=dt_product_sales.商品退货金额.sum()
拒退额
1139580.0
# 汇总统计
# 汇总统计
sales_state_thisyear = pd.DataFrame(
    {"GMV":[GMV],"实际销售额":[实际销售额],"销量":[销量],"客单价":[客单价],
     "UV数":[UV],"UV转化率":[转化率],"折扣率":[折扣率],"货值":[备货值],
     "售卖比":[售卖比],"收藏数":[收藏数],"加购数":[加购数],"sku数":[SKU数],
     "spu数":[SPU数],"拒退量":[拒退量],"拒退额":[拒退额]},
    ) #index=["今年双11",]
sales_state_thisyear 

# 去年的数据
sales_state_lastyear = 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_state = pd.concat([sales_state_thisyear, sales_state_lastyear])
sales_state_thisyear_s = pd.DataFrame(sales_state_thisyear.stack()).reset_index().iloc[:,[1,2]]
sales_state_thisyear_s.columns = ["指标","今年双11"]
sales_state_lastyear_s = pd.DataFrame(sales_state_lastyear.stack()).reset_index().iloc[:,[1,2]]
sales_state_lastyear_s.columns = ["指标","去年双11"]
sales_state = pd.merge(sales_state_thisyear_s, sales_state_lastyear_s,on="指标")
sales_state["同比"] = (sales_state["今年双11"] - sales_state["去年双11"]) / sales_state["去年双11"]
pd.set_option('display.float_format',lambda x : '%f' % x) #禁用科学技数法
sales_state



指标

今年双11

去年双11

同比

0

GMV

3747167.000000

2261093.000000

0.657237

1

实际销售额

2607587.000000

1464936.517000

0.780000

2

销量

12017.000000

7654.000000

0.570029

3

客单价

493.567835

609.345670

-0.190004

4

UV数

1176103.000000

904694.000000

0.300001

5

UV转化率

0.006455

0.005337

0.209612

6

折扣率

0.417923

0.460000

-0.091472

7

货值

18916395.000000

12610930.000000

0.500000

8

售卖比

0.198091

0.116100

0.706210

9

收藏数

6224.000000

4263.000000

0.460005

10

加购数

18690.000000

15838.000000

0.180073

11

sku数

125.000000

82.000000

0.524390

12

spu数

80.000000

67.000000

0.194030

13

拒退量

3643.000000

2000.000000

0.821500

14

拒退额

1139580.000000

651188.570000

0.750000

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

我们需要做的是,深入探究不同区间的数据,以此来优化后期的促销结构。首先我们需要找到在本次促销中此区间的销售源数据,源数据要求显示具体的款号、销售额、销量等信息。第二步,计算出每个款的转化率、折扣率等数据。

查看指标:

  • 销售额
  • 销量
  • 件单价
  • 客户数
  • UV
  • 转换率
  • 库存
  • 货值
  • 售卖比
# 划分价格区间段
#设置切分区域
listbins=[0,200,400,100000]

#设置切分后对应标签
list_labels=['1-200','200-400','400以上']

#利用pd.cut进行数据离散化切分,注意分组标签和分组数要一致
"""
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)
x:需要切分的数据
bins:切分区域
right : 是否包含右端点默认True,包含
labels:对应标签,用标记来代替返回的bins,若不在该序列中,则返回NaN
retbins:是否返回间距bins
precision:精度
include_lowest:是否包含左端点,默认False,不包含
"""
dt_product_sales['价格分组']=pd.cut(dt_product_sales.售卖价,bins=listbins,labels=list_labels,include_lowest=True)
dt_product_sales.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

0

A001

15

70

0.214286

501

35070

14

0.066667

2

10926

48

372

185

2775.000000

59

885.000000

15.000000

116

1-200

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

84

193

146

34456.000000

31

7316.000000

236.000000

87

200-400

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

144

68112.000000

31

14663.000000

473.000000

94

400以上

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

5

273

172

55040.000000

56

17920.000000

320.000000

111

200-400

4

A005

15

82

0.182927

179

14678

27

-0.800000

1

19371

71

356

122

1830.000000

32

480.000000

15.000000

81

1-200

价格区间销售情况统计
  • 价格区间
  • 货值
  • 货值占比
  • 销售额
  • 售卖比
  • 销售占比
  • 销量
  • 客单价
  • UV
  • 收藏数
  • 加购数
  • 转化率
# 货值分组数据、销量分组数据
dt_price_agg=dt_product_sales.groupby('价格分组').agg({'货值':sum,
                                     '商品销售金额':sum,
                                     '商品销售数量':sum,
                                     'UV数':sum,
                                     '购买用户数量':sum,
                                     '收藏数':sum,
                                     '加购物车数':sum}).reset_index()
dt_price_agg.head()



价格分组

货值

商品销售金额

商品销售数量

UV数

购买用户数量

收藏数

加购物车数

0

1-200

1573146

339896.000000

3615

369561

2280

1733

5324

1

200-400

8585973

1417702.000000

4978

465547

3151

2608

8302

2

400以上

8757276

1989569.000000

3424

340995

2161

1883

5064

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



价格分组

货值

商品销售金额

商品销售数量

UV数

购买用户数量

收藏数

加购物车数

货值占比

销售占比

客单价

转化率

0

1-200

1573146

339896.000000

3615

369561

2280

1733

5324

0.083163

0.090707

149.077193

0.006169

1

200-400

8585973

1417702.000000

4978

465547

3151

2608

8302

0.453891

0.378340

449.921295

0.006768

2

400以上

8757276

1989569.000000

3424

340995

2161

1883

5064

0.462946

0.530953

920.670523

0.006337

# 取出400及以上价格区间的数据内容
dt_over_400=dt_product_sales[dt_product_sales['价格分组']=='400以上']
dt_over_400.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

144

68112.000000

31

14663.000000

473.000000

94

400以上

5

A006

428

1493

0.286674

264

394152

233

0.455607

1

5805

134

161

143

61204.000000

46

19688.000000

428.000000

90

400以上

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

6

242

158

67308.000000

43

18318.000000

426.000000

101

400以上

13

B004

491

1394

0.352224

396

552024

353

0.281059

2

14535

120

211

160

78560.000000

47

23077.000000

491.000000

102

400以上

15

B006

484

1467

0.329925

296

434232

398

0.177686

2

3733

115

285

141

68244.000000

48

23232.000000

484.000000

91

400以上

计算商品指标
  • 销售额
  • 销量
  • 件单价
  • 客户数
  • UV
  • 转换率=客户数 / UV
  • 库存
  • 备货值=吊牌价 * 库存数
  • 售卖比=又称售罄率,GMV / 备货值
# 转化率=客户数 / UV
dt_over_400['转化率']=dt_over_400.购买用户数量/dt_over_400.UV数
# 备货值=吊牌价 * 库存数
dt_over_400['备货值']=dt_over_400.吊牌价*dt_over_400.库存量
dt_over_400.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

转化率

备货值

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

...

173

144

68112.000000

31

14663.000000

473.000000

94

400以上

0.003664

519995

5

A006

428

1493

0.286674

264

394152

233

0.455607

1

5805

...

161

143

61204.000000

46

19688.000000

428.000000

90

400以上

0.015504

394152

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

...

242

158

67308.000000

43

18318.000000

426.000000

101

400以上

0.004939

536959

13

B004

491

1394

0.352224

396

552024

353

0.281059

2

14535

...

211

160

78560.000000

47

23077.000000

491.000000

102

400以上

0.007018

552024

15

B006

484

1467

0.329925

296

434232

398

0.177686

2

3733

...

285

141

68244.000000

48

23232.000000

484.000000

91

400以上

0.024377

434232

5 rows × 21 columns

# 售卖比=又称售罄率,GMV / 备货值
dt_over_400['售卖比']=dt_over_400.商品销售金额/dt_over_400.备货值
dt_over_400.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

转化率

备货值

售卖比

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

...

144

68112.000000

31

14663.000000

473.000000

94

400以上

0.003664

519995

0.130986

5

A006

428

1493

0.286674

264

394152

233

0.455607

1

5805

...

143

61204.000000

46

19688.000000

428.000000

90

400以上

0.015504

394152

0.155280

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

...

158

67308.000000

43

18318.000000

426.000000

101

400以上

0.004939

536959

0.125350

13

B004

491

1394

0.352224

396

552024

353

0.281059

2

14535

...

160

78560.000000

47

23077.000000

491.000000

102

400以上

0.007018

552024

0.142313

15

B006

484

1467

0.329925

296

434232

398

0.177686

2

3733

...

141

68244.000000

48

23232.000000

484.000000

91

400以上

0.024377

434232

0.157160

5 rows × 22 columns

dt_over_400[['商品名','商品销售金额','商品销售数量','购买用户数量','UV数','转化率','库存量','备货值','售卖比']].head()



商品名

商品销售金额

商品销售数量

购买用户数量

UV数

转化率

库存量

备货值

售卖比

2

A003

68112.000000

144

94

25657

0.003664

415

519995

0.130986

5

A006

61204.000000

143

90

5805

0.015504

264

394152

0.155280

10

B001

67308.000000

158

101

20448

0.004939

479

536959

0.125350

13

B004

78560.000000

160

102

14535

0.007018

396

552024

0.142313

15

B006

68244.000000

141

91

3733

0.024377

296

434232

0.157160

dt_over_400.describe().iloc[:,-3:]



转化率

备货值

售卖比

count

23.000000

23.000000

23.000000

mean

0.009080

380751.130435

0.253001

std

0.006193

124618.094156

0.122274

min

0.003664

179772.000000

0.124160

25%

0.004587

285115.000000

0.155137

50%

0.007018

319682.000000

0.230562

75%

0.012989

484616.500000

0.318303

max

0.024377

645402.000000

0.639005

优化方案:
  • 转化率大于0.8%的商品,暂时保留,用于下次促销活动;
  • 转化率小于0.8%的商品,但是售卖比大于25%的商品予以保留参加下次促销活动,
  • 转化率小于0.8%的商品,并且售卖比小于25%的商品进行清仓处理。
# 挑选合格的商品:
# 1、保留商品:转化率大于0.8%的商品予以保留
dt.remain1=dt_over_400[dt_over_400.转化率>0.008]
dt.remain1.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

转化率

备货值

售卖比

5

A006

428

1493

0.286674

264

394152

233

0.455607

1

5805

...

143

61204.000000

46

19688.000000

428.000000

90

400以上

0.015504

394152

0.155280

15

B006

484

1467

0.329925

296

434232

398

0.177686

2

3733

...

141

68244.000000

48

23232.000000

484.000000

91

400以上

0.024377

434232

0.157160

29

C010

750

1226

0.611746

229

280754

128

0.829333

1

5044

...

117

87750.000000

43

32250.000000

750.000000

75

400以上

0.014869

280754

0.312551

46

E007

930

1578

0.589354

409

645402

356

0.617204

1

7264

...

154

143220.000000

47

43710.000000

930.000000

96

400以上

0.013216

645402

0.221908

50

F001

920

1438

0.639777

217

312046

237

0.742391

1

4630

...

116

106720.000000

40

36800.000000

920.000000

80

400以上

0.017279

312046

0.342001

5 rows × 22 columns

# 挑选合格的商品:
# 2、保留商品:找出转化率小于0.8% 但是 售卖比大于25%的部分予以保留
dt.remain2=dt_over_400[(dt_over_400.转化率<0.008) & (dt_over_400.售卖比>0.25)]
dt.remain2.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

转化率

备货值

售卖比

48

E009

401

1004

0.399402

224

224896

268

0.331671

2

25477

...

155

62155.000000

50

20050.000000

401.000000

99

400以上

0.003886

224896

0.276372

60

G001

463

1266

0.365719

142

179772

268

0.421166

2

13011

...

142

65746.000000

46

21298.000000

463.000000

95

400以上

0.007302

179772

0.365719

69

G010

720

1156

0.622837

267

308652

152

0.788889

1

19119

...

145

104400.000000

42

30240.000000

720.000000

91

400以上

0.004760

308652

0.338245

75

H006

710

825

0.860606

324

267300

203

0.714085

2

10479

...

122

86620.000000

43

30530.000000

710.000000

82

400以上

0.007825

267300

0.324055

4 rows × 22 columns

# 3、清仓处理商品,找出转化率小于0.8%并且售卖比小于25%的部分
dt.clearance=dt_over_400[(dt_over_400.转化率<0.008) & (dt_over_400.售卖比<0.25)]
dt.clearance.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

转化率

备货值

售卖比

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

...

144

68112.000000

31

14663.000000

473.000000

94

400以上

0.003664

519995

0.130986

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

...

158

67308.000000

43

18318.000000

426.000000

101

400以上

0.004939

536959

0.125350

13

B004

491

1394

0.352224

396

552024

353

0.281059

2

14535

...

160

78560.000000

47

23077.000000

491.000000

102

400以上

0.007018

552024

0.142313

16

B007

548

1499

0.365577

325

487175

420

0.233577

2

29492

...

201

110148.000000

66

36168.000000

548.000000

122

400以上

0.004137

487175

0.226095

17

B008

480

1422

0.337553

339

482058

302

0.370833

2

18574

...

136

65280.000000

39

18720.000000

480.000000

82

400以上

0.004415

482058

0.135419

5 rows × 22 columns

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

同样地,我们选择0.35-0.4折扣区间进行深入探究。dt_product_discount_info表中,我们可以得到0.35-0.4折扣区间的售卖比为16.90%,转化率为0.53%,折扣率为37%,在进行商品结构优化的时候要着重对比这几个指标。

dt_product_sales.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

0

A001

15

70

0.214286

501

35070

14

0.066667

2

10926

48

372

185

2775.000000

59

885.000000

15.000000

116

1-200

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

84

193

146

34456.000000

31

7316.000000

236.000000

87

200-400

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

144

68112.000000

31

14663.000000

473.000000

94

400以上

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

5

273

172

55040.000000

56

17920.000000

320.000000

111

200-400

4

A005

15

82

0.182927

179

14678

27

-0.800000

1

19371

71

356

122

1830.000000

32

480.000000

15.000000

81

1-200

# 划分价格区间段
#设置切分区域
discount_bins=[0.15,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,1]
#设置切分后对应标签
discount_labels=['0.15-0.20','0.20-0.25','0.25-0.30','0.30-0.35','0.35-0.40','0.40-0.45',
                 '0.45-0.50','0.50-0.55','0.55-0.60','0.60-0.65','0.65-0.70','0.70-1',]
#利用pd.cut进行数据离散化切分,注意分组标签和分组数要一致
"""
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)
x:需要切分的数据
bins:切分区域
right : 是否包含右端点默认True,包含
labels:对应标签,用标记来代替返回的bins,若不在该序列中,则返回NaN
retbins:是否返回间距bins
precision:精度
include_lowest:是否包含左端点,默认False,不包含
"""
dt_product_sales['折扣区间']=pd.cut(dt_products.折扣率,bins=discount_bins,labels=discount_labels,include_lowest=True)
dt_product_sales.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

0

A001

15

70

0.214286

501

35070

14

0.066667

2

10926

48

372

185

2775.000000

59

885.000000

15.000000

116

1-200

0.20-0.25

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

84

193

146

34456.000000

31

7316.000000

236.000000

87

200-400

0.35-0.40

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

144

68112.000000

31

14663.000000

473.000000

94

400以上

0.35-0.40

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

5

273

172

55040.000000

56

17920.000000

320.000000

111

200-400

0.35-0.40

4

A005

15

82

0.182927

179

14678

27

-0.800000

1

19371

71

356

122

1830.000000

32

480.000000

15.000000

81

1-200

0.15-0.20

折扣区间销售情况统计
  • 价格区间
  • 货值
  • 货值占比
  • 销售额
  • 售卖比
  • 销售占比
  • 销量
  • 客单价
  • UV
  • 收藏数
  • 加购数
  • 转化率
# 货值分组数据、销售分组数据等 
dt_discount_agg=dt_product_sales.groupby('折扣区间').agg({'货值':sum,
                                                          '商品销售金额':sum,
                                                          '商品销售数量':sum,
                                                          'UV数':sum,
                                                          '购买用户数量':sum,
                                                          '收藏数':sum,
                                                          '加购物车数':sum}).reset_index()
dt_discount_agg



折扣区间

货值

商品销售金额

商品销售数量

UV数

购买用户数量

收藏数

加购物车数

0

0.15-0.20

14678

1830.000000

122

19371

81

71

356

1

0.20-0.25

597376

106944.000000

1052

67808

634

520

1505

2

0.25-0.30

546516

79924.000000

725

66471

462

538

971

3

0.30-0.35

2553886

382794.000000

1065

87609

660

536

1530

4

0.35-0.40

8105784

1369758.000000

3696

443317

2341

2046

5884

5

0.40-0.45

2098352

453179.000000

1988

184205

1258

845

3428

6

0.45-0.50

1869262

311158.000000

1452

138194

934

683

1996

7

0.50-0.55

112395

38024.000000

196

26088

124

25

84

8

0.55-0.60

645402

143220.000000

154

7264

96

78

388

9

0.60-0.65

1785946

590706.000000

1144

98210

735

630

1795

10

0.65-0.70

319498

183010.000000

301

27087

185

169

690

11

0.70-1

267300

86620.000000

122

10479

82

83

63

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

dt_discount_agg



折扣区间

货值

商品销售金额

商品销售数量

UV数

购买用户数量

收藏数

加购物车数

货值占比

销量占比

客单价

转化率

0

0.15-0.20

14678

1830.000000

122

19371

81

71

356

0.000776

0.010152

22.592593

0.004182

1

0.20-0.25

597376

106944.000000

1052

67808

634

520

1505

0.031580

0.087543

168.681388

0.009350

2

0.25-0.30

546516

79924.000000

725

66471

462

538

971

0.028891

0.060331

172.995671

0.006950

3

0.30-0.35

2553886

382794.000000

1065

87609

660

536

1530

0.135009

0.088624

579.990909

0.007533

4

0.35-0.40

8105784

1369758.000000

3696

443317

2341

2046

5884

0.428506

0.307564

585.116617

0.005281

5

0.40-0.45

2098352

453179.000000

1988

184205

1258

845

3428

0.110928

0.165432

360.237679

0.006829

6

0.45-0.50

1869262

311158.000000

1452

138194

934

683

1996

0.098817

0.120829

333.145610

0.006759

7

0.50-0.55

112395

38024.000000

196

26088

124

25

84

0.005942

0.016310

306.645161

0.004753

8

0.55-0.60

645402

143220.000000

154

7264

96

78

388

0.034119

0.012815

1491.875000

0.013216

9

0.60-0.65

1785946

590706.000000

1144

98210

735

630

1795

0.094413

0.095198

803.681633

0.007484

10

0.65-0.70

319498

183010.000000

301

27087

185

169

690

0.016890

0.025048

989.243243

0.006830

11

0.70-1

267300

86620.000000

122

10479

82

83

63

0.014131

0.010152

1056.341463

0.007825

# 取出0.35-0.4价格区间的数据内容
discount_3540=dt_product_sales[dt_product_sales['折扣区间']=='0.35-0.40']
discount_3540.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

收藏数

加购物车数

商品销售数量

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

84

193

146

34456.000000

31

7316.000000

236.000000

87

200-400

0.35-0.40

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

45

173

144

68112.000000

31

14663.000000

473.000000

94

400以上

0.35-0.40

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

5

273

172

55040.000000

56

17920.000000

320.000000

111

200-400

0.35-0.40

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

6

242

158

67308.000000

43

18318.000000

426.000000

101

400以上

0.35-0.40

12

B003

288

746

0.386059

439

327494

109

0.621528

1

23170

111

299

151

43488.000000

44

12672.000000

288.000000

89

200-400

0.35-0.40

计算商品指标
  • 销售额
  • 销量
  • 件单价
  • 客户数
  • UV
  • 转换率=客户数 / UV
  • 库存
  • 货值=吊牌价 * 库存数
  • 售卖比=又称售罄率,GMV / 备货值
# 转化率=客户数 / UV
# 备货值=吊牌价 * 库存数
discount_3540['转化率']=discount_3540.购买用户数量/discount_3540.UV数
discount_3540['备货值']=discount_3540.吊牌价*discount_3540.库存量
discount_3540.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

转化率

备货值

售卖比

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

...

34456.000000

31

7316.000000

236.000000

87

200-400

0.35-0.40

0.006629

258030

0.133535

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

...

68112.000000

31

14663.000000

473.000000

94

400以上

0.35-0.40

0.003664

519995

0.130986

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

...

55040.000000

56

17920.000000

320.000000

111

200-400

0.35-0.40

0.005328

521040

0.105635

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

...

67308.000000

43

18318.000000

426.000000

101

400以上

0.35-0.40

0.004939

536959

0.125350

12

B003

288

746

0.386059

439

327494

109

0.621528

1

23170

...

43488.000000

44

12672.000000

288.000000

89

200-400

0.35-0.40

0.003841

327494

0.132790

5 rows × 23 columns

# 售卖比=又称售罄率,GMV / 备货值
discount_3540['售卖比']=discount_3540.商品销售金额/discount_3540.备货值
discount_3540.head()



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

转化率

备货值

售卖比

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

...

34456.000000

31

7316.000000

236.000000

87

200-400

0.35-0.40

150.850575

258030

0.133535

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

...

68112.000000

31

14663.000000

473.000000

94

400以上

0.35-0.40

272.946809

519995

0.130986

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

...

55040.000000

56

17920.000000

320.000000

111

200-400

0.35-0.40

187.684685

521040

0.105635

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

...

67308.000000

43

18318.000000

426.000000

101

400以上

0.35-0.40

202.455446

536959

0.125350

12

B003

288

746

0.386059

439

327494

109

0.621528

1

23170

...

43488.000000

44

12672.000000

288.000000

89

200-400

0.35-0.40

260.337079

327494

0.132790

5 rows × 23 columns

discount_3540.describe().iloc[:,-3:]



转化率

备货值

售卖比

count

25.000000

25.000000

25.000000

mean

0.006746

324231.360000

0.194728

std

0.004307

160733.327436

0.076399

min

0.003325

86436.000000

0.088185

25%

0.003892

209982.000000

0.131121

50%

0.005011

262892.000000

0.187435

75%

0.007296

487175.000000

0.230854

max

0.021228

679320.000000

0.365719

优化结果:

  • 折扣率**大于37%**的部分找出售卖比大于36.5%且转化率大于0.7%的商品予以保留,其余进行清仓处理;
  • 折扣率**小于37%**的部分找出售卖比大于36.5%且转化率大于0.7%的部分予以保留,其余进行清仓处理。
# 挑选合格的商品:
# 1、保留商品:折扣率大于37%的部分找出售卖比大于36.5%且转化率大于0.7%的商品予以保留
discount_remain1=discount_3540[(discount_3540.折扣率>0.37)&(discount_3540.售卖比>0.365)&(discount_3540.转化率>0.007)]
discount_remain1



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

转化率

备货值

售卖比

64

G005

221

588

0.375850

147

86436

106

0.520362

2

4334

...

31603.000000

43

9503.000000

221.000000

92

200-400

0.35-0.40

0.021228

86436

0.365623

1 rows × 23 columns

# 2、清仓处理商品,不满足条件的:折扣率大于37%的部分找出售卖比小于36.5%或转化率小于0.7%的商品
# 取反即可
discount_clearance1=discount_3540[(discount_3540.折扣率>0.37)&((discount_3540.售卖比<0.365)|(discount_3540.转化率<0.007))]
discount_clearance1



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

转化率

备货值

售卖比

1

A002

236

610

0.386885

423

258030

75

0.682203

1

13124

...

34456.000000

31

7316.000000

236.000000

87

200-400

0.35-0.40

0.006629

258030

0.133535

2

A003

473

1253

0.377494

415

519995

394

0.167019

1

25657

...

68112.000000

31

14663.000000

473.000000

94

400以上

0.35-0.40

0.003664

519995

0.130986

3

A004

320

835

0.383234

624

521040

279

0.128125

2

20833

...

55040.000000

56

17920.000000

320.000000

111

200-400

0.35-0.40

0.005328

521040

0.105635

10

B001

426

1121

0.380018

479

536959

311

0.269953

1

20448

...

67308.000000

43

18318.000000

426.000000

101

400以上

0.35-0.40

0.004939

536959

0.125350

12

B003

288

746

0.386059

439

327494

109

0.621528

1

23170

...

43488.000000

44

12672.000000

288.000000

89

200-400

0.35-0.40

0.003841

327494

0.132790

19

B010

390

992

0.393145

188

186496

265

0.320513

2

7934

...

46800.000000

43

16770.000000

390.000000

82

200-400

0.35-0.40

0.010335

186496

0.250944

37

D008

340

916

0.371179

287

262892

204

0.400000

2

6236

...

42160.000000

36

12240.000000

340.000000

84

200-400

0.35-0.40

0.013470

262892

0.160370

48

E009

401

1004

0.399402

224

224896

268

0.331671

2

25477

...

62155.000000

50

20050.000000

401.000000

99

400以上

0.35-0.40

0.003886

224896

0.276372

63

G004

392

1040

0.376923

479

498160

234

0.403061

2

15356

...

57624.000000

50

19600.000000

392.000000

90

200-400

0.35-0.40

0.005861

498160

0.115674

70

H001

297

755

0.393377

338

255190

166

0.441077

1

6856

...

44253.000000

42

12474.000000

297.000000

92

200-400

0.35-0.40

0.013419

255190

0.173412

10 rows × 23 columns

# 挑选合格的商品:
# 3、保留商品:在折扣率小于37%的部分找出售卖比大于36.5%且转化率大于0.7%的部分予以保留
discount_remain2=discount_3540[(discount_3540.折扣率<0.37)&(discount_3540.售卖比>0.365)&(discount_3540.转化率>0.007)]
discount_remain2



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

转化率

备货值

售卖比

60

G001

463

1266

0.365719

142

179772

268

0.421166

2

13011

...

65746.000000

46

21298.000000

463.000000

95

400以上

0.35-0.40

0.007302

179772

0.365719

1 rows × 23 columns

# 4、清仓处理商品,不满足此条件的:在折扣率小于37%的部分找出售卖比小于36.5%或转化率小于0.7%的部分
# 取反即可
discount_clearance2=discount_3540[(discount_3540.折扣率<0.37)&((discount_3540.售卖比<0.365)|(discount_3540.转化率<0.007))]
discount_clearance2



商品名

售卖价

吊牌价

折扣率

库存量

货值

成本价

利润率

SKU

UV数

...

商品销售金额

退货件数

商品退货金额

商品销售单价

购买用户数量

价格分组

折扣区间

转换率

备货值

售卖比

13

B004

491

1394

0.352224

396

552024

353

0.281059

2

14535

...

78560.0

47

23077.0

491.0

102

400及以上

0.35_0.4

0.007018

552024

0.142313

16

B007

548

1499

0.365577

325

487175

420

0.233577

2

29492

...

110148.0

66

36168.0

548.0

122

400及以上

0.35_0.4

0.004137

487175

0.226095

21

C002

201

553

0.363472

287

158711

105

0.477612

1

7835

...

29748.0

43

8643.0

201.0

97

200_400

0.35_0.4

0.012380

158711

0.187435

22

C003

473

1321

0.358062

242

319682

254

0.463002

2

17244

...

70950.0

44

20812.0

473.0

92

400及以上

0.35_0.4

0.005335

319682

0.221939

24

C005

270

765

0.352941

178

136170

115

0.574074

2

12610

...

39690.0

35

9450.0

270.0

92

200_400

0.35_0.4

0.007296

136170

0.291474

26

C007

403

1122

0.359180

258

289476

167

0.585608

2

20754

...

70122.0

47

18941.0

403.0

104

400及以上

0.35_0.4

0.005011

289476

0.242238

30

D001

346

951

0.363828

239

227289

269

0.222543

1

24418

...

45672.0

37

12802.0

346.0

90

200_400

0.35_0.4

0.003686

227289

0.200942

32

D003

193

533

0.362101

417

222261

165

0.145078

1

27367

...

29143.0

49

9457.0

193.0

91

1_200

0.35_0.4

0.003325

222261

0.131121

41

E002

389

1080

0.360185

629

679320

244

0.372751

2

24150

...

59906.0

36

14004.0

389.0

94

200_400

0.35_0.4

0.003892

679320

0.088185

42

E003

486

1349

0.360267

354

477546

220

0.547325

2

19094

...

59292.0

43

20898.0

486.0

77

400及以上

0.35_0.4

0.004033

477546

0.124160

54

F005

338

957

0.353187

179

171303

206

0.390533

1

18817

...

39546.0

32

10816.0

338.0

77

200_400

0.35_0.4

0.004092

171303

0.230854

56

F007

488

1351

0.361214

235

317485

402

0.176230

2

25320

...

73200.0

34

16592.0

488.0

95

400及以上

0.35_0.4

0.003752

317485

0.230562

77

H008

324

886

0.365688

237

209982

157

0.515432

1

19245

...

45036.0

40

12960.0

324.0

92

200_400

0.35_0.4

0.004780

209982

0.214476

13 rows × 23 columns

优化结果:

  • 折扣率**大于37%**的部分找出售卖比大于36.5%且转化率大于0.7%的商品予以保留,其余进行清仓处理;
  • 折扣率**小于37%**的部分找出售卖比大于36.5%且转化率大于0.7%的部分予以保留,其余进行清仓处理。

总体方案:

  • 在一级入口中,首页的流量占比最高,我们可以将优化后的畅销款(A006、B006、C010、E007、F001、F002、H004、H007等)布局在首页档期流。
  • 在唯品会中,我们需要不断的增加商品来保证我们的SKU数,对于新增的商品我们也会增加在其中。
  • 对于平销款(E009、G001、G010、H006等),我们将其作为快抢和疯抢处理。
  • 对于转化率低、售卖比低的滞销款(A003、B001、B004、B007、B008、C003、C007、D007、E003、F007等),我们将尽快下架商品。