目标用户偏好指数Target|目标用户偏好指数Target Group Index分析
目标用户偏好指数Target Group Index分析
TGI指数,全称Target Group Index,可以反映目标群体在特定研究范围内强势或者弱势。
TGI指数计算公式 = 目标群体中具有某一特征的群体所占比例 / 总体中具有相同特征的群体所占比例 * 标准数100
TGI指数大于100,代表着某类用户更具有相应的倾向或者偏好,数值越大则倾向和偏好越强。示例 假设我们要研究A公司脱发TGI指数:
某一特征,就是我们想要分析的某种行为或者状态,这里是脱发(或者说受脱发困扰) 总体,是我们研究的所有对象,即A公司所有人 目标群体,是总体中我们感兴趣的一个分组,假设我们关注的分组是数据部,那目标群体就是数据部
于是乎,公式中分子“目标群体中具有某一特征的群体所占比例”可以理解为“数据部脱发人数占数据部的比例”,假设数据部有15个人,有9个人受脱发困扰,那数据部脱发人数占比就是9/15,等于60%。
而分母“总体中具有相同特征的群体所占比例”,等同于“全公司受脱发困扰人数占公司总人数的比例”,假设公司一共500人,有120人受脱发困扰,那这个比例是24%。
所以,数据部脱发TGI指数,可以用60% / 24% * 100 = 250,其他部门脱发TGI指数计算逻辑是一样的,用本部门脱发人数占比 / 公司脱发人数占比 * 100即可。
开发环境:jupyter Notebook, python 3.6
一:数据概览
import pandas as pd import numpy as np import osos.chdir('F:\\50mat')df = pd.read_excel('TGI指数案例数据.xlsx.xlsx') df.head()
打印结果
品牌名称 买家昵称 付款日期 订单状态 实付金额 邮费 省份 城市 购买数量 0 一只阿木木 做快淘饭 2019-04-18 00:03:00 交易成功 22.32 0 北京 北京市 1 1 一只阿木木 作自有世祟 2019-02-17 00:03:51 交易成功 87.00 0 上海 上海市 1 2 一只阿木木 作雪白室 2019-04-18 00:01:43 交易成功 97.66 0 福建省 福州市 2 3 一只阿木木 作美女购物主 2019-01-11 23:35:01 交易成功 37.23 0 河南省 安阳市 3 4 一只阿木木 作美女购物主 2019-02-18 14:16:03 交易成功 29.50 0 河南省 安阳市 2
观察数据的类型和缺失情况:
df.info()
打印结果
RangeIndex: 57664 entries, 0 to 57663 Data columns (total 9 columns): 品牌名称 57664 non-null object 买家昵称 57664 non-null object 付款日期 57664 non-null datetime64[ns] 订单状态 57664 non-null object 实付金额 57664 non-null float64 邮费 57664 non-null int64 省份 57664 non-null object 城市 57664 non-null object 购买数量 57664 non-null int64 dtypes: datetime64[ns](1), float64(1), int64(2), object(5) memory usage: 2.9+ MB
二:数据清洗
def if_high(x): if x > 50: return '高客单' else: return '低客单'gp_user = df.groupby('买家昵称')['实付金额'].mean().reset_index() gp_user['客单类型'] = gp_user['实付金额'].apply(if_high) gp_user.head(10)
打印结果
买家昵称 实付金额 客单类型
0 .blue_ram 49.450 低客单 1 .blue_ram1 491.450 高客单 2 .christiny 22.000 低客单 3 .willn1 34.570 低客单 4 .托托m 37.475 低客单 5 0000妮 13.500 低客单 6 0009797王 94.500 高客单 7 000xyx0 99.250 高客单 8 000米粒儿米粒0 24.500 低客单 9 00556旭79618 23.860 低客单
匹配城市,合并数据
# 去重 df_dup = df.loc[df.duplicated('买家昵称') == False,:]#合并 df_merge = pd.merge(gp_user, df_dup, left_on = '买家昵称', right_on = '买家昵称', how = 'left') df_merge.head()
高客单用户指数计算
# 高客单 TG 指数计算
df_merge = df_merge[['买家昵称', '客单类型', '省份', '城市']]result = pd.pivot_table(df_merge, index = ['省份', '城市'], columns = '客单类型', aggfunc = 'count') result.head()
打印结果
买家昵称
客单类型 低客单 高客单
省份 城市 上海 上海市 2818.0 2375.0 云南省 临沧市 3.0 2.0 丽江市 1.0 3.0 保山市 6.0 2.0 大理白族自治州 9.0 8.0
三:构建用户指数
result['买家昵称']['高客单'].reset_index().head()
打印结果
省份 城市 高客单
0 上海 上海市 2375.0 1 云南省 临沧市 2.0 2 云南省 丽江市 3.0 3 云南省 保山市 2.0 4 云南省 大理白族自治州 8.0
用户合并
# 高客单与低客单用户合并 tgi = pd.merge(result['买家昵称']['高客单'].reset_index(), result['买家昵称']['低客单'].reset_index(), left_on = ['省份', '城市'], right_on = ['省份', '城市'], how = 'inner') tgi['总人数'] = tgi['高客单'] + tgi['低客单'] tgi['高客单占比'] = tgi['高客单'] / tgi['总人数'] tgi.head()
打印结果
省份 城市 高客单 低客单 总人数 高客单占比 0 上海 上海市 2375.0 2818.0 5193.0 0.457346 1 云南省 临沧市 2.0 3.0 5.0 0.400000 2 云南省 丽江市 3.0 1.0 4.0 0.750000 3 云南省 保山市 2.0 6.0 8.0 0.250000 4 云南省 大理白族自治州 8.0 9.0 17.0 0.470588
去除空值
total_percentage = tgi['高客单'].sum() / tgi['总人数'].sum() total_percentage
打印结果
0.41537333024476875
四:目标用户指数计算
# tgi 指数计算, 并排序tgi['高客单tgi指数'] = tgi['高客单占比'] / total_percentage * 100 tgi = tgi.sort_values('高客单tgi指数', ascending = False) tgi.head(10)
打印结果
省份 城市 高客单 低客单 总人数 高客单占比 高客单tgi指数 149 新疆维吾尔自治区 哈密市 4.0 1.0 5.0 0.800000 192.597825 152 新疆维吾尔自治区 巴音郭楞蒙古自治州 10.0 3.0 13.0 0.769231 185.190216 2 云南省 丽江市 3.0 1.0 4.0 0.750000 180.560461 277 甘肃省 白银市 3.0 1.0 4.0 0.750000 180.560461 34 吉林省 辽源市 2.0 1.0 3.0 0.666667 160.498188 44 四川省 广安市 6.0 3.0 9.0 0.666667 160.498188 136 广西壮族自治区 河池市 4.0 2.0 6.0 0.666667 160.498188 25 内蒙古自治区 锡林郭勒盟 2.0 1.0 3.0 0.666667 160.498188 343 黑龙江省 鹤岗市 2.0 1.0 3.0 0.666667 160.498188 97 山西省 临汾市 9.0 5.0 14.0 0.642857 154.766109
# 保留总人数大于平均值的城市tgi.loc[tgi['总人数'] > tgi['总人数'].mean(), :].head(10)
【目标用户偏好指数Target|目标用户偏好指数Target Group Index分析】
打印结果
省份 城市 高客单 低客单 总人数 高客单占比 高客单tgi指数 287 福建省 福州市 145.0 135.0 280.0 0.517857 124.672699 124 广东省 珠海市 49.0 52.0 101.0 0.485149 116.798186 27 北京 北京市 1203.0 1298.0 2501.0 0.481008 115.801271 283 福建省 厦门市 105.0 118.0 223.0 0.470852 113.356343 111 广东省 佛山市 118.0 135.0 253.0 0.466403 112.285293 173 江西省 南昌市 63.0 73.0 136.0 0.463235 111.522638 46 四川省 成都市 287.0 334.0 621.0 0.462158 111.263236 0 上海 上海市 2375.0 2818.0 5193.0 0.457346 110.104909 164 江苏省 无锡市 135.0 162.0 297.0 0.454545 109.430582 120 广东省 深圳市 438.0 528.0 966.0 0.453416 109.158705
你从结果中发现了什么呢?
七:数据分析模型
# 目标用户偏好指数Target Group Index分析import pandas as pd import numpy as np import osos.chdir('F:\\50mat')def get_rfm(name): # 一:数据概览 df = pd.read_excel('TGI指数案例数据.xlsx')gp_user = df.groupby('买家昵称')['实付金额'].mean().reset_index() gp_user['客单类型'] = gp_user['实付金额'].apply(if_high)# 二:数据清洗 df_dup = df.loc[df.duplicated('买家昵称') == False,:] #合并 df_merge = pd.merge(gp_user, df_dup, left_on = '买家昵称', right_on = '买家昵称', how = 'left')# 三:构建用户指数 # 高客单 TG 计算 df_merge = df_merge[['买家昵称', '客单类型', '省份', '城市']] result = pd.pivot_table(df_merge, index = ['省份', '城市'], columns = '客单类型', aggfunc = 'count')# 高客单与低客单用户合并 tgi = pd.merge(result['买家昵称']['高客单'].reset_index(), result['买家昵称']['低客单'].reset_index(), left_on = ['省份', '城市'], right_on = ['省份', '城市'], how = 'inner')# 构建分子 tgi['总人数'] = tgi['高客单'] + tgi['低客单'] tgi['高客单占比'] = tgi['高客单'] / tgi['总人数'] # 高客单和低客单都有空值,应删除 tgi = tgi.dropna()# 构建分母 total_percentage = tgi['高客单'].sum() / tgi['总人数'].sum()# 四:TGI 指数计算, 并排序 tgi['高客单TGI指数'] = tgi['高客单占比'] / total_percentage * 100 tgi = tgi.sort_values('高客单tgi指数', ascending = False)# 保留总人数大于平均值的城市 result_tgi = tgi.loc[tgi['总人数'] > tgi['总人数'].mean(), :] return result_tgidef if_high(x): if x > 50: return '高客单' else: return '低客单'res = get_rfm(name = 'TGI指数案例数据.xlsx') res
打印结果
省份 城市 高客单 低客单 总人数 高客单占比 高客单tgi指数 287 福建省 福州市 145.0 135.0 280.0 0.517857 124.672699 124 广东省 珠海市 49.0 52.0 101.0 0.485149 116.798186 27 北京 北京市 1203.0 1298.0 2501.0 0.481008 115.801271 283 福建省 厦门市 105.0 118.0 223.0 0.470852 113.356343 111 广东省 佛山市 118.0 135.0 253.0 0.466403 112.285293 173 江西省 南昌市 63.0 73.0 136.0 0.463235 111.522638 46 四川省 成都市 287.0 334.0 621.0 0.462158 111.263236 0 上海 上海市 2375.0 2818.0 5193.0 0.457346 110.104909 164 江苏省 无锡市 135.0 162.0 297.0 0.454545 109.430582 120 广东省 深圳市 438.0 528.0 966.0 0.453416 109.158705 112 广东省 广州市 535.0 654.0 1189.0 0.449958 108.326153 216 浙江省 温州市 100.0 124.0 224.0 0.446429 107.476465 215 浙江省 杭州市 318.0 396.0 714.0 0.445378 107.223579 170 江苏省 镇江市 39.0 50.0 89.0 0.438202 105.496000 285 福建省 泉州市 57.0 77.0 134.0 0.425373 102.407426 244 湖北省 武汉市 275.0 373.0 648.0 0.424383 102.168985 267 湖南省 长沙市 108.0 149.0 257.0 0.420233 101.170064 87 山东省 济南市 80.0 111.0 191.0 0.418848 100.836558 159 江苏省 南通市 61.0 85.0 146.0 0.417808 100.586193 214 浙江省 宁波市 121.0 169.0 290.0 0.417241 100.449728 7 云南省 昆明市 71.0 100.0 171.0 0.415205 99.959398 306 辽宁省 大连市 94.0 133.0 227.0 0.414097 99.692707 212 浙江省 台州市 45.0 65.0 110.0 0.409091 98.487524 221 浙江省 金华市 51.0 74.0 125.0 0.408000 98.224891 130 广西壮族自治区 南宁市 54.0 79.0 133.0 0.406015 97.747016 158 江苏省 南京市 235.0 354.0 589.0 0.398981 96.053669 100 山西省 太原市 65.0 99.0 164.0 0.396341 95.418130 337 黑龙江省 哈尔滨市 85.0 132.0 217.0 0.391705 94.301930 113 广东省 惠州市 36.0 56.0 92.0 0.391304 94.205458 213 浙江省 嘉兴市 59.0 93.0 152.0 0.388158 93.447958 310 辽宁省 沈阳市 113.0 180.0 293.0 0.385666 92.847928 58 天津 天津市 203.0 335.0 538.0 0.377323 90.839588 161 江苏省 常州市 62.0 105.0 167.0 0.371257 89.379230 299 贵州省 贵阳市 47.0 80.0 127.0 0.370079 89.095451 168 江苏省 苏州市 183.0 312.0 495.0 0.369697 89.003540 66 安徽省 合肥市 76.0 131.0 207.0 0.367150 88.390306 328 陕西省 西安市 111.0 200.0 311.0 0.356913 85.925879 36 吉林省 长春市 49.0 89.0 138.0 0.355072 85.482730 319 重庆 重庆市 161.0 298.0 459.0 0.350763 84.445125 188 河北省 石家庄市 49.0 92.0 141.0 0.347518 83.663949 109 广东省 中山市 29.0 56.0 85.0 0.341176 82.137308 96 山东省 青岛市 90.0 174.0 264.0 0.340909 82.072937 218 浙江省 绍兴市 46.0 89.0 135.0 0.340741 82.032407 116 广东省 汕头市 31.0 60.0 91.0 0.340659 82.012810 208 河南省 郑州市 78.0 159.0 237.0 0.329114 79.233282 108 广东省 东莞市 87.0 197.0 284.0 0.306338 73.750047 92 山东省 烟台市 24.0 76.0 100.0 0.240000 57.779348
By:一只阿木木
推荐阅读
- 2018-02-04第五周周检视
- Identity|Identity Server 4使用OpenID Connect添加用户身份验证(三)
- 笔记|Linux笔记3(用户权限类,搜索查找类,压缩解压类,磁盘管理类,进程管理类,系统定时任务)
- Zabbix|Zabbix5.0配置微信单用户告警
- win10如何切换到Administrator登录用户
- linux|如何进行mysql下的严格模式修改,使得使用插入用户表方式添加新用户成功
- 目标跟踪相关知识总结
- Go语言WEB框架使用说明(使用拦截器验证用户的登录状态)
- 投稿|2022证券投资人群洞察:活跃用户1.1亿,TOP3APP合计用户占比过半,51岁以上人群占20.5%
- 【用户文章】P4合并实践指南之实例拆解Resolve