电商案例复盘分析

一、项目背景

唯品会是一家著名电商平台,有大量特卖商品,即指在特定的时间段里,以优惠的价格出售指定的商品。

二、分析目的

通过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)] 
400及以上区间商品

其中,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))]
0.35_0.4折扣区间表

其中,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类产品。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336