分群思维(三)基于帕累托模型的渠道分类

分群思维(三)基于帕累托模型的渠道分类

小O:小H,公司的收入渠道越来越多,而且质量也参差不齐。什么方法可以简单的依据收入对渠道进行分类啊

小H:可以依据帕累托分析进行分类,一般地说,20%的头部客户往往能产生80%的效益。因此按收入倒序选取累计收益80%的位置,对渠道进行区分即可。

帕累托在处理长尾分布的数据十分有效,接下来我们进行下简单的模拟展示。

Python模拟

帕累托分类

import faker
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
%matplotlib inline

# 初始化设置
sns.set(style="ticks")
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 生成渠道销售随机数
f = faker.Faker(locale='zh-CN')
size = 20
channel = [f.unique.company_prefix() for i in range(size)]
    
sales = [round(x) for x in np.random.pareto(a=1, size=size)*10000]
df = pd.DataFrame({'channel':channel, 'sales':sales}) 
df = df.sort_values(by='sales', ascending=False).reset_index(drop=True)
df['cumsum_sales'] = df['sales'].cumsum()
df['cumsum_sales_rate'] = df['cumsum_sales']/df['sales'].sum()
def pareto_class(df):
    df = df.copy()
    df['pareto_class']=''
    for index, row in df.iterrows():
        if index<=point_80:
            df.at[index, 'pareto_class']='high'
        else:
            df.at[index, 'pareto_class']='low'
    return df
# 计算2、8分隔点
point_80_name = df[df['cumsum_sales_rate']>=0.8].iloc[0,0]
point_80 = df[df['cumsum_sales_rate']>=0.8].index[0]
df = pareto_class(df)
df

image-20230206151451918

#绘制基础图层
fig, ax = plt.subplots(figsize=(12,8))
ax.set_title('pareto', fontsize=16)
#第一个图,柱状图
ax1 = sns.barplot(x='channel', y = 'sales', data = df, color=sns.xkcd_rgb['windows blue'])
ax1.set_xlabel('channel', fontsize=16)
ax1.set_ylabel('sales', fontsize=16)
# sns.despine(ax=ax1) # 剔除右上边框
#第二个图,点线图
ax2 = ax1.twinx() # 共享x轴
ax2 = sns.pointplot(x='channel', y='cumsum_sales_rate', data = df, ci=None, color=sns.xkcd_rgb['orangeish'])
ax2.set_ylabel('cumsum_rate', fontsize=16)
ax2.set(ylim=(0,min(ax2.get_ylim()[1]+0.05,1)))
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0)) # 将纵坐标格式转化为百分比形式
# sns.despine(ax=ax2) # 剔除右上边框
# 红色虚线划分区域
ax2.axvline(point_80,color='r',linestyle="--",alpha=0.8)  #画红色的虚线
ax2.text(point_80-0.2,df['cumsum_sales_rate'][point_80]-0.05,'累计占比为:%.1f%%' % (df['cumsum_sales_rate'][point_80]*100), color = 'r') ##在图上写文本

plt.show()

output_6_0

ABC分类

有时候按照二八原则分成两类显得过于单薄,可以在帕累托的基础上分为三类即ABC分类法,【A:0~80%,B:80%-90%,C:90~100%】

def abc_class(df):
    df = df.copy()
    df['abc_class']=''
    for index, row in df.iterrows():
        if index<=point_80:
            df.at[index, 'abc_class']='A'
        elif index<=point_90:
            df.at[index, 'abc_class']='B'
        else:
            df.at[index, 'abc_class']='C'
    return df
# 计算ABC分隔点
point_80_name = df[df['cumsum_sales_rate']>=0.8].iloc[0,0]
point_80 = df[df['cumsum_sales_rate']>=0.8].index[0]
point_90_name = df[df['cumsum_sales_rate']>=0.9].iloc[0,0]
point_90 = df[df['cumsum_sales_rate']>=0.9].index[0]
df = abc_class(df)
df

image-20230206151515605

#绘制基础图层
fig, ax = plt.subplots(figsize=(12,8))
ax.set_title('ABC', fontsize=16)
#第一个图,柱状图
ax1 = sns.barplot(x='channel', y = 'sales', data = df, color=sns.xkcd_rgb['windows blue'])
ax1.set_xlabel('channel', fontsize=16)
ax1.set_ylabel('sales', fontsize=16)
# sns.despine(ax=ax1) # 剔除右上边框
#第二个图,点线图
ax2 = ax1.twinx() # 共享x轴
ax2 = sns.pointplot(x='channel', y='cumsum_sales_rate', data = df, ci=None, color=sns.xkcd_rgb['orangeish'])
ax2.set_ylabel('cumsum_rate', fontsize=16)
ax2.set(ylim=(0,min(ax2.get_ylim()[1]+0.05,1)))
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0)) # 将纵坐标格式转化为百分比形式
# sns.despine(ax=ax2) # 剔除右上边框
# 红色虚线划分区域
ax2.axvline(point_80,color='r',linestyle="--",alpha=0.8)  #画红色的虚线
ax2.text(point_80-0.2,df['cumsum_sales_rate'][point_80]-0.05,'累计占比为:%.1f%%' % (df['cumsum_sales_rate'][point_80]*100), color = 'r') ##在图上写文本
ax2.axvline(point_90,color='r',linestyle="--",alpha=0.8)  #画红色的虚线
ax2.text(point_90-0.2,df['cumsum_sales_rate'][point_90]-0.05,'累计占比为:%.1f%%' % (df['cumsum_sales_rate'][point_90]*100), color = 'r') ##在图上写文本

plt.show()

output_9_0

应用

一般对于具有长尾分布的一维数据,都可以采用帕累托或者ABC分类法。例如各渠道的流量、各产品的收入等。

总结

前面我分享了基于RFM的用户分群、基于波士顿矩阵的产品分类,结合本文基于帕累托模型的渠道分类。有没有发现和电商的经典【人货场模型】很接近,人即用户,货即产品,场即渠道。

这里就浅谈一下【人货场模型】,其核心是对三个核心对象【人、产品、渠道】的分析。除了工业上的一些数据挖掘方法,也可以依据简单的业务模型进行分析,即这几期提到的几个分群方法。因此你们可以发现,在做精细化的业务运营时,分群思维是多么的重要了~

共勉~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值