電商特賣商品庫存優化分析

本文是對唯品會特賣商品數據分析案例的一個總結,主要是根據商品促銷活動的銷售數據,分析商品售賣情況,使用ABC分析法進行商品結構優化。

ABC分析法

簡述:
ABC分類法又稱帕雷托分析法,也叫主次因素分析法,是項目管理中常用的一種方法。它是根據事物在技術或經濟方面的主要特征,進行分類排隊,分清重點和一般,從而有區別地確定管理方式的一種分析方法。由于它把被分析的對象分成A、B、C三類,所以又稱為ABC分析法。

標準帕累托圖

在ABC分析法的分析圖中,有兩個縱坐標,一個橫坐標,幾個長方形,一條曲線,左邊縱坐標表示頻數,右邊縱坐標表示頻率,以百分數表示。橫坐標表示影響質量的各項因素,按影響大小從左向右排列,曲線表示各種影響因素大小的累計百分數。一般地,是將曲線的累計頻率分為三級,與之相對應的因素分為三類:

  • A類因素:發生累計頻率為0%~80%,是主要影響因素,需要嚴格控制、準確記錄,。
  • B類因素:發生累計頻率為80%~90%,是次要影響因素,需要稍松空值、良好記錄。
  • C類因素:發生累計頻率為90%~100%,是一般影響因素,需要簡單控制、最少記錄。

電商中的ABC分析法

在電商運營活動中,商品ABC分級主要指標有“支付轉化率”“商品庫存”,根據此區分商品屬于哪一類。商品ABC分級法需將分析顆粒精細到每個款式,相對復雜,所以只有在店鋪進行大型促銷活動才會用到,也因為此時數據量足夠大,使用ABC分析法才更有意義。

A級商品:

  • 擁有高庫存、高轉化率的商品;
  • 因為這類商品既暢銷,又有較深的庫存作為保障,因此可以作為活動中的主推商品。需要注意的是,在挑選A類商品時,還應注意此款商品的訪客不能太低,則,沒有經過“充分"流量測試的商品,其高轉化率可能是"偽高轉化率”。

B級商品:

  • 經過流量測試的中等轉化率商品;
  • 此類商品對訪客有一定吸引力,但不如A類商品的轉化率,可以繼續保持當前的銷售定為。但需要注意庫存告急,以及錯誤占用了A類商品陳列位置(B類商品陳列位置需要A類之后)。

C級商品:

  • 轉化率低的商品;
  • C類商品應放置于店鋪陳列底端,基本屬于被放棄的一類商品。但是,如果C類商品中高庫存的,可嘗試降價,更換營銷方式等辦法。

一、項目背景

唯品會專門做特賣的網站,在特定的時間段里,以優惠的價格出售指定商品。

二、分析目標

評估每次促銷活動的結果,根據轉換率、售賣比指標構建ABC模型優化商品結構,壓縮總庫存,使庫存結構合理化節約管理力量。

三、分析過程

  • 準備工作(導入數據及處理觀察);
  • 總體運營指標分析 —— 計算商品銷售額、銷量、客單價、UV等指數進行同比、環比分析;
  • 從價格區間分析商品 —— 將商品按價格分為多個區間,對每個區間的商品進行統計分析,針對指定區間計算轉換率、售賣比,分級ABC類商品優化商品結構;
  • 從折扣區間分析商品 —— 將商品按折扣區間分為多個區間,對每個區間的商品進行統計分析,針對指定區間計算轉換率、售賣比,分級ABC類商品優化商品結構。

1.準備工作

(1) 導入模塊
import pandas as pd
pd.set_option('max_columns', 25)
# 保留4位小數
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) 導入數據

數據文件存放在sql數據庫,使用sqlalchemy模塊導入

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

商品總體描述統計
  • 共有80件商品,每件商品平均銷售額在46839元,平均單價為317元,平均銷量為150件退貨數為45件,退貨率較高達到1/3左右,平均折扣率在4折左右。

2.總體運營指標分析

  • 分別計算商品GMV(銷售額)、實際銷售額(銷售額-退款金額)、銷量、客單價、UV(商品頁面獨立訪問數)、轉化率(客戶數/UV)、折扣率(GMV/吊牌總額)、備貨值(吊牌價*庫存數)、售賣比(GMV/備貨值)、收藏數、加入購物車數、SKU(最小品類單元)、SPU(款號)、退貨量、退款總額
  • 輸入去年同期指標值
  • 環比分析
sales_state = pd.concat([sales_state_dangqi,sales_state_tongqi], axis = 0).T.reset_index().rename(columns = {"index":"指標",1:"今年雙11",0:"去年雙11"})
sales_state["同比"] = (sales_state["今年雙11"] - sales_state["去年雙11"])/sales_state["去年雙11"]
今年、去年同期對比
  • 總體運營情況上,今年總銷售額為3747167比去年同比上漲65%,銷量同比上漲57%;
  • 大多數指標均有上漲,平均漲幅40%左右,拋開折扣率的下降,客單價下降了20%左右。

3.從價格區間優化商品結構

3.1 價格區間劃分
  • 統計全部商品銷售單價
  • 劃分價格區間,進行銷售統計
# 商品單價統計
df_product_sales["商品銷售單價"].describe()
# 劃分0-200,201-400,400+ 商品區間
listbins = [0, 200, 400, 1000000]
listlabel = ["200元及以下", "201-400元", "400元以上"]
# cut,左開右閉,include_lowest:包含左端點
df_product_sales["價格分組"] = pd.cut(df_product_sales["商品銷售單價"], bins = listbins, labels= listlabel, include_lowest=True)
# 進行統計
dt_product_sales_info = df_product_sales.groupby('價格分組').agg({'貨值':'sum',
                                                                  '商品銷售金額':'sum',
                                                                  '商品銷售數量':'sum',
                                                                  'UV數':'sum',
                                                                  '商品購買用戶數':'sum',
                                                                  '收藏數':'sum',
                                                                  '加購物車數':'sum'}).reset_index()
# 增加占比及轉化率
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['轉換率'] = dt_product_sales_info.apply(lambda x:x[5]/x[4],axis = 1)
價格區間商品統計

3.2 區間選擇
  • 由于個價格區間商品銷售表現都相近,轉化率大致相同,400+商品的銷售金額最高,但是銷量最低,貨值最高,為避免貨物積壓,就這一區間進行商品結構優化。
product_400 = df_product_sales.query("價格分組 == '400元以上'")
product_400['轉換率'] = product_400['商品購買用戶數'] / product_400['UV數']
product_400['備貨值'] = product_400['吊牌價'] * product_400['庫存量']
product_400['售賣比'] = product_400['商品銷售金額'] / product_400['備貨值']
product_400 = product_400[['商品名','商品銷售金額','商品銷售數量','商品銷售單價','商品購買用戶數','UV數','轉換率','庫存量','備貨值','售賣比']].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[["轉換率","售賣比"]].apply(lambda x:label(x),axis = 1)
product_400['color'] = product_400[["轉換率","售賣比"]].apply(lambda x:color(x),axis = 1)

400元以上產品

散點圖,黃色:C類,綠色:B類,紫色:A類
  • A、B、C類產品分別有12,10,1件
3.3 優化方案
  • A:轉化率大于0.7%的商品,暫時保留,用于下次促銷活動;
  • B:轉化率小于等于0.7%的商品,但是售賣比大于30%的商品予以保留參加下次促銷活動,
  • C:轉化率小于0.7%的商品,并且售賣比小于36%的商品進行清倉處理。

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+'多個區間進行分析統計

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['折扣區間'] = pd.cut(df_product_sales['折扣率'],bins = listbins,labels = listlabels,include_lowest=True)
df_product_sales
4.2 指標計算

計算每個折扣區間的貨值、銷售額、銷售數量、UV數、轉化率、貨值占比等指標

pd.set_option('display.float_format',lambda x : '%.6f' % x)
dt_product_discount_info = df_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['商品購買用戶數'].sum()
dt_product_discount_info['轉化率'] = dt_product_discount_info['商品購買用戶數'] / dt_product_discount_info['UV數'].sum()
折扣區間分析統計

銷售情況
4.3 區間選擇

折扣率在0.35-0.4之間的產品銷售額最高,針對以上區間進行具體分析優化產品

def label2(x):
    if x[0] > 0.365 and x[1]>0.007:
        return "A"
    else:
        return "C"
product_354['label'] = product_354[['售賣比','轉換率']].apply(lambda x:label2(x),axis = 1)
0.35-0.4區間產品銷售情況
  • A類產品有5件、C類產品有20件,對A類產品保留繼續下次促銷,清倉處理C類產品。
4.4 優化方案
  • 在折扣區間商品銷量均較好,只對商品進行了A、C類劃分。
  • 轉化率大于0.7%,售賣比大于36.5%的商品劃分為A類商品,保留用于下次促銷活動。
  • 其余商品劃分為C類商品,用于清倉處理。

四、總結

  • 1.從整體運營情況來看,今年促銷活動銷售額為3747167元,實際銷售額為2607587元,同比去年增漲65%以上,銷量為12017件同比增漲57%。
  • 2.根據ABC分析法
    • 從價格區間優化結果來看,400元以上價位產品一共23件,其中A類產品12件、B類1件、C類10件,下次活動可以對A類產品采取宣傳措施帶動其他產品銷量,C類產品進行清倉處理為下次活動節省空間資源。
    • 在折扣區間方面,整體折扣率在0.38左右,銷售額貢獻最高的為0.35-0.4之間的產品,在這一類產品中,A類5件,C類有20件,我們選擇保留A類產品,清倉處理C類產品。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。