如何找出適合參加方案的家庭?

測量兩組資料的相似度(距離)

在現有的低收家戶資料中,有參加方案的實驗組(A)以及沒有參加方案的對照組(B),均有一定比例的家戶脫貧(A1, B1)。而此專案的主要目的之一是欲藉著資料的分析,找出未來適合參與脫貧方案的家戶,把資源做更有效地分配,讓更多家庭有機會脫離貧窮。

利用Gower’s Distance計算不同組別的家庭特徵相似程度

Gower’s Distance (Gower, 1971)是用來計算兩組資料的相近程度(距離),資料的型態可以同時包含類別,數值,邏輯(true or false)。簡而言之,計算兩組資料的欄位彼此相減加總後的值來量化差異度,因此相同的值相減會得到0,表示沒有差異。Gower distance的量測值為0~1,數值愈大則距離愈遠,也就是差異性愈大。

Gower’s distance可以用R的package gower來計算。以R內的iris資料(鳶尾花形質測量)為例:

library(gower)
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa

iris中先分出兩組資料,dat1, dat2包含兩種不同種鳶尾花的形質:

dat1<-iris[1:10,]
head(dat1)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
dat2<-iris[141:150,]
head(dat2)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
141 6.7 3.1 5.6 2.4 virginica
142 6.9 3.1 5.1 2.3 virginica
143 5.8 2.7 5.1 1.9 virginica

接著用gowerpackage (van der Loo, 2013)內的gower_distfunction就可以計算出兩組資料的距離:

gower_dist(dat1, dat2)
[1] 0.7510849 0.7101553 0.6663126 0.7565901 0.7574803 0.7430787 0.7544265 0.6880124 0.7643416 0.5924741

由於dat1dat2分別是不同種鳶尾花的形質測量資料,可以看到他們的Gower’s distance值滿大。如果再加入第三組資料dat3,跟第一組一樣是setosa但來自不同樣本,再跟dat1計算Gower’s distance:

dat3<-iris[11:20,]
head(dat3)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
11 5.4 3.7 1.5 0.2 setosa
12 4.8 3.4 1.6 0.2 setosa
13 4.8 3.0 1.4 0.1 setosa
14 4.3 3.0 1.1 0.1 setosa
15 5.8 4.0 1.2 0.2 setosa
16 5.7 4.4 1.5 0.4 setosa
gower_dist(dat1, dat3)
[1] 0.1000000 0.1333333 0.1400000 0.2533333 0.2266667 0.1733333 0.2733333 0.1266667 0.4600000 0.2533333

可以預期同一種花setosa彼此的形質差異度跟virginica比之下相對小了許多。

分析

了解Gower’s Distance之後,回到我們的問題,如何找出適合參加方案的家庭? 我們先把資料依實驗組、對照組以及脫貧成功與否切割出來。然後我們的目的要找出對照組中未成功脫貧的家戶可以推薦的家庭。

#把對照組與實驗組的脫貧與未脫貧的資料列獨立出來
dat1<-data[which(data$組別=="對照組"&data$脫貧=="N"),-c(1,2,3)]
dat2<-data[which(data$組別=="實驗組"&data$脫貧=="Y"),-c(1,2,3)]
dat3<-data[which(data$組別=="實驗組"&data$脫貧=="N"),-c(1,2,3)]

我們利用 gower_topn function來計算Gower’s Distance,這個function與 gower 的差別在於 gower_topn 會將計算結果由大至小排序,還能篩選前幾名的Gower's Distance(以這個case而言我們直接用預設值n=5)。

#計算同樣未脫貧,對照組與實驗組家庭特徵的Gower's Distance
topn_13<-gower_topn(dat1, dat3)$distance
control_n$topn_13_disatnce<-colMeans(topn_13)
#計對照組未脫貧者與實驗組當中成功脫貧與家庭特徵的Gower's Distance
topn_12<-gower_topn(dat1,dat2)$distance
control_n$topn_12_distance<-colMeans(topn_12)
結果
library(ggplot2)
tmp <- 
data.frame(實驗組=rep(c("脫貧","未脫貧"), c(nrow(control_n),nrow(control_n))),
Gowers_Distance=c(control_n$topn_12_distance, control_n$topn_13_disatnce))
ggplot() + geom_density(data=tmp, aes(x=Gowers_Distance, fill=實驗組, colour=實驗組),alpha=0.5) +
geom_vline(aes(xintercept=min(control_n$topn_13_disatnce)), lty=2)+
theme(text = element_text(family = "MicrosoftYaHeiMono", size=18)) 
#Cutoff threshold
min(control_n$topn_13_disatnce)

紅色區: 對照組中未脫貧的家戶與實驗組成功脫貧的家戶之Gower’s Distance分布。

綠色區:對照組中未脫貧的家戶與實驗組中未脫貧的家戶之Gower’s Distance分布。

虛線的部分為 min(control_n$top_n_13_distance) ,也就是控制組中未脫貧家戶與參與方案組未脫貧家戶Gower’s Distance的最小值(=0.123),以此做為挑選參與方案家戶的參考。

結論

Gower’s Distance的強大之處是很好理解,而且可以同時處理continuous以及categorical variables。

這部分的分析結果是很驚喜的,因為我們能從相似度分析看出控制組中未脫貧者與實驗組脫貧以及未脫貧者的相似度有明顯的差異。而且,與實驗組成功脫貧者的相似度比與未脫貧者的相似度高。也就是說,對照組中這些未參與方案者,如果參與方案的話,很有可能會成功脫貧

但我們必須強調此分析資料的侷限性,因參加儲蓄專案家戶累積的樣本量少,還無法驗證模型推薦的效益,必須在未來專案加入推薦家戶後再做後續效益的追蹤後才能驗證。

參考文獻

Gower J. C. (1971). A General Coefficient of Similarity and Some of Its Properties. Biometrics:27(4), pp. 857–871.

van der Loo, M. (2017). Introduction to the gower Package.