用户偏好分析-筛选5个有高客单单价偏好的城市

目录

TGI

导入数据

求每个用户的平均实付金额

增加一列显示客单价类别

求每个城市 不同客单价类别的人数

计算总人数,高客单价占比

删除空值

统计总人数中高客单人群

计算TGI的值

用总人数的平均值作为阈值,只保留人数大于平均值的城市的前5名


我们常说的用户偏好分析是一种分析方向,它基于用户属性和行为等数据,可以分析用户对于某些产品、服务或特征的喜好程度。通过用户偏好分析,品牌可以更好地了解目标客户群体的需求和行为特点,从而制定契合度更高的产品策略、宣传策略等。

TGI是一种衡量和对比不同用户群体偏好程度的方法,具有逻辑清晰、计算便捷的特点,被广泛应用于各类用户偏好分析之中,而且效果都还不错。

TGI

TGI = 目标群体中具有某一特征的群体所占比列 / 总体中具有相同特征的群体所占比例 * 100

用来反映目标群体在特定研究范围内强势或者弱势的程度. 

假设我们要研究A公司的脱发TGI,则对应的3个核心要素如下: 

  • 某一特征:我们想要分析的某种行为或者状态,这里是脱发或者受脱发困扰的状态。

  • 总体:我们研究的所有对象,即A公司所有人。

  • 目标群体:总体中我们感兴趣的一个分组。

假设我们关注的分组是数据部,那么目标群体就是数据部。

  • TGI公式中的分子“目标群体中具有某一特征的群体所占比例”可以理解为“数据部脱发人数占数据部的比例”

    • 假设数据部有15人,其中有9人受脱发困扰,那么数据部脱发人数占比就是9/15,即60%。

  • 分母“总体中具有相同特征的群体所占比例”,等同于“全公司受脱发困扰人数占公司总人数的比例”。

    • 假设公司共500人,有120人受脱发困扰,那么这个比例就是24%。

  • 数据部脱发TGI为 60% / 24% × 100=250。其他部门脱发TGI的计算逻辑是一样的,为本部门脱发人数占比/公司脱发人数占比×100。

TGI具体数值是围绕100这个值来解读的:

  • TGI=100,表示目标群体和总体在某特征或行为上的表现相同。

  • TGI>100,表示目标群体在某特征或行为上的表现高于总体,具有较高的偏好程度,数值越大偏好越强。

  • TGI<100,表示目标群体在某特征或行为上的表现低于总体,具有较低的偏好程度,数值越小偏好越弱。

刚才的例子中,数据部脱发TGI是250,远远高于100,看来在该公司做数据工作的人脱发风险较高。

导入数据

import pandas as pd

# 1 加载数据
df = pd.read_excel("../data/j_PreferenceAnalysis.xlsx")
print(df.info())
print('---------------------------')
df.head()

就我们产品线和历史数据来看,单次购买超过50元的就算高客单的客户了

对应TGI计算的三个核心要素分别如下。

  • 特征:高客单,即客户单次购买超过50元。

  • 目标群体:各个城市,这里我们可以分别计算出所有城市用户的高客单价偏好。

  • 总体:计算涉及的所有用户。

求每个用户的平均实付金额

# 2 求每个用户的平均实付金额
# 2.1 求每个用户的平均实付金额 gb_user
gb_user = df.groupby(['省份', '城市', '用户ID'])['实付金额'].mean().reset_index()

# 2.2 起别名 '省份', '城市', '用户ID', '平均每次支付金额'
gb_user.columns = ['省份', '城市', '用户ID', '平均每次支付金额']

gb_user.head()

增加一列显示客单价类别

# 3 增加一列显示客单价类别
# 3.1 方式一
# def get_kdj(x):
#     if x > 50:
#         return "高客单价"
#     else:
#         return "低客单价"
# 
# gb_user['客单价类型'] = gb_user['平均每次支付金额'].apply(get_kdj)
# 
# gb_user.head()

# 3.2 方式二
gb_user['客单价类别'] = gb_user['平均每次支付金额'].apply(lambda x: "高客单价" if x>50 else "低客单价")
gb_user.head()

求每个城市 不同客单价类别的人数

# 4 求每个城市 不同客单价类别的人数
# 4.1 先筛选出需要的列 "省份", "城市", "用户ID", "客单价类别"
gb_user = gb_user[["省份", "城市", "用户ID", "客单价类别"]]

# 4.2 使用透视表 求每个城市 不同客单价类别的人数
tgi = pd.pivot_table(data=gb_user, index=["省份", "城市"], columns="客单价类别", aggfunc="count").reset_index()

tgi.head()

计算总人数,高客单价占比

# 5 计算 总人数,高客单价占比
# 5.1 求 总人数
# gb_user['用户ID']['高客单价']
tgi['总人数'] = tgi['用户ID']['高客单价'] + tgi['用户ID']['低客单价']

# 5.2 求 高客单价占比
tgi['高客单价占比'] = tgi['用户ID']['高客单价'] / tgi['总人数']
tgi

删除空值

# 6 删除空值
tgi.dropna()

统计总人数中高客单人群

# 7 统计总人数中高客单人群的比例 = 高客单价总人数 / 总人数
total_percent = tgi['用户ID']['高客单价'].sum() / tgi['总人数'].sum()

total_percent

计算TGI的值

# 8 计算 TGI 的值
# 8.1 求 高客单价TGI = 局部占比 / 整体占比 * 100
tgi['高客单价TGI'] = tgi['高客单价占比'] / total_percent * 100

# 8.2 排序 按 高客单价TGI
tgi.sort_values("高客单价TGI", ascending=False).head()

用总人数的平均值作为阈值,只保留人数大于平均值的城市的前5名

TGI能够显示偏好的强弱,但很容易让人忽略具体的样本量大小,而小样本量往往意味着波动极大,一不小心TGI就飙升到前面,这是需要格外注意的

# 用总人数的平均值作为阈值,只保留总人数大于平均值的城市
tgi[tgi['总人数']>tgi['总人数'].mean()].sort_values("高客单价TGI", ascending=False).head()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值