본문 바로가기
## 오래된 게시글 (미관리) ##/R

25. 정형 데이터마이닝 - 예측 분석(Prediction)

by #Glacier 2018. 11. 21.
반응형

안녕하세요. 오늘은 정형데이터마이닝의 두 번째 파트, 예측분석에 대해서 알아보도록 하겠습니다.


예측분석은 분류예측 방식을 연속형 값에 적용하는데 회귀분석과는 달리 연속적인 값을 하나하나 예측하는 것이 아니라, 

집단별로 평균값을 예측합니다. 저번시간에 이어서 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)에 대해 알아볼게요.





반응형