안녕하세요. 오늘은 정형데이터마이닝의 두 번째 파트, 예측분석에 대해서 알아보도록 하겠습니다.
예측분석은 분류예측 방식을 연속형 값에 적용하는데 회귀분석과는 달리 연속적인 값을 하나하나 예측하는 것이 아니라,
집단별로 평균값을 예측합니다. 저번시간에 이어서 party패키지를 사용하므로 쭉 이어서 해도 되실 듯 합니당~
1. 정의
# 관찰 대상의 변수를 이용하여 연속적인 값을 예측하는 분석으로 분류 분석이 범주를 예측하는데 비해 예측분석은 연속적인 수치를 예측한다.
# 활용 분야 : 금융기관 고객의 소득 수준, 자녀의 키 등 연속적인 결과 값에 대한 예측
2. party 패키지 분석 사례
classification의 사례에서 아래의 범주형 변환을 제외하고 실행하면 연속형으로 예측하게 된다.
####ㅋㅋㅋㅋㅋㅋ 책에는 이렇게가 끝이에요 (??????????) 예측 분석하고 반 페이지 적혀있고 끝..##
# 뭐 큰 차이가 없나 봅니다. 저는 아직 고수가 아니라서. 실제로 다시 해보고자 합니다. 저는 껐다가 다시 켰으므로 패키지 설치부터 하겠습니다.
install.packages("HDclassif")
install.packages("party")
library(HDclassif)
library(party)
data(wine)
위 까지는 똑같구요!
str(wine)
'data.frame': 178 obs. of 14 variables:
$ class: int 1 1 1 1 1 1 1 1 1 1 ...
$ V1 : num 14.2 13.2 13.2 14.4 13.2 ...
$ V2 : num 1.71 1.78 2.36 1.95 2.59 1.76 1.87 2.15 1.64 1.35 ...
$ V3 : num 2.43 2.14 2.67 2.5 2.87 2.45 2.45 2.61 2.17 2.27 ...
$ V4 : num 15.6 11.2 18.6 16.8 21 15.2 14.6 17.6 14 16 ...
$ V5 : int 127 100 101 113 118 112 96 121 97 98 ...
$ V6 : num 2.8 2.65 2.8 3.85 2.8 3.27 2.5 2.6 2.8 2.98 ...
$ V7 : num 3.06 2.76 3.24 3.49 2.69 3.39 2.52 2.51 2.98 3.15 ...
$ V8 : num 0.28 0.26 0.3 0.24 0.39 0.34 0.3 0.31 0.29 0.22 ...
$ V9 : num 2.29 1.28 2.81 2.18 1.82 1.97 1.98 1.25 1.98 1.85 ...
$ V10 : num 5.64 4.38 5.68 7.8 4.32 6.75 5.25 5.05 5.2 7.22 ...
$ V11 : num 1.04 1.05 1.03 0.86 1.04 1.05 1.02 1.06 1.08 1.01 ...
$ V12 : num 3.92 3.4 3.17 3.45 2.93 2.85 3.58 3.58 2.85 3.55 ...
$ V13 : int 1065 1050 1185 1480 735 1450 1290 1295 1045 1045 ...
#저번에는 class변수가 integer형태였어서 factor형태로 바꾸었는데, 이번엔 바꾸지 않습니다!!wine$class<-factor(wine$class) 저번에 했던 것을 이렇게 싹 지우고요~
table(wine$class)
1 2 3
59 71 48
set.seed(2020)
ind<-sample(2, nrow(wine), replace=TRUE, prob=c(0.7,0.3))
table(ind)
ind
1 2
128 50
tr_wine<-wine[ind==1,]
val_wine<-wine[ind==2,]
#마찬가지로 위와같이 난수 초기값을 설정한 후, ind에 랜덤복원추출을 0.7, 0.3으로 나누어서 두 Set으로 나눕니다.
#저번에 하셨던 것 처럼 training set과 validation set으루요~
mdl_party <- ctree(class ~. , data=tr_wine)
plot(mdl_party)
# 위에서 설명한 것 처럼 저번에 분류방식은 연속형 값에 적용하는 데, 예측방식은 집단별로 예측합니다. 저렇게 o 표시는 outlier겠죠?
# 저번 시간과 거의 동일해서 설명을 많이 생략할게요~! 하지만 저번 과는 그래프가 다르다는 것을 유심히 봐주세요.
plot(mdl_party, type="simple")
#요렇게 나옵니다. 분류 분석에서는 각각 그래프 barplot마다 숫자가 다 달랐지만 요번에는 그냥 몇 개가 속하고, 단일 값을 보여주죠?
# 마찬가지로 분류 결과를 predict(mdl_party)를 통해서 확인이 가능하고, 이를 실제 결과와 비교한 matrix를 저장합니다.
res_tr<-table(predict(mdl_party), tr_wine$class)
res_tr
1 2 3
1 39 0 0
1.909090909090901 1 10 0
2 0 28 0
2.125 0 14 2
3 0 0 34
이렇게 tr_wine$class변수를 column에 넣고, predict결과를 저렇게 테이블화 하면, 대체로 잘 되었으나,
저번과 마찬가지로 1과 3에서 이상치가 있군요.
# 나머지는 저번시간과 마찬가지로 해보면 됩니다.
사실 예측분석과 분류분석의 이번 사례에서의 차이는 범주를 예측하느냐, 연속적인 수치를 예측하느냐
이런 건데, 이번 예제로는 하나 하나를 직접 예측 하는 것과 같습니다.
사실 제 생각으로는 이 예제로는 예측분석 하는게 조금 먼가 딱 와닿지는 않는 것 같아요.
다음에 더 좋은 사례가 있으면 소개하겠습니다. 다음 시간에는 군집분석(Clustering)에 대해 알아볼게요.
'## 오래된 게시글 (미관리) ## > R' 카테고리의 다른 글
27. 정형 데이터마이닝 - 연관성 분석(Association Analysis) (0) | 2018.11.21 |
---|---|
26. 정형 데이터마이닝 - 군집분석(Clustering) (0) | 2018.11.21 |
24. 정형 데이터마이닝 - 분류분석(Classification) (0) | 2018.11.21 |
23. Missing Data, 이상치 (0) | 2018.11.21 |
22. 데이터 가공 (2) | 2018.11.21 |