目標用戶偏好指數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 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)
打印結果
省份 城市 高客單 低客單 總人數 高客單佔比 高客單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