Python與Tableau相結(jié)合,萬字長文搞定傳統(tǒng)線下連鎖店數(shù)據(jù)分析


1 分析背景:
這是kaggle上的一份巴西傳統(tǒng)線下汽車服務(wù)類連鎖店的實際銷售數(shù)據(jù),大小約3.43G,包含了從2017年3月31日到2020年4月1日大約2600萬多的銷售數(shù)據(jù)。
分析該數(shù)據(jù)集可以探究該連鎖店的銷售情況,產(chǎn)品的分布,可以對客戶進(jìn)行細(xì)分,精細(xì)化銷售,對員工的生產(chǎn)力進(jìn)行分析。
這里是利用Python結(jié)合Tableau來進(jìn)行分析,可視化用的Tableau,部分分析用的Python。
數(shù)據(jù)解讀:

2 分析框架

3 數(shù)據(jù)清洗
3.1 讀取數(shù)據(jù),看看總體情況
這里的數(shù)據(jù)集比較大,Anaconda加載的數(shù)據(jù)都暫時存在內(nèi)存里,筆者剛開始用的8G內(nèi)存,一下子就滿了,這里建議8-12G的內(nèi)存左右,或者關(guān)閉一些暫時不用先的軟件。
#?導(dǎo)入相關(guān)包
import?numpy?as?np
import?pandas?as?pd?
#?讀取數(shù)據(jù),設(shè)置分割符號
file_path?=?r'F:\ales?Report.csv\Sales?Report.csv'
df?=?pd.read_csv(file_path,?iterator=True,?sep=';')
data?=?df.get_chunk(30000000)
data.info()
輸出:

這里的銷售時間是object類型,要轉(zhuǎn)換成datetime類型,先記錄下。
#?查看NULL的數(shù)據(jù):
data.isnull().sum()
輸出:

這里的數(shù)據(jù)比較干凈,都沒有NULL值這些。
查看數(shù)據(jù)的標(biāo)準(zhǔn)差,最大,最下值這些:
data.describe()
輸出:

這里的數(shù)據(jù)量比較多,數(shù)據(jù)相對比較大,這里很明顯可以看出的Product Cost這里有個負(fù)數(shù),查看這些數(shù)據(jù):
data[data['Product?Cost']?<=?0]
輸出:

len(data[data['Product?Cost']?0])
輸出:

這里按照字面的意思理解是每銷售出一個該產(chǎn)品的成本,這里為負(fù)數(shù),暫且這里當(dāng)異常數(shù)據(jù)去處理,這里的數(shù)據(jù)量也不多,只有20條,直接刪除處理。實際,得和業(yè)務(wù)進(jìn)行溝通,查看該指標(biāo)的具體意思,和該負(fù)數(shù)情況的發(fā)生是出于什么情況來進(jìn)行分析。
刪除這些數(shù)據(jù):
data.drop(index=data[data['Product?Cost']?0].index,?inplace=True)
3.2 刪除重復(fù)的數(shù)據(jù)
#?數(shù)據(jù)清洗,這里有489567條數(shù)據(jù)是重復(fù)的,刪除這些數(shù)據(jù)
data[data.duplicated()]
輸出:

#?刪除重復(fù)的數(shù)據(jù)
#?這里的重復(fù)的數(shù)據(jù)是完全重復(fù)的,所有的值都是相同的,
#?這里只能判斷為異常數(shù)據(jù),直接刪除掉
data.drop(index=data[data.duplicated()].index,?inplace=True)
3.3 日期轉(zhuǎn)換格式
data['Sale?Date?Time']?=?pd.to_datetime(data['Sale?Date?Time'])
data.info()
輸出:

至此,數(shù)據(jù)清洗完畢,可以進(jìn)行分析。
4 分析
4.1 總體情況

4.2 時間角度
4.2.1 ?年銷售額情況
2017年只有前9個月的銷售額,2020年只有前4個月的銷售額。
2019年總銷售額達(dá)到718306933,環(huán)比2018年的680191151,增長5.6%。

4.2.2 ?季度的銷售額情況
2017第二季度開始到2018年底訂單量成直線式上漲,2019年較平穩(wěn)。
2017年該連鎖店出于瘋狂生長期,訂單量、銷售額均呈現(xiàn)直線上升趨勢。
2019年第四季度訂單量:208548,銷售額達(dá)到206513981,訂單量、銷售金額均達(dá)到歷史峰值。

4.2.3 月的銷售情況
2017年各月份的銷售金額,呈上漲趨勢,其中17年下半年上漲趨勢較明顯,18、19年呈現(xiàn)較穩(wěn)定的狀態(tài);結(jié)合各月份,連鎖店的數(shù)量。
可以得出結(jié)論:2017年下半年連鎖店數(shù)量的增加帶動銷售金額明顯的上漲。
結(jié)合2018、2019年對比,該連鎖店的銷售額不受季節(jié)的影響,12月為了沖業(yè)績,銷售額會上漲一些。


4.2.4 周的銷售情況
周的銷售金額總體上先呈現(xiàn)上升,然后趨向于較穩(wěn)定的狀態(tài)。
周的訂單量處于動態(tài)的平衡當(dāng)中,可以看出隨著時間的增長,每張訂單的購買金額逐漸增加。

4.2.5 日的銷售情況
總體來說,這里只有2018年6月1日左右時間段的銷售金額有異常,這段時間既有極大值,也有極小值。具體原因可以深入查明一下。

這里的日銷售額呈現(xiàn)周期性規(guī)律,也就是有6天銷售額處于較高的,有一天的銷售額是處于最低的,結(jié)合工作日權(quán)重,可以看出,巴西人民再周日的購買欲望較低,或者該商圈處于寫字樓附近。

4.2.6 近四年的日UV
縱向?qū)Ρ让磕甑娜誙V,都有上升的趨勢。
橫向?qū)Ρ犬?dāng)年的日UV,呈現(xiàn)周期性的規(guī)律,這里按7天為一周期,前后一天都是最低的,中間五天相對來說較高。

4.2.7 工作日的銷售情況
周日的銷售金額最少。

4.2.7 工作日的訂單量

4.2.8 時間段的銷售金額、訂單量
該商城銷售額、訂單量在7-20點這個時間段較高,12點有個谷底。

4.2.9 工作日的銷售權(quán)重
這里只挑選了2019年全年的數(shù)據(jù)來進(jìn)行統(tǒng)計。
在Tableau里實現(xiàn):
導(dǎo)出數(shù)據(jù)到Excel里計算。
計算公式方式:
全年周日的平均值=全年的周日的總銷售額/全年周日的天數(shù),其他工作日類推。 挑選1中計算到的最小值 權(quán)重=某個工作日的平均值 / 2中選出的最小值
這里的權(quán)重越大,表明當(dāng)日的銷售額越多。

可視化:

這里可得出的結(jié)論:周五的銷售權(quán)重最大,周日的銷售權(quán)重最小。
4.2.10 銷售預(yù)測按日
這里只挑選2019年1月1日到2020年2月29的數(shù)據(jù),其中2020年2月份的數(shù)據(jù)用來做預(yù)測和對比。
#?將銷售時間設(shè)置成索引
data.set_index('Sale?Date?Time',?inplace=True,?drop=True)
#?將數(shù)據(jù)重新整理成以天來統(tǒng)計每天銷售額的匯總
day_data?=?data.resample('d').sum()['Total']
day_data
輸出:

#?挑選2019年1月1日到2020年2月29的數(shù)據(jù)
train_day_data?=?day_data[day_data.index?>=?'2019-01-01']
train_day_data?=?train_day_data[train_day_data.index?<=?'2020-02-29']
#?保存數(shù)據(jù)到Excel
train_day_data.to_excel('./日銷售數(shù)據(jù).xlsx')
#?讀取數(shù)據(jù)
data?=?pd.read_excel('./日銷售數(shù)據(jù).xlsx')
#?重新命名列
data.rename(columns={'Sale?Date?Time':?'date1'},?inplace=True)
data
輸出:

#?將銷售額進(jìn)行縮放,預(yù)測的只是大概的值,不可能太精確,這里直接根據(jù)數(shù)據(jù)的情況,以10萬作為基本的單位。
data['Total']?=?round(data['Total']?/?100000,?4)
進(jìn)行平穩(wěn)性檢驗
import?matplotlib.pyplot?as?plt
plt.rcParams['font.sans-serif']?=?'SimHei'
plt.rcParams['axes.unicode_minus']?=?False
%matplotlib?inline
#?時序圖
plt.figure(figsize=(18,?8),?dpi=256)
data['Total'][:-30].plot()
輸出:

#?自相關(guān)圖
from?statsmodels.graphics.tsaplots?import?plot_acf
plot_acf(data['Total'][:-30])
plt.figure(figsize=(18,?8),?dpi=256)
輸出:

#?偏自相關(guān)圖
from?statsmodels.graphics.tsaplots?import?plot_pacf
plot_pacf(data['Total'][:-30])
plt.figure(figsize=(18,?8),?dpi=256)
輸出:

#?單位跟檢驗
from?statsmodels.tsa.stattools?import?adfuller?as?ADF?
print(ADF(data['Total'][:-30]))
輸出:

這里的p值等于0.347多,大于0.05,屬于不平穩(wěn)序列,需要進(jìn)行差分后,再檢驗是否屬于平穩(wěn)序列。
#?一階差分
D_data?=?data['Total'][:-30].diff().dropna()
print('一階段差分檢驗結(jié)果:',?ADF(D_data))
輸出:

一階差分后的序列,屬于平穩(wěn)序列,這里可以使用差分后平穩(wěn)序列的模型ARIMA進(jìn)行預(yù)測,預(yù)測前還得進(jìn)行白噪聲檢驗。
from?statsmodels.stats.diagnostic?import?acorr_ljungbox
print('白噪聲檢驗結(jié)果:',?acorr_ljungbox(D_data,?lags=1))
輸出:

白噪聲檢驗的p值遠(yuǎn)小于0.05,一階差分后的時間序列屬于平穩(wěn)非白噪聲的時間序列,下面可以利用ARIMA模型進(jìn)行預(yù)測。
from?statsmodels.tsa.arima_model?import?ARIMA
from?datetime?import?datetime
from?itertools?import?product
#?設(shè)置p階,q階范圍
#?product?p,q的所有組合
#?設(shè)置最好的aic為無窮大
#?對范圍內(nèi)的p,q階進(jìn)行模型訓(xùn)練,得到最優(yōu)模型
ps?=?range(0,?5)
qs?=?range(0,?5)
parameters?=?product(ps,?qs)
parameters_list?=?list(parameters)
best_aic?=?float('inf')
results?=?[]
for?param?in?parameters_list:
????try:
????????model?=?ARIMA(data['Total'][:-30],?order=(param[0],?1,?param[1])).fit()
????except?ValueError:
????????print("參數(shù)錯誤:",?param)
????????continue
????aic?=?model.aic
????if?aic?????????best_model?=?model
????????best_aic?=?model.aic
????????best_param?=?param
????results.append([param,?model.aic])
results_table?=?pd.DataFrame(results)
results_table.columns?=?['parameters',?'aic']
print("最優(yōu)模型",?best_model.summary())
輸出:

利用最好的模型進(jìn)行預(yù)測。
best_model.forecast(30)[0]

模型評價:
from?sklearn.metrics?import?mean_absolute_error
#?pred_y?預(yù)測值
#?test_y?實際值
pred_y?=?best_model.forecast(30)[0]
test_y?=?data['Total'][-30:].values
mean_absolute_error(test_y,?pred_y)
輸出:

這里的平均絕對誤差為2.38,這里要根據(jù)實際的業(yè)務(wù)確定誤差閾值。再來進(jìn)行模型的評價。小于閾值的,模型就是稍微好的,大于閾值的,說明模型的準(zhǔn)確率還有待提高,模型還需重新訓(xùn)練等。
畫折線圖,對比下實際和預(yù)測值之間的差距。
plt.figure(figsize=(14,?7),?dpi=256)
plt.plot(data['date1'][-30:],?test_y,?label='實際')
plt.plot(data['date1'][-30:],?pred_y,?label='預(yù)測')
plt.xticks(data['date1'][-30:],?rotation=70)
plt.legend(loc=3)
輸出:

這里可以看出,模型預(yù)測的結(jié)果還是稍微好點的。
4.3 用戶角度
4.3.1 用戶城市分布
10.98%的用戶集中在Agirrie這個城市,用戶居住城市相對較分散。

4.3.2 用戶購買金額,購買次數(shù)前10的用戶
用戶Barry Barrett總購買金額達(dá)到15M以上,消費次數(shù)也達(dá)到了100K以上,屬于高價值的客戶。

4.3.3 復(fù)購率
總體復(fù)購率:
這里是按這份數(shù)據(jù)所在的時間段,計算購買次數(shù)大于2次的用戶,再除于總的用戶數(shù),這里得排除的一個數(shù)據(jù)是用戶Client這里,有一個數(shù)據(jù)是Customer not informed(客戶沒有提供名字的情況),這條數(shù)據(jù)得排除了,所以計算購買次數(shù)大于2的用戶和總用戶數(shù)對應(yīng)減去1,這是個人的想法,實際是得和業(yè)務(wù)溝通,得到實際的計算方法。查看Customer not informed這條數(shù)據(jù):
#?計算每個客戶的購買次數(shù),這里使用了nunique(),統(tǒng)計不同訂單號的個數(shù)
client_data?=?data.groupby('Client').nunique()['Order?Number']
#?重命名列
client_data?=?client_data.reset_index().rename(columns={'Order?Number':?
????????????????????????????????????????????????????????'user_num'})
client_data.sort_values('user_num',?ascending=False)????????????????????????????????????????????????????????

#?總復(fù)購率
print('總復(fù)購率:',
round(
????(len(client_data[client_data['user_num']?>?1])-1)?/
??????(len(client_data)?-?1),?4)?*?100,?"%")
輸出:

該數(shù)據(jù)所在的時間段的總體復(fù)購率達(dá)到了87.91%,用戶黏性較高。
這里再細(xì)分下,看下一個月內(nèi)的復(fù)購的情況。
一個月內(nèi)復(fù)購率
這里的一個月內(nèi)復(fù)購率的定義是:從月初的1號到月底這段時間內(nèi),用戶復(fù)購的比率。
#?這里的銷售時間是datetime格式,增加個輔助列,轉(zhuǎn)換成2017-01這樣的年月顯示
def?parse_year_month(x):
????if?x.month?>=?10:
????????return?str(x.year)?+?"-"?+?str(x.month)
????else:
????????return?str(x.year)?+?"-0"?+?str(x.month)
data['year_month']?=?data['Sale?Date?Time'].apply(parse_year_month)
統(tǒng)計每個月用戶的購買次數(shù)
y_m_data?=?data.groupby(['year_month',
?????????????????????????'Client']).nunique()['Order?Number'].reset_index()
y_m_data
輸出:

每個月的復(fù)購率
#?保存臨時數(shù)據(jù),用于構(gòu)建每月的復(fù)購率的DataFrame
month_list?=?[]
rate_list?=?[]
#?循環(huán)計算每個月的復(fù)購率,這里直接遍歷每個月
for?every_m?in?y_m_data['year_month'].unique():
#?????獲取每個月用戶的購買次數(shù)的數(shù)據(jù)
????temp?=?y_m_data[y_m_data['year_month']?==?every_m]
#???? print(every_m, "復(fù)購率:",
#???????????round((len(temp[temp['Order?Number']?>?1])-1)?/?(len(temp)?-1),4))
????month_list.append(every_m)
#?????選出購買次數(shù)>1的數(shù)據(jù),獲取數(shù)據(jù)的長度(用戶數(shù))-?1?再除以
#?當(dāng)月的總用戶數(shù)?-1?
????rate_list.append(round((len(temp[temp['Order?Number']?>?1])-1)?/?(len(temp)?-1),?4))
#將數(shù)據(jù)轉(zhuǎn)換成DataFrame
t_1?=?{'month':?month_list,?'rate':?rate_list}
rate_data?=?pd.DataFrame(t_1)
rate_data
輸出:

導(dǎo)出數(shù)據(jù),用Excel做可視化:
rate_data.to_excel('./rate_data.xlsx',?index=False)
月復(fù)購率都在66%以上,用戶的黏性較大。

4.3.4 購買次數(shù)的情況
這里只挑選了2018年4月這個月的購買次數(shù)來做分析,其他月份的可以類推。
data_201804?=?y_m_data[y_m_data['year_month']?==?'2018-04']
#重命名Order?Number為購買次數(shù)buy_frequency
data_201804.rename(columns={'Order?Number':?'buy_frequency'},?inplace=True)
data_201804

#?設(shè)置數(shù)據(jù)的區(qū)間
bins?=?[0,?1,?2,?5,?10,?50,?100,?100000]
per_frequency?=?pd.cut(data_201804['buy_frequency'],?bins)
per_frequency.value_counts()
per_frequency.value_counts().plot(kind='bar')

4.3.5 RFM模型分析用戶的價值
這里只針對2018年4月份的用戶價值進(jìn)行分類,其他可以類推。
#?按月份提取每個月用戶的R、F、M值
RFM_data_all?=?data.groupby(['year_month',
?????????????????????????'Client']).agg({'Order?Number':?'nunique',
????????????????????????????????????????'Sale?Date?Time':?'max',
????????????????????????????????????????'Total':?'sum'})
RFM_data_all.reset_index(inplace=True)
#?保存一份數(shù)據(jù),下次直接讀取該數(shù)據(jù)集就可以,省時間
RFM_data_all.to_excel('RFM_data_all.xlsx',?index=False)
#?提取2018年4月份的數(shù)據(jù)
RFM_data_201804??=?RFM_data_all[RFM_data_all['year_month']?==?'2018-04']
RFM_data_201804?????????????????????????????????
輸出:

#?參考時間,這里隨便設(shè)置里2018-05-01?23:59:59,不讓R值為0,這里的R以天作為單位
import?datetime
reference_time?=?datetime.datetime.strptime('2018-05-01?23:59:59',?
????????????????????????????????????????????"%Y-%m-%d?%H:%M:%S")
#?構(gòu)建R指標(biāo)
RFM_data_201804['R']?=?RFM_data_201804['Sale?Date?Time'].apply(lambda?x:?(
????reference_time?-?x).days)
#?重新命名列
RFM_data_201804.rename(columns={'Order?Number':?'F',?'Total':?'M'},?inplace=True)
#?排序查看異常值
RFM_data_201804.sort_values('M',?ascending=False)
輸出:

這里有個異常值,標(biāo)記為客戶沒有提及姓名的,直接刪除處理。
RFM_data_201804.drop(index=26015,?inplace=True)
提取RFM指標(biāo)
RFM_data?=?RFM_data_201804[['R',?'F',?'M']]
數(shù)據(jù)規(guī)范化,進(jìn)行聚類
from?sklearn.preprocessing?import?StandardScaler
from?sklearn.cluster?import?KMeans
#數(shù)據(jù)規(guī)范化
ss??=?StandardScaler()
train?=?ss.fit_transform(RFM_data)
#?模型進(jìn)行訓(xùn)練,這里直接聚類成5類。
kmeans_model?=?KMeans(n_clusters=5)
kmeans_model.fit(train)
#查看聚類中心
test?=?pd.DataFrame(kmeans_model.cluster_centers_,?columns=['R',?'F',?'M'])
test
輸出:

分析:
分群0:R小,F(xiàn)小,M小,這類屬于一般價值客戶。分群1,R大,F(xiàn)小,M小,這類屬于一般發(fā)展客戶。分群2,R小,R大,M大,這類屬于重點保持客戶。分群3、4 這類,R小,F(xiàn)、M大,這類都屬于高價值客戶。
將分群的結(jié)果合并到RFM_data數(shù)據(jù)里看下原數(shù)據(jù)。
RFM_data['sk5_label']?=?kmeans_model.labels_
這里挑出分群3、4的數(shù)據(jù)來看看。
RFM_data[RFM_data['sk5_label']?==?3]
輸出:

分群3的用戶的購買次數(shù)F在670-1300之間,消費金額M在7.7W-18W之間,且R小,屬于高價值客戶。
RFM_data[RFM_data['sk5_label']?==?4]
輸出:

分群4的用戶購買次數(shù)在210-280之間,購買金額在20W以上,這類是屬于高價值客戶。
Tableau實現(xiàn)的客戶分群:

客單價=M/F。這里可以看出群集5的客單價最高,其次是群集3,最低的是群集4。
4.3.6 用戶月留存率
這里統(tǒng)計用戶月存留率是上個月與當(dāng)前月都有購買的用戶的數(shù)量/(除以)上個月的總用戶數(shù)(去重)。類似流失率,這里不同的是都是上月流向下月的,不是1->2->3這樣的流向,而是1->2, 2->3這樣的流向。
#?提取每個月的用戶(去重)
every_month_user?=?data.groupby(['year_month',?
?????????????????????????????????'Client']).nunique()['Order?Number'].reset_index()
every_month_user
輸出:

#?獲取每個月份的列表,循環(huán)遍歷計算上個月與當(dāng)前月的留存率
year_month?=?every_month_user['year_month'].unique()
#?保存月留存率的列表
list_month_rate?=?[]
for?i,?month?in?enumerate(year_month):
#?????計算上個月與當(dāng)前月的留存率
????if?i>=?1:
#?????????獲取當(dāng)前月的用戶(上面groupby已去重)
????????this_month_client?=?every_month_user[every_month_user['year_month']?==?month]['Client']
#????????獲取上個月的用戶(上面groupby已去重)
????????previous_month_client?=?every_month_user[every_month_user['year_month']?==?year_month[i-1]]['Client']
#?????????計算留存率,這里用的是上個月與當(dāng)前月用戶的交集個數(shù)/上個月的用戶數(shù)(去重)
????????rate?=?round(len?(set(this_month_client)?&?set(previous_month_client))
??????????????/?len(previous_month_client),2)
#?????????用列表保存數(shù)據(jù),并構(gòu)建DataFrame用戶繪圖
????????b?=?[month,?rate]
????????list_month_rate.append(b)
#?構(gòu)建DataFrame
rate_data?=?pd.DataFrame(list_month_rate,?columns=['year_month',?'rate'])
rate_data
輸出:

可視化:

結(jié)論:
月的用戶留存率達(dá)到74%以上,用戶黏性高。
4.4 產(chǎn)品角度
4.4.1 銷售額,訂單量前10的銷售產(chǎn)品
產(chǎn)品Special Gasoline、Gasoline汽油類的產(chǎn)品的銷售金額、訂單量位居前列;其次是Diesel Auto Clean這個清潔類的產(chǎn)品。
4.4.2 產(chǎn)品分類(聚類分析)
這里先獲取每個月的產(chǎn)品的成本C,訂單量F,銷售總金額M,這里只挑選了2018年4月一個月的產(chǎn)品數(shù)據(jù)來分析
month_product_data?=?data.groupby(['year_month',?
???????????????????????????????????'Product']).agg({
????'Product?Cost':?'mean',
????'Order?Number':?'nunique',
????'Total':?'sum'
}).reset_index()
#?重命名
month_product_data.rename(columns={'Product?Cost':?'C',?'Order?Number':?'F',?
??????????????????????????????????'Total':?'M'},?inplace=True)
#?導(dǎo)出數(shù)據(jù)到Excel,結(jié)合Tableau一起分析下。
month_product_data.to_excel('./month_product_data.xlsx',?index=False)??????????????????????????????????
#?選擇2018年4月的數(shù)據(jù)
#?這里只取一個月的產(chǎn)品進(jìn)行聚類
month_product_201804?=?month_product_data[month_product_data['year_month']?==?'2018-04']
month_product_201804
輸出:

模型訓(xùn)練,進(jìn)行聚類
#?導(dǎo)入包
from?sklearn.preprocessing?import?StandardScaler
from?sklearn.cluster?import?DBSCAN
ss?=?StandardScaler()
#?獲取需要的數(shù)據(jù)
X?=?month_product_201804[['C',?'F',?'M']]
#?數(shù)據(jù)規(guī)范化
train_X?=?ss.fit_transform(X)
#?設(shè)置聚類數(shù)4個
dbscan_model?=?DBSCAN(min_samples=4)
#?模型訓(xùn)練
dbscan_model.fit(train_X)
#?將聚類的結(jié)果合并到原數(shù)據(jù)集上。
month_product_201804['labels']?=?dbscan_model.labels_
#?查看聚類的分布情況
month_product_201804['labels'].value_counts()
輸出:

這里標(biāo)記為-1的數(shù)據(jù)集都是異常的數(shù)據(jù),查看下。

這里結(jié)合Tableau可視化看下。
這里可以看出模型標(biāo)記出來為-1數(shù)據(jù)的分成兩類。
A類(上圖和下圖截紅框):成本低,訂單量多,購買金額多的,這類屬于重點開發(fā)的產(chǎn)品。
B類:成本高,訂單量少,購買金額少的,這類屬于低價值的產(chǎn)品,應(yīng)該砍掉。

Tableau排除上圖截紅框的一個教特殊的產(chǎn)品再進(jìn)行產(chǎn)品的聚類。
這里的圓圈的大小表示成本C的大小。
針對群集1:
這里利用二分法為訂單量F分為50以下,50以上。針對F為50以下的群集1,這類購買次數(shù)較少,總的銷售金額也在5K以下,這類的產(chǎn)品,可以采取部分下架。針對F為50以上的產(chǎn)品,這類產(chǎn)品購買次數(shù)稍多,采取維持的狀態(tài)。
針對群集2:
這里也利用二分法將其分為銷售金額M在3500以上,和3500以下的。3500以下的這類的產(chǎn)品成本高,且銷售額也在3500以下,購買次數(shù)也低于50,這類產(chǎn)品應(yīng)該采取放棄策略。3500以上的則采取先保持策略,再下一階段再繼續(xù)深入觀察,分析,做進(jìn)一步的決策。
針對群集3:
這類產(chǎn)品的購買次數(shù)F在600以上,銷售金額M也在6k以上,成本C也較小,這類產(chǎn)品采取繼續(xù)擴(kuò)大。
針對群集4:
成本C較小,購買次數(shù)F在200-600之間,銷售金額在10K以上,這類產(chǎn)品屬于重點保持的產(chǎn)品,該類產(chǎn)品應(yīng)給與較大的重視,進(jìn)一步發(fā)揮這類產(chǎn)品的價值。

4.4.3 產(chǎn)品銷售額情況及總體的占比(帕累托最優(yōu))
產(chǎn)品的頭部的效應(yīng)明顯,前三產(chǎn)品的總銷售金額達(dá)到總銷售金額的82%以上,符合二八定律。

4.4.4 產(chǎn)品的成本分布
較大一部分產(chǎn)品的成本在12以下,其次是在12-36區(qū)間,接著是36-95的區(qū)間,95以上的產(chǎn)品較少。

4.4.5 跟目錄下的各個產(chǎn)品數(shù)
Filters產(chǎn)品類別下的產(chǎn)品數(shù)最多,達(dá)到933。其次是839的Chewing Gum And Candy。最少的產(chǎn)品數(shù)的是類別Extinguisher,只有6個。

5 支付方式
近7成的用戶選擇現(xiàn)金支付。

6 總結(jié)
6.1 三年間銷售額達(dá)到了17.8億。
6.2 2017年該連鎖店處于上升期,銷售額、訂單量呈上升狀態(tài),2018、2019年趨于平穩(wěn)。
6.3 該連鎖店的銷售業(yè)績呈現(xiàn)周期性,周一到星期天較高,星期日最低。
6.4 總體復(fù)購率達(dá)到了87.91%,用戶黏性較大。
6.5 月初到月末的復(fù)購率達(dá)到66%以上,用戶的黏性較大。
6.6 用戶月留存率達(dá)到74%以上,老客戶居多。
6.7 產(chǎn)品符合二八分布,前三產(chǎn)品Special Gasoline、Gasoline、Diesel Auto Clean達(dá)到總銷售金額的82%。
6.8 80%的產(chǎn)品的成本在36以下。
6.9 近七成的用戶選擇現(xiàn)金支付。
如果本文對大家有幫助,歡迎點贊、在看、收藏~~~
