一、项目背景
唯品会是一家著名电商平台,有大量特卖商品,即指在特定的时间段里,以优惠的价格出售指定的商品。
二、分析目的
通过ABC分类法评估每次促销活动的结果,并根据情况优化商品结构,在总体上提升运营效率。
三、项目过程
1、获取数据
从MySQL数据库中获取数据,共三张表:
商品信息表 dt1:
商品热度表 dt2:
客户销售明细表 dt3:
2、数据加工
● 将商品信息表、商品热度表合并得到商品表dt_product
● 将客户订单表进行聚合处理,得到销售表dt_sales
● 将商品表和销售表合并,得到商品销售明细表dt_product_sales
代码如下:
dt_product=pd.merge(dt1,dt2,on='商品名')
dt_sales=dt3.groupby('商品名').agg({ '用户ID':pd.Series.nunique, #需要分组去重计数时,用nunique函数。
'购买数量':'sum',
'购买单价':'mean',
'购买金额':'sum',
'退货件数':'sum',
'退货金额':'sum'}).reset_index()
dt_sales.rename(columns={'用户ID':'购买用户数量',
'购买数量':'商品销售数量',
'购买单价':'商品销售单价',
'购买金额':'商品销售金额',
'退货件数':'商品退货数量',
'退货金额':'商品退货金额'
},inplace=True)
dt_product_sales=pd.merge(dt_product,dt_sales,on='商品名')
dt_product_sales
最终商品销售明细表dt_product_sales如下:
由上表可知,商品的平均销售金额约为46840元,平均销量约为150件,平均商品单价约为317元,平均利润率约为30.77%,平均折扣率约为41.36%,平均退货金额为14245元,平均退货数量约为46件(约31%的退货率 )。
3、指标建立
● 分别计算商品GMV(销售额,包括退款金额)、实际销售额(销售额-退款金额)、销量(累计销量,含拒退量)、客单价、UV(商品页面独立访问数)、转化率(客户数/UV)、折扣率(GMV/(吊牌价销量))、备货值(吊牌价库存数)、售卖比(即售罄率,GMV/备货值)、收藏数、加入购物车数、SKU(最小品类单元,这里指货号)、SPU(款号)、拒退量、拒退款总额。
gmv=dt_product_sales['商品销售金额'].sum()
real_sales=gmv-dt_product_sales['商品退货金额'].sum()
all_sales_num=dt_product_sales['商品销售数量'].sum()
customer_price=gmv/dt_product_sales['购买用户数量'].sum()
uv=dt_product_sales['UV数'].sum()
uv_rate=dt_product_sales['购买用户数量'].sum()/uv
discount_rate=gmv/(np.sum(dt_product_sales['吊牌价'] * dt_product_sales['商品销售数量']) )
goods_value=np.sum(dt_product_sales['吊牌价'] * dt_product_sales['库存量'])
sales_rate=gmv/goods_value
coll_cons=dt_product_sales['收藏数'].sum()
add_shop_cons=dt_product_sales['加购物车数'].sum()
sku_cons=dt_product_sales['SKU'].sum()
spu_cons=dt_product_sales['商品名'].nunique()
reject_cons=dt_product_sales['商品退货数量'].sum()
reject_money=dt_product_sales['商品退货金额'].sum()
sales_state_jinnian=pd.DataFrame(
{'GMV':gmv,'实际销售额':real_sales,'销量':all_sales_num,'客单价':customer_price,'UV':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=['今年双十一'])
sales_state_jinnian=sales_state_jinnian.T
● 与去年同期对比
sales_state=pd.merge(sales_state_jinnian_s,sales_state_qunian_s,on='指标')
sales_state['同比']=(sales_state['今年双十一']-sales_state['去年双十一'])/sales_state['去年双十一']
结果如下:
从上表可知,总体运营情况较去年同期大部分上涨,平均涨幅约为40.01%。其中总体销售额增长了65.72%,实际销售额则增长了78.00%,销量增长了57.00%。但拒退量、拒退额也分别增长了82.15%、75.00%。而客单价则降低了19.00%。
3、从价格区间优化商品结构
3.1 统计商品销售单价,对价格进行区间划分
#商品价格统计
dt_product_sales['售卖价'].describe()
# 划分价格区间段
listBins = [0,200, 400, 100000]
listLabels = ['1_200','200_400','400及以上']
#进行分组
dt_product_sales['价格分组']=pd.cut(dt_product_sales['售卖价'],bins=listBins,labels=listLabels)
#先求不同价格分组基础上的货值、销售额、销量、UV、收藏数、加购物车数、购买用户数量
dt_product_sales_info=dt_product_sales.groupby('价格分组').agg({'货值':'sum',
'商品销售金额':'sum',
'商品销售数量':'sum',
'UV数':'sum',
'收藏数':'sum',
'加购物车数':'sum',
'购买用户数量':'sum'}).reset_index()
# 再求货值占比、销售占比、客单价、转化率
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数']
所得表格如下:
3.2 区间选择
三个价格区间的商品转化率相似。但其中400+商品的销售金额最高,销量反而最低,货值最高。所以为避免压库风险,选择该区间进行结构优化。
# 从dt_product_sales表中取出价位区间在400以上的数据
product_price_400=dt_product_sales[dt_product_sales['价格分组']== '400及以上']
#先求转换率=客户数 / UV
product_price_400['转换率']=product_price_400['购买用户数量']/product_price_400['UV数']
#再求备货值=吊牌价 * 库存数
product_price_400['备货值']=product_price_400['吊牌价']*product_price_400['库存量']
#最后求售卖比=该产品的GMV / 该产品的备货值
product_price_400['售卖比']=product_price_400['商品销售金额']/product_price_400['备货值']
# 筛选出下列列
product_price_400[['商品名','商品销售金额','商品销售数量','商品销售单价','购买用户数量','转换率','库存量','备货值','售卖比']]
# 1、A类保留商品:转化率大于0.7%的商品予以保留
stay_product=product_price_400[product_price_400['转换率'] > 0.007]
# 2、B类保留商品:找出转化率小于0.7% 但是 售卖比大于30%的部分予以保留
stay_product_discount=product_price_400[(product_price_400['转换率'] < 0.007) & (product_price_400['售卖比']>=0.30)]
# 3、C类清仓处理商品,找出转化率小于0.7%并且售卖比小于30%的部分
drop_product=product_price_400[(product_price_400['转换率'] < 0.007) & (product_price_400['售卖比']<0.30)]
其中,A类保留商品共12种,B类保留商品共1种,C类清仓处理商品共10种。
3.3 优化方案
● A类商品、B类商品:暂时保留,用于下次促销活动;
● C类商品:进行清仓处理。
4、从折扣区间优化商品结构
4.1 统计商品折扣率,对其进行区间划分
将产品折扣率划分'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'多个区间进行分析统计
#设置切分区域
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']
dt_product_sales['折扣区间']=pd.cut(dt_product_sales['折扣率'],bins=listBins,labels=listLabels)
所得表格如下:
4.2 指标加工
计算每个折扣区间的货值、销售额、销售数量、UV数、转化率、货值占比等指标。
#先求不同折扣分组基础上的货值、销售额、销量、UV、收藏数、加购物车数、购买用户数量
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['货值'].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数'].sum()
dt_product_discount_info
4.3 区间选择
由上图(各折扣区间销售额)可知,0.35_0.4的销售额最高,因此针对该区间进行具体分析优化。
# 从dt_product_sales表中取出0.35-0.4价格区间的数据内容
product_discount_354=dt_product_sales[dt_product_sales['折扣区间']=='0.35_0.4']
#先求转换率=客户数 / UV
product_discount_354['转换率']=product_discount_354['购买用户数量']/product_discount_354['UV数']
#再求备货值=吊牌价 * 库存数
product_discount_354['备货值']=product_discount_354['吊牌价']*product_discount_354['库存量']
#最后求售卖比=该产品的GMV / 该产品的备货值
product_discount_354['售卖比']=product_discount_354['商品销售金额']/product_discount_354['备货值']
product_discount_354[["商品名","商品销售金额","商品销售数量","商品销售单价","购买用户数量","UV数","库存量","备货值","折扣率","售卖比",'转换率']]
# 折扣率大于37%的,挑选合格的商品:
# 1、A类保留商品:折扣率大于37%的部分找出售卖比大于30%且转化率大于0.7%的商品予以保留
stay_stocks1=product_discount_354[(product_discount_354['折扣率']>0.37)&(product_discount_354['售卖比']>0.3) & (product_discount_354['转换率']>0.007)]
# 2、B类清仓处理商品,不满足条件的:折扣率大于37%的部分找出售卖比小于30%或转化率小于0.7%的商品。
stay_stocks2=product_discount_354[(product_discount_354['折扣率']>0.37)&((product_discount_354['售卖比']<0.3) | (product_discount_354['转换率']<0.007))]
# 折扣率小于37%的,挑选合格的商品:
# 1、C类保留商品:折扣率小于37%的部分找出售卖比大于30%且转化率大于0.7%的商品予以保留
stay_stocks3=product_discount_354[(product_discount_354['折扣率']<0.37)&(product_discount_354['售卖比']>0.3) & (product_discount_354['转换率']>0.007)]
# 2、D类清仓处理商品,不满足条件的:折扣率小于37%的部分找出售卖比小于30%或转化率小于0.7%的商品。
stay_stocks4=product_discount_354[(product_discount_354['折扣率']<0.37)&((product_discount_354['售卖比']<0.3) | (product_discount_354['转换率']<0.007))]
其中,A类保留商品共1件,B类清仓商品共10件,C类保留商品共1件,D类清仓商品共13件。
4.4 优化方案
● A类商品、C类商品:暂时保留,用于下次促销活动;
● B类商品、D类商品:进行清仓处理。
四、总结
1.从整体运营情况来看,今年促销活动销售额为3747167元,同比去年增涨65.72%以上;实际销售额为2607587元,同比去年增涨78.00%以上,销量为12017件,同比增长57.00%。
2.根据ABC分析法
从价格区间优化结果来看,400元以上价位产品一共23件,其中A类产品12件、B类1件、C类10件,下次活动可以对A类、B类产品采取宣传措施带动销量,C类产品进行清仓处理为下次活动节省空间资源。
在折扣区间方面,整体折扣率约为0.4179,销售额贡献最高的为0.35-0.4折扣区间的产品,在这一类产品中,A类1件,B类10件,C类1件,D类有13件,我们选择保留A、C类产品,清仓处理B、D类产品。