zoukankan      html  css  js  c++  java
  • 目标用户偏好指数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:一只阿木木

  • 相关阅读:
    在Windows环境中使用版本管理工具Git [转]
    poj3630 Phone List **
    UVa10382 Watering Grass **
    软件项目计划书格式 [转]
    POI2001 Ants and the ladybug ***
    RMQ+1/1算法 [转]
    poj3264 Balanced Lineup *
    Windows Server 2003 出现的Service Unavailable怎么办?
    单车环佛山一环
    天凉了,大家多穿衣服
  • 原文地址:https://www.cnblogs.com/yizhiamumu/p/12403709.html
Copyright © 2011-2022 走看看