什么是特卖:
唯品会是一个专门做特卖的网站,什么是特卖呢。特卖一般是指在特定的时间段里,以优惠的价格出售指定的商品,一般以商城或者专卖店为多。该模式在线下早已存在(比如商场促销、街边的尾货甩卖),在国外成熟的大商场内也有针对滞销商品的打折特卖,如奥特莱斯。特卖一般是商家清库存,不过也有一些专门生产商品做特卖的商家。
特卖行业也是有个真实存在的产业链,只是因为快速分销渠道,地理位置等关系,大多数都集中在一线城市,部分生活在一线城市的都基本或多或少去过几次各个品牌的特卖仓,但是二三线甚至四五线城市的就比较难接触到,后来就有一群人成了品牌搬运工,和各大品牌联系通过微信等渠道快速分销大牌库存,达到快速低价消除库存,加快周转回笼资金等目的。
在货源上,由于品牌尾货具备天然的清仓需求,是折扣零售最常见的货源,但实际上,只要成本足够低,新品首发、定制包销、自有品牌均可以成为折扣特卖零售的可持续货源。成立初期,唯品会货源以尾货为主,但随着唯品会在电商领域的不断发展,新品和专供品的占比不断提升,早在 2016 年 Q2 分析中,唯品会当季新品和平台特供品就已经占 37%了。
分析目标:
评估每次促销活动的结果,并根据情况优化商品结构,以便让自己的商品卖得更好
分析流程:
一、总体分析运营指标
二、从价格区间找出表现不好的产品,优化商品结构
三、从折扣区间找出表现不好的产品,优化商品结构
数据导入
将excel数据导入pandas,给定的数据除了商品热度表和商品明细表是聚合数据,用户购买明细表包括每一单的信息,所以根据商品名分类,聚合每个商品的基本销售情况,如销售数量、平均销售单价、退货数量等,并修改列名,最后将三表连接
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
#商品明细表
dt1 = pd.read_excel(r'唯品会销售数据.xlsx',sheetname=0)
#商品热度表
dt2 = pd.read_excel(r'唯品会销售数据.xlsx',sheetname=1)
#用户购买明细表
dt3 = pd.read_excel(r'唯品会销售数据.xlsx',sheetname=2)
dt_product = dt1.merge(dt2,how='left',on='商品名')
# 按商品名统计每个商品销售情况
product_sales = dt3.groupby('商品名').agg({'购买数量':'sum',
'购买单价':'mean',
'购买金额':'sum',
'退货件数':'sum',
'退货金额':'sum',
'用户id':'nunique'}).reset_index()
product_sales.rename(columns={'购买数量':'商品销售数量',
'购买单价':'商品销售单价',
'购买金额':'商品销售金额',
'退货件数':'商品退货数量',
'退货金额':'商品退货金额',
'用户id':'购买用户数量'},inplace = True)
# 合并三表
dt_product_sales = dt_product.merge(product_sales,how='left',on='商品名')
dt_product_sales.head()
一、总体运营评价
总体运营部分,主要关注销售额、售卖比、UV、转化率等指标,其他指标作为辅助指标。销售额用来和预期目标做对比,售卖比用来看商品流转情况。
- GMV:销售额,在唯品会里称为到手价。
- 实销:GMV – 拒退金额。
- 销量:累计销售量(含拒退)。
- 客单价:GMV / 客户数,客单价与毛利率息息相关,一般客单价越高,毛利率越高。
- UV:商品所在页面的独立访问数。
- 转化率:客户数 / UV。
- 折扣率:GMV / 吊牌总额(吊牌总额 = 吊牌价 * 销量),在日常工作中,吊牌额是必不可少的。
- 备货值:吊牌价 * 库存数。
- 售卖比:又称售罄率,GMV / 备货值。
- 收藏数:收藏某款商品的用户数量。
- 加购数:加购物车人数。
- SKU数:促销活动中的SKU计数(一般指货号)。
- SPU数:促销活动中的SPU计数(一般指款号)。
- 拒退量:拒收和退货的总数量。
- 拒退额:拒收和退货的总金额。
# GMV:销售额(包含退货金额)
gmv = dt_product_sales['商品销售金额'].sum()
# 实际销售额=GMV-退货金额
return_sales = dt_product_sales['商品退货金额'].sum()
return_money = gmv-return_sales
# 销量:累计销售量(含拒退)
all_sales = dt_product_sales['商品销售数量'].sum()
# 客单价=GMV/客户数
custom_price=gmv/dt_product_sales['购买用户数量'].sum()
# UV转化率:商品所在页面的独立访客数
uv_cons = dt_product_sales['UV数'].sum()
# 转化率=客户数/UV
uv_rate = dt_product_sales['购买用户数量'].sum()/uv_cons
# 折扣率=GMV/吊牌总额
tags_sales = np.sum(dt_product_sales['吊牌价'] * dt_product_sales['商品销售数量'])
discount_rate = gmv/tags_sales
# 备货值=吊牌价 * 库存数
goods_value = np.sum(dt_product_sales['吊牌价'] * dt_product_sales['库存量'])
# 售卖比=GMV/备货值
sales_rate = gmv/good_value
# 收藏数:收藏某款商品的用户数量
coll_cons = dt_product_sales['收藏数'].sum()
# 加购数:加购物车人数
add_shop_cons = dt_product_sales['加购物车数'].sum()
# SKU数:促销活动中的最小品类单元(货号)
sku_cons = dt_product_sales['SKU'].sum()
# SPU数:促销活动中的SPU计数(款号)
spu_cons = len(dt_product_sales['商品名'].unique())
# 拒退量:拒收和退货的总数量。退货件数
reject_cons = dt_product_sales['商品退货数量'].sum()
# 拒退额:拒收和退货的总金额
reject_money = dt_product_sales['商品退货金额'].sum()
# 汇总统计
sales_state_dangqi = pd.DataFrame.from_dict(
{'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},orient='index'
)
# 导入去年销售数据
sales_state_tongqi = pd.DataFrame.from_dict(
{"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}, orient='index'
)
# 计算两年数据同比
sales_state_dangqi.reset_index(inplace=True)
sales_state_dangqi.columns=['指标','今年双11']
sales_state_tongqi.reset_index(inplace=True)
sales_state_tongqi.columns=['指标','去年双11']
sales_state=sales_state_dangqi.merge(sales_state_tongqi,on='指标')
sales_state['同比'] = (sales_state['今年双11']-sales_state['去年双11'])/sales_state['去年双11']
从销售指标整体来看:
- 相比去年各项指标都有了明显的提升,如销量提升57%,销售额提升78%;
- 同时可以发现今年折扣率和客单价有所下降,分别为下降9%和19%,也许这是销量提升的原因之一;
- 值得注意的是今年的退货量和退货金额都有了明显上升,分别上升82%和75%,虽然应该有一部分销量提升的原因,但仍需警惕
二、从价格区间优化商品结构
我们需要做的是,深入探究不同区间的数据,以此来优化后期的促销结构。首先我们需要找到在本次促销中此区间的销售源数据,源数据要求显示具体的款号、销售额、销量等信息。第二步,计算出每个款的转化率、折扣率等数据。
查看以下指标:
- 销售额
- 销量
- 件单价
- 客户数
- UV
- 转换率
- 库存
- 货值
- 售卖比
查看销售价格大致分布后,将价格划分为三个区间:'0-200','200-400','400以上',提取出上述8个指标所需数据,并计算出货值占比、销量占比、客单价和转化率
#划分价格区间
list_bins = [0,200,400,10000]
#设置切分后的对应标签
list_labels = ['0-200','200-400','400以上']
#用pd.cut进行数据离散化切分,注意分组标签和分组数要一致
dt_product_sales['价格分组'] = pd.cut(dt_product_sales['商品销售单价'],bins=list_bins,labels=list_labels)
dt_product_sales_info = dt_product_sales.groupby('价格分组')['货值','商品销售金额',
'商品销售数量','UV数','购买用户数量',
'收藏数','加购物车数'].sum()
dt_product_sales_info.reset_index(inplace=True)
# 货值占比,销售占比,客单价,转化率
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['购买用户数量']/dt_product_sales_info['UV数']
dt_product_sales_info
从各价格销售情况来看
- 转化率都差不多,200-400区间略高,转化率为0.68%;
- 销量最大的是200-400区间,但销售额最多的是400以上区间,400以上区间占比53.1%,200-400区间占比37.8%,0-200区间整体销售额不高
将400以上区间的销售数据单独拿出分析,计算出区间内各商品转化率、备货值和售卖比,并按转化率或售卖比排序
# 取出400以上价格区间的数据内容
product_400 = dt_product_sales[dt_product_sales['价格分组']=='400以上']
#计算400以上区间的转化率、备货值和售卖比
product_400['转化率'] = product_400['购买用户数量']/product_400['UV数']
product_400['备货值'] = product_400['吊牌价'] * product_400['库存量']
product_400['售卖比'] = product_400['商品销售金额']/product_400['备货值']
#取出要分析的指标并按售卖比或转化率排序
product_400_1 = product_400[["商品名","商品销售金额","商品销售数量","商品销售单价","购买用户数量","UV数","转化率","库存量","备货值","售卖比"]]
product_400_1.sort_values('售卖比',ascending=False)
根据以上销售指标数据提出以下优化方案:
- 转化率大于0.7%的商品,保留,拟用于下次促销活动
- 转化率小于0.7%的商品,但是售卖比大于25%的商品暂时保留予以参加下次促销活动
- 转化率小于0.7%且售卖比小于25%的商品进行清仓处理
# 挑选合格商品
stay_stock571 = product_400[product_400['转化率']>=0.007]
stay_stock572 = product_400[(product_400['售卖比']>=0.25)&(product_400['转化率']<0.007)]
stay_stock573 = product_400[(product_400['售卖比']<0.25)&(product_400['转化率']<0.007)]
三、从折扣区间优化商品结构
根据商品折扣率分布情况,划分价格折扣区间,聚合相应指标,并计算出货值占比、销售占比、客单价、转化率
#划分折扣价格区间
discount_bins = [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]
discount_labels = ['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']
dt_product_sales['折扣区间'] = pd.cut(dt_product_sales['折扣率'],bins=discount_bins,labels=discount_labels)
#聚合指标
dt_discount_info = dt_product_sales.groupby('折扣区间')['货值','商品销售金额',
'商品销售数量','UV数','购买用户数量',
'收藏数','加购物车数'].sum()
dt_discount_info.reset_index(inplace=True)
# 货值占比、销售占比、客单价、转化率
dt_discount_info['货值占比'] = dt_discount_info['货值']/dt_discount_info['货值'].sum()
dt_discount_info['销售占比'] = dt_discount_info['商品销售金额']/dt_discount_info['商品销售金额'].sum()
dt_discount_info['客单价'] = dt_discount_info['商品销售金额']/dt_discount_info['购买用户数量']
dt_discount_info['转化率'] = dt_discount_info['购买用户数量']/dt_discount_info['UV数']
dt_discount_info.sort_values('销售占比',ascending=False)
从折扣区间销售情况看不论是销售量还是销售金额,最大的都是0.35-0.4区间,其销售占比达36.6%;转化率来看最大的是0.55-0.6区间,为1.32%,最小的反而为折扣最大的0.15-0.2区间,仅为0.42%
取出0.35-0.4折扣区间的商品单独分析,计算其转化率,备货值和售卖比,并提出相应指标列按售卖比或转化率排序
# 取出0.35-0.4折扣区间的数据内容
product_354 = dt_product_sales[dt_product_sales['折扣区间']=='0.35-0.4']
product_354['转化率'] = product_354['购买用户数量']/product_354['UV数']
product_354['备货值'] = product_354['吊牌价']*product_354['库存量']
product_354['售卖比'] = product_354['商品销售金额']/product_354['备货值']
product_354 = product_354[["商品名","商品销售金额","商品销售数量","商品销售单价","购买用户数量","UV数","库存量","备货值","折扣率","售卖比",'转化率']].sort_values('售卖比')
product_354.sort_values('售卖比',ascending=False)
根据各商品转化率和售卖比提出优化方案:
- 找出售卖比大于25%%或转化率大于0.7%的商品予以保留,其余进行清仓处理;
#挑选合格的商品
stay_stock1 = product_354[(product_354['售卖比']>=0.25)|(product_354['转化率']>=0.007)]
# 清仓处理商品
stay_stock2 = product_354[(product_354['售卖比']<0.25)&(product_354['转化率']<0.007)]
stay_stock2
代码链接
提取码:8eve