# 데이터 마이닝 과정에서 매우 빈번하게 사용되는 변수간 관계의 시각적 확인
# 탐색적 분석을 위해 기초적인 플롯이나 그래프를 그린 후 시각적 의미 파악 가능 하도록
# 데이터와 그래픽 옵션을 조절해나가는 과정이 필요
# 앞서 플롯을 사용해 변수간 관계를 확인하기 위해 수행했던 기초적인 작업 복습
# M 과 타겟 변수간 관계 (미래 1년간 구매액)
plot(v_m, v_mf)
# 눈으로 보기에는 그래프상의 수천개 data point의 패턴이 드러나지 않으므로
# 두 변수간의 회귀선을 plot에 추가
# add regression line
abline(lm(v_mf~v_m, data=tb_tr0011), col="red")
# 보기에는 그냥 뭉뜽그려져 있어 보였던 M과 mf 간의 관계는 양의 선형 관계임을 확인
# 즉, 전년에 구매액이 많았을 수록 다음 해에 1년간 구매액은 클 것으로 예상됨
# 참고로 금액단위는 dollar, F의 단위는 구매상품건수
# 그러나 여전히 뭉뜽그려진 한 덩어리내의 구조에 대해서는 시각적으로는 확인 어려움
# 한쪽 축을 구간화(discretization) 시켜 단순화를 시도
# M은 연속형 숫자이므로 넓은 구간에 분포, 이를 단순화 시키기 위해 100으로 나누고
# 정수로 바꾸면서 소수점이하의 숫자를 제거하게 되어 100 단위의 집단으로 변환
# 집단을 단위로 플롯을 그리기 위해 데이터 타입을 character로 변환
tr0001$gv_m <- as.character(as.integer(v_m/100))
# 박스 플롯을 그리기 위해 ggplot2 패키지를 설치
install.packages("ggplot2")
library(ggplot2)
# qplot() 함수를 사용하여 플롯 그리기
qplot(gv_m, v_mf, data=tr0001, geom=c("boxplot","jitter"),
fill=gv_m, main="Future spending by past spending group",
xlab="Past spending group : gv_m (u:$100)", ylab="Future spending : v_mf (u: $)")
# 구간별로 박스 플롯이 작성되기는 했으나 문제는 여전히 구간이 많아서 관계가
# 눈에 잘 보이지 않음
# jitter를 제거
# 1000불을 기준으로 그 이하의 값만을 박스 플롯에 포함
# 대부분의 고객이 속하는 구간에서 10개 집단으로만 나눠 단순화하여 관계 확인
# refined plot: scope adjustment and removal of jitter
qplot(gv_m, v_mf, data=subset(tr0001, v_m <= 1000), geom=c("boxplot"),
fill=gv_m, main="Future spending by past spending group",
xlab="Past spending group (u:$100)", ylab="Future spending(u: $)")
# 박스플롯에서 평균값이 past spending group(gv_m) 값의 증가에 따라 거의 일정하게
# 증가하고 있음을 시각적으로 확인 가능
# past spending group(gv_m) 값이 커질 수록 Future spending 값의 분포가 넓은 영역에
# 걸쳐 나타남도 보여짐
# 색상은 구간 변수인 gv_m의 값을 나타냄
# 같은 방식으로 다른 변수와의 관계도 플롯 생성
# 이번에는 recency에 대한 관계를 생성
# a plot for recency
# 같은 방식으로 R 변수를 구간화 (30일 단위)
tr0001$gv_r <- as.character(as.integer(v_r/30))
# gv_r을 변수로 지정하고, 극단적으로 v_mf 즉 미래 1년 이용금액이 큰 일부 고객을 제외
qplot(gv_r, v_mf, data=subset(tr0001, v_r <= 180 & v_mf <=2000), geom=c("boxplot"),
fill=gv_r, main="Future spending by past spending group",
xlab="Recency group (u:30d)", ylab="Future spending(u: $)")
# 대부분의 고객이 180일 이내, 미래 2000불 이내의 구간에 속하므로 구간을 좁혀 단순화
# 시각적인 분석을 위해서는 관심있는 영역으로 시각화 범위를 좁히는 것 매우 중요
# Recency 경우에는 최근에 구매했을 수록 즉, v_r 값이 작을 수록 future spending의
# 평균값이 높음이 나타남. 최종구매후 2개월이상이 되면 미래 이용금액이
# Recency에 따라 크게 차이나지 않는 패턴이 됨
# 두 변수 모두를 구간화한 후 heatmap을 생성
# 구간별 frequency를 시각적으로 확인하기 위해 사용
# M과 R 간의 관계에 대한 heatmap
tr0001$gv_m <- as.character(as.integer(v_m/100))
tr0001$gv_r <- as.character(as.integer(v_r/30))
# 큰 값들에 대한 구간은 대상에서 제외. 구간을 나타내는 변수들만 선택
tr0002 <- subset(tr0001, v_m<1000 & v_r<180, select=c("gv_m", "gv_r"))
# heatmap에는 matrix 포맷의 데이터가 입력되어야 함
# table 함수를 이용하여 두 변수로 매트릭스 생성
rm_ctb<-table(tr0002$gv_r,tr0002$gv_m)
# 생성된 테이블의 값 확인
rm_ctb
0 1 2 3 4 5 6 7 8 9
0 243 185 161 131 96 75 47 39 32 25
1 93 99 50 38 43 21 15 11 10 5
2 76 54 41 23 25 13 13 4 7 1
3 88 61 29 18 12 8 5 4 5 5
4 95 67 46 35 14 8 13 3 5 3
5 107 58 46 22 9 12 7 6 2 4
# heatmap 생성. x축과 y축에 라벨을 지정하고 col = 옵션에는 heat.color를 지정
# heatmap은 자동으로 계층적 클러스터링을 수행함
hm_tr0002<-heatmap(rm_ctb, Rowv=F, Colv=F, col = heat.colors(256), scale="column", xlab = "spending group" , ylab = "recency group" , margins=c(5,10))
# 생성된 heatmap은 클러스터링에 따라 라벨의 순서가 섞여있음
# 이번에는 M과 MF 즉 미래 구매액간의 관계에 대한 heatmap 생성
tr0001$gv_mf <- as.character(as.integer(v_mf/100))
tr0002 <- subset(tr0001, v_m<1000 & v_mf<1000, select=c("gv_m", "gv_mf"))
rm_ctb<-table(tr0002$gv_m,tr0002$gv_mf)
rm_ctb
# 생성된 테이블의 값 확인
0 1 2 3 4 5 6 7 8 9
0 845 162 61 50 22 15 17 10 5 6
1 443 119 70 44 23 19 19 15 6 3
2 220 76 62 25 29 18 10 12 8 7
3 127 45 49 26 28 13 8 8 7 4
4 78 38 23 21 15 13 11 12 6 3
5 40 21 19 11 17 11 4 7 12 3
6 31 15 15 8 10 8 1 4 5 3
7 16 8 7 11 5 6 3 4 4 3
8 16 6 11 5 1 7 4 4 2 1
9 8 5 4 7 1 0 1 6 3 0
# heatmap에 클러스터링이 적용되지 않도록 Rowv와 Colv를 NA로 지정
# heat.colors의 값을 조절하여 구별이 용이하도록
hm_tr0002<-heatmap(rm_ctb, Rowv=NA, Colv=NA, col = heat.colors(100),
xlab = "future spending group" , ylab = "past spending group" , scale="column")
# 0-0 cell에 white 색이 되었고 반대로 9-9 cell은 red
# white가 frequency가 높은 cell
# 과거와 미래 모두에서 금액이 작은 집단에 돗수가 많음이 보임
# 과거에 금액이 작아도 미래에 금액이 큰 고객도 상당수 있음을 알수 있음
'R 데이터 분석' 카테고리의 다른 글
[워드클라우드 연습] 병원 경영 전략의 패턴 (0) | 2013.02.14 |
---|---|
[R 데이터 분석 연습] 텍스트로 부터 워드클라우드 그리기 연습 (0) | 2013.02.14 |
[R 데이터 분석 연습] ctree 를 보기 좋게 수정하는 custom 함수 활용 (0) | 2013.02.06 |
[R 데이터 분석 연습] RFM 데이터 준비와 모델링 (0) | 2013.02.05 |
R 디시젼 트리 기본적인 옵션 활용 (0) | 2013.02.02 |