目标用户偏好指数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 os

os.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()

打印结果

<class 'pandas.core.frame.DataFrame'>
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	000013.500	低客单
6	000979794.500	高客单
7	000xyx0	99.250	高客单
8	000米粒儿米粒0	24.500	低客单
9	0055679618	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)

 

打印结果

省份	城市	高客单	低客单	总人数	高客单占比	高客单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 os

os.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_tgi
    
def 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:一只阿木木

 

posted on 2020-03-03 18:00  一只阿木木  阅读(1766)  评论(0编辑  收藏  举报