本文是對唯品會特賣商品數(shù)據(jù)分析案例的一個總結(jié),主要是根據(jù)商品促銷活動的銷售數(shù)據(jù),分析商品售賣情況,使用ABC分析法進(jìn)行商品結(jié)構(gòu)優(yōu)化。
ABC分析法
簡述:
ABC分類法又稱帕雷托分析法,也叫主次因素分析法,是項(xiàng)目管理中常用的一種方法。它是根據(jù)事物在技術(shù)或經(jīng)濟(jì)方面的主要特征,進(jìn)行分類排隊,分清重點(diǎn)和一般,從而有區(qū)別地確定管理方式的一種分析方法。由于它把被分析的對象分成A、B、C三類,所以又稱為ABC分析法。

在ABC分析法的分析圖中,有兩個縱坐標(biāo),一個橫坐標(biāo),幾個長方形,一條曲線,左邊縱坐標(biāo)表示頻數(shù),右邊縱坐標(biāo)表示頻率,以百分?jǐn)?shù)表示。橫坐標(biāo)表示影響質(zhì)量的各項(xiàng)因素,按影響大小從左向右排列,曲線表示各種影響因素大小的累計百分?jǐn)?shù)。一般地,是將曲線的累計頻率分為三級,與之相對應(yīng)的因素分為三類:
- A類因素:發(fā)生累計頻率為0%~80%,是主要影響因素,需要嚴(yán)格控制、準(zhǔn)確記錄,。
- B類因素:發(fā)生累計頻率為80%~90%,是次要影響因素,需要稍松空值、良好記錄。
- C類因素:發(fā)生累計頻率為90%~100%,是一般影響因素,需要簡單控制、最少記錄。
電商中的ABC分析法
在電商運(yùn)營活動中,商品ABC分級主要指標(biāo)有“支付轉(zhuǎn)化率”“商品庫存”,根據(jù)此區(qū)分商品屬于哪一類。商品ABC分級法需將分析顆粒精細(xì)到每個款式,相對復(fù)雜,所以只有在店鋪進(jìn)行大型促銷活動才會用到,也因?yàn)榇藭r數(shù)據(jù)量足夠大,使用ABC分析法才更有意義。
A級商品:
- 擁有高庫存、高轉(zhuǎn)化率的商品;
- 因?yàn)檫@類商品既暢銷,又有較深的庫存作為保障,因此可以作為活動中的主推商品。需要注意的是,在挑選A類商品時,還應(yīng)注意此款商品的訪客不能太低,則,沒有經(jīng)過“充分"流量測試的商品,其高轉(zhuǎn)化率可能是"偽高轉(zhuǎn)化率”。
B級商品:
- 經(jīng)過流量測試的中等轉(zhuǎn)化率商品;
- 此類商品對訪客有一定吸引力,但不如A類商品的轉(zhuǎn)化率,可以繼續(xù)保持當(dāng)前的銷售定為。但需要注意庫存告急,以及錯誤占用了A類商品陳列位置(B類商品陳列位置需要A類之后)。
C級商品:
- 轉(zhuǎn)化率低的商品;
- C類商品應(yīng)放置于店鋪陳列底端,基本屬于被放棄的一類商品。但是,如果C類商品中高庫存的,可嘗試降價,更換營銷方式等辦法。
一、項(xiàng)目背景
唯品會專門做特賣的網(wǎng)站,在特定的時間段里,以優(yōu)惠的價格出售指定商品。
二、分析目標(biāo)
評估每次促銷活動的結(jié)果,根據(jù)轉(zhuǎn)換率、售賣比指標(biāo)構(gòu)建ABC模型優(yōu)化商品結(jié)構(gòu),壓縮總庫存,使庫存結(jié)構(gòu)合理化節(jié)約管理力量。
三、分析過程
- 準(zhǔn)備工作(導(dǎo)入數(shù)據(jù)及處理觀察);
- 總體運(yùn)營指標(biāo)分析 —— 計算商品銷售額、銷量、客單價、UV等指數(shù)進(jìn)行同比、環(huán)比分析;
- 從價格區(qū)間分析商品 —— 將商品按價格分為多個區(qū)間,對每個區(qū)間的商品進(jìn)行統(tǒng)計分析,針對指定區(qū)間計算轉(zhuǎn)換率、售賣比,分級ABC類商品優(yōu)化商品結(jié)構(gòu);
- 從折扣區(qū)間分析商品 —— 將商品按折扣區(qū)間分為多個區(qū)間,對每個區(qū)間的商品進(jìn)行統(tǒng)計分析,針對指定區(qū)間計算轉(zhuǎn)換率、售賣比,分級ABC類商品優(yōu)化商品結(jié)構(gòu)。
1.準(zhǔn)備工作
(1) 導(dǎo)入模塊
import pandas as pd
pd.set_option('max_columns', 25)
# 保留4位小數(shù)
pd.set_option('display.float_format',lambda x : '%.4f' % x)
import numpy as np
import warnings
warnings.filterwarnings('ignore')
import sqlalchemy
import seaborn as sns
import matplotlib.pyplot as plt
(2) 導(dǎo)入數(shù)據(jù)
數(shù)據(jù)文件存放在sql數(shù)據(jù)庫,使用sqlalchemy模塊導(dǎo)入
# 商品信息表
sql = "select * from sales_info1"
df1 = pd.read_sql(sql,engine)
# 商品熱度表
sql = "select * from sales_info2"
df2 = pd.read_sql(sql,engine)
# 用戶訂單表
sql = 'select * from sales_info3'
df3 = pd.read_sql(sql,engine)



(3)處理表格得到商品信息表
- 對用戶訂單表中的商品進(jìn)行聚合得到表1
- 合并商品信息表和熱度表得到表2
- 合并表1和表2的到總體商品銷售明細(xì)
# 對用戶訂單表中的商品進(jìn)行聚合
product_sales = df3.groupby('商品名').agg({'用戶id': pd.Series.nunique,
'購買金額':'sum',
'購買數(shù)量':'sum',
'購買單價':'mean',
'退貨件數(shù)':'sum',
'退貨金額':'sum'}).reset_index().rename(columns = {'用戶id':'商品購買用戶數(shù)', '購買數(shù)量':'商品銷售數(shù)量','購買金額':'商品銷售金額','購買單價':'商品銷售單價','是否退貨':'商品退貨數(shù)量','退貨金額':'商品退貨金額'})
# 合并商品信息表和熱度表
dt_product = pd.merge(df1,df2,how = 'left',on='商品名')
# 合并
df_product_sales = pd.merge(product_sales,dt_product,on = '商品名')
# 商品總體描述統(tǒng)計
df_product_sales.describe()


- 共有80件商品,每件商品平均銷售額在46839元,平均單價為317元,平均銷量為150件退貨數(shù)為45件,退貨率較高達(dá)到1/3左右,平均折扣率在4折左右。
2.總體運(yùn)營指標(biāo)分析
- 分別計算商品GMV(銷售額)、實(shí)際銷售額(銷售額-退款金額)、銷量、客單價、UV(商品頁面獨(dú)立訪問數(shù))、轉(zhuǎn)化率(客戶數(shù)/UV)、折扣率(GMV/吊牌總額)、備貨值(吊牌價*庫存數(shù))、售賣比(GMV/備貨值)、收藏數(shù)、加入購物車數(shù)、SKU(最小品類單元)、SPU(款號)、退貨量、退款總額
- 輸入去年同期指標(biāo)值
- 環(huán)比分析
sales_state = pd.concat([sales_state_dangqi,sales_state_tongqi], axis = 0).T.reset_index().rename(columns = {"index":"指標(biāo)",1:"今年雙11",0:"去年雙11"})
sales_state["同比"] = (sales_state["今年雙11"] - sales_state["去年雙11"])/sales_state["去年雙11"]

- 總體運(yùn)營情況上,今年總銷售額為3747167比去年同比上漲65%,銷量同比上漲57%;
- 大多數(shù)指標(biāo)均有上漲,平均漲幅40%左右,拋開折扣率的下降,客單價下降了20%左右。
3.從價格區(qū)間優(yōu)化商品結(jié)構(gòu)
3.1 價格區(qū)間劃分
- 統(tǒng)計全部商品銷售單價
- 劃分價格區(qū)間,進(jìn)行銷售統(tǒng)計
# 商品單價統(tǒng)計
df_product_sales["商品銷售單價"].describe()
# 劃分0-200,201-400,400+ 商品區(qū)間
listbins = [0, 200, 400, 1000000]
listlabel = ["200元及以下", "201-400元", "400元以上"]
# cut,左開右閉,include_lowest:包含左端點(diǎn)
df_product_sales["價格分組"] = pd.cut(df_product_sales["商品銷售單價"], bins = listbins, labels= listlabel, include_lowest=True)
# 進(jìn)行統(tǒng)計
dt_product_sales_info = df_product_sales.groupby('價格分組').agg({'貨值':'sum',
'商品銷售金額':'sum',
'商品銷售數(shù)量':'sum',
'UV數(shù)':'sum',
'商品購買用戶數(shù)':'sum',
'收藏數(shù)':'sum',
'加購物車數(shù)':'sum'}).reset_index()
# 增加占比及轉(zhuǎn)化率
dt_product_sales_info['貨值占比'] = dt_product_sales_info['貨值'].div(dt_product_sales_info['貨值'].sum())
dt_product_sales_info['銷售占比'] = dt_product_sales_info['商品銷售金額'].div(dt_product_sales_info['商品銷售金額'].sum())
dt_product_sales_info['售賣比'] = dt_product_sales_info.apply(lambda x:x[2]/x[1],axis = 1)
dt_product_sales_info['客單價'] = dt_product_sales_info.apply(lambda x:x[2]/x[5],axis = 1)
dt_product_sales_info['轉(zhuǎn)換率'] = dt_product_sales_info.apply(lambda x:x[5]/x[4],axis = 1)


3.2 區(qū)間選擇
- 由于個價格區(qū)間商品銷售表現(xiàn)都相近,轉(zhuǎn)化率大致相同,400+商品的銷售金額最高,但是銷量最低,貨值最高,為避免貨物積壓,就這一區(qū)間進(jìn)行商品結(jié)構(gòu)優(yōu)化。
product_400 = df_product_sales.query("價格分組 == '400元以上'")
product_400['轉(zhuǎn)換率'] = product_400['商品購買用戶數(shù)'] / product_400['UV數(shù)']
product_400['備貨值'] = product_400['吊牌價'] * product_400['庫存量']
product_400['售賣比'] = product_400['商品銷售金額'] / product_400['備貨值']
product_400 = product_400[['商品名','商品銷售金額','商品銷售數(shù)量','商品銷售單價','商品購買用戶數(shù)','UV數(shù)','轉(zhuǎn)換率','庫存量','備貨值','售賣比']].reset_index(drop = True)
# 劃分A、B、C
def label(x):
if x[0] > 0.007:
return "A"
elif x[0] <= 0.007 and x[1]>0.3:
return "B"
else:
return "C"
product_400['label'] = product_400[["轉(zhuǎn)換率","售賣比"]].apply(lambda x:label(x),axis = 1)
product_400['color'] = product_400[["轉(zhuǎn)換率","售賣比"]].apply(lambda x:color(x),axis = 1)


- A、B、C類產(chǎn)品分別有12,10,1件
3.3 優(yōu)化方案
- A:轉(zhuǎn)化率大于0.7%的商品,暫時保留,用于下次促銷活動;
- B:轉(zhuǎn)化率小于等于0.7%的商品,但是售賣比大于30%的商品予以保留參加下次促銷活動,
- C:轉(zhuǎn)化率小于0.7%的商品,并且售賣比小于36%的商品進(jìn)行清倉處理。
4.從折扣區(qū)間優(yōu)化商品結(jié)構(gòu)
4.1 折扣區(qū)間劃分
將產(chǎn)品折扣率劃分'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+'多個區(qū)間進(jìn)行分析統(tǒng)計
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+']
df_product_sales['折扣區(qū)間'] = pd.cut(df_product_sales['折扣率'],bins = listbins,labels = listlabels,include_lowest=True)
df_product_sales

4.2 指標(biāo)計算
計算每個折扣區(qū)間的貨值、銷售額、銷售數(shù)量、UV數(shù)、轉(zhuǎn)化率、貨值占比等指標(biāo)
pd.set_option('display.float_format',lambda x : '%.6f' % x)
dt_product_discount_info = df_product_sales.groupby('折扣區(qū)間').agg({'貨值':'sum',
'商品銷售金額':'sum',
'商品銷售數(shù)量':'sum',
'UV數(shù)':'sum',
'收藏數(shù)':'sum',
'加購物車數(shù)':'sum',
'商品購買用戶數(shù)':'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['商品購買用戶數(shù)'].sum()
dt_product_discount_info['轉(zhuǎn)化率'] = dt_product_discount_info['商品購買用戶數(shù)'] / dt_product_discount_info['UV數(shù)'].sum()


4.3 區(qū)間選擇
折扣率在0.35-0.4之間的產(chǎn)品銷售額最高,針對以上區(qū)間進(jìn)行具體分析優(yōu)化產(chǎn)品
def label2(x):
if x[0] > 0.365 and x[1]>0.007:
return "A"
else:
return "C"
product_354['label'] = product_354[['售賣比','轉(zhuǎn)換率']].apply(lambda x:label2(x),axis = 1)

- A類產(chǎn)品有5件、C類產(chǎn)品有20件,對A類產(chǎn)品保留繼續(xù)下次促銷,清倉處理C類產(chǎn)品。
4.4 優(yōu)化方案
- 在折扣區(qū)間商品銷量均較好,只對商品進(jìn)行了A、C類劃分。
- 轉(zhuǎn)化率大于0.7%,售賣比大于36.5%的商品劃分為A類商品,保留用于下次促銷活動。
- 其余商品劃分為C類商品,用于清倉處理。
四、總結(jié)
- 1.從整體運(yùn)營情況來看,今年促銷活動銷售額為3747167元,實(shí)際銷售額為2607587元,同比去年增漲65%以上,銷量為12017件同比增漲57%。
- 2.根據(jù)ABC分析法
- 從價格區(qū)間優(yōu)化結(jié)果來看,400元以上價位產(chǎn)品一共23件,其中A類產(chǎn)品12件、B類1件、C類10件,下次活動可以對A類產(chǎn)品采取宣傳措施帶動其他產(chǎn)品銷量,C類產(chǎn)品進(jìn)行清倉處理為下次活動節(jié)省空間資源。
- 在折扣區(qū)間方面,整體折扣率在0.38左右,銷售額貢獻(xiàn)最高的為0.35-0.4之間的產(chǎn)品,在這一類產(chǎn)品中,A類5件,C類有20件,我們選擇保留A類產(chǎn)品,清倉處理C類產(chǎn)品。