L.Point ๊ณ ๊ฐ ์ธ๊ทธ๋จผํธ๋ณ ๋ง์ผํ ๊ณผ ์ถ์ฒ์์คํ
2022๋ 7์ ์งํํ ๋กฏ๋ฐ๋ฉค๋ฒ์ค ๋น ๋ฐ์ดํฐ ๊ฒฝ์ง๋ํ ๊ธฐ๋ก์ ๋๋ค.
๋ชฉ์ฐจ
1. ์ธ๊ทธ๋จผํธ์ ๊ฐ์ธํ์ ์ค์์ฑ
1-1. EDA
2. ๊ณ ๊ฐ ๊ตฐ์งํ ์ฌ์ฉ ๋ณ์
2-1. ๋ณ์ ์์ฑ:์ ํด์ฌ ์ด์ฉ์ฑํฅ
2-2. ๋ณ์ ์์ฑ:์ผ์ฃผ์ผ ์ด์ฉํจํด
2-3. ๋ณ์ ์์ฑ:์ํ์ทจํฅ(RC1~6)
3. ๊ณ ๊ฐ ๊ตฐ์งํ
3-1. ๊ตฐ์งํ ๊ฒฐ๊ณผ ๋ฐ ๋ง์ผํ ์ ๋ต
4. ๊ตฐ์ง ๋ด ์ถ์ฒ์์คํ
4-1. ALS์ถ์ฒ์์คํ ์ ์ ์ด์
4-2. ์ถ์ฒ์์คํ ์ ์ฉ
4-3. ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ ๋ฐ ๊ธฐ๋ํจ๊ณผ
1. ์ธ๊ทธ๋จผํธ์ ๊ฐ์ธํ์ ์ค์์ฑ
๋์งํธ ํผ์คํธ ์๋์์ ๋๋ถ๋ถ์ ์๋น์๋ ๊ณ ๊ฐ๊ฒฝํ์ด ์ ํ๋งํผ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค.
๋ํ ๊ฐ์ธํ๋ ๊ฒฝํ์ ๊ธฐ๋ํ๋ ๊ณ ๊ฐ์ด ์ ์ ๋์ด๋๊ณ ์๋ค. ๊ธฐ์
์
์ฅ์์๋ ๊ณ ๊ฐ๋ค์ ์ธ๋ถํํด ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๋๋ค๋ฉด, ํ ๋ช
๋๋ ์ ์ฒด๋ก์์ ๊ณ ๊ฐ์ผ ๋ ๋ณด๋ค ๋ง์ผํ
๋ฑ์ ์์ด ๋น์ฉ ๋๋น ์ข์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ผ๋ฉฐ, ๋ก์ดํฐ ๋์ ๊ณ ๊ฐ์ ์ป์ ์ ์๋ค.
๋ฐ๋ผ์ ํจ์จ์ ์ธ ๊ณ ๊ฐ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ๊ณ ๊ฐ์ ์ธ๋ถํ์์ผ ํน์ฑ์ ๊ฐ์ง ์ธ๊ทธ๋จผํธ๋ฅผ ์์ฑํ๋ค.
- ๋ฐ์ดํฐ ์ ํ ๋ฐ ์ ์ฒ๋ฆฌ





SQL๋ก ์ํ๊ตฌ๋งค์ ๋ณด(pdde) ํ ์ด๋ธ์ ๊ณ ๊ฐ์ ๋ณด(demo)์ ์ํ์ ๋ณด(pd_clac)๋ฅผ ํฌํจํ pdde_merge ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์๋ค.
select pdde.*, demo.ma_fem_dv, demo.ages, demo.zon_hlv as demo_zon_hlv, pd_clac.pd_nm, pd_clac.clac_hlv_nm, pd_clac.clac_mcls_nm
from pdde
left outer join demo
on pdde.cust = demo.cust
left outer join pd_clac
on pdde.pd_c = pd_clac.pd_c
์ ํด์ฌ ์ด์ฉ์ ๋ณด(cop_u)์ ๊ณ ๊ฐ์ ๋ณด(demo)์ ์ ํฌ์ ๋ณด(br)๋ฅผ ํฌํจํ cop_u_merge ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์๋ค.
select cop_u.*, demo.ma_fem_dv, demo.ages, demo.zon_hlv as demo_zon_hlv, br.cop_c, br.zon_hlv as br_zon_hlv, br.zon_mcls
from cop_u
left outer join demo
on cop_u.cust = demo.cust
left outer join br
on cop_u.br_c = br.br_c
- ์ํ๊ตฌ๋งค์ ๋ณด EDA

์ด์ฉ์ ์ค ์ฌ์ฑ์ ๋น์จ์ด 70% ์ ๋. 40๋ ์ด์ฉ์ ๋น์จ์ด ๊ฐ์ฅ ๋๋ค.

๊ธ,ํ ,์ผ์ ๊ตฌ๋งค๊ฐ ๋ง์ด ๋ฐ์ํ๊ณ , ์ ํด์ฌ A01, A02์์์ ๊ตฌ๋งค๊ฐ ์ ์ฒด ๊ตฌ๋งค์ 70%๊ฐ๋์ ์ฐจ์งํ๋ค.

์ด ์ด์ฉํ์์ ์ด ์ด์ฉ๊ธ์ก์ ๊ทธ๋ํ. ๊ฐ ๋ณ์๋ ์๋ R์ฝ๋๋ฅผ ํตํด ์์ฑํ๋ค.
#rct_pdde : pdde์์์ฆ(์ ํด์ฌ, ์ด์ฉ์ก, ๊ณ ๊ฐ, ๋ ์ง)
rct_pdde <- unique(pdde %>%
group_by(rct_no) %>%
summarise(cop_c = cop_c, rct_am=sum(buy_am), cust = cust, de_dt = de_dt))
# pdde ์์์ฆ, ์ด์ฉ์ก
tmp <- rct_pdde %>%
group_by(cust)%>%
summarise(pdde_rct_cnt = n(), pdde_sum = sum(rct_am))
demo <- merge(x = demo,y = tmp,by="cust", all.x = TRUE)
# copu ์์์ฆ, ์ด์ฉ์ก
tmp <- copu %>%
group_by(cust)%>%
summarise(copu_rct_cnt = n(), copu_sum = sum(buy_am))
demo <- merge(x = demo, y = tmp,by="cust", all.x = TRUE)
# ๋ ์์์ฆ๊ณผ ์ด์ฉ์ก ๋ํ๊ธฐ
demo$rct <- apply(demo[,c("pdde_rct_cnt","copu_rct_cnt")],1,sum)
demo$am <- apply(demo[,c("pdde_sum","copu_sum")],1,sum)
์ฌ๋ฌ ๋ณ์๋ค์์ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ธฐ์ ๊ณ ๊ฐ ์ธ๋ถํ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
2. ๊ณ ๊ฐ ๊ตฐ์งํ ์ฌ์ฉ ๋ณ์

๊ณ ๊ฐ ๋ถ๋ฅ์ ์ ์๋ฏธํ ๋ณ์๋ฅผ ์ ์ ํ๋ค.
์ฑ๋ณ, ๋์ด, ์ด ์ด์ฉ ํ์, ์ด ์ง๋ถ๊ธ์ก์ ์ ๊ณต๋๊ฑฐ๋ ์ด๋ฏธ ๋ง๋ค์ด ๋ ๋ณ์์ด๊ณ ,
์ ํด์ฌ ์ด์ฉ์ฑํฅ, ์ด์ฉํจํด(์ผ์ฃผ์ผ), ์ํ์ทจํฅ(์ ํต) ๋ณ์๋ ์๋กญ๊ฒ ์์ฑํ ํ์๊ฐ ์๋ค.
1) ์ ํด์ฌ ์ด์ฉ์ฑํฅ
๊ฐ ์ ํด์ฌ ์ด์ฉ ๋น์จ(๊ฐ ์ ํด์ฌ ์ด์ฉ ํ์ / ์ด ์ด์ฉ ํ์) ์ ์ด์ฉํด k-means ํด๋ฌ์คํฐ๋งํ๋ค.
# ์ ํด์ฌ๋ณ ์ด์ฉ ๋น์จ
dat <- data.frame(dcast(rct_pdde,cust~cop_c))
demo <- merge(x = demo,y = dat,by="cust", all.x = TRUE)
dat2 <- data.frame(dcast(copu,cust~cop_c))
demo <- merge(x = demo,y = dat2,by="cust", all.x = TRUE)
demo[is.na(demo)] <- 0
sum(is.na(demo))
demo[,7:18] <- demo[,7:18]/demo$rct #์ ํด์ฌ๋ณ ์์์ฆ์ ์ด ์์์ฆ๊ฐ์๋ก ๋๋๊ธฐ
# ์ ํด์ฌ ์ด์ฉ ์ฑํฅ(clus_cop) ์์ฑ
#elbow method
fviz_nbclust(demo[7:18], kmeans, method = "wss", k.max = 12) +
theme_minimal() +
ggtitle("Elbow Method")
#silhouette
kClusters <- 2:9
resultForEachK2 <- data.frame(k = kClusters, silAvg = rep(NA, length(kClusters)))
for(i in 1:length(kClusters)){
resultForEachK2$silAvg[i] <- avg_sil(kClusters[i], demo[7:18])
}
plot(resultForEachK2$k, resultForEachK2$silAvg,
type = "b", pch = 19, frame = FALSE,
xlab = "Number of clusters K",
ylab = "Average Silhouettes")
#6๊ฐ๊ตฐ์ง ์์ฑ
clus_cop <- kmeans(demo[7:18],6)
table(clus_cop$cluster)
demo$clus_cop <- as.factor(clus_cop$cluster)

๊ตฐ์ง ์๊ฐ 6๊ฐ์ผ ๋ ์ค๋ฃจ์ฃ๊ณ์๊ฐ ๋๊ณ , 7๊ฐ๋ก ๋์ด๋ ๋ elbow method ๊ทธ๋ํ์์ ๊ธฐ์ธ๊ธฐ๊ฐ ์๋งํด์ง๋ฏ๋ก
6๊ฐ์ ํด๋ฌ์คํฐ๋ก ์ด๋ฃจ์ด์ง ๋ณ์๋ฅผ ์์ฑํ๋ค.






- ์ ํด์ฌ ์ด์ฉ ์ฑํฅ(clus_cop) ๋ณ์ ์์ฑ ๊ฒฐ๊ณผ
1๊ทธ๋ฃน : D01์ ์ฃผ๋ก ์ด์ฉํจ.
2๊ทธ๋ฃน : A03์ ์ฃผ๋ก ์ด์ฉํ๊ณ , A01, D01๋ ์ด์ฉํ๋ ๊ณ ๊ฐ์ด ์๋ ํธ
3๊ทธ๋ฃน : ํฐ ๊ฒฝํฅ์ ๋ณด์ด์ง๋ ์์ผ๋ A01, A02, A06, C01์ ์ด์ฉํ๋ ๊ณ ๊ฐ๋ค์ด ์๋ ํธ
4๊ทธ๋ฃน : A01์ ์ฃผ๋ก ์ด์ฉํจ.
5๊ทธ๋ฃน : A02๋ฅผ ์ฃผ๋ก ์ด์ฉํจ.
6๊ทธ๋ฃน : A04๋ฅผ ์ฃผ๋ก ์ด์ฉํจ.
2) ์ด์ฉํจํด
์์ผ๋ณ ์ด์ฉ ๋น์จ(๊ฐ ์์ผ ์ด์ฉ ํ์ / ์ด ์ด์ฉ ํ์)์ ์ด์ฉํด k-means ํด๋ฌ์คํฐ๋ง.
# ์์ผ๋ณ ์ด์ฉ ๋น์จ
rct_pdde$wday <- as.factor(wday(ymd(rct_pdde$de_dt)))
str(rct_pdde)
dat <- data.frame(dcast(rct_pdde,cust~wday))
str(dat)
copu$wday <- as.factor(wday(ymd(copu$de_dt)))
dat2 <- data.frame(dcast(copu,cust~wday))
str(dat2)
names(dat) <- c("cust","sun","mon","tue","wed","thr","fri","sat")
demo <- merge(x = demo,y = dat,by="cust", all.x = TRUE)
demo <- merge(x = demo,y = dat2,by="cust", all.x = TRUE)
str(demo)
demo[is.na(demo)] <- 0
head(demo)
demo$sun <- apply(demo[,c("sun","X1")],1,sum) #pdde์ copu ํฉํ๊ธฐ
demo$mon <- apply(demo[,c("mon","X2")],1,sum)
demo$tue <- apply(demo[,c("tue","X3")],1,sum)
demo$wed <- apply(demo[,c("wed","X4")],1,sum)
demo$thr <- apply(demo[,c("thr","X5")],1,sum)
demo$fri <- apply(demo[,c("fri","X6")],1,sum)
demo$sat <- apply(demo[,c("sat","X7")],1,sum)
demo <- demo[,c(1:27)]
# ์์ผ๋ณ ์์์ฆ์ ์ด ์์์ฆ์ผ๋ก ๋๋๊ธฐ
demo$sun <- demo$sun/demo$rct
demo$mon <- demo$mon/demo$rct
demo$tue <- demo$tue/demo$rct
demo$wed <- demo$wed/demo$rct
demo$thr <- demo$thr/demo$rct
demo$fri <- demo$fri/demo$rct
demo$sat <- demo$sat/demo$rct
# ์์ผ๋ณ ํจํด(pat2) ์์ฑ
training.data <- demo[demo$rct!=1,c(19:25)]
str(training.data)
#elbow method
install.packages("factoextra")
library(factoextra)
fviz_nbclust(training.data, kmeans, method = "wss", k.max = 9) +
theme_minimal() +
ggtitle("Elbow Method")
#silhouette
kClusters <- 2:9
resultForEachK2 <- data.frame(k = kClusters, silAvg = rep(NA, length(kClusters)))
#์ ์ฒด ์ค๋ฃจ์ฃ ๊ณ์ ํ๊ท ๊ฒฐ๊ณผ ๊ณ์ฐ
for(i in 1:length(kClusters)){
resultForEachK2$silAvg[i] <- avg_sil(kClusters[i], training.data)
}
#์ค๋ฃจ์ฃ๊ณ์ ๊ทธ๋ํ
plot(resultForEachK2$k, resultForEachK2$silAvg,
type = "b", pch = 19, frame = FALSE,
xlab = "Number of clusters K",
ylab = "Average Silhouettes")
wday_km <- kmeans(training.data,5)
demo$pat2[demo$rct!=1] <- as.factor(wday_km$cluster)

2๊ฐ์ผ ๋ ์ค๋ฃจ์ฃ๊ณ์๊ฐ ๊ฐ์ฅ ๋์ง๋ง ์ธ๋ถํ๋ฅผ ์ํด 5๊ฐ์ ํด๋ฌ์คํฐ๋ก ์ด๋ฃจ์ด์ง ๋ณ์๋ฅผ ์์ฑํ๋ค.



- ์ผ์ฃผ์ผ ์ด์ฉํจํด(pat2) ๋ณ์ ์์ฑ ๊ฒฐ๊ณผ
1๊ทธ๋ฃน : ์ฃผ๋ก ์์์ผ์ ์ด์ฉ.
2๊ทธ๋ฃน : ํ >์ผ.ํ ์์ผ์ ๊ฐ์ฅ ๋ง์ด ์ด์ฉ. ์ฃผ์ค๋ณด๋ค๋ ์ฃผ๋ง ์ด์ฉ์ด ๋ง์ ํธ.
3๊ทธ๋ฃน : ์ฃผ์ค์ ์ฃผ๋ก ์ด์ฉ. ์ฃผ์ค์์๋ ์์์ผ์ด ๋ฎ์ ํธ.
4๊ทธ๋ฃน : ๊ธ, ํ , ์ผ์ ์ฃผ๋ก ์ด์ฉ. ํ ์์ผ์ด ๊ฐ์ฅ ๋์.
5๊ทธ๋ฃน : ์ผ>ํ . ์ผ์์ผ์ ์ฃผ๋ก ์ด์ฉ. ์ฃผ์ค๋ณด๋ค๋ ์ฃผ๋ง ์ด์ฉ์ด ๋ง์ ํธ.
3) ์ํ ์ทจํฅ
๊ตฌ๋งคํ ์ํ์ ๋๋ถ๋ฅ๋ฅผ ์ด์ฉํด ์ํ ์ทจํฅ์ ํ์ ํ๋ค.

์ด ๋๋ถ๋ฅ์ ๊ฐ์๋ 60๊ฐ. ์ด ์ค์์ ์ทจํฅํ์ ์ ๋์์ด ๋์ง ์๋ ๋๋ถ๋ฅ๋ ์ ์ธํ๋๋ก ํ๋ค.
๋จผ์ ๊ฐ ๊ณ ๊ฐ์ด ๋๋ถ๋ฅ๋ง๋ค ๊ตฌ์
ํ ํ์๋ฅผ ์ ์ ์๋ ๋ฐ์ดํฐํ๋ ์์ ์์ฑํ๊ณ , ๊ฐ ๋๋ถ๋ฅ์ ๋ถ์ฐ๊ณผ ์๊ด๊ณ์๋ฅผ ํ์ธํ๋ค.
# ์ํ์ทจํฅ ํ์๋ณ์(RC1~6) ์์ฑ ---------------------------------
#๊ณ ๊ฐX๋๋ถ๋ฅ ๋ฐ์ดํฐํ๋ ์ ์์ฑ
hlv <- dcast(pdde,cust~clac_hlv_nm,sum,value.var="buy_ct")
new_hlv <- hlv #์ ๊น ๋ณต์ฌ
new_hlv <- new_hlv[-c(1567,23258),] #์ด์์น ์ ๊ฑฐ
new_hlv <- new_hlv[,-1]
#๋๋ถ๋ฅ๋ณ์ ์ ํ
library(caret)
names(new_hlv[,nearZeroVar(new_hlv)]) # 0์ ๊ฐ๊น์ด ๋ถ์ฐ
new_hlv <- new_hlv[, -nearZeroVar(new_hlv)] #์ ๊ฑฐ
findCorrelation(cor(new_hlv),cutoff = 0.4) # ์๊ด๊ณ์ 0.4์ด์
cor(new_hlv)[c(10,11,33,30,5,6,35,3,15,27),c(10,11,33,30,5,6,35,3,15,27)] #0.4์ด์
new_hlv <- new_hlv[,-c(11,33,30,5,6,35,3,15,27)] #10 ๋๊ณ ๋๋จธ์ง ์ ๊ฑฐ
๋ถ์ฐ์ด 0์ ๊ฐ๊น์ด ๋๋ถ๋ฅ๋ฅผ ์ ์ธํ๊ณ , ์๊ด๊ณ์๊ฐ ๋์ ๋๋ถ๋ฅ๋ ํ๋๋ง ๋จ๊ฒจ๋๊ณ ์ ์ธํ๋ค.
2023.3.13 ์ ํ ๋ฆฌ๋ทฐ
- ์๊ด๊ณ์๊ฐ ๋์ ๋ณ์๋ค์ ์ ๊ฑฐํ์ง ์๊ณ FA๋ฅผ ์งํํ๋ค๋ฉด ๋ ํด์ํ๊ธฐ ์ฌ์ด ๊ฒฐ๊ณผ๊ฐ ๋์์ ๊ฒ์ด๋ค.
- ์์ธ ์ถ์ถ ์ , scale์ ํตํด ๋ถ์ฐ์ 1์ผ๋ก ๋ง๋ค์ด์ผํ๋ค.
- KMO, Bartlett์ ํตํด FA๊ฐ ์ ํฉํ์ง ํ์ธํ ํ์ ์งํํ๋ ๊ฒ์ด ์ข๋ค.
- KMO(Kaiser-Meyer-Olkin factor adequacy) : ๋ณ์๋ค์ด ์๊ด์ ๊ฐ๋ ์ ๋๋ก, 1์ ๊ฐ๊น์ธ์๋ก ์์ธ๋ถ์์ ํ๋ ๊ฒ์ด ์ ํฉํ ๋ณ์๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, 0.5 ์ดํ๋ ์์ธ๋ถ์์ ํ๊ธฐ์ ๋ถ์ ํฉํ ๊ฒ์ผ๋ก ์ฃผ๋ก ์ฌ๊ฒจ์ง.
- Bartlett : ๋ชจ๋ ์๊ด๊ด๊ณ๊ฐ 0์ด๋ผ๋ ๊ท๋ฌด๊ฐ์ค์ ์ธ์๋๊ณ ์ด๋ฅผ ๊ฒ์ . ์นด์ด์ ๊ณฑ๊ณผ p๊ฐ์ ๋ณด๊ณ ํ๋จํ๋ค. p๊ฐ์ด ์ ์ํ ์์ค(< 0.05)์ด๋ฉด ๋ง์กฑํ๋ค. ์นด์ด์ ๊ณฑ์ ํ๋ณธ ํฌ๊ธฐ์ ๋ฏผ๊ฐํ๊ธฐ์ ์ฃผ์.
new_hlv <- scale(new_hlv) KMO(new_hlv) cortest.bartlett(new_hlv)โ
library(psych)
library(GPArotation)
hlv.factor <- principal(new_hlv, rotate='none')
names(hlv.factor)
hlv.factor$values
plot(hlv.factor$values, type="b")

๊ณ ์ ๊ฐ eigenvalue : ๊ฐ ์์ธ์ด ์ค๋ช ํ๋ ๋ถ์ฐ์ ํฌ๊ธฐ. ๊ฐ ๋ณ์๋ค์ด ํด๋น ์์ธ์ ์ ์ฌ๋ ๊ฐ์ ์ ๊ณฑํ์ฌ ๋ชจ๋ ํฉํ ๊ฐ. ์์ธ๋ถ์์์๋ ๊ฐ ๋ณ์์ ์ ์ฒด ๋ถ์ฐ์ 1์ผ๋ก ๋ณธ๋ค. ๊ณ ์ ๊ฐ์ด 1๋ณด๋ค ์์ผ๋ฉด ๊ทธ ์์ธ์ ์ค๋ช ๋ ฅ์ ๋ณ์ ํ๋๋ณด๋ค๋ ์์์ ๋ปํ๊ธฐ ๋๋ฌธ์ ์์ธ์ ์๋ฅผ ์ ํ ๋ ๊ณ ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
๊ณ ์ ๊ฐ์ด 1๋ณด๋ค ํฐ ๊ฐ์ด 6๊ฐ์ด๋ฏ๋ก 6๊ฐ ์ธ์๋ฅผ ์ ํํ๋ค.
2023.3.13 ์ ํ ๋ฆฌ๋ทฐ
- ๋ ๊ฐ๋จํ๊ฒ ์ทจํฅ์ ๋๋๊ณ ์ถ๋ค๋ฉด, screeplot์์ ๊ธฐ์ธ๊ธฐ๊ฐ ๊ธ์๋๋ก ์ค์ด๋๋ 3๋ฒ์งธ ์ธ์๊น์ง๋ก ๊ฒฐ์ ํ ์ ์๋ค.
ํด์์ ํธ์๋ฅผ ์ํด ์ง๊ตํ์ ์ ์ฌ์ฉํ๋ค.
hlv.Varimax = principal(new_hlv, nfactors = 6, rotate="varimax")
hlv.Varimax
loadings(hlv.Varimax)
#RC1:์ด๋ฆผ๋ ฅ RC2:ํจ์
๊ด์ฌ๋ RC3:์ทจ๋ฏธ์ ํ๋ณต๊ธฐ์ฌ๋
#RC5:์คํํ ์ถ ์๊ตฌ RC4:์์ด์ํ ์๋น RC6:๊ฐ์กฑ์ธ์
2023.3.13 ์ ํ ๋ฆฌ๋ทฐ
FA๊ฐ ์๋, principal ํจ์๋ก PCA๋ฅผ ํ๋ค. (๊ฑฐ์ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ์งํ๋๊ธฐ์ FA์ PCA๋ฅผ ์์ด์ ์๋ชป๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํจ.)
FA์ PCA์ ์ฐจ์ด์ ๋ํด ๋ ๊ณต๋ถํด๋ณธ ๊ฒฐ๊ณผ, ์ด ๊ฒฝ์ฐ์์๋ FA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ง๊ธ ์๋ํ๋ ๊ฒ์ ๋๋ถ๋ฅ ๋ณ์๋ค์ ์ถ์ํด์ ๋ ํฐ ๋๋ถ๋ฅ๋ก ๋ง๋๋ ค๋ ๊ฒ์ด ์๋๋ผ
๊ตฌ๋งค ์ทจํฅ์ด๋ผ๋ ์๋ก์ด ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์,
๊ฐ ์์ธ์ ์๊ด๊ด๊ณ๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์ธ์ ํ๊ณ , ๊ณ ์ ์์ธ์ ๋ถ์ฐ์ ์ธ์ ํ๊ณ , ์ ์ ๋ ๊ฐ ์์ธ์ ์ค์์ฑ์ด ๋ค๋ฅด์ง ์๋๋ก ํ๋ ์์ธ๋ถ์(FA)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์๊ด๊ด๊ณ๋ฅผ ์ธ์ ํ๋ฏ๋ก ์์ธํ์ ์ obliminํ์ ์ ์ฌ์ฉํ ์ ์๋ค.
#์์ธ๊ฐ์ ์ ํ๊ธฐ------------------ library(psych) eigen(cor(new_hlv)) #8๊ฐ๊น์ง # fac <- principal(new_hlv, rotation='none')#์ด๊ธฐ.method:principal # fac$values #๊ฐ์๊ฒฐ๊ณผ #d <- fac(new_hlv, rotation='none') #method:minimum residual. mle๋ factor๊ฐ์ ์ง์ ํ์.. #d$values #8๊ฐ๊น์ง plot(fac$values, type="b")#3๊ฐ๊น์ง scree(cor(new_hlv, use = "pairwise.complete.obs"))#3๊ฐ๊น์ง #3๊ฐ------------------- fac3<- factanal(new_hlv,rotation= 'varimax', # ํ์ ๋ฐฉ๋ฒ ์ง์ # scores= 'regression', # ์์ธ์ ์ ๊ณ์ฐ ๋ฐฉ๋ฒ ์ง์ factors = 3) #method:mle #fa(new_hlv, nfactors= 3, rotate = "varimax") fac3 fac3$scores # ์ธ์ ๋์ == ์ ๋ฐ์ดํฐ ์ขํ sort(fac3$uniquenesses) print(fac3$loadings, cut=.4, sort=T, digits = 3) #์ค๋ธ๋ฆฌ๋ฏผ fac3o<- factanal(new_hlv,rotation= 'oblimin', factors = 3) print(fac3o$loadings, cut=.4, sort=T, digits = 3) # 8๊ฐ ------------------------ fac8<- factanal(new_hlv,rotation= 'varimax', factors = 8) fac8 fac8$scores sort(fac8$uniquenesses) print(fac8$loadings, cut=.4, sort=T, digits = 3) #์ค๋ธ๋ฆฌ๋ฏผ fac8o<- factanal(new_hlv,rotation= 'oblimin', factors =8) print(fac8o$loadings, cut=.4, sort=T, digits = 8)
์ฐธ๊ณ
sort(hlv.Varimax$uniquenesses) #๊ณ ์ ์์ธ์ ๋ถ์ฐ = 1-๊ณตํต์์ธ์๋ถ์ฐ print(hlv.Varimax$loadings, cut=.5, sort=T, digits = 3) #์ ๋ ฌ

- loadings : ์์ธ์ด ๋ณ์์ ๋ผ์น๋ ๊ณต๋ถ์ฐ์ ํฌ๊ธฐ. ์์ธ๊ณผ ๋ณ์๋ค ๊ฐ์ ์๊ด๊ณ์. (ยฑ0.5์ ๋๊ฐ ์ ์)
- SS loadings(eigen value) : ์ธ์ ์ ์ฌ๋(loadings)์ ์ ๊ณฑํฉ. ๋์์๋ก ๋ณ์๊ฐ ์ ์ฌ์ฑ์ด ์ข๋ค.
- Proportion Var : ์ ์ฒด๋ถ์ฐ ์ค ๊ฐ ์ฃผ์ฑ๋ถ์ด ์ฐจ์งํ๋ ๋ถ์ฐ์ ๋น์จ์ ์๋ฏธ.
- Cumulative Var : ์ถ์ถ๋ ์ฃผ์ฑ๋ถ์ ๋ถ์ฐํฉ. ์ด ๋ฐ์ดํฐ์์๋ 36.3%๋ฅผ ์ค๋ช
ํ๋ค.
RC1๋ถํฐ RC6๊น์ง์ ํด์์ ์๋์ ๊ฐ๋ค.
RC 1 : ์ด๋ฆผ๋ ฅ
RC 2 : ํจ์ ๊ด์ฌ๋
RC 3 : ์ทจ๋ฏธ์ ํ๋ณต๊ธฐ์ฌ๋
RC 4 : ์์ด์ํ ์๋น
RC 5 : ์คํํ ์ถ์ ๋ํ ์๊ตฌ
RC 6 : ์ธ์, ์๋
์ ํด์์ ๊ธฐ๋ฐ์ผ๋ก, score๋ฅผ ์ด์ฉํด ์๋ก์ด ๊ณ ๊ฐ ์ทจํฅ ๋ณ์ 6๊ฐ๋ฅผ ์์ฑํ๋ค.
2023.3.13 ์ ํ ๋ฆฌ๋ทฐ
์๊ด๊ณ์๊ฐ ๋์ ๋ณ์๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ , FA๋ถ์์ obliminํ์ ์ ์ด์ฉํด ๋ค์ ์งํํด๋ดค์ ๋,
[3์์ธ ]
์์ธ1 : ์ํ ๊ตฌ๋งค ํ์
์์ธ2 : ์์ฌ๋ฃ ๊ตฌ๋งค ํ์
์์ธ3 : ํจ์ , ์๊ธฐ/์กฐ๋ฆฌ๊ธฐ๊ตฌ ๊ตฌ๋งค ํ์
[8์์ธ]
์์ธ1 : ์์ฌ๋ฃ ๊ตฌ๋งค ํ์
์์ธ2 : ํจ์ ๊ตฌ๋งค ํ์
์์ธ3 : ์์ทจ ๊ฐํธ์(๊ณผ์,๋์ฉ์) ๊ตฌ๋งค ํ์
์์ธ4 : ๊น๋ ์ ํธ(์ธ์ /์์, ํผ์ค๋์ผ์ด)
์์ธ5 : ์ง์ฅ์ธ์ฉํ(์ฌ๋ฌด์ฉํ,๊ณต๊ตฌ)
์์ธ6 : ์ฒญ์์ฉํ ๊ตฌ๋งค ํ์
์์ธ7 : ๋ง์ค ๊ฒ ์ ํธ
์์ธ8 : ์ธ์ ์ ํธ
๋น๊ต์ ์์ธ๊ฐ ์๊ด๊ด๊ณ๊ฐ ์์ด๋ณด์ด์ง ์๋ ๊ฒฐ๊ณผ๋ก ๋ฐ๋์๋ค.
3. ๊ณ ๊ฐ ๊ตฐ์งํ


12๊ฐ ๋ณ์๋ฅผ ์ด์ฉํด ๊ณ ๊ฐ์ ๊ตฐ์งํ ์งํ.
์ฐ์ํ๊ณผ ๋ฒ์ฃผํ ๋ณ์๊ฐ ํจ๊ป ์๋ ์๋ฃ์ ํด๋ฌ์คํฐ๋ง์ ์ํด
K-Prototypes ์ด์ฉ.
๊ณ ๊ฐ์ 6๊ฐ ๊ตฐ์ง์ผ๋ก ์ธ๋ถํ.
๊ตฐ์งํ ๊ฒฐ๊ณผ
- 1๊ทธ๋ฃน

18๋ช
์ฌ์ฑ 39%, ๋จ์ฑ 61%
40๋ 67%, 30๋ 17%, 50๋ 11%
์ด์ฉํจํด 4: 67%, 5: 22%, 2: 11%
์ ํด์ฌ์ฑํฅ 4: 100%
์ด์ฉํ์ ํ๊ท 188ํ
์ด์ฉ๊ธ์ก ํ๊ท 3์ต 2์ฒ๋ง์
ํจ์ ๊ด์ฌ๋ ํ๊ท 4.18 ์คํํ์ถ์๊ตฌ ํ๊ท 0.06
์ธ์,์๋ 1.7
40๋ ์ ํ์ ์ด์ฉํ์๊ฐ ๋ง๊ณ ๊ธ์ก์ด ๋งค์ฐ ๋์ ๊ณ ๊ฐ.
๋๋ถ๋ถ A01 ์ ํด์ฌ๋ฅผ ์ด์ฉํ๋ฉฐ ๊ธ,ํ ,์ผ, ๊ทธ์ค ํ ์์ผ์ ๊ฐ์ฅ ๋ง์ด ์ด์ฉํจ.
ํจ์ ๊ด์ฌ๋๊ฐ ๋งค์ฐ ๋๊ณ ์ธ์๋ ์ข ์ข ํ๋ ํธ.
โ 1๊ทธ๋ฃน์ ํฐ ์๋น๋ฅผ ํ๋ ๊ท๋ชจ๊ฐ ์์ ๊ทธ๋ฃน.
A01์ ํด์ฌ์์ ํ ์์ผ์ 40๋ ๊ณ ๊ฐ์ด ์ข์ํ๋ ๋ธ๋๋์ ํ๋ก๋ชจ์ ํ์ฌ์ ์ด๋ํ๋ ๋ฑ์ ๊ฐ์ธ๋ง์ผํ ์ ํ๋ค๋ฉด ๊ตฌ๋งค๋ฅผ ์ ๋ํด ๋งค์ถ์ ๋ ๋์ผ ์ ์์.
- 2๊ทธ๋ฃน

6663๋ช
์ฌ์ฑ 83%, ๋จ์ฑ 18%
40๋ 50%, 30๋ 20%, 50๋ 15%
์ด์ฉํจํด 4: 71%, 3: 10%
์ ํด์ฌ์ฑํฅ 5: 46%, 2: 12%, 4: 12%, 3: 11%
์ด์ฉํ์ ํ๊ท 57ํ
์ด์ฉ๊ธ์ก ํ๊ท 220๋ง์
์ด๋ฆผ๋ ฅ ํ๊ท 0.2
์ทจ๋ฏธ์ ํ๋ณต๊ธฐ์ฌ๋ ํ๊ท 0.19
40๋ ์ ํ์ ์ฌ์ฑ. A02๋ฅผ ๊ฝค ์์ฃผ ์ด์ฉ. ์ด๋ฆผ๋ ฅ๊ณผ ์ทจ๋ฏธ์ ํ๋ณต๊ธฐ์ฌ๋๊ฐ ํ๊ท ๋ณด๋ค ์ด์ง ๋์. ๊ธ,ํ ,์ผ์ ์ฃผ๋ก ์ด์ฉํ๊ณ ํ ์์ผ์ ๊ฐ์ฅ ๋ง์ด ์ด์ฉ.
โ ๊ฐ์ฅ ๊ท๋ชจ๊ฐ ํฐ ๊ทธ๋ฃน. ์ฃผ๋ง์ ์ฅ์ ๋ณด๋ ๊ฐ์ .
A02์ ํด์ฌ์์ ํ ์์ผ์ ์ด๋ฆผ๊ณผ ๊ด๋ จ๋ ์ํ์ ๋ง์ผํ ์งํ ์ ๋์ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์์.
- 3๊ทธ๋ฃน

4904๋ช
์ฌ์ฑ 30%, ๋จ์ฑ 70%
30๋ 53%, 20๋ 15%, 40๋ 14%
์ด์ฉํจํด 3: 49%, 4: 21%
์ ํด์ฌ์ฑํฅ 3: 39%, 6: 14%, 1: 14%
์ด์ฉํ์ ํ๊ท 43ํ
์ด์ฉ๊ธ์ก ํ๊ท 139๋ง์
30๋ ์ ํ์ ๋จ์ฑ. ์ฃผ์ค ์ด์ฉ๋์ด ๋ง์ ํธ. ํน๋ณํ ์์ฃผ ์ด์ฉํ๋ ์ ํด์ฌ ์์.
โ ์ด์ฉ ํ์๊ฐ ๊ฐ์ฅ ์ ์. ํ์ํ๋ค๊ณ ๋๋ ๋๋ง ์ด์ฉํ๋ ๊ฒฝํฅ์ด ์์ด๋ณด์.
๊ณ ๊ฐ์ด ๋ชฐ๋๋ ํ์ํ ์ํ์ ์ถ์ฒํ๋ฉฐ ์ด์ฉ์ ์ ๋ํ๋ ๋ฐฉ๋ฒ.
- 4๊ทธ๋ฃน

107๋ช
์ฌ์ฑ 69%, ๋จ์ฑ 31%
40๋ 40%, 30๋ 27%, 50๋ 25%
์ด์ฉํจํด 4: 61%, 5: 14%
์ ํด์ฌ์ฑํฅ 4: 96%
์ด์ฉํ์ ํ๊ท 180ํ
์ด์ฉ๊ธ์ก ํ๊ท 1์ต์
ํจ์ ๊ด์ฌ๋ ํ๊ท 2.4
์์ด์ํ์๋น ํ๊ท 0.5
์คํํ ์ถ ์๊ตฌ ํ๊ท 2.5
์ธ์,์๋ ํ๊ท 1.1
40๋ ์ ํ์ ์ด์ฉ๊ธ์ก์ด ๋์ ๊ณ ๊ฐ.
๋๋ถ๋ถ A01 ์ ํด์ฌ๋ฅผ ์ด์ฉํ๋ฉฐ ๊ธ,ํ ,์ผ, ๊ทธ์ค ํ ์์ผ์ ๊ฐ์ฅ ๋ง์ด ์ด์ฉํจ.
ํจ์ ๊ด์ฌ๋์ ์คํํ ์ถ์ ๋ํ ์๊ตฌ๊ฐ ๋์.
์ธ์์ ํ๋ฉฐ ์์ด๊ฐ ์์ ํ๋ฅ ์ด ์์.
โ ํจ์ ๊ด์ฌ๋์ ์ถ์ ์ง์ ๋ํ ์๊ตฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ฑด๋๋ฆด ์ ์๋
์๋ก์ด ์ ํ ์ถ์ฒ์ด ํจ๊ณผ๊ฐ ์์ ๊ฒ์ผ๋ก ๋ณด์.
- 5๊ทธ๋ฃน

647๋ช
์ฌ์ฑ 72%, ๋จ์ฑ 28%
40๋ 36%, 30๋ 28%, 50๋ 21%
์ด์ฉํจํด 4: 59%, 3: 19%
์ ํด์ฌ์ฑํฅ 4: 86%
์ด์ฉํ์ ํ๊ท 143ํ
์ด์ฉ๊ธ์ก ํ๊ท 3115๋ง์
์ด๋ฆผ๋ ฅ 0.16
ํจ์ ๊ด์ฌ๋ ํ๊ท 1.4
์์ด์ํ์๋น ํ๊ท 0.4
์คํํ ์ถ ์๊ตฌ ํ๊ท 1.5
์ธ์,์๋ 0.6
40๋ ์ ํ์ ์ฌ์ฑ ๊ณ ๊ฐ.
A01 ์ ํด์ฌ๋ฅผ ๋ง์ด ์ด์ฉํ๋ฉฐ ๊ธ,ํ ,์ผ, ๊ทธ์ค ํ ์์ผ์ ๊ฐ์ฅ ๋ง์ด ์ด์ฉํจ.
์ด๋ฆผ๋ ฅ์ด ์๊ณ ํจ์ ๊ด์ฌ๋์ ์คํํ ์ถ์ ๋ํ ์๊ตฌ๊ฐ ๋์.
์ธ์์ ์ข ์ข ํ๋ฉฐ ์์ด๊ฐ ์์ ํ๋ฅ ์ด ์์.
โ 5๊ทธ๋ฃน์๋ ์์ด๊ฐ ์๋ 3์ธ ์ด์ ๊ฐ์กฑ์ ํ๊ฒ์ผ๋ก ํ ๋ง์ผํ ์งํ.
(A01 ์ ํด์ฌ ๋ด ์๋น์ ๊ธ์ก ์กฐ๊ฑด๋ถ ํ ์ธ์ฟ ํฐ ์ ๊ณต ๋ฑ)
- 6๊ทธ๋ฃน

5547๋ช
์ฌ์ฑ 87%, ๋จ์ฑ 13%
40๋ 47%, 30๋ 19%, 50๋ 17%
์ด์ฉํจํด 3: 52%, 4: 18%
์ ํด์ฌ์ฑํฅ 4: 66%
์ด์ฉํ์ ํ๊ท 71ํ
์ด์ฉ๊ธ์ก ํ๊ท 441๋ง์
ํจ์ ๊ด์ฌ๋ ํ๊ท 0.2
์์ด์ํ์๋น ํ๊ท 0.08
์คํํ ์ถ ์๊ตฌ ํ๊ท 0.1
์ธ์,์๋ 0.3
40๋ ์ ํ์ ์ฌ์ฑ ๊ณ ๊ฐ.
๋ค์ํ ์ ํด์ฌ๋ฅผ ์ด์ฉํ๋ฉฐ ๊ทธ ์ค์์๋ A01 ์ ํด์ฌ๋ฅผ ๋ง์ด ์ด์ฉ.
์ฃผ์ค์ ์ด์ฉ๋์ด ์๋ ํธ.
ํจ์ ๊ด์ฌ๋์ ์คํํ ์ถ์ ๋ํ ์๊ตฌ๊ฐ ํ๊ท ๋ณด๋ค ๋์.
๊ฐ์กฑ ์ธ์์ ๊ฐ๋ ํ๋ ํธ์ด๋ฉฐ ์์ด๊ฐ ์์ ํ๋ฅ ์ด ์์.
โ ์ด์ฉ ํ์์ ๋นํด ์ด์ฉ ๊ธ์ก์ด ๋ฎ๋ค. ๋ง์กฑ์ค๋ฌ์ด ์ ํ์ ์ฐพ์ง ๋ชปํ์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก ์ํ์ถ์ฒ๊ณผ ํจ๊ป ํ ์ธ์ฟ ํฐ์ ๋ฐํํ๋ค.
4. ๊ตฐ์ง ๋ด ์ถ์ฒ์์คํ
์ปค๋ค๋ ๊ตฐ์ง์ ๊ณ ๊ฐ์ด ๋ชจ๋ ๊ฐ์ ์ํ์ ๊ตฌ๋งคํ๋ ๊ฒ์ ๊ธฐ๋ํ๊ธฐ๋ ์ด๋ ต๋ค.
ํ๋ช ํ ์๋น๋ฅผ ํ๋ ๊ณ ๊ฐ์ด ๋ง์์ก๊ณ ๊ฐ์ธ๋ง๋ค ์ทจํฅ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ๋น์ทํ ํน์ฑ์ ๊ฐ์ง ๊ทธ๋ฃน์์์๋ ์ํ์ ๋ณด๋ ๊ด์ ์ด ๋ค๋ฅผ ์ ์๋ค. ๋ฐ๋ผ์ ๊ตฐ์ง์ด ์๋ ๊ฐ์ธ์ ๋ํ ์ํ ์ถ์ฒ์ด ํ์ํ๋ค.
๋ํ ๊ณ ๊ฐ์ ์ ์ฅ์์๋ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ํ์ ๋น๊ตํ๋ ๊ณผ์ ์์ด ๋ง์กฑ์ค๋ฌ์ด ์ ํ์ ์ฐพ์ ์ ์๊ณ , ๋ชฐ๋๋ ์ทจํฅ์ ์ฐพ์ ์ ์๋ค.
ALS ์ถ์ฒ์์คํ
ALS๋ ์ ์ฌ ์์ธ ํ์ ํํฐ๋ง์ ์ด์ฉํ๋ ๋ชจ๋ธ์ด๋ค.
ํ์ ํํฐ๋ง์ ์ฌ์ฉ์์ ์์ดํ ๊ฐ ์ํธ์์ฉ์ ํ์ธํด์ ํ๋ ฌ์ ๋น๊ณต๊ฐ์ ์ถ๋ก ํ๋ ๋ฐฉ๋ฒ์ธ๋ฐ,
์ฌ์ฉ์์ ์์ดํ ์ฌ์ด์ ์ ์ฌ๋ ์ด๋ค ์์ธ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ํ๋ ฌ ๋ถํด๋ฅผ ํตํด ๊ทธ ์์ธ์ ์ฐพ์๋ผ ์ ์๋ค.
(์ฌ์ฉ์-์์ดํ ์ํธ ์์ฉ ํ๋ ฌ์ ๋ ๊ฐ์ ์ ์ฐจ์ ์ง์ฌ๊ฐํ ํ๋ ฌ์ ๊ณฑ์ผ๋ก ๋ถํดํ์ฌ ์๋)
์ฌ์ฉ์์ ์ ์ฌ์์ธ๊ณผ ์์ดํ ์ ์ ์ฌ์์ธ์ ๋ด์ ํด์ ๊ตฌ๋งค ํ๋ ฌ์ ๊ณ์ฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
ALS๋ ์ฌ์ฉ์,์์ดํ ํ๋ ฌ ์ค ํ๋๋ฅผ ๊ณ ์ ์ํค๊ณ ๋ค๋ฅธ ํ๋์ ํ๋ ฌ์ ์ต์ ํํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ALS ์ ์ ์ด์
- ์๋ ดํ๋ ํ๋ ฌ์ ์ฐพ์ ์ ์๋ค.์ฌ์ฉ์ ํ๋ ฌ๊ณผ ์์ดํ ํ๋ ฌ์ ๋์์ ์ต์ ํํ๋ฉด Non-convexํ๊ธฐ๋๋ฌธ์ local minima๋ฅผ ๊ฐ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ALS ๋ชจ๋ธ์ ํ๋์ ํ๋ ฌ์ ๊ณ ์ ํ๊ณ ๋๋จธ์ง ํ๋์ ํ๋ ฌ์ ์ต์ ํํ๋ ๋ฐฉ์์ ๋ฐ๋ณตํ๊ธฐ๋๋ฌธ์ Convexํํ๋ก์ ์๋ ดํ๋ ํ๋ ฌ์ ์ฐพ์ ์ ์๋ค.
-
๊ตฌ๋งค๋ฐ์ดํฐ์ ๋ถํ์ค์ฑ์ ๋ฐ์ํ ์ ์๋ค.๊ตฌ๋งค์ ๊ฐ์ Implicit Feedback์ ์ ํธ๋ฅผ ๋ํ๋ด๋ ์งํ๊ฐ ์๋๊ธฐ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ๋ขฐ๋๊ฐ ๋ถ์กฑํ๋ค. ์ฌ์ฉ์๊ฐ ํด๋น ์์ดํ ์ ๊ตฌ๋งคํ์ง๋ง ๋ถ๋ง์กฑํ์์ ์๋ ์๊ณ , ๊ตฌ๋งคํ์ง ์์ ๋ชจ๋ ์์ดํ ์ ์ซ์ดํ๋ ์์ดํ ์ผ๋ก ํ๋จํ ์๋ ์๋ค. ์ด๋ฌํ ๋ถํ์ค์ฑ์ ALS์ Confidence๋ฅผ ํตํด ๋ฐ์ํ ์ ์๋ค.
- ๊ฐ ๊ตฐ์ง๋ณ ์ถ์ฒ์์คํ ์ ์ฉ
์ ์ ํ ํ๋ผ๋ฏธํฐ๋ ๋ฐ์ดํฐ์ ๋ง๋ค ๋ค๋ฅด๊ณ , ๋ฐ์ดํฐํ๋ ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค. ๋ํ, ์ต์ ํ ์๊ฐ์ด ๋งค์ฐ ๊ธด ๊ฒ๋ ํจ์จ์ ์ด์ง ์๋ค. ๋ฐ๋ผ์ ๊ตฐ์ง๋ง๋ค ๊ฐ๊ฐ ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฉํด ์ต์ ํ์์ผ๋ณด๊ณ , ์ ์ ํ ์๊ฐ ๋ด์์ ๊ฐ์ฅ ์ข์ ํผํฌ๋จผ์ค๋ฅผ ๋ด๋ ์ต์ ์ ๊ตฐ์ง๋ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ตฐ์ง๋ณ๋ก ๋๋คํ ๊ณ ๊ฐ์ ํ๋ช ์ ์ ํด, ํด๋น ๊ณ ๊ฐ์๊ฒ ์ถ์ฒํ๋ ์ํ ๋ฆฌ์คํธ๋ฅผ ํ์ธํด๋ณด์๋ค.

def loss_function(C, P, xTy, X, Y, r_lambda):
predict_error = np.square(P - xTy)
confidence_error = np.sum(C * predict_error)
regularization = r_lambda * (np.sum(np.square(X))+ np.sum(np.square(Y)))
total_loss = confidence_error + regularization
return np.sum(predict_error),confidence_error, regularization, total_loss
def optimizer_user(X, Y, C, P, nu, nf, r_lambda):
yT = np.transpose(Y)
for u in range(nu):
Cu = np.diag(C[u])
yT_Cu_y = np.matmul(np.matmul(yT,Cu),Y)
l = np.dot(r_lambda,np.identity(nf))
yT_Cu_pu = np.matmul(np.matmul(yT,Cu),P[u])
X[u] = np.linalg.solve(yT_Cu_y + l , yT_Cu_pu)
def optimizer_item(X, Y, C, P, ni, nf, r_lambda):
xT = np.transpose(X)
for i in range(ni):
Ci = np.diag(C[:,i])
xT_Ci_x = np.matmul(np.matmul(xT,Ci),X)
l = np.dot(r_lambda, np.identity(nf))
xT_Ci_pi = np.matmul(np.matmul(xT,Ci),P[:,i])
Y[i] = np.linalg.solve(xT_Ci_x + l,xT_Ci_pi)
predict_errors = []
confidence_errors = []
regularization_list = []
total_losses = []
for i in range(15):
if i!=0:
optimize_user(X, Y, C, P, nu, nf, r_lambda)
optimize_item(X, Y, C, P, ni, nf, r_lambda)
predict = np.matmul(X, np.transpose(Y))
predict_error, confidence_error, regularization, total_loss = loss_function(C, P, predict, X, Y, r_lambda)
predict_errors.append(predict_error)
confidence_errors.append(confidence_error)
regularization_list.append(regularization)
total_losses.append(total_loss)
print('----------------step %d----------------' % i)
print("predict error: %f" % predict_error)
print("confidence error: %f" % confidence_error)
print("regularization: %f" % regularization)
print("total loss: %f" % total_loss)
predict = np.matmul(X, np.transpose(Y))
print('final predict')
print([predict])
from matplotlib import pyplot as plt
%matplotlib inline
plt.subplots_adjust(wspace=100.0, hspace=20.0)
fig = plt.figure()
fig.set_figheight(10)
fig.set_figwidth(10)
predict_error_line = fig.add_subplot(2, 2, 1)
confidence_error_line = fig.add_subplot(2, 2, 2)
regularization_error_line = fig.add_subplot(2, 2, 3)
total_loss_line = fig.add_subplot(2, 2, 4)
predict_error_line.set_title("Predict Error")
predict_error_line.plot(predict_errors)
confidence_error_line.set_title("Confidence Error")
confidence_error_line.plot(confidence_errors)
regularization_error_line.set_title("Regularization")
regularization_error_line.plot(regularization_list)
total_loss_line.set_title("Total Loss")
total_loss_line.plot(total_losses)
plt.show()
# ๊ณ ๊ฐ์ด ์ฐ ๋ฌผํ
k = test_df.iloc[rcust]
k_index = np.array(k[k != 0].index)
k_index
#cust_id =๊ณ ๊ฐ ์์ด๋, user_item: ์์ธก ํ๋ ฌ, real:์ค์ ํ๋ ฌ, N: ์ถ์ฒ ํ๋ชฉ ๊ฐ์
def recommend(cust_id, user_item, real, N):
pred_cust = predict_df.loc[cust_id]
real_cust = real.loc[cust_id]
real_index = np.array(real_cust[real_cust != 0].index)
pred_cust_dp = pred_cust.drop(labels=real_index,axis=0)
top = np.sort(pred_cust_dp)[- N:]
print(pred_cust[pred_cust.isin(top)])
1) ์ฒซ ๋ฒ์งธ ๊ตฐ์ง : ํฐ ์๋น ํ๋ ๊ท๋ชจ๊ฐ ์์ ๊ทธ๋ฃน
- ๋๋คํ ํน์ ๊ตฌ๋งค์๊ฐ 1๋ ๊ฐ ๊ตฌ๋งคํ ๋ฌผํ

- ์ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ์ง ์์ ์ํ ์ค, 10๊ฐ์ ์ถ์ฒ์ํ

โ ์์ ์ ๊พธ๋ฏธ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ ํ๋ค๊ณผ ์ฌ์ฑ ์๋ฅ๋ฅผ ๋ง์ด ์ฌ๋ ๊ณ ๊ฐ์๊ฒ ๊ทธ์ ๊ด๋ จํด์ ์์ฐํฐ, ํ ํธ๋ฐฑ, ํฅ์, ํ์ด์ ํด๋ ์ ์ ๊ฐ์ด ์์ ์ ๊พธ๋ฏธ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ ํ๊ตฐ์ ์ฃผ๋ก ์ถ์ฒํด ์ค.
2) ๋ ๋ฒ์งธ ๊ตฐ์ง : ์ฃผ๋ง์ ์ฅ์ ๋ณด๋ ๊ฐ์
- ๋๋คํ ํน์ ๊ตฌ๋งค์๊ฐ 1๋ ๊ฐ ๊ตฌ๋งคํ ๋ฌผํ

- ์ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ์ง ์์ ์ํ ์ค, 10๊ฐ์ ์ถ์ฒ์ํ

โ ์์ฌ๋ฃ ๊ตฌ๋งค๋ด์ญ์ด ๋ง์ ๊ณ ๊ฐ์๊ฒ ๋ค๋ฅธ ์์ฌ๋ฃ๋ฅผ ์ถ์ฒํด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์์. ๊ฐํน ์ฌ์ฑ ์๋ฅ๋ฅผ ๊ตฌ๋งคํ ์ด๋ ฅ์ด ์๋ ๊ณ ๊ฐ์๊ฒ ์ฌ์ฑ ์๋ฅ ๊ด๋ จ ํ๋ชฉ ๋ํ ์ถ์ฒํจ.
3) ์ธ ๋ฒ์งธ ๊ตฐ์ง : ํ์์ ์ํ ๊ฐํ์ ์๋น
- ๋๋คํ ํน์ ๊ตฌ๋งค์๊ฐ 1๋ ๊ฐ ๊ตฌ๋งคํ ๋ฌผํ

- ์ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ์ง ์์ ์ํ ์ค, 10๊ฐ์ ์ถ์ฒ์ํ

โ ์ํ๊ถ, ๋๋ํผ์, ํจ์คํธํธ๋๋ง์ ๊ตฌ๋งคํ ๊ณ ๊ฐ์๊ฒ ๊ด๋ จ์ํ๋ฟ๋ง ์๋๋ผ ์ ํธํ ์ ์๋ ๋ค๋ฅธ ๋ค์ํ ์ํ๊ตฐ์ ์ถ์ฒํด์ค. ๊ณ ๊ฐ์ด ๋ชฐ๋๋ ํ์ํ ์ํ์ ์ถ์ฒํ๋ฉฐ์ด์ฉ์ ์ ๋ํ ์ ์์.
4) ๋ค ๋ฒ์งธ ๊ตฐ์ง : ํจ์ ๊ด์ฌ๋, ์ถ์ ์ง์ ๋ํ ์๊ตฌ ๋์
- ๋๋คํ ํน์ ๊ตฌ๋งค์๊ฐ 1๋ ๊ฐ ๊ตฌ๋งคํ ๋ฌผํ

- ์ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ์ง ์์ ์ํ ์ค, 10๊ฐ์ ์ถ์ฒ์ํ

โ ๊ณจํ, ์์, ์ฃผ๋ฅ, ๊ฐ์๊ฑฐ๋ฆฌ, ๊ฐ์ ์ ํ ๋ฑ ๋ค์ํ ์ ํ๊ตฐ์ ๊ตฌ๋งคํ์ฌ ์ฌ๋ฌ ์ข ๋ฅ์ ์ ํ์ ๋ค์ํ๊ฒ ์ถ์ฒํด์ค.
ํจ์ ๊ด์ฌ๋์ ์ถ์ ์ง์ ๋ํ ์๊ตฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ถ์ฒํจ๊ณผ๊ฐ ํด ๊ฒ์ผ๋ก ๋ณด์ด๋ฏ๋ก ๋ค๋ฅธ ๊ณ ๊ฐ๊ตฐ๋ณด๋ค ์ ๊ทน์ ์ธ ์ถ์ฒ์๋น์ค๋ฅผ ์ ๊ณต.
5) ๋ค์ฏ ๋ฒ์งธ ๊ตฐ์ง : ์์ด๊ฐ ์๋ 3์ธ ์ด์ ๊ฐ์กฑ์ ์๋น ์ฑํฅ
- ๋๋คํ ํน์ ๊ตฌ๋งค์๊ฐ 1๋ ๊ฐ ๊ตฌ๋งคํ ๋ฌผํ

- ์ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ์ง ์์ ์ํ ์ค, 10๊ฐ์ ์ถ์ฒ์ํ

โ ๊ฐํธ์๊ณผ ์ก๋ฅ, ์์ฌ๋ฃ๋ฅผ ์์ฃผ ๊ตฌ๋งคํ๋ ๊ณ ๊ฐ์๊ฒ ๋น์ทํ ์ ํ์ ์ถ์ฒํด์ค.
6) ์ฌ์ฏ ๋ฒ์งธ ๊ตฐ์ง : 1ํ๋น ๊ตฌ๋งค๊ธ์ก์ด ๋ฎ์.
- ๋๋คํ ํน์ ๊ตฌ๋งค์๊ฐ 1๋ ๊ฐ ๊ตฌ๋งคํ ๋ฌผํ

- ์ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ์ง ์์ ์ํ ์ค, 10๊ฐ์ ์ถ์ฒ์ํ

โ ๊ตฌ๋งคํ ๋ฌผํ๊ณผ ๊ด๋ จ๋ ์ ํ๊ตฐ์ ๋ค์ํ ์ ํ์ ์ถ์ฒํด์ค. ์ ์คํ๊ฒ ์ ํ์ ๊ณ ๋ฅด๋ ๊ณ ๊ฐ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก ์ถ์ฒ์๋น์ค๋ฅผ ํตํด ์ถฉ์ฑ๋ ๋์ ๊ณ ๊ฐ์ด ๋ ์ ์์.
- ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ
์ค์ ๊ตฌ๋งค ํ๋ ฌ์์ ๋๋คํ ๊ณ ๊ฐ์ ์ ์ ํ์ฌ ๊ทธ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ ๋ฌผํ ์ค 20%๋ฅผ ์ฌ์ง ์์๋ค๊ณ ๊ฐ์ ํ๋ค.
๊ฐ์ ๊ตฌ๋งค ํ๋ ฌ์ ํตํด ์ถ์ฒํ 10๊ฐ์ ๋ฌผํ ์ค, ์ค์ ๋ก ๊ตฌ๋งคํ์ง๋ง ๊ตฌ๋งคํ์ง ์์๋ค๊ณ ๊ฐ์ ํ ๋ฌผํ์ ๋น์จ์ ํ์ธํ๋ค.

๋๋ค ๊ณ ๊ฐ์ ๋ํด์ 10๊ฐ์ ๋ฌผํ์ ์ถ์ฒํ๋ ์์ ์ 6ํ ๋ฐ๋ณตํ๋ค.
60๊ฐ์ ์ถ์ฒ ๋ฌผํ ์ค 34๊ฐ, 57%๋ฅผ ์ค์ ๋ก ์ฐ ๊ฒ์ผ๋ก ๋์๋ค.
์์ ์ ์๊ฐ ๋์ ์ ํ ๋ชฉ๋ก์,
1. ์ค์ ๋ก ์ ํธ๋๊ฐ ๋์ง๋ง ๋ชจ๋ฅด๋ ์ ํ์ด๊ฑฐ๋,
2. ์ค์ ๋ก ์ ํธ๋๊ฐ ๋์ง๋ง ํ์ฌ์์ ์์ ์์ง์ ๊ตฌ๋งคํ์ง ์์ ์ ํ์ด ๋ง์ ์ ์๋ค.
(๊ทธ๋ฆฌ๊ณ ์ถ์ฒ์์คํ ์์ฒด๋ ์์ ๊ฐ์ ์ผ์ด์ค๋ฅผ ์ํ ์์คํ ์ด๋ค.)
๋ฐ๋ผ์ ๊ทธ๋ฌํ ์ ํ์ ํฌํจํ ์ถ์ฒ๋ชฉ๋ก์์ ์ค์ ๊ตฌ๋งคํ ์ ํ์ ๋น์จ์ด 50% ์ด์์ด๋ผ๋ ๊ฒ์ ๋์์ง ์์ ์ฑ๋ฅ์ ๋ณด์์ ์๋ฏธํ๋ค.
- ์ถ์ฒ์์คํ ์ ๋ง์ผํ ํจ๊ณผ
์ถ์ฒ ์์คํ ์ ๊ตฌ๋งค๋ด์ญ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ธ์๊ฒ ์ด๋ฏธ ์ ํธ๊ฐ ํ์ธ๋ ์ ํ๊ณผ ์ ํธํ ํ๋ฅ ์ด ๋์ ์ ํ์ ๋ชจ๋ ์ถ์ฒํด์ค๋ค.
๊ธฐ์กด ์ด์ฉ๋ด์ญ์ด ๋ง์ ๊ณ ๊ฐ์๊ฒ๋ ์ทจํฅ์ ๋์ฑ ์ ํํ๊ฒ ์์ธกํด ๋ง์กฑ์ค๋ฌ์ด ์ถ์ฒ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค ์ ์๊ณ
์ด์ฉ๋ด์ญ์ด ์ ์ ๊ณ ๊ฐ์๊ฒ๋ ์ข์ํ ๋งํ ์ ํ์ ์ถ์ฒํ๋ฉฐ ์ถ๊ฐ์ ์ธ ์ด์ฉ์ ์ด๋์ด๋ผ ์ ์๋ค.
์ด๋ฅผ ํตํด, ๊ณ ๊ฐ์ ๊ธฐ์ ์ด ์ ๊ณตํ๋ ์๋น์ค์ ๋ํด ๋ ๋์ ๋ง์กฑ๊ฐ์ ๋๋ ์ ์์ผ๋ฉฐ ๊ธฐ์ ์ ๋งค์ถ ์์น๊ณผ ํจ๊ป lock-inํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์๋ค.
์ฐธ๊ณ
- Ahmad Reyhan Abdillah, โCredit Card Customer Segmentation Using K-Prototype Clusteringโ, 2021.12.20. , https://rpubs.com/areyhan02/c3segm
RPubs - Credit Card Customer Segmentation Using K-Prototype Clustering
rpubs.com
- ์์ด๋ฆฌ์ค, โ7.54.1 R์์ ์ค๋ฃจ์ฃ ๋ถ์(Silhouette Analysis) ์ค์ํ๊ธฐโ, ์์ด๋ฆฌ์ค๋์ ๋ธ๋ก๊ทธ, 2021. 4. 2. , https://blog.naver.com/PostView.naver?blogId=pmw9440&logNo=222296565910
7.54.1 R์์ ์ค๋ฃจ์ฃ ๋ถ์(Silhouette Analysis) ์ค์ํ๊ธฐ
0. ์ฐจ๋ก 1. ๋ค์ด๊ฐ๊ธฐ 2. ์ค๋ฃจ์ฃ ๊ณ์(Sihouette Coefficient) ๊ตฌํ๊ธฐ 3. R์์ ์ค๋ฃจ์ฃ ๋ถ์์ค์ํ๊ธฐ : c...
blog.naver.com
- ์ผ์ฐฝ๋ํ์คํด,โ ๊ฐ์๋จน๋ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ [5] ALS ๊ตฌํํ๊ธฐโ, ๊ฐ์๋จน๋ ๋จธ์ ๋ฌ๋, 2019. 3. 29. , https://yeomko.tistory.com/8
๊ฐ์๋จน๋ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ [5] ALS ๊ตฌํํ๊ธฐ
์ง๋ ๊ธ ๊ฐ์๋จน๋ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ [1] ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ ๊ฐ์๋จน๋ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ [2] Collaborative Filtering ๊ฐ์๋จน๋ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ [3] Matrix Factorization ๊ฐ์๋จน๋ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ [4] Alternating Least Squa
yeomko.tistory.com
- ๊นํ์ฐ, โํ์ ํํฐ๋ง ๊ธฐ๋ฐ ์ถ์ฒ์์คํ โALSโ, Team EDA, 2020.12.21, 03. https://eda-ai-lab.tistory.com/529?category=736098
- [๊ณ ๊ธํ]์์ ๋ก์ด ์ผ๊ฐํจํด(์๋์์ฑํํฌํจ) (kocw.or.kr)
- ๋ ผ๋ฌธ์์ ์๋ชปํ๋ ์ธ์๋ถ์(์์ธ๋ถ์)๊ณผ ์ฃผ์ฑ๋ถ.. : ๋ค์ด๋ฒ๋ธ๋ก๊ทธ (naver.com)
๋ ผ๋ฌธ์์ ์๋ชปํ๋ ์ธ์๋ถ์(์์ธ๋ถ์)๊ณผ ์ฃผ์ฑ๋ถ ๋ถ์์ ์ฐจ์ด ์ดํด - ๋ฐ์คํฌ
๋ ผ๋ฌธ์์ ์๋ชปํ๋ ์ธ์๋ถ์(์์ธ๋ถ์)๊ณผ ์ฃผ์ฑ๋ถ ๋ถ์์ ๋ํ์ฌ 01 ๋ฐ์คํฌ(์ฐ์ธ๋ํ๊ต ์ธ์ง๊ณตํ์ฐ๊ตฌ์ค) ๋ ผ...
blog.naver.com
[R์ ํ์ฉํ ๋ ผ๋ฌธํต๊ณ] ์์ธ๋ถ์
์์ธ๋ถ์์ ๊ด์ธก ๊ฐ๋ฅํ ์ฌ๋ฌ ๋ณ์๋ก๋ถํฐ ์์์ ์์ธ์ ์ถ์ถํ์ฌ ๋ณ์ ๊ฐ์ ๊ด๋ จ์ฑ์ ์ค๋ช ํ๋ ๊ธฐ๋ฒ์ผ๋ก ...
blog.naver.com
์ฃผ์ฑ๋ถ๋ถ์๊ณผ ์์ธ๋ถ์์ ์ฐจ์ด
์ฃผ์ฑ๋ถ๋ถ์(Principal Component Analysis)๊ณผ ์์ธ๋ถ์(Factor Analysis)์ ์ฐจ์ด๊ฐ ๋ญ๊น์? ์์๋ก R์ ์ฌ์ฉํด์ ํฌ์ผ๋ชฌ ๋ฅ๋ ฅ์น ๋ฐ์ดํฐ์ ์ฐจ์์ ์ถ์ํด๋ณด๊ณ (PCA), ์จ๋ฆฌ์ผ ํ๊ฐ์ ํน์ฑ์ ๊ตฌ์ฑํ๋ ์ ์ฌ์ ์์ธ
pizzathief.oopy.io