반응변수(또는 종속변수)가 알려진 다변량 자료를 이용하여 모형을 구축하고, 이를 통해 새로운 자료에 대한 예측 및 분류를 수행하는 것이 목적입니다. 즉, 주어진 데이터를 미리 정의된 여러 클래스 중 하나로 분류하는 작업을 의미합니다.
코드의 특정 속성의 값을 미리 알아맞히는 점
분류 : 레코드의 범주형 속성의 값을 알아맞히는 것
예측 : 레코드의 연속형 속성의 값을 알아맞히는 것
로지스틱회귀, 의사결정나무, 인공신경망, 앙상블, k최근접 이웃, 나이브 베이즈 등이 있습니다.
로지스틱 회귀분석은 종속 변수가 범주형 데이터인 경우에 사용되는 통계 분석 기법 중 하나이다.
더미변수란?
범주형 자료를 표현하는 데 사용되는 이진 변수(0 또는 1의 값)이다. 예를 들어 남성은 1, 여성은 0으로 표현할 수 있다.
| 목적 | 선형회귀 분석 | 로지스틱 회귀분석 |
|---|---|---|
| 종속변수 | 연속형 변수 | (0,1) |
| 계수 추정법 | 최소제곱법 | 최대우도추정법 |
| 모형 검정 | F-검정, t-검정 | 카이제곱 검정(-test) |
참고하면 좋을 내용 👀
최대우도추정법 (MLE : Maximum Likelihood Estimation)
- 우도란, 주어진 데이터가 어떤 확률 분포에서 나왔을 때, 해당 모수가 얼마나 '그럴듯한'지를 나타내는 것이다.
- 최대우도추정법은 확률 분포의 모수를 추정하는 통계적 방법 중 하나이다. 최대 우도는 주어진 데이터가 주어진 모수 아래에서 가장 가능성(우도)이 높은 값을 찾는 것을 목표로 한다.
- 우도 L(θ|x)는 θ가 전제되었을 때 표본 x가 등장할 확률인 p(x|θ)에 비례한다.
오즈(Odds)
로지스틱 회귀분석을 사용하기 위해서는 ‘오즈’라는 값을 사용한다.
오즈란, 성공할 확률이 실패할 확률의 몇 배인지를 나타내는 값이다. 따라서 오즈를 사용하여 각 범주(집단)에 분류될 확률 값을 추정한다.
로짓변환
시그모이드 함수
시그모이드 함수는 로지스틱 회귀분석과 인공신경망 분석에서 활성화 함수로 활용되는 함수 중 하나다. 로짓 함수와 역함수 관계이기 때문에 로짓함수를 통해 시그모이드 함수가 도출된다.
R에서 로지스틱회귀모형은 glm()함수를 이용하여 수행한다.
반응변수의 범주가 2개인 로지스틱회귀를 적용하기 위해 iris 자료의 일부분만 이용하기로 한다. Species가 setosa와 versicolor인 100개의 자료만을 이용한다.
> data("iris")
> a<-subset(iris,Species=='setosa'|Species=='versicolor')
> a$Species<-factor(a$Species)
> str(a)
'data.frame': 100 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 2 levels "setosa","versicolor":
1 1 1 1 1 1 1 1 1 1 ...
Species는 Factor형 변수(범주형 변수를 의미)로 setosa는 Y=1, versicolor는 Y=2로 인식하고 있음을 나타낸다. 이 자료에 대해 로지스틱회귀가 적용될 때, 보다 큰 숫자인 versicolor일 때 오즈를 모형화하므로 해석에 유의할 필요가 있다.
glm() 함수를 이용하여 로지스틱 회귀모형을 수행한다. 이때 family= binomial 옵션을 사용한다. summary() 함수를 통해 그 결과를 확인할 수 있다.
# glm(종속변수 ~ 독립변수1+...+독립변수k, family=binomial, data=데이터셋명)
> b<-glm(Species~Sepal.Length,data=a,family=binomial)
> summary(b)Call:glm(formula = Species ~ Sepal.Length, family = binomial, data = a)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -27.831 5.434 -5.122 3.02e-07 ***
Sepal.Length 5.140 1.007 5.107 3.28e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 138.629 on 99 degrees of freedom
Residual deviance: 64.211 on 98 degrees of freedom
AIC: 68.211
Number of Fisher Scoring iterations: 6
# Null deviance : 절편만 포함한 모형의 완전 모형으로부터의 이탈도
# 값이 작을수록 완전 모형에 가깝다.
# Residual deviance : 독립변수들이 추가된 모형의 완전 모형으로부터의 이탈도
# 값이 작을수록 완전 모형에 가깝다.
회귀계수의 검정에서 p-값이 거의 0이므로 Sepal.Length가 매우 유의한 변수이며, Sepal.Length가 한 단위 증가함에 따라 Versicolor(Y=2)일 오즈가 exp(5.140) ≈ 170배 증가함을 알 수 있다. 위 결과의 마지막 부분에 제시된 Null deviance는 절편만 포함하는 모형( : = 0 하의 모형)의 완전모형으로부터의 이탈도(deviance)를 나타내며 p-값= P( (99) > 138.629) ≈ 0.005 으로 통계적으로 유의하므로 적합결여를 나타낸다. Residual deviance는 예측변수 Sepal.Length가 추가된 적합 모형의 이탈도를 나타낸다. Null deviance에 비해 자유도 1 기준에 이탈도의 감소가 74.4 정도의 큰 감소를 보이며, p-값=P( (98) > 64.211) ≈ 0.997 이므로 귀무가설을 기각하지 못한다. 따라서 적합값이 관측된 자료를 잘 적합하고 있다고 말할 수 있다
> coef(b)
(Intercept) Sepal.Length
-27.831451 5.140336
> exp(coef(b)['Sepal.Length'])
Sepal.Length
170.7732
회귀계수 β와 오즈의 증가량 exp(β)에 대한 신뢰구간은 다음과 같다.
> confint(b,parm = 'Sepal.Length')
Waiting for profiling to be done...
2.5 % 97.5 %
3.421613 7.415508
> exp(confint(b,parm = 'Sepal.Length'))
Waiting for profiling to be done...
2.5 % 97.5 %
30.61878 1661.55385
fitted() 함수를 통해 적합 결과를 확인할 수 있다.
> fitted(b)[c(1:5,96:100)]
1 2 3 4 5
0.16579367 0.06637193 0.02479825 0.01498061 0.10623680
96 97 98 99 100
0.81282396 0.81282396 0.98268360 0.16579367 0.81282396
predict() 함수를 이용하여 새로운 자료에 대한 예측을 수행한다. 여기서는 편의성 모형구축에 사용된 자료를 다시 사용한다.
> predict(b,newdata = a[c(1,50,51,100),],type='response')
1 50 51 100
0.1657937 0.1062368 0.9997116 0.8128240
cdplot() 함수는 Sepal.Length(연속형 변수)의 변화에 따른 범주형 변수의 조건부 분포를 보여준다. 아래의 그림은 Sepal.Length가 커짐에 따라 versicolor의 확률이 증가함을 보여준다. 이 함수는 로지스틱회귀의 탐색적 분석에 유용하다.
> cdplot(Species~Sepal.Length,data=a)

적합된 로지스틱회귀모형의 그래프를 아래와 같다.
> plot(a$Sepal.Length,a$Species,xlab = 'Sepal.Length')
> x=seq(min(a$Sepal.Length),max(a$Sepal.Length),0.1)
> lines(x,1+(1/(1+(1/exp(-27.831+5.140*x)))),type = 'o',col='red')

예제 2는 예측변수가 여러 개인 다중 로지스틱회귀모형을 사용하여 분석한 결과이다.
분석에 사용되는 자료는 1973~1974 년도에 생산된 32종류의 자동차에 대해 11개 변수값을 측정한 자료이다.
> attach(mtcars)
> str(mtcars)'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
이항 변수 vs(0:flat engine, 1:straight engine)를 반응변수로, mpg(miles/gallon)와 am(Transmission:0=automatic, 1:manual)을 예측변수로 하는 로지스틱회귀모형을 이용하면 다음과 같다. 아래 glm() 함수의 적용 시 family=binomial은 family=binomial(logit)과 동일하다.
> glm.vs <- glm(vs~mpg+am, data=mtcars, family = binomial)
> summary(glm.vs)
Call:glm(formula = vs ~ mpg + am, family = binomial, data = mtcars)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -12.7051 4.6252 -2.747 0.00602 **
mpg 0.6809 0.2524 2.698 0.00697 **
am -3.0073 1.5995 -1.880 0.06009 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 43.860 on 31 degrees of freedom
Residual deviance: 20.646 on 29 degrees of freedom
AIC: 26.646
Number of Fisher Scoring iterations: 6
다중로지스틱에서 추정된 회귀계수 에 대한 해석은 다음과 같다. 다른 모든 변수들(여기서는 am)이 주어질 때, mpg 값이 한 단위 증가함에 따라 vs가 1일 오즈가 exp(0.6809) ≈ 1.98배(즉, 98%) 증가한다. 마찬가지로, mpg가 주어질 때, 오즈에 대한 am의 효과는 exp(-3.0073) ≈ 0.05배 즉, 변속기가 수동인 경우 자동에 비해 vs=1의 오즈가 95%나 감소한다.
예측변수가 여러 개인 모형의 적합 시 변수선택법을 적용하기 위해서는 direction= 옵션을 사용한다. direction= 옵션에는 ‘both’, ‘backward’, ‘forward’가 있으며, 디폴트는 ‘backward’가 적용된다.
> step.vs<-step(glm.vs,direction='backward')
Start: AIC=26.65
vs ~ mpg + am
Df Deviance AIC
<none> 20.646 26.646
- am 1 25.533 29.533
- mpg 1 42.953 46.953
아래의 summary() 함수를 수행한 결과는 위의 summary(glm.vs)의 결과와 동일하므로 생략하기로 한다.
> summary(step.vs)
gIm() 함수의 수행결과는 많은 유용한 결과를 제공한다. 예를 들어 glm.vsfitted, glm.vseffects 등이 있으며 ls(), str()함수를 통해 확인할 수 있다.
> ls(glm.vs)
> str(glm.vs)
아래의 anova() 함수는 모형의 적합(변수가 추가되는) 단계별로 이탈도의 감소량과 유의성 검정 결과를 제시해 준다.
> anova(glm.vs, test='Chisq')
Analysis of Deviance Table
Model: binomial, link: logit
Response: vs
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 31 43.860
mpg 1 18.327 30 25.533 1.861e-05 ***
am 1 4.887 29 20.646 0.02706 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
위의 결과는 절편항만 포함하는 영(nul) 모형에서 mpg와 am 변수가 차례로 모형에 추가됨에 따라 발생하는 이탈도의 감소량을 제시하며, p-값은 각각 을 계산한 값이다. 그 결과 두 변수가 차례로 추가되면서 생겨나는 이탈도의 감소량이 모두 통계적으로 유의함을 나타낸다.
> 1-pchisq(18.327, 1)
[1] 1.860515e-05
> 1-pchisq(4.887, 1)
[1] 0.02705967
로지스틱회귀모형은 일반화선형모형의 특별한 경우로 로짓 모형으로도 불린다. 반응변수의 범주가 3개 이상인 경우에는, 범주의 유형(명목형 또는 순서형)에 따라, 다양한 다범주(multi-category) 로짓모형을 적합할 수 있다.
로지스틱 분석에 대한 설명으로 옳지 않은 것은?
1. 종속 변수가 범주형 데이터인 경우에 사용되는 통계 분석 기법 중 하나이다.
2. 두 개 이상의 집단을 분류하는 경우 이를 다중 로지스틱 회귀분석이라고 한다.
3. 로지스틱 회귀분석의 종속변수는 범주형이다.
4. 성공횟수가 10이고 실패 횟수가 1이면 오즈값은 10이다.
정답
세 개 이상의 집단을 분류하는 경우 이를 다중 로지스틱 회귀분석이라고 한다.
로지스틱 회귀분석의 알고리즘에 대한 설명으로 옳지 않은 것은?
1. 오즈값이란 실패 확률을 성공 확률로 나눈 값이다.
2. 독립변수(x)가 주어졌을 때 성공확률을 P라고 하면 실패 확률은 1-P이다.
3. 시그모이드 함수는 로지스틱 회귀분석과 인공신경망 분석에서 활성화 함수로 활용되는 함수 중 하나다.
4. 종속변수(y)는 0과 1사이의 확률값을 반환하므로 이진 분류에 적합하다.
정답
오즈값이란 성공 확률을 실패 확률로 나눈 값이다.
회사 재무상태에 관련한 여러 변수를 활용하여 기업의 파산 여부를 판단하려고 할 때, 모형 구축에 적절한 기법은 무엇인가?
1. 시계열 분석
2. 로지스틱 회귀분석
3. 회귀분석
4. 군집분석
정답
파산여부 YES/NO의 이진분류를 위해서는 로지스틱 회귀분석이 가장 적절하다.
나무(tree) 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석방법으로 의사결정이 진행되는 방식을 한눈에 볼 수 있다.


의사결정나무의 형성과정은 크게 성장, 가지치기, 타당성 평가, 해석 및 예측으로 이루어진다.
각 마디에서 적절한 최적의 분리규칙을 찾아서 나무를 성장시키는 과정으로 적절한 정지규칙을 만족하면 중단한다.
분리규칙
불순도란?
자료들의 범주가 한 그룹 안에 얼마나 섞여 있는지를 나타내는 측도로
분류가 잘 되어 하나의 범주로만 구성되어 있으면 불순도 값은 작고, 다양한 범주의 데이터로 구성되어 있으면 불순도 값은 크다.
분리기준
종속변수가 이산형일 경우
분류트리를 사용하며 분리 기준으로 카이제곱 검정, 지니 지수, 엔트로피 지수 등을 사용한다.
종속변수가 연속형일 경우
회귀트리를 사용하며, 분리 기준으로 분산분석에서의 F통계량, 분산의 감소량 등을 사용한다.
이산형 목표변수

카이제곱통계량 p값, 지니지수, 엔트로피 지수

오차를 크게 할 위험이 높거나 부적절한 추론규칙을 가지고 있는 가지 또는 불필요한 가지를 제거하는 단계이다.
타당성 평가 단계에서는 형성된 의사결정나무를 평가하는 단계다. 이익도표(Gain Chart), 위험도표(Risk Chart), 혹은 시험자료를 이용하여 의사결정나무를 평가하는 단계다.
구축된 의사결정나무의 모형을 해석하고 예측에 적용하는 단계다.
대표적인 불순도로 카이제곱 통계량, 지니지수, 엔트로피 지수 등이 있다.
$$
(X^2)=\sum^k_{i=1} \frac{(O_i-E_i)^2}{E_i}\\
(k : 범주의 수, O_i : 실제도수, E_i : 기대도수)
$$노드의 불순도를 나타내는 값이다.
1 - { (20/50)^2 + (30/50)^2 }예제1은 R 패키지 [rpart]의 rpart() 함수를 이용하여 의사결정나무 분석을 수행한다.
예제1
iris 자료를 이용하여 의사결정나무 분석을 수행
> library(rpart)
> c<-rpart(Species~.,data=iris)
> c
n= 150
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)
2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) *
3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000)
6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) *
7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) *
> plot(c,compress=T,margin=0.3)
> text (c, cex=1.5)

predict() 함수를 이용하여 새로운 자료에 대해 예측을 수행한다. 여기서는 편의상 모형구축에 사용된 자료를 재대입한 결과를 제시한다.
> head(predict (c, newdata=iris, type="class"))
1 2 3 4 5 6
setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
> tail(predict (c, newdata=iris, type="class"))
145 146 147 148 149 150
virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
R 패키지 (rpart.plot)을 이용하여 적합된 의사결정나무 모형을 여러 방식으로 시각화할 수 있다.
> install.packages("rpart.plot")
> library(rpart.plot)
> prp(c,type=4,extra=2)

최종 노드에 대한 해석은 다음과 같다. 예를 들어, 두 조건(Petal.Length>=2.5 와 Petal.Width<1.8)을 만족하는 노드에서 49/54는 이 노드에 속하는 해당 개체가 54개이며 이 가운데 versicolor가 49임을 나타낸다. 따라서 이 노드에 해당되는 새로운 자료는 versicolor로 분류된다.
R 패키지 (rpart의 plotepo 함수를 이용하면 cp값을 그림으로 나타낼 수 있다.
> plotcp(c)

예제2
패키지 {party}의 ctree() 함수를 이용하여 의사결정나무모형을 적용한 예제이다.
분석에 사용된 자료는 146명의 전립선 암 환자의 자료이다. 7개의 예측변수를 이용하여
범주형의 반응변수(ploidy)를 예측(또는 분류)한다.
> install.packages("party")
> library(party)
> data(stagec)
> str(stagec)
'data.frame': 146 obs. of 8 variables:
$ pgtime : num 6.1 9.4 5.2 3.2 1.9 4.8 5.8 7.3 3.7 15.9 ...
$ pgstat : int 0 0 1 1 1 0 0 0 1 0 ...
$ age : int 64 62 59 62 64 69 75 71 73 64 ...
$ eet : int 2 1 2 2 2 1 2 2 2 2 ...
$ g2 : num 10.26 NA 9.99 3.57 22.56 ...
$ grade : int 2 3 3 2 4 3 2 3 3 3 ...
$ gleason: int 4 8 7 4 8 7 NA 7 6 7 ...
$ ploidy : Factor w/ 3 levels "diploid","tetraploid",..: 1 3 1 1 2 1 2 3 1 2 ...
다음은 결측값을 제거하는 과정이다.
> stagec1<- subset(stagec, !is.na(g2))
> stagec2<- subset(stagec1, !is.na(gleason))
> stagec3<- subset(stagec2, !is.na(eet))
> str(stagec3)
결측값이 제거된 134개의 자료를 이용하여 모형에 적용한다. 모형구축을 위한 훈련용 자료와 모형의 성능을 검증하기 위한 검증용 자료를 70%와 30%로 구성한다.
> set.seed(1234)
> ind <- sample(2,nrow(stagec3),replace=TRUE,prob=c(0.7,0.3))
모형을 만들기 전에 stagec 자료를 복원 추출 방법을 이용하여 두 개의 부분집합 training(70%)과
test(30%)로 만들고, 결과의 재현성을 위해 random seed를 고정하였다.
> ind
> trainData <- stagec3[ind==1,]
> testData <- stagec3[ind==2,]
훈련용 자료( = 102)에 대해 ctree()를 적용한 결과는 다음과 같다.
> tree<-ctree(ploidy~.,data=trainData)
> tree
> plot(tree)

최종노드의 막대그래프는 반응변수의 각 범주별 비율을 나타낸다.
predict() 함수를 통해 검증용 자료에 대해 적합모형을 적용하면 다음과 같다.
> testPred = predict(tree, newdata=testData)
> table (testPred, testData$ploidy)
testPred diploid tetraploid aneuploid
diploid 17 0 1
tetraploid 0 13 1
aneuploid 0 0 0
예제3
예제3은 ctree() 함수를 이용하여 반응변수가 연속형인 경우 의사결정나무(회귀나무)를 통한 예측을 수행한다.
airquality 자료에 대해 의사결정나무모형을 적합한다. 먼저 반응변수 Ozone이 결측인 자료를 제외한 후 ctree() 함수를 적용한다.
> airq <- subset(airquality, !is.na(Ozone))
> head(airq)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
6 28 NA 14.9 66 5 6
7 23 299 8.6 65 5 7
> airct <- ctree(Ozone~.,data=airq)
> airct
Conditional inference tree with 5 terminal nodes
Response: Ozone
Inputs: Solar.R, Wind, Temp, Month, Day
Number of observations: 116
1) Temp <= 82; criterion = 1, statistic = 56.086
2) Wind <= 6.9; criterion = 0.998, statistic = 12.969
3)* weights = 10
2) Wind > 6.9
4) Temp <= 77; criterion = 0.997, statistic = 11.599
5)* weights = 48 4) Temp > 77
6)* weights = 21
1) Temp > 82
7) Wind <= 10.3; criterion = 0.997, statistic = 11.712
8)* weights = 30
7) Wind > 10.3
9)* weights = 7
최종마디(*로 표시된 마디)가 5개인 트리모형을 나타낸다. 이를 시각화하면 다음과 같다.
> plot(airct)

위 모형으로부터 새로운 자료에 대한 예측은 predict() 함수를 이용한다. 연속형 반응변수에 대한 예측값은 최종 마디에 속한 자료들의 평균값이 제공된다. 분석에 사용된 자료를 재대입한 결과는 다음과 같다.
> head(predict(airct, data=airq))
Ozone
[1,] 18.47917
[2,] 18.47917
[3,] 18.47917
[4,] 18.47917
[5,] 18.47917
[6,] 18.47917
자료가 속하는 해당 최종마디의 번호를 출력하고 싶을 때는 type="node” 옵션을 사용한다.
> predict(airct, data=airq, type="node")
[1] 5 5 5 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 3 5 6 9 9 6
(이하생략)
예측값을 이용하여 평균제곱오차를 구하면 다음과 같다.
> mean((airq$Ozone-predict(airct))^2)
[1] 403.6668
의사결정나무의 특정으로 옳지 않은 것은?
1. 모형 분류의 정확도가 높다.
2. 분류 경계선 근처의 자료값에 대해 오차가 작다.
3. 새로운 자료에 대한 과적합 발생 가능성이 높다.
4. 데이터 정규화 및 단위 변환이 필요하지 않다.
정답
의사결정나무는 분류 경계선 근처의 자료값에 대해 오차가 크다는 단점이 있다.
의사결정나무의 활용법으로 옳지 않은 것은?
1. 비슷한 특성의 그룹으로 분할하여 그룹별 특성을 발견
2. 데이터에서 규칙을 찾고 이를 미래 사건 예측에 활용
3. 연속형의 병합 또는 범주형 변수의 이산화
4. 종속변수의 범주를 몇 개의 등급으로 분류
정답
의사결정나무의 활용법으로 ‘범주의 병합 또는 연속형 변수의 이산화’가 있다.
불순도의 여러 가지 측도에 대한 설명으로 옳지 않은 것은?
1. 지니지수는 노드의 불순도를 나타내는 값이다.
2. 지니지수의 값이 작을수록 이질적이며 순수도가 낮다고 볼 수 있다.
3. 엔트로피 지수는 값이 클수록 순수도가 낮다고 볼 수 있다.
4. 카이제곱 통계량의 기대도수 수식은 ‘열의 합계 X 합의 합계 / 전체 합계’이다.
정답
지니지수의 값이 클수록 이질적이며 순수도가 낮다고 볼 수 있다.
프랑스어로 앙상블(Ensemble)은 ‘함께, 동시에’라는 의미를 가지고 있다. 데이터 마이닝에서는 여러 개별 모델을 결합하여 하나의 강력한 모델을 만드는 기법을 의미한다. 이러한 기법은 단일 모델보다 높은 정확성과 일반화 능력을 제공할 수 있다.
### 앙상블 분석 종류
배깅(bagging)은 bootstrap aggregating의 준말로 원 데이터 집합으로부터 크기가 같은 표본을 여러 번 단순 임의 복원추출하여 각 표본(이를 붓스트랩 표본이라 함)에 대해 분류기를 생성한 후 그 결과를 앙상블 하는 방법이다.
배깅예제
iris 자료에 대해 R 패키지 {adabag}의 bagging() 함수를 통해 분석을 수행한다.
> install.packages("adabag")
> library(adabag)
> data(iris)
> iris.bagging<-bagging(Species~.,data=iris,mfinal=10)
> iris.bagging$importance
Petal.Length Petal.Width Sepal.Length Sepal.Width
76.01566 23.98434 0.00000 0.00000
R 패키지 {adabag}의 bagging() 함수는 배깅을 이용하여 분류를 수행한다. plot() 함수를 통해 분류 결과를 트리 형태로 나타낼 수 있다.
> plot(iris.bagging$trees[[10]])
> text(iris.bagging$trees[[10]])

predict() 함수를 통해 새로운 자료에 대한 분류(예측)를 수행할 수 있다. 여기서는 모형 구축에 사용된 자료를 재사용하여 분류를 수행하였다. 그 결과 setosa는 50개 모두, versicolor는 50개 중 48개, virginica 는 50개 중 45개가 제대로 분류되었다.
> pred<-predict(iris.bagging,newdata=iris)
> table(pred$class,iris[,5])
setosa versicolor virginica
setosa 50 0 0
versicolor 0 48 5
virginica 0 2 45
부스팅(boosting)은 배깅의 과정과 유사하나 붓스트랩 표본을 구성하는 재표본(re-sampling) 과정에서 각 자료에 동일한 확률을 부여하는 것이 아니라, 분류가 잘못된 데이터에 더 큰 가중을 주어 표본을 추출한다.
부스팅 예제1
iris 자료에 대해 R 패키지 {adabag}의 boosting() 함수를 통해 분석을 수행한다.
> library(adabag)
> boo.adabag<-boosting(Species~., data=iris, boos=TRUE, mfinal=10)
> boo.adabag$importance
Petal.Length Petal.Width Sepal.Length Sepal.Width
67.229188 18.780665 4.964470 9.025677
R 패키지 {adabag}의 boosting() 함수는 부스팅을 이용하여 분류를 수행한다. plot() 함수를 통해 분류 결과를 트리 형태로 나타낼 수 있다.
> plot(boo.adabag$trees[[10]])
> text(boo.adabag$trees[[10]])

predic() 함수를 통해 새로운 자료에 대한 분류(예측)을 수행할 수 있다. 여기서는 모형 구축에 사용된 자료를 재사용하여 분류를 수행하였다. 그 결과 setosa, versicolor, virginica 모두 정확히 분류되었음을 알 수 있다.
> pred <- predict (boo.adabag, newdata=iris)
> tb <- table (pred$class, iris [,5])
> tb
setosa versicolor virginica
setosa 50 0 0
versicolor 0 50 0
virginica 0 0 50
위의 결과로부터 오분류율을 계산하면 다음과 같이 그 값이 0임을 알 수 있다.
> error.rpart <- 1-(sum(diag(tb))/sum(tb))
> error.rpart
[1] 0
부스팅 예제2
예제 2는 R 패키지 {ada}의 ada() 함수를 이용하여 에이다부스팅을 이용한 분류를 수행한 예제이다.
iris 자료 중 setosa를 제외한 versicolor와 virginica 자료만으로 분석을 수행한다.
> install.packages("ada")
> library(ada)
> data(iris)
> iris[iris$Species!='setosa', ]->iris #setosa 50개 자료 제외
> n<-dim(iris)[1]
총 100개의 자료를 60개의 훈련용 자료와 검증용 자료로 나누었다.
> trind<-sample(1:n,floor(.6*n),FALSE)
> teind<-setdiff(1:n,trind)
> iris[,5]<-as.factor((levels(iris[,5])[2:3])[as.numeric(iris[,5])-1])
훈련용 데이터를 이용하여 부스팅 방법으로 모형을 구축하고, 검증용 자료에 대해 분류(예측)를 실시하였다. 그 결과 검증용 자료에 대한 정분류율이 100%로 나타났다.
> gdis<-ada(Species~.,data=iris[trind,],iter=20, nu=1, type="discrete")
> gdis<-addtest(gdis,iris[teind,-5],iris[teind,5])
> gdis
Call:
ada(Species ~ ., data = iris[trind, ], iter = 20, nu = 1, type = "discrete")
Loss: exponential Method: discrete Iteration: 20
Final Confusion Matrix for Data:
Final Prediction
True value versicolor virginica
versicolor 27 0
virginica 0 33
Train Error: 0
Out-Of-Bag Error: 0.017 iteration= 6
Additional Estimates of number of iterations:
train.err1 train.kap1 test.errs2 test.kaps2
12 12 1 1
plot(), varplot(), pairs() 함수를 이용하여 부스팅 결과를 시각화 한 결과는 다음과 같다.
아래의 plot() 함수는 오차와 일치도를 나타내는 카파(kappa) 계수를 그려준다. 두 개의 TRUE 옵션은 훈련용, 검증용 자료 모두에 대해 그림을 그려준다.
> plot(gdis,TRUE,TRUE)

varplot() 함수는 변수의 중요도를 나타내는 그림을 제공한다. Sepal.Length 변수가 분류에 가장 중요한 변수로 사용되었음을 보여준다.
> varplot(gdis)

pairs() 함수는 두 예측변수의 조합별로 분류된 결과를 그려준다. maxvar= 옵션을 통해 변수의 수(중요도가 높은 상위 변수의 수)를 지정할 수 있다.
> pairs(gdis, iris[trind,-5],maxvar=4)

랜덤포레스트(random forest)는 서로 상관성이 없는 나무들로 이루어진 숲을 의미하며 배깅에 랜덤 과정을 추가한 방법이다.
랜덤포레스트 예제
의사결정나무분석에 사용되었던 ploidy자료에 대해 randomforest() 함수를 이용하여 분석을 수행한다.
> install.packages("randomForest")
> library(randomForest)
> library(rpart)
> data(stagec)
> stagec3 <- stagec[complete.cases(stagec),]
> set.seed(1234)
> ind<-sample(2,nrow(stagec3),replace=TRUE, prob=c(0.7,0.3))
> trainData<-stagec3[ind==1,]
> testData<-stagec3[ind==2,]
> rf<-randomForest(ploidy~.,data=trainData,ntree=100,proximity=TRUE)
> table(predict(rf),trainData$ploidy)
diploid tetraploid aneuploid
diploid 45 0 3
tetraploid 1 51 0
aneuploid 2 0 0
> print(rf)
Call:
randomForest(formula = ploidy ~ ., data = trainData, ntree = 100, proximity = TRUE)
Type of random forest: classification
Number of trees: 100
No. of variables tried at each split: 2
OOB estimate of error rate: 5.88%
Confusion matrix:
diploid tetraploid aneuploid class.error
diploid 45 1 2 0.0625
tetraploid 0 51 0 0.0000
aneuploid 3 0 0 1.0000
위 결과는 정오분류표와 함께, 오류율에 대한 OOB(out-of-bag) 추정치를 제공한다.
랜덤 포레스트에서는 별도의 검증용 데이터를 사용하지 않더라도 붓스트랩 샘플과정에서 제외된(out-of-bag) 자료를 사용하여 검증을 실시할 수 있다.
Out of Bag(OOB)
- Out of Bag(OOB)은 하나의 트리를 구성하기 위한 붓스트랩을 생성할 때 선택되지 않은 데이터를 의미한다.
- Out of Bag Score는 붓스트랩에 의해 구성된 트리를 Out of Bag 데이터로 몇 개가 올바르게 분류되었는지 파악하고 랜덤 포레스트 작업이 종료된 이후 올바르게 분류한 비율을 나타낸 값이다. 즉, 평가용 데이터로부터 모델을 평가하는 것과는 유사하지만 활용 데이터가 다르다는 것이 특징이다.
아래의 plot() 함수는 트리 수에 따른 종속변수의 범주별 오분류율 나타낸다. 검은색은 전체 오분류율을 나타낸다. 오분류율이 1로 나타난 범주는 aneuploid 범주로 개체수가 매우 작은() 범주에서 발생된 결과이다.
> plot(rf)

importance()와 varImpPlot()로 변수의 중요성을 알 수 있다.
> importance(rf)
MeanDecreaseGini
pgtime 4.6800225
pgstat 2.0635061
age 3.5726107
eet 0.7875501
g2 37.5032896
grade 1.2084410
gleason 2.0820408
> varImpPlot(rf)

위 그림은 각 변수의 중요도를 나타내는 그림으로, 해당 변수로부터 분할이 일어날 때 불순도의 감소가 얼마나 일어나는지를 나타내는 값이다(불순도의 감소가 클수록 순수도가 증가함). 지니 지수는 노드의 불순도를 나타내는 값이다. 회귀의 경우에는 잔차제곱합을 통해 측정된다.
다음은 테스트 자료에 대해 예측을 수행한 결과이다.
> rf.pred<-predict(rf,newdata=testData)
> table(rf.pred,testData$ploidy)
rf.pred diploid tetraploid aneuploid
diploid 17 0 1
tetraploid 0 13 1
aneuploid 0 0 0
아래의 그림은 훈련용 자료값(총 102개)의 마진을 나타낸다. 마진은 랜덤 포레스트의 분류기 가운데 정분류를 수행한 비율에서 다른 클래스로 분류한 비율의 최대치를 뺀 값을 나타낸다. 즉, 양의 마진은 정확한 분류를 의미하며, 음은 그 반대이다.
> plot(margin(rf))

랜덤포레스트는 다음과 같이 R 패키지 {party}의 cforest() 함수를 이용할 수도 있다.
> install.packages("party")
> library(party)
> set.seed(1234)
> cf<-cforest(ploidy~.,data=trainData)
> cf.pred<-predict(cf,newdata-testData,OOB=TRUE,type='response')
앙상블 기법에 대한 설명으로 옳지 않은 것은?
1. 여러 개별 모델을 결합하여 하나의 강력한 모델을 만드는 기법이다.
2. 단일 모델보다 높은 정확성과 일반화 능력을 제공한다.
3. 결과가 범주형 데이터인 경우에는 값들의 평균을 통해 최종 결과를 예측한다.
4. 배깅은 반복추출 방법을 사용하기 때문에 같은 데이터가 한 표본에 여러 번 추출될 수도 있다.
정답
결과가 수치형 데이터인 경우에는 값들의 평균을 통해 최종 결과를 예측하고, 결과가 범주형 데이터인 경우에는 다수결 방식으로 최종 결과를 예측한다.
앙상블 분석 종류 중에서 배깅에 해당하는 내용이 아닌 것은?
1. bagging() 함수를 통해 분석을 수행한다
2. 보팅은 여러 개의 모형으로부터 산출된 결과를 다수결에 의해서 최종 결과를 선정하는 과정이다.
3. 모집단의 특성이 잘 반영되는 분산이 작고 좋은 예측력을 보여준다.
4. 배깅에서 의사결정나무를 구축할 때 가장 어려운 부분이 가지치기다.
정답
최적의 의사결정나무를 구축할 때 가장 어려운 부분이 가지치기이지만 배깅에서는 가지치기를 하지 않고 최대로 성장한 의사결정나무들을 활용한다.
랜덤 포레스트에 대한 설명으로 옳지 않은 것은?
1. 랜덤 포레스트는 예측력이 매우 높은 것으로 알려져 있다.
2. 최종 결과에 대한 해석이 어렵다는 단점이 있다.
3. 정확도 측면에서 좋은 성과를 보인다.
4. 의사결정나무의 특징으로 이상값에 민감하다는 단점이 있다.
정답
의사결정나무의 특징을 물려받아 이상값에 민감하지 않다는 장점이 있다.
인공신경망은 인간의 뇌를 기반으로한 학습 및 추론 모형이다.

잡음 민감하게 반응하지 않는다. 비선형적 문제 분석하는데 유용. 초기 가중치에 따라 전역해가 아닌 지역해로 수렴가능. 결과 해석 쉽지 않다. 추정 가중치 신뢰도 낮다. 은닉층,은닉노드 수 결정 어렵다.
용어설명
- 전역해
- 손실 함수를 최소화하는 가중치와 편향 값의 조합 중에서 가장 작은 값을 갖는 해
- 지역해
- 함수가 최솟값을 갖는 지점 중에서 특정 영역 안에 있는 해를 의미
- 은닉층
- 인공신경망의 구성 요소 중 하나로, 입력층과 출력층 사이에 위치한 보이지 않는 여러개의 은닉층
- 주어진 입력에서 학습된 가중치와 활성화 함수를 통해 출력을 생성하며, 이를 통해 모델이 비선형 관계를 학습할 수 있다.
- 노드
- 인공신경망의 기본 구성 요소 중 하나
- 각 노드는 입력을 받아 가중치와 함께 가중합을 계산하고, 그 결과를 활성화 함수를 통과시켜 출력을 생성한다. 이때, 노드는 입력층, 은닉층, 출력층에 위치할 수 있다.
뉴런은 전이함수, 즉 활성화 함수(Activation Function)를 사용한다.
인공신경망은 단층신경망과 다층신경망으로 구분된다.
신경망 모형은 그 복잡성으로 인해 입력 자료의 선택에 매우 민감하다. 입력변수가 범주형 또는 연속형 변수일 때 아래의 조건이 신경망 모형에 적합하다.
인공신경망은 지도학습의 한 종류로 입력층과 출력층의 데이터에 따른 이상적인 가중치 값을 결정해야 한다. 가중치 값의 결정은 입력층에서 출력층으로 찾아 나가는 순전파 알고리즘을 먼저 활용한다. 이때 발생한 오차들을 줄이고자 출력층에서 입력층 방향으로 거꾸로 찾아 나가는 역전파 알고리즘을 활용하여 조정한다.
신경망에서는 많은 가중치를 추정해야 하므로 과대적합 문제가 빈번하다. 알고리즘의 조기종료와 가중치 감소(Weight Decay) 기법으로 해결할 수 있다.
하나의 퍼셉트론은 데이터를 입력하는 입력층, 데이터를 출력하는 출력층을 갖고 있는 단층 퍼셉트론과 입력층과 출력층 사이에 보이지 않는 다수의 은닉층을 가지고 있을 수 있는 다층 퍼셉트론으로 구분할 수 있다.
하나의 인공신경망은 데이터를 입력하는 입력층, 데이터를 출력하는 출력층을 갖고 있다. 단층 신경망이라고도 하며 입력층이 은닉층을 거치지 않고 바로 출력층과 연결된다.
다층 퍼셉트론은 단층 퍼셉트론보다 학습하기가 어려우며 은닉층의 노드의 수가 너무 적으면 복잡한 의사결정 경계를 구축할 수 없다.
> install.packages('neuralnet')
> library(neuralnet)
> index<-sample(c(1,2),nrow(iris),replace=T,prob=c(0.7,0.3))
> train<-iris[index==1, ]
> test<-iris[index==2, ]
> result<-neuralnet(data=train,Species~.,hidden=c(4,4),stepmax = 1e7)
> pred<-predict(result,newdata = test)
> head(pred,5)
[,1] [,2] [,3]
1 1.0003129 -6.842363e-04 -3.324936e-04
7 0.9997121 6.486066e-04 1.936844e-04
10 1.0003006 -6.295548e-04 -3.305435e-04
12 1.0000023 6.580618e-05 -5.014236e-05
18 1.0000681 -6.494720e-05 -1.152810e-04
# 출력변수로 'setosa', 'versicolor', 'virginica' 3개 변수 보유
# 종속변수는 가장 큰 값을 갖고 활성화되는 노드 하나
# 2번 데이터의 경우 1번 노드가 가장 큰 값으로 활성화되어 'setosa'로 분류된다.
# train 데이터로 구축된 모형을 test 데이터로 검정
# 가장 큰 값을 갖는 노드를 명목형으로 변환하기
> predicted_class<-c( )
> for(i in 1:nrow(test))
for(i in 1:nrow(test)){
loc<-which.max(pred[i,])
if(loc==1){
predicted_class <- c(predicted_class, 'setosa')
}else if(loc==2){
predicted_class<-c(predicted_class, 'versicolor')
}else{
predicted_class<-c(predicted_class, 'virginica')
}
}
# 명목형 변수로 바뀐 것 확인 가능
> head(predicted_class,5)
[1] "setosa" "setosa" "setosa" "setosa" "setosa"
> pred<-predict(result,newdata=test)
> predicted_class <- predicted_class[1:length(test$Species)] #예측 결과 변수 길이 조정
# test 데이터의 실제값(condition)과 예측값(pred)의 표 확인
> table(condition=test$Species,predicted_class)
predicted_class
condition setosa versicolor virginica
setosa 13 0 0
versicolor 0 11 0
virginica 0 3 11
# test 데이터 모두를 정확하게 분류함을 확인할 수 있다.
# 위 결과는 조금씩 다를 수 있다.
#plot을 활용하여 인공신경망 시각화
> plot(result)

인공신경망에 대한 설명으로 옳지 않은 것은?
1. 인공신경망에서 입력은 시냅스에 해당하며 개별신호의 강도에 따라 가중된다.
2. 비선형적인 문제를 분석하는 데 유용하다.
3. 초기 가중치에 따라 전역해가 아닌 지역해로 수렴할 수 있다.
4. 다층신경망에서 은닉층의 수와 은닉노드의 수는 많을수록 좋다.
정답
은닉층의 수와 은닉노드의 수가 너무 많으면 과적합이 발생할 수 있다.
인공신경망 계층 구조에 대한 설명으로 옳지 않은 것은?
1. 출력층의 노드수는 출력 범주의 수로 결정된다
2. 은닉노드의 수는 적절한 최소 값을 놓고 가중치를 증가시키며 적용하는 것이 좋다.
3. 단층신경망은 한계점이 있기에 일반적인 인공신경망은 다층신경망을 의미한다.
4. 다층신경망은 입력층과 출력층 사이에 보이지 않는 다수의 은닉층을 가지고 있는 것이다.
정답
은닉노드의 수는 적절히 큰 값을 놓고 가중치를 감소시키며 적용하는 것이 좋다.
아래 보기에서 설명하는 활성함수로 적절한 것은?
<보기>
표준화지수 함수로도 불리며, 출력값이 다범주인 경우에 사용된다. 로지스틱 회귀분석과 마찬가지로 각 범주에 속할 확률값을 반환한다.
1. 소프트맥스 함수
2. 계단 함수
3. ReLU 함수
4. 시그모이드 함수
정답
보기의 내용은 소프트맥스(Softmax) 함수에 대한 설명이다.
베이즈 이론은 확률을 해석하는 이론이다. 통계학에서 확률은 크게 빈도 확률과 베이지안 확률로 구분할 수 있다.
빈도 확률
사건이 발생한 횟수의 장기적인 비율을 의미하며 객관적으로 확률을 해석한다.
베이지안 확률
베이지안 확률을 주관적으로 확률을 해석한다.
사전확률과 우도확률을 통해 사후확률을 추정하는 정리로 데이터를 통해 확률을 추정할 때 현재 관측된 데이터의 빈도만으로 분석하는 것이 아니라 분석자의 사전지식까지 포함해 분석하는 방법이다.
베이즈 정리에서 확률은 ‘주장 혹은 믿음의 신뢰도’로 나타난다.
‘나이브(naive)’라는 용어는 모든 특성(또는 변수)이 서로 독립적이라고 가정한다는 것을 나타낸다. 확률적인 분류 알고리즘 중 하나로, 베이즈 정리를 기반으로 한다.
- 범주 a에 속할 확률
- 범주 b에 속할 확률
-P(a)와 P(b)는 사전확률로 범주 a와 b에 해당하는 레코드를 전체 레코드로 나눈 비율을 의미한다.
k-Nearest Neighborhood
지도 학습 알고리즘 중 하나로, 데이터 포인트의 근접 이웃을 활용하여 분류 또는 회귀 문제를 해결하는 데 사용된다.
고객의 구매 이력을 기반으로하는 간단한 k-NN의 예시.
분류 및 회귀 분석을 위한 지도 학습 모델로 사용되는 강력한 알고리즘이다. 특히 분류 성능이 뛰어나 분류 분석에 자주 사용된다.
베이즈에 대한 설명으로 옳지 않은 것은?
1. 베이지안 확률은 객관적으로 확률을 해석한다.
2. 베이지안 확률은 분석자의 사전지식까지 포함해 분석하는 방법이다.
3. 빈도 확률은 사건이 발생한 횟수의 장기적인 비율을 의미한다.
4. 베이즈 정리에서 확률은 ‘주장 혹은 믿음의 신뢰도’로 나타난다.
정답
빈도 확률은 객관적으로 확률을 해석하며 베이지안 확률은 주관적으로 확률을 해석한다
k-NN 알고리즘에 대한 설명으로 옳지 않은 것은?
1. 큰 k는 모델이 데이터의 노이즈에 민감하게 반응한다.
2. k-NN은 함수가 오직 지역적으로 근사하고 모든 계산이 분류될 때까지 연기되는 인스턴스 기반 학습이다.
3. 적절한 k를 선택하는 것이 모델의 성능에 영향을 미친다
4. 데이터 포인트의 근접 이웃을 활용하여 분류 또는 회귀 문제를 해결하는 데 사용된다.
정답
작은 k는 모델이 데이터의 노이즈에 민감하게 반응하게 하고, 큰 k는 모델의 결정 경계를 더 부드럽게 만든다.
서포트 벡터 머신에 대한 설명으로 옳지 않은 것은?
1. 주로 이미지 분류, 텍스트 분류, 손글씨 인식 등에서 효과적으로 활용된다.
2. 분류 및 회귀 분석을 위한 지도 학습 모델로 사용된다.
3. 초평면을 이용하여 카테고리를 나누어 확률적 이진 선형모델을 만든다.
4. 분류할 때 가장 높은 마진을 가져가는 방향으로 분류한다
정답
초평면을 이용하여 카테고리를 나누어 ‘비확률적’ 이진 선형모델을 만든다.
좋은 모델을 선정하기 위해서는 평가 기준이 필요합니다
모형 평가의 기준으로는 다른 데이터에서도 안정적으로 적용이 가능한지 판단하는 일반화, 모형의 계산 양에 비한 모형의 성능을 고려하는 효율성, 구축된 모형의 분류 정확성 등의 기준이 있습니다
이번에 컴퓨전매트릭스(혼동행렬, Confusion Matrix)라고도 불리는 오분류표, ROC 커브, 이익도표, 향상도곡선에 대해 알아보겠습니다.
대부분의 분류 분석 모형의 예측 결과는 분류 범주로 나타남에 따라 분류 분석 모형의 평가에는 오분류표가 일반적으로 사용된다.
분류 분석 성과 평가는 분류 분석 모형이 내놓은 답과 실제 정답이 어느 정도 일치하는지를 판단하는 것이기 때문에 일반적으로 정답과 예측값은 True/False, 0/1, Yes/No 등의 이진 분류 클래스 레이블을 갖는다.
분류 분석 후 예측한 값과 실제 값의 차이를 교차표 형태로 정리한 것을 오분류표 또는 컨퓨전매트릭스라고 부른다.
오분류표는 분류오차의 정확한 추정치를 얻기 위해서 평가용(test) 데이터로부터 계산되어 얻은 표다. 훈련용(train) 데이터를 활용한 오분류표는 과적합의 위험성이 존재하기 때문이다.

TP(True Positive) : 예측한 값이 Positive이고 실제 값도 Positive인 경우
FP(False Positive) : 예측한 값이 Positive 이고 실제 값은 Negative인 경우
TN(True Negative) : 예측한 값이 Negative이고 실제 값도 Negative인 경우
FN(False Negative) : 예측한 값이 Negative 이고 실제 값은 Positive인 경우
오분류율 (Error Rate) : 전체 관측치 중 잘못 예측한 비율
정분류율(=정확도)(Accuracy) : 전체 관측치 중 올바르게 예측한 비율
정밀도 (Precision) : 예측 True 중 올바르게 True를 찾아낸 비율
민감도(=재현율)(Sensitivity) : 실제 True 중 올바르게 True를 찾아낸 비율
특이도 (Specificity) : 실제 False 중 올바르게 False를 찾아낸 비율

정분류율(정확도) : 950+850 / 950+50+150+850 >> 1800/2000 >> 0.9
오분류율 : 150+50 / 950+50+150+850 >> 200/2000 >> 0.1
정밀도 : 950 / 950+150 >> 950/1100 >> 0.864
민감도 : 950 / 950+50 >> 950/1000 >> 0.95
특이도 : 850 / 150+850 >> 850/1000 >> 0.85
F1스코어 : 2 0.8640.95/(0.864+0.95) >> 0.905
### ROC 커브(중)
Receiver Operating Characteristic Curve의 약자로 분류 분석 모형의 평가를 쉽게 비교할 수 있도록 시각화한 그래프.
TPR (True Positive Rate) : 1인 케이스에 대한 1로 예측한 비율
FPR (False Positive Rate) : 0인 케이스에 대한 1로 잘못 예측한 비율
AUROC를 이용한 정확도의 판단 기준

infert자료에 대한 분류 분석 모형 평가 비교를 위하여 의사결정나무 모형은 R패키지 {C50}의
C5.0() 함수를 사용하고 신경망 모형은 {neuralnet}의 neuralnet() 함수를 사용한다. 모형 학습 및 검증을 위하여 70%의 훈련용 자료와 30%의 검증용 자료로 구분한다.
> set.seed(1234)
> infert<-infert[sample(nrow(infert)),]
> infert<-infert[,c('age','parity','induced','spontaneous','case')]
> trainData<-infert[1:(nrow(infert)*0.7),]
> testData<-infert[((nrow(infert)*0.7)+1):nrow(infert),]
각 모형을 학습하고, 학습된 모형을 검증용 자료에 적용시켜 예측값을 도출시킨 뒤 ROC 그래프 작성을 위해 각 예측 결과를 검증용 자료에 함께 저장한다.
> library(neuralnet)
> net.infert<-neuralnet(case~age+parity+induced+spontaneous,data=trainData,hidden=3,err.fct='ce',linear.output = FALSE,likelihood=TRUE)
> n_test<-subset(testData,select=-case)
> nn_pred<-compute(net.infert,n_test)
> testData$net_pred<-nn_pred$net.result
> head(testData)
age parity induced spontaneous case net_pred
191 40 2 0 0 0 0.08925963
129 37 1 0 0 0 0.08910922
170 35 3 0 0 0 0.08925963
12 37 4 2 1 1 0.50665901
37 36 1 0 1 1 0.63951267
218 27 3 2 0 0 0.50665901
> install.packages('C50')
> library(C50)
> trainData$case<-factor(trainData$case)
> dt.infert<-C5.0(case~age+parity+induced+spontaneous,data=trainData)
> testData$dt_pred<-predict(dt.infert,testData,type='prob')[,2]
> head(testData)
age parity induced spontaneous case net_pred dt_pred
191 40 2 0 0 0 0.08925963 0.1792474
129 37 1 0 0 0 0.08910922 0.1792474
170 35 3 0 0 0 0.08925963 0.1792474
12 37 4 2 1 1 0.50665901 0.1931316
37 36 1 0 1 1 0.63951267 0.5775320
218 27 3 2 0 0 0.50665901 0.1792474
각 모형의 예측 결과값을 기반으로 ROC 그래프를 작성하기 위해서는 R패키지 {Epi}의 ROC() 함수를 사용한다.
> install.packages('Epi')
> library (Epi)
> neural_ROC <- ROC(form=case~net_pred, data=testData, plot='ROC')

> dtree_ROD <- ROC (form=case~dt_pred, data=testData, plot='ROC')

두 분류 분석 모형 간의 평가 결과 신경망 모형의 AUC(1.748)가 의사결정나무의 AUC(0.748)보다 크게
나와 신경망 모형의 분류 분석 모형이 더 높은 성과를 보인다고 할 수 있다.
이익도표(Lift Chart) 는 모델의 성능을 판단하기 위해 작성한 표이며, 이득곡선, 이득도표라고도 부른다. 얼마나 예측이 잘 이루어졌는지를 나타내기 위해 임의로 나눈 각 등급별로 반응검출율, 반응률, 리프트 등의 정보를 산출하여 나타내는 도표이다.
향상도 곡선(Lift Curve) 은 누적 반응률이 전체 데이터 대비 얼마나 향상되었는지를 보여준다

오분류표 평가지표에 대한 설명으로 옳지 않은 것은?
1. 정확도 (Accuracy) : 예측 True 중 올바르게 True를 찾아낸 비율
2. 오분류율 (Error Rate) : 전체 관측치 중 잘못 예측한 비율
3. 거짓 긍정률 (FPR : False Positive Rate) : 실제 Negative인 값 중 Positive로 잘못 분류한 비율
4. 특이도 (Specificity) : 실제 False 중 올바르게 False를 찾아낸 비율
정답
예측 True 중 올바르게 True를 찾아낸 비율 정확도가 아니라 정밀도 (Precision)이다.
ROC 커브에 대한 설명으로 옳지 않은 것은?
1. 분류 분석 모형의 평가를 쉽게 비교할 수 있도록 시각화한 그래프
2. 이진 분류 모형의 성능을 평가하기 위해 사용
3. AUROC 값이 크면 클수록 모형의 성능이 좋다고 평가
4. TPR : 0인 케이스에 대해 1로 예측한 비율
정답
TPR (True Positive Rate) : 1인 케이스에 대한 1로 예측한 비율
FPR (False Positive Rate) : 0인 케이스에 대한 1로 잘못 예측한 비율
분류모형성과에 대한 설명으로 옳지 않은 것은?
1. 이익도표는 등급별로 향상도가 급격하게 변동할수록 좋은 모형이라고 할 수 있다.
2. 향상도 곡선은 곡선이 기울어질수록 효과가 크다고 볼 수 있다.
3. 이득곡선은 모델의 성능을 판단하기 위해 작성한 표다.
4. 향상도 곡선이 갈수록 급격히 감소할 경우 안정적이지 않다고 볼 수 있다.
정답
향상도 곡선은 큰 값에서 시작 후 급격히 감소할 경우 모델 또는 전략의 효과가 더 크다고 해석할 수 있다.