第10章 案例实战-销售业客户价值数据分析_第1页
第10章 案例实战-销售业客户价值数据分析_第2页
第10章 案例实战-销售业客户价值数据分析_第3页
第10章 案例实战-销售业客户价值数据分析_第4页
第10章 案例实战-销售业客户价值数据分析_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章案例实战——

销售业客户价值数据分析

本章内容10.1销售业客户价值分析意义10.2程序设计思路10.3程序设计步骤10.1销售业客户价值分析意义随着时代的发展,无论是电商平台还是线下零售企业,传统的销售模式已不再适应市场需求,未来销售行业的发展方向将以客户的需求为导向。需求导向的重点是消费者,聚焦正确的客户、提供合适的商品、以最低成本实现触达,实现个性化推荐和交叉销售,实现精准化运营。精准化运营的前提是客户关系管理,而客户关系管理的核心是客户分类。根据经济学帕累托原理,企业中20%的客户贡献了收入的80%,因此在资源有限情况下,对不同类型的客户进行价值分类,尽量获取、留存优质客户,差异化定价,定制化营销策略,才能最大限度地提升企业效益。10.2程序设计思路(1)数据获取本案例使用了Kaggle平台中提供的数据集,该数据集为某零售商店2016年商品销售详细数据,这些数据是由商品销售点通过“扫描”单个商品的条形码获得的,数据包含所销售商品的数量、特点、价值以及价格的详细信息。表10-1数据集属性详情说明属性名属性类型说明Dateobject交易日期。Customer_IDint客户ID。Transaction_IDint交易ID。SKU_CategoryobjectSKU分类号。SKUobjectStockKeepingUnit,商品入库编码,每种不同属性的商品均对应唯一的SKU号。Quantityfloat销售数量。Sales_Amountfloat销售金额(单价*数量)。10.2程序设计思路(2)消费数据分析①获取数据后,首先对数据集进行认识性分析,充分了解数据,如有异常数据,需对数据进行清洗。②清洗完成后,首先从时空维度对数据进行分析,因本数据集不涉及空间数据,因此仅从时间维度进行分析,观察销售淡、旺季规律。③从商品维度进行销售分析,找到销量TOP10、销售金额TOP10,如果数据集中包含利润数据,也可找到盈利的TOP10。④从客户维度进行消费分析,了解每月用户新增、对用户首购行为和最近一次购物行为进行规律分析、根据销售数量和销售金额分析每位客户的消费规律、消费分布分析、购物次数分析等。⑤使用RFM模型及KMeans模型对用户进行分层分析,区分不同价值客户群,制定不同的营销策略和方案。10.3程序设计的步骤1.数据集下载在Kaggle平台中下载scanner_data.csv数据集。2.导入所需第三方库导入本案例所需第三方数据库,包括pandas,numpy,matplotlib的pyplot库,seaborn库,并为后续统计图中能够正确显示中文及符号进行相关设置。10.3程序设计的步骤3.数据探索(1)数据读取df=pd.read_csv('scanner_data.csv',index_col=0)#读取数据,指定第一列为Index(2)数据描述print(df.shape) #显示DataFrame维度信息() #显示DataFrame摘要信息df.head() #显示前5行数据信息10.3程序设计的步骤4.数据清洗(1)重复值检查df.duplicated().sum()#重复值检测结果显示为0,即该数据集无重复记录。(2)缺失值检查df.isnull().sum() #缺失值检测在前述数据描述中,通过()已经可以查看到该数据集各列均为非缺失值,此处运行结果如图10-2所示,可进一步验证各属性数据缺失值个数均为0。10.3程序设计的步骤(3)异常值检查可使用箱型图对数值型数据进行异常值检测,如在该数据集中对Quantity及Sales_Amount绘制箱型图如图10-3所示。#异常值检测plt.figure(figsize=(16,6))plt.subplot(1,2,1) #1行2列子图中子图1sns.boxplot(x=df.Quantity) #为Quantity绘制箱型图plt.subplot(1,2,2) #1行2列子图中子图2sns.boxplot(x=df.Sales_Amount) #为Sales_Amount绘制箱型图plt.show()10.3程序设计的步骤(3)异常值检查10.3程序设计的步骤5.数据预处理df['Date']=pd.to_datetime(df.Date,format='%d/%m/%Y') df['Customer_ID']=df.Customer_ID.astype('str') ()df.set_index('Date',inplace=True)#设置Date为索引df.head()10.3程序设计的步骤6.时间维度销售数据分析与可视化(1)销售金额分析对销售金额分别按日、周、月、季度进行汇总求和,绘制折线图以更好展示分组聚合后的数据如图10-6所示。fig,ax=plt.subplots(2,2,figsize=(16,6))plt.tight_layout(pad=4)ax[0,0].set_title('2016年日销售金额折线图')sales_day=df.groupby('Date')[['Sales_Amount']].sum()sns.lineplot(x=sales_day.index,y=sales_day.Sales_Amount,ax=ax[0,0])ax[0,1].set_title('2016年周销售金额折线图')sales_week=df.resample('W')[['Sales_Amount']].sum()sns.lineplot(x=sales_week.index,y=sales_week.Sales_Amount,ax=ax[0,1])ax[1,0].set_title('2016年月销售金额折线图')sales_month=df.resample('M')[['Sales_Amount']].sum()sns.lineplot(x=sales_month.index,y=sales_month.Sales_Amount,ax=ax[1,0])ax[1,1].set_title('2016年季销售金额折线图')sales_qurater=df.resample('Q')[['Sales_Amount']].sum()sns.lineplot(x=sales_qurater.index,y=sales_qurater.Sales_Amount,ax=ax[1,1])plt.show()10.3程序设计的步骤(2)每月销售数据分析分别对每月销售数量、客户数、交易次数、销售金额进行可视化分析,当然也可以按日、年等进行更多相似分析。图10-7月度销售数据折线图fig,ax=plt.subplots(1,4,figsize=(16,3))ax[0].set_title('2016年每月销售数量折线图')df.resample('M').sum()[['Quantity']].plot(ax=ax[0])ax[1].set_title('2016年每月客户数量折线图')df.resample('M')[['Customer_ID']].nunique().plot(ax=ax[1])ax[2].set_title('2016年每月交易次数折线图')df.resample('M')[['Transaction_ID']].nunique().plot(ax=ax[2])ax[3].set_title('2016年每月销售金额折线图')df.resample('M')[['Sales_Amount']].sum().plot(ax=ax[3])plt.show()10.3程序设计的步骤7.商品维度销售数据分析与可视化(1)年度销售TOP10分析fig,ax=plt.subplots(1,2,figsize=(16,6))ax[0].set_title('2016年度销量冠军商品TOP10')quantity_SKU=df[['SKU','Quantity']].groupby('SKU').sum().sort_values(by='Quantity',ascending=False).head(10)sns.barplot(x=quantity_SKU.index,y=quantity_SKU.Quantity,ax=ax[0])forx,yinenumerate(quantity_SKU.Quantity):ax[0].text(x,y+5,y,ha='center',va='bottom')#增加数据标注ax[1].set_title('2016年度销售金额冠军商品TOP10')sales_amount_SKU=df[['SKU','Sales_Amount']].groupby('SKU').sum().sort_values(by='Sales_Amount',ascending=False).head(10)sns.barplot(x=sales_amount_SKU.index,y=sales_amount_SKU.Sales_Amount,ax=ax[1])forx,yinenumerate(sales_amount_SKU.Sales_Amount):ax[1].text(x,y+5,'%.2f'%y,ha='center',va='bottom')#增加数据标注plt.show()10.3程序设计的步骤8.客户维度销售数据分析与可视化(1)每月新增客户数分析new_customer=df.reset_index().groupby('Customer_ID')[['Date']].min()new_customer['Month']=new_customer.Date.dt.month#增加月份列#统计每月新增用户数,并按月份排序new_customer_month=new_customer[['Month']].value_counts().sort_index()plt.title('2016年每月新增用户数折线图')sns.lineplot(x=range(1,13),y=new_customer_month)plt.show()10.3程序设计的步骤(2)客户最近一次购物时间分析可视化展示客户最后一次购物的月份,并与首购(每月新增用户)数据进行对比。10.3程序设计的步骤last_shopping=df.reset_index().groupby('Customer_ID')[['Date']].max()last_shopping['Month']=last_shopping.Date.dt.monthlast_shopping_month=last_shopping[['Month']].value_counts().sort_index()#统计每月最后一次购物用户数,并按月份排序plt.title('2016年首购及最近消费分布折线图')sns.lineplot(x=range(1,13),y=new_customer_month,label='首购')sns.lineplot(x=range(1,13),y=last_shopping_month,label='最近消费')plt.show()10.3程序设计的步骤(3)客户消费数据分析根据本数据集中属性,可先对每位客户的购物数量及购物金额进行统计,并计算出每位客户购买商品单价的均值,对此进行描述性统计分析,运行结果如图10-11所示。customer_quantity_salesAmount=df.reset_index().groupby('Customer_ID')[['Quantity','Sales_Amount']].sum()#每位客户的购物数量和购物金额customer_quantity_salesAmount['unit_price_mean']=customer_quantity_salesAmount.Sales_Amount/customer_quantity_salesAmount.Quantity#增加客户购买商品“单价的均值”列customer_quantity_salesAmount.describe()g,ax=plt.subplots(1,3,figsize=(16,3))ax[0].set_title('客户购物数量和购物金额分布图')sns.scatterplot(x=customer_quantity_salesAmount.Quantity,y=customer_quantity_salesAmount.Sales_Amount,ax=ax[0])ax[0].grid()ax[1].set_title('客户购物数量分布图')#选择99%的不包含极值的数据进行绘制customer_quantity_salesAmount.query('Quantity<=8.64+3*20.98').Quantity.plot.hist(ax=ax[1])ax[2].set_title('客户购物金额分布图')customer_quantity_salesAmount.query('Sales_Amount<=69.75+3*152.31').Sales_Amount.plot.hist(ax=ax[2])#选择99%的不包含极值的数据进行绘制plt.show()10.3程序设计的步骤(4)客户购物次数分析可对每位客户的购物次数进行分析,了解某客户是仅消费一次的客户,还是多次消费的回头客。对客户购物次数进行如下描述性分析,结果如图10-13所示。transaction_per_customer=df.reset_index().groupby('Customer_ID')[['Transaction_ID']].count()transaction_per_customer.describe()10.3程序设计的步骤plt.title('客户购物次数分布图')transaction_per_customer.Transaction_ID.plot.hist(bins=20)plt.grid()plt.show()可对客户进行进一步购物次数占比分析shopping_prop=transaction_per_customer.Transaction_ID.value_counts(bins=[0,1,10,50,100,228],normalize=True).sort_index()print('购物次数占比:',shopping_prop,sep='\n')print('购物次数累积占比:',shopping_prop.cumsum(),sep='\n')10.3程序设计的步骤9.客户分层分析在销售行业中,对商家而言每个客户因其购买能力及对商品的实际需求不同而具有不同的客户价值,建立客户价值模型可有助于对用户进行分层,以便进行个性化营销策略,获取更大收益。RFM模型是衡量客户价值的经典模型,该模型通过客户的近期购买行为、购物总体频率及购物总金额来描述客户价值。R(Recency):最近一次购物时间与观测结束时间间隔。R值越大,表示最后一次购物时间距现在越久。F(Frequency):购物频率。F值越大,表示客户在观测期内的购物次数越多。M(Monetary):消费总金额。M值越大,表示客户在观测期内的累积购物金额越高。(1)RFM指标构建由于本数据集中最后一次销售记录的时间在2016年12月,因此在本案例中构建RFM模型时,可将观测期的结束时间定为2017年1月1日。RFM_df=df.reset_index().groupby('Customer_ID')[['Date','Transaction_ID','Sales_Amount']].agg({'Date':np.max,'Transaction_ID':np.size,'Sales_Amount':np.sum})RFM_df.rename(columns={'Date':'Recency','Transaction_ID':'Frequency','Sales_Amount':'Monetary'},inplace=True)RFM_df['Recency']=(datetime.datetime(2017,1,1)-RFM_df.Recency)/np.timedelta64(1,'D')RFM_df10.3程序设计的步骤(2)模型数据标准化处理由于所提取出的RFM指标数据的数据范围差别较大,为了消除不同数据量级对后续建模的影响,可先对数据进行标准化处理,标准化结果如图10-17所示。defstdScaler(df):df=(df-df.mean())/df.std()returndfRFM_df2=stdScaler(RFM_df)RFM_df2.head()10.3程序设计的步骤(3)KMeans用户聚类先对数据进行预训练,以期找到最优的聚类质心数。inertias=[]forkinrange(1,11):#k为聚类中心数kmeans=KMeans(n_clusters=k)kmeans.fit(RFM_df2)inertias.append(kmeans.inertia_)#每个样本点到它们最近的簇中心的距离的平方的和,又叫作"簇内平方和"

plt.plot(range(1,11),inertias,marker='o')plt.show()10.3程序设计的步骤kmeans_mdl=KMeans(n_clusters=3,max_iter=1000,random_state=1024)kmeans_mdl.fit(RFM_df2)RFM_df2['Label']=kmeans_mdl.labels_#为用户标注聚类标签RFM_df2.head(10)#注:每次聚类结果的Label值可能不同10.3程序设计的步骤(4)聚类结果分析对上述用户聚类结果进行特征分析,可分别为各群体用户分别绘制R、F、M箱型图,观察细分特征,判断其所属客户价值。fig,ax=plt.subplots(1,3,figsiz

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论