第一集影片底加 (ctrl + click)
善用商業數據分析的工具和技巧,光靠一份最簡單的交易紀錄(只有顧客ID、交易日期和交易金額三個欄位),我們就可以做一系列很深入、很有價值的顧客價值分析和行銷策略規劃,包括:
從這一些分析我們可以看到公司主要的營收和獲利的重要來源,我們也可以看到這一些產生獲利的群組是不是有成長或者衰退的趨勢;據此我們可以設定行銷的重點,決定行銷的策略,和規劃行銷的工具。除了上述的敘述統計、集群分析、和資料視覺化之外,我們還可以利用這些簡單的交易紀錄:
利用這一些預測我們就可以進行全面客製化的:
X = read.table(
'data/purchases.txt', header=FALSE, sep='\t', stringsAsFactors=F)
names(X) = c('cid','amount','date')
X$date = as.Date(X$date)
summary(X) # 交易次數 51243
cid amount date
Min. : 10 Min. : 5.0 Min. :2005-01-02
1st Qu.: 57720 1st Qu.: 25.0 1st Qu.:2009-01-17
Median :102440 Median : 30.0 Median :2011-11-23
Mean :108935 Mean : 62.3 Mean :2011-07-14
3rd Qu.:160525 3rd Qu.: 60.0 3rd Qu.:2013-12-29
Max. :264200 Max. :4500.0 Max. :2015-12-31
在使用read.table時,R會自動將字串string辨認成factor,用stringsAsFactors = F代表,在輸入數據時,遇到字串不會將它轉換成factor,而是保留下原本的字串形式(string)。
例如:在這份資料中,日期(如:2005-01-02)原本是字串String,運用stringsAsFactors = F,可以將它保留字串的資料型態,也就是將它轉換為R裡面的時間日期格式。
將整份資料以“X”命名儲存,從交易時間2005年到2015年,交易筆數51243,十年來看,這間店的資料筆數並不算太多,算是一間小雜貨店。
[1] 18417
A = X %>%
mutate(days = as.integer(as.Date("2016-01-01") - date)) %>%
group_by(cid) %>% summarise(
recent = min(days), # 最近購買距今天數
# 選days裡面最小的
freq = n(), # 購買次數
money = mean(amount), # 平均購買金額
senior = max(days), # 第一次購買距今天數
# 選"天數"裡面最大的
since = min(date) # 第一次購買日期#看它的"日期""
) %>% data.frame
cid recent freq money
Min. : 10 Min. : 1 Min. : 1.00 Min. : 5.0
1st Qu.: 81990 1st Qu.: 244 1st Qu.: 1.00 1st Qu.: 21.7
Median :136430 Median :1070 Median : 2.00 Median : 30.0
Mean :137574 Mean :1253 Mean : 2.78 Mean : 57.8
3rd Qu.:195100 3rd Qu.:2130 3rd Qu.: 3.00 3rd Qu.: 50.0
Max. :264200 Max. :4014 Max. :45.00 Max. :4500.0
senior since
Min. : 1 Min. :2005-01-02
1st Qu.: 988 1st Qu.:2007-10-23
Median :2087 Median :2010-04-15
Mean :1984 Mean :2010-07-26
3rd Qu.:2992 3rd Qu.:2013-04-18
Max. :4016 Max. :2015-12-31
p0 = par(cex=0.8, mfrow=c(2,2), mar=c(3,3,4,2))
hist(A$recent,20,main="recency",ylab="",xlab="")
hist(pmin(A$freq, 10),0:10,main="frequency",ylab="",xlab="")
hist(A$senior,20,main="seniority",ylab="",xlab="")
hist(log(A$money,10),main="log(money)",ylab="",xlab="")
圖形與變數解析:
recency:最近購買距今天數。
seniority:高起來的地方,代表在當時吸收很多顧客。
frequency:顧客在限定時間內的購買次數。
log(money):money代表消費金額,或客單價。
1 2 3 4 5 6 7 8 9 10
760 3692 404 127 2529 2395 1787 1220 2477 3026
在此我們用的是集群式分析k-means,將資料依照不同屬性將顧客做分群。 k-means分完群會把分群的向量放在“cluster”這個欄位裡面,用table(A$grp)看族群大小。
group_by(A, grp) %>% summarise(
recent=mean(recent),
freq=mean(freq),
money=mean(money),
size=n() ) %>%
mutate( revenue = size*money/1000 ) %>%
filter(size > 1) %>%
ggplot(aes(x=freq, y=money)) +
geom_point(aes(size=revenue, col=recent),alpha=0.5) +
scale_size(range=c(4,30)) +
scale_color_gradient(low="green",high="red") +
scale_x_log10() + scale_y_log10(limits=c(30,3000)) +
geom_text(aes(label = size ),size=3) +
theme_bw() + guides(size=F) +
labs(title="Customer Segements",
subtitle="(bubble_size:revenue_contribution; text:group_size)",
color="Recency") +
xlab("Frequency (log)") + ylab("Average Transaction Amount (log)")
圖形解析:
將現有顧客分成十群,每個泡泡分別代表一群。
4種屬性,大小、顏色、X軸與Y軸可供判讀。
可以針對很常來買(頻率高),買很少(客單價低),去做行銷策略,擬定對這群顧客增加客單價的方法。
例如:以左上角127人族群與下方3207族群比較,兩者都是營收貢獻大者,但127人的族群的營收貢獻,似乎還比3207族群高,代表雖然族群僅127人,但是他們每人的客單價很高,他們就是我們最重要的顧客!要是讓他們流失掉,會對公司營收造成很大的影響,因此要想盡辦法保留他們!
例如:再從3207族群看起,從x軸知道,他們購買的次數不多,從y軸來看,他們購買的金額也不高,但是這個族群有非常多人,我們可以運用行銷方式,增加他們的購買頻率,或是提高客單價,來提高這個族群的營收狀況。反觀右方的2266族群雖然購買次數與3207相似,但他們的客單價卻高很多。
因此,從這些泡泡圖,我們可以知道營收來源主要來自於哪裡。藉此來看出我們的行銷重點應該放在哪一些客群上。
第二集影片底加 (ctrl + click)
STS = c("N1","N2","R1","R2","S1","S2","S3")
Status = function(rx,fx,mx,sx,K) {factor(
ifelse(sx < 2*K,
ifelse(fx*mx > 50, "N2", "N1"),
ifelse(rx < 2*K,
ifelse(sx/fx < 0.75*K,"R2","R1"),
ifelse(rx < 3*K,"S1",
ifelse(rx < 4*K,"S2","S3")))), STS)}
我們先依照三個參數(seniority, frequency, recency)把顧客分群,用ifelse條件式來將顧客區分新潛力顧客、新顧客、核心顧客、主力顧客、瞌睡顧客、半睡顧客、沉睡顧客。
[1] 521
回購顧客的平均購買週期 K = 521 days
Y = list() # 建立一個空的LIST
for(y in 2010:2015) { # 每年年底將顧客資料彙整成一個資料框
D = as.Date(paste0(c(y, y-1),"-12-31")) # 當期、前期的期末日期
Y[[paste0("Y",y)]] = X %>% # 從交易資料做起
filter(date <= D[1]) %>% # 將資料切齊到期末日期
mutate(days = 1 + as.integer(D[1] - date)) %>% # 交易距期末天數
group_by(cid) %>% summarise( # 依顧客彙總 ...
recent = min(days), # 最後一次購買距期末天數
freq = n(), # 購買次數 (至期末為止)
money = mean(amount), # 平均購買金額 (至期末為止)
senior = max(days), # 第一次購買距期末天數
status = Status(recent,freq,money,senior,K), # 期末狀態
since = min(date), # 第一次購買日期
y_freq = sum(date > D[2]), # 當期購買次數
y_revenue = sum(amount[date > D[2]]) # 當期購買金額
) %>% data.frame }
cid recent freq money senior status since y_freq y_revenue
1 10 3829 1 30.000 3829 S3 2005-07-08 0 0
2 80 343 7 71.429 3751 R1 2005-09-24 1 80
3 90 758 10 115.800 3783 R2 2005-08-23 0 0
4 120 1401 1 20.000 1401 S1 2012-03-01 0 0
5 130 2970 2 50.000 3710 S3 2005-11-04 0 0
6 160 2963 2 30.000 3577 S3 2006-03-17 0 0
Y2010 Y2011 Y2012 Y2013 Y2014 Y2015
10407 11674 13562 15468 16905 18417
這邊我們可以看出每一年底的顧客族群人數
par(cex=0.8, mfrow=c(1,1))
cols = c("gold","orange","blue","green","pink","magenta","darkred") #指定每個族群的顏色
sapply(Y, function(df) table(df$status)) %>% barplot(col=cols)
legend("topleft",rev(STS),fill=rev(cols)) #拿來標示圖的圖例,並指定在左上角。
再使用直方圖繪出不同年份下的顧客分群
+要注意到的是:顧客可能在不同年份有不同的分群結果(動態)
我們先簡單看一下每一年不同顧客分群及其各特性的平均值。
CustSegments = do.call(rbind, lapply(Y, function(d) {
group_by(d, status) %>% summarise(
average_frequency = mean(freq),
average_amount = mean(money),
total_revenue = sum(y_revenue),
total_no_orders = sum(y_freq),
average_recency = mean(recent),
average_seniority = mean(senior),
group_size = n()
)})) %>% ungroup %>%
mutate(year=rep(2010:2015, each=7)) %>% data.frame
head(CustSegments)
status average_frequency average_amount total_revenue total_no_orders
Y2010.1 N1 1.1544 26.956 41046 1500
Y2010.2 N2 2.2634 96.000 121034 1416
Y2010.3 R1 2.6741 43.246 19407 435
Y2010.4 R2 5.4059 60.312 108631 1588
Y2010.5 S1 1.2674 44.610 0 0
Y2010.6 S2 1.1667 60.649 0 0
average_recency average_seniority group_size year
Y2010.1 449.18 507.13 3330 2010
Y2010.2 241.24 629.89 1655 2010
Y2010.3 492.36 1470.01 1298 2010
Y2010.4 157.12 1547.34 1547 2010
Y2010.5 1289.32 1373.10 2203 2010
Y2010.6 1889.69 1922.44 360 2010
改成中文欄位名稱
df = CustSegments %>% transmute(
`群組` = as.character(status), year = year,
`平均購買次數` = average_frequency,
`平均客單價` = average_amount,
`總營收貢獻` = total_revenue
)
ggplot(df, aes(
x=`平均購買次數`,y=`平均客單價`,color=`群組`,group=`群組`,ids=year)) +
geom_point(aes(size=`總營收貢獻`,frame=year),alpha=0.8) +
scale_size(range=c(2,12)) -> g
ggplotly(g)
filter(df,`群組`%in%c('N1','N2','R1','R2')) %>%
ggplot(aes(
x=`平均購買次數`,y=`平均客單價`,color=`群組`,group=`群組`,ids=year)) +
geom_path(alpha=0.5,size=2) +
geom_point(aes(size=`總營收貢獻`),alpha=0.8) +
scale_size(range=c(2,12)) -> g
ggplotly(g)
df = merge(Y$Y2014[,c(1,6)], Y$Y2015[,c(1,6)],
by="cid", all.x=T)
tx = table(df$status.x, df$status.y) %>%
as.data.frame.matrix() %>% as.matrix()
tx # 流量矩陣(選擇2014和2015兩年的分群結果做流量分析)
N1 N2 R1 R2 S1 S2 S3
N1 1705 381 144 45 831 0 0
N2 0 1131 267 430 263 0 0
R1 0 0 1240 43 819 0 0
R2 0 0 199 1742 75 0 0
S1 0 0 115 3 819 1026 0
S2 0 0 78 1 0 692 1339
S3 0 0 97 0 0 0 3420
我們可以想像今年被判斷是主力顧客的顧客明年可能會變成瞌睡顧客,所以把每兩年的顧客分群結果做流量矩陣來看出數量上的變化
N1 N2 R1 R2 S1 S2 S3
N1 0.549 0.123 0.046 0.014 0.268 0.000 0.000
N2 0.000 0.541 0.128 0.206 0.126 0.000 0.000
R1 0.000 0.000 0.590 0.020 0.390 0.000 0.000
R2 0.000 0.000 0.099 0.864 0.037 0.000 0.000
S1 0.000 0.000 0.059 0.002 0.417 0.523 0.000
S2 0.000 0.000 0.037 0.000 0.000 0.328 0.635
S3 0.000 0.000 0.028 0.000 0.000 0.000 0.972
或者是看出百分比的變化。
在這個案例裡面,我們的資料是收到Y2015年底,所以我們可以假設現在的時間是Y2015年底,我們想要用現有的資料建立模型,來預測每一位顧客:
但是,我們並沒有Y2016的資料,為了要建立模型,我們需要先把時間回推一期,也就是說:
假如Y2016的情況(跟Y2015比)沒有太大的變化的話,接下來我們就可以
我們用Y2014年底的資料做自變數,Y2015年的資料做應變數
cid recent freq money senior status since y_freq.x y_revenue.x y_freq.y
1 10 3464 1 30.0 3464 S3 2005-07-08 0 0 0
2 80 302 6 70.0 3386 R1 2005-09-24 1 80 1
3 90 393 10 115.8 3418 R2 2005-08-23 0 0 0
4 120 1036 1 20.0 1036 N1 2012-03-01 0 0 0
5 130 2605 2 50.0 3345 S3 2005-11-04 0 0 0
6 160 2598 2 30.0 3212 S3 2006-03-17 0 0 0
y_revenue.y
1 0
2 80
3 0
4 0
5 0
6 0
names(CX)[8:11] = c("freq0","revenue0","Retain", "Revenue") #把2015的實際結果改名為保留/收益
CX$Retain = CX$Retain > 0
head(CX)
cid recent freq money senior status since freq0 revenue0 Retain Revenue
1 10 3464 1 30.0 3464 S3 2005-07-08 0 0 FALSE 0
2 80 302 6 70.0 3386 R1 2005-09-24 1 80 TRUE 80
3 90 393 10 115.8 3418 R2 2005-08-23 0 0 FALSE 0
4 120 1036 1 20.0 1036 N1 2012-03-01 0 0 FALSE 0
5 130 2605 2 50.0 3345 S3 2005-11-04 0 0 FALSE 0
6 160 2598 2 30.0 3212 S3 2006-03-17 0 0 FALSE 0
FALSE TRUE
0.77013 0.22987
Call:
glm(formula = Retain ~ ., family = binomial(), data = CX[, c(2:3,
6, 8:10)])
Deviance Residuals:
Min 1Q Median 3Q Max
-3.689 -0.473 -0.298 -0.142 3.386
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.074007 0.089431 -12.01 < 0.0000000000000002 ***
recent -0.002067 0.000131 -15.73 < 0.0000000000000002 ***
freq 0.095217 0.013882 6.86 0.0000000000069 ***
statusN2 0.669429 0.070234 9.53 < 0.0000000000000002 ***
statusR1 0.488321 0.084389 5.79 0.0000000071864 ***
statusR2 1.290002 0.110841 11.64 < 0.0000000000000002 ***
statusS1 0.670604 0.146532 4.58 0.0000047279944 ***
statusS2 1.353554 0.208210 6.50 0.0000000000798 ***
statusS3 2.573689 0.275786 9.33 < 0.0000000000000002 ***
freq0 0.566557 0.065532 8.65 < 0.0000000000000002 ***
revenue0 -0.000132 0.000135 -0.98 0.33
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18228 on 16904 degrees of freedom
Residual deviance: 11766 on 16894 degrees of freedom
AIC: 11788
Number of Fisher Scoring iterations: 6
從預測的結果我們可以發現除了2014年的收益變數以外,其他變數對預測模型都有顯著的解釋性
FALSE TRUE
FALSE 12045 1530
TRUE 974 2356
[1] 0.85188
[,1]
FALSE vs. TRUE 0.87921
prediction(pred, CX$Retain) %>% # ROC CURVE
performance("tpr", "fpr") %>%
plot(print.cutoffs.at=seq(0,1,0.1))
接著我們來預測會來購買的人會花費多少金額。 我們必須使用的是迴歸來預測數量。
dx = subset(CX, Revenue > 0) # 只對有來購買的人做模型
mRev = lm(log(Revenue) ~ recent + freq + log(1+money) + senior +
status + freq0 + log(1+revenue0), dx)
summary(mRev) # 判定係數:R2 = 0.713
Call:
lm(formula = log(Revenue) ~ recent + freq + log(1 + money) +
senior + status + freq0 + log(1 + revenue0), data = dx)
Residuals:
Min 1Q Median 3Q Max
-3.245 -0.209 -0.067 0.205 3.435
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0587930 0.0458344 1.28 0.1997
recent 0.0003541 0.0000507 6.98 0.00000000000337 ***
freq 0.0526850 0.0046504 11.33 < 0.0000000000000002 ***
log(1 + money) 0.9320818 0.0135203 68.94 < 0.0000000000000002 ***
senior -0.0001369 0.0000182 -7.52 0.00000000000007 ***
statusN2 0.0127716 0.0262656 0.49 0.6268
statusR1 0.1927532 0.0407579 4.73 0.00000233405019 ***
statusR2 0.0297685 0.0352479 0.84 0.3984
statusS1 0.0082406 0.0630355 0.13 0.8960
statusS2 -0.2406398 0.0865731 -2.78 0.0055 **
statusS3 -0.3667341 0.1181061 -3.11 0.0019 **
freq0 0.0103133 0.0172551 0.60 0.5501
log(1 + revenue0) 0.0632756 0.0094003 6.73 0.00000000001930 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.463 on 3873 degrees of freedom
Multiple R-squared: 0.713, Adjusted R-squared: 0.712
F-statistic: 802 on 12 and 3873 DF, p-value: <0.0000000000000002
從上面可看出某些變數對模型具有顯著的解釋力,而獲得判定係數為0.713的表現。
第三集影片底加 (ctrl + click)
使用模型對Y2015年底的資料做預測,對資料中的每一位顧客,預測她們在Y2016的保留率和購買金額。
CX = Y$Y2015
names(CX)[8:9] = c("freq0","revenue0")
# 預測Y2016保留率
CX$ProbRetain = predict(mRet,CX,type='response')
# 預測Y2016購買金額
CX$PredRevenue = exp(predict(mRev,CX))
par(mfrow=c(1,2), mar=c(4,3,3,2), cex=0.8)
hist(CX$ProbRetain,main="ProbRetain", ylab="")
hist(log(CX$PredRevenue,10),main="log(PredRevenue)", ylab="")
接著我們透過計算顧客終生價值讓我們了解每一個顧客的潛在價值有多大 。
\[ V_i = \sum_{t=0}^N g \times m_i \frac{r_i^t}{(1+d)^t} = g \times m_i \sum_{t=0}^N (\frac{r_i}{1+d})^t \]
g = 0.5 # (稅前)獲利率
N = 5 # 期數 = 5
d = 0.1 # 利率 = 10%
CX$CLV = g * CX$PredRevenue * rowSums(sapply(
0:N, function(i) (CX$ProbRetain/(1+d))^i ) )
summary(CX$CLV)
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.4 15.5 24.0 51.3 45.2 5094.0
我們將結果彙整成表格,可以很直接的看到每一個族群的平均保留機率、期望營收貢獻以及終生價值,這有助於讓我們了解每個消費者狀態的性質並可以對其進行策略擬定。
# A tibble: 7 x 4
status ProbRetain PredRevenue CLV
* <fct> <dbl> <dbl> <dbl>
1 N1 0.203 32.0 20.2
2 N2 0.441 131. 111.
3 R1 0.341 69.8 54.6
4 R2 0.749 91.3 136.
5 S1 0.0572 56.1 29.7
6 S2 0.0347 49.5 25.6
7 S3 0.0233 49.4 25.2
繪製顧客終生價值對顧客狀態分群的盒狀圖。
從互動式流量分析以及分群規則來看,我們可以知道各群顧客的移轉程度以及消費特性為何,再根據這些資料進行分析制定客製化的行銷策略,此外我們必須根據顧客終生價值去判斷哪些群的顧客是我們最需要做顧客保留的。
(策略不一定要跟下面寫的一樣~可以做為參考用!)
S族群:採用比較刺激的行銷策略喚醒此群顧客,但行銷主力並不在此。S1:瞌睡顧客,瞌睡顧客對於這家店的認識有一定時間,有一半的機會成為主力顧客,但也有另一半的機會成為半睡顧客,且極少數會仍保留於此狀態中,雖然CLV偏低,但若成流轉成為主力顧客仍有一定潛力存在,為了增加成為主力顧客的機會,我們利用e-mail行銷,針對此群顧客寄出老顧客的限時特惠商品或是折價券,吸引瞌睡顧客重新回到店裡消費,再加以利用會員制度讓顧客留住在店中。
S2:半睡顧客,此群顧客的CLV值低,且多數會流轉成為沈睡顧客,少數會變成瞌睡顧客,由於顧客保留價值低,故對於此群顧客我們採用不分群的行銷策略模式,利用特惠、週年慶、特賣的方式吸引顧客上門。
S3:沈睡顧客,此類顧客極難再轉為其他種類顧客,此群顧客價值低,保留所造成的效果也不明顯,故採用與S2一樣的不針對性做法,採用較消極的行銷方式。
R1:主力顧客:主力顧客的CLV為第三高,其比較容易流轉成瞌睡顧客,為了避免變成瞌睡顧客我們必須增強此群的忠誠度,像是設立一些會員分級獎勵制度,越高等級的顧客就能享有越多的尊爵會員優惠,並且每年贈送生日禮等等。藉此吸引主力顧客持續在店消費,降低成為瞌睡顧客的機會。
R2:核心顧客:核心顧客的CLV為最高,其也不太容易轉成其他群顧客,在會員至當中此群顧客最終會成為最高等級會員,以最高等級的會員優惠、無微不至的特別服務,讓核心顧客有美好的消費體驗,持續保留核心顧客。
N1:新顧客:新顧客屬於還在觀察、觀望的一族群,其消費貢獻不高,CLV極低,流轉為潛力顧客的機會也不高,但必須持續培養新顧客成為忠誠顧客,增加店的業績成長,故即使效益看似不高也必須做一些保留的行銷策略,可以利用一些充滿新鮮感的行銷方式像是集點好禮、現金回饋、新客好禮禮包分階段贈送的方式吸引其持續到店消費。
N2:新潛力顧客:此群顧客對店的收益貢獻相當高,CLV極高,有一定機會成為R2顧客,且有很大機會被保留於原來狀態,故要對此群顧客進行積極的顧客保留行銷方式,可進行新會員入會好禮,將新潛力顧客變成會員,對會員定期推出有趣、優惠的行銷活動,讓其更習慣於在這裡消費,也可以透過寄送e-mail的方式寄送新顧客的專屬優惠。
假設我們知道(不知道也可以假設)各項行銷工具的成本、和效果,模型可以幫助我們:
詳細的作法後面的課程會再討論,以下我們先以R2
族群做示範。
R2族群的預測保留率和購買金額
先來假設一下行銷工具的成本和預期效益,假設有一個成本是10塊,可以將下一期的購買機率提高到0.75的行銷工具
再來估計這項行銷工具對每一位R2顧客的預期報酬
Target = subset(CX, status=="R2")
Target$ExpReturn = (effect - Target$ProbRetain) * Target$PredRevenue - cost
summary(Target$ExpReturn)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-515.84 -15.43 -11.50 -10.26 -8.14 646.85
結果顯示!這一項工具對R2
顧客的平均報酬是負的,WHY?
但是,我們還是可以從R2
挑出許多預期報酬很大的行銷對象
cid ExpReturn
1 141340 646.854
2 164930 609.023
3 2190 323.381
4 172750 305.747
5 156280 289.406
6 190570 236.913
7 134030 199.287
8 141430 150.728
9 123480 134.520
10 65830 110.607
11 150890 107.183
12 134590 99.482
13 72000 92.546
14 133080 84.539
15 147510 77.178
[1] 258
在R2之中,有258人的預期報酬大於零,如果對這258人使用這項工具,我們的期望報酬是:
[1] 6464
如果你只有顧客ID、交易日期、交易金額三個欄位的話,你可以做的分析包括:
一般而言,這一些分析的結果,足夠讓我們制定顧客發展和顧客保留策略;至於顧客吸收策略,我們通常還需要從CRM撈出顧客個人屬性資料才能做到。