前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分群思维(三)基于帕累托模型的渠道分类

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

作者头像
HsuHeinrich
发布2023-03-29 13:52:49
4600
发布2023-03-29 13:52:49
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich

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

小O:小H,公司的收入渠道越来越多,而且质量也参差不齐。什么方法可以简单的依据收入对渠道进行分类啊 小H:可以依据帕累托分析进行分类,一般地说,20%的头部客户往往能产生80%的效益。因此按收入倒序选取累计收益80%的位置,对渠道进行区分即可。

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

Python模拟

帕累托分类

代码语言:javascript
复制
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 # 用来正常显示负号
代码语言:javascript
复制
# 生成渠道销售随机数
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()
代码语言:javascript
复制
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
代码语言:javascript
复制
# 计算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

代码语言:javascript
复制
#绘制基础图层
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%】

代码语言:javascript
复制
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
代码语言:javascript
复制
# 计算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

代码语言:javascript
复制
#绘制基础图层
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的用户分群、基于波士顿矩阵的产品分类,结合本文基于帕累托模型的渠道分类。有没有发现和电商的经典【人货场模型】很接近,人即用户,货即产品,场即渠道。

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

共勉~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分群思维(三)基于帕累托模型的渠道分类
    • Python模拟
      • 帕累托分类
      • ABC分类
    • 应用
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档