1、关于TGI指数
(1)定义:即Target Group Index(目标群体指数),可反映目标群体在特定研究范围(如地理区域、人口统计领域、媒体受众、产品消费者)内的强势或弱势。
(2)公式:TGI指数= [目标群体中具有某一特征的群体所占比例/总体中具有相同特征的群体所占比例]*标准数100
白话理解为针对研究的目标群体,和整体平均水平相比,该指数反映出目标群体的偏好、差异水平等;
举个例子,将某地区15-24岁的人作为目标群体,将去[电影网站A]看电影作为相同特征;若该地区15-24岁的人中,有8.9%的人去过[电影网站A]看电影,而在该地区总体人群中,有6.6%的人去过[电影网站A]看电影,则[电影网站A]在15-24岁人群中的TGI指数是134.9(8.9%/6.6%×100),其数额越大,就表明目标群体吻合度就越强势。
2、注意事项:
(1)TGI指数越大,反映出目标群体的偏好越强,差异性越大;
(2)TGI指数能够显示偏好的强弱,但是在实际应用中一定要注意样本量的大小(若样本量太小,最终的偏好值不具备可信度)
3、实战训练
此实战训练来自于微信公众号-数据不吹牛中的案例。(案例链接:https://mp.weixin.qq.com/s?__biz=MzU5Mjg2OTQ1MA==&mid=2247484211&idx=1&sn=3635f3e3f45cc900a2c17558e78cf099&chksm=fe186216c96feb00adf96094ca2ba098733bd99d5aaef6ac5bae306ad825fd61e49503dac8af&scene=21#wechat_redirect)
实战场景需求:一款客单较高的产品需在某些城市先行试销,需删选出5个高客单偏好较高的城市
其中高客单理解为单次购买大于50元的客户
实战源代码:
import pandas as pd
import numpy as np
df = pd.read_excel('TGI指数案例数据.xlsx')
df.info() #观察数据的整体情况,行列数情况,数值类型,空值情况等
df_user = df.groupby('买家昵称')['实付金额'].mean()#因为有同一买家多次购买的现象,故而计算出平均值以作为客单价
df_user=df_user.reset_index()#换为起始索引,方便下一步合并
df_merge = pd.merge(df_user,df,left_on='买家昵称',right_on='买家昵称',how='left') #最终结果需要筛选城市,所以除买家昵称,客单价外,还需要买家所属的城市信息
df_merge.loc[df_merge['实付金额_x'] > 50,'客单类别'] = '高客单'
df_merge.loc[df_merge['实付金额_x'] > 50,'客单类别'] = '低客单' #区分出高低客单情况
df_tgi = df_merge[['买家昵称','客单类别','省份','城市']]#仅留下后续需要进行处理的数据
#因为整体数据比较清爽,无空值或者格式不统一的情况,数据预处理过程比较轻松,接下面重头戏来啦
result = pd.pivot_table(index=['省份','城市'],cloumns='客单类别',aggfunc='count') #利用数据透视计数除高低客单的数量
tgi = pd.merge(result['买家昵称']['高客单'].reset_index(),result['买家昵称']['低客单'].reset_index(),left_on=['省份','城市'],right_on=['省份','城市'],how='inner') #将数透视的结果合并为一张新表
tgi.dropna(inplace=True,fillna=0) #数据透视后有些城市可能不全存在高低客单,这时候出现的空值我们用0代替
tgi['总人数'] = tgi['高客单'] +tgi['低客单']
tgi['高客单占比'] = tgi['高客单'] /tgi['总人数'] #计算出每个城市的高客单占比
total_percentage = tgi['高客单'].sum()/tgi['总人数'].sum
tgi['高客单指数] = tgi['高客单占比'] /total_percentage *100 #计算出高客单指数
tgi = tgi.loc[tgi['总人数'] >tgi['总人数'].sum(),:] #筛选出平均购买人数大于平均数的城市,保证样本容量
tgi.sort_values(by='高客单指数',ascending=False).head(10) #最后筛选出结果