본문 바로가기
Machine Learning

통계 분석 #9 : 혼동행렬 개념 및 성능 평가 방법 with R (Confusion Matrix)

by 무적물리 2020. 3. 28.

컨퓨전 매트릭스 개념

컨퓨전 매트릭스란, 머신러닝 or 통계학적 방법이 사용된 분류 모델에서 알고리즘의 성능을 보기 쉽게 시각화하는 테이블 형태의 레이아웃 입니다. 분류 모델에 의한 분류 예측이 실제와 같은지 다른지를 표시하고 이를 평가하는 방법입니다. 컨퓨전 매트릭스는 혼동행렬이라고도 불리며 모델을 만들 때 모델이 얼마나 정확한 결과를 계산하는지 객관적으로 측정할 수 있습니다.




컨퓨전 매트릭스 형태

혼동행렬은 아래와 같은 테이블 형태로 표현됩니다. 실제와 예측을 비교하면서 예측과 실제가 같으면 True, 다르면 False로 표현합니다. 여기서 Positive가 같으면 민감도, Negative가 같으면 특이도라고 부릅니다. 



민감도를 예로 들자면 병원에서 어떤 진단법을 사용했을 때, 실제로 이에 해당하는 사람들을 얼마나 잘 찾아내는가 하는 기준이며, 특이도는 실제로 이에 해당하지 않는 사람들을 얼마나 잘 분류하는가 하는 기준입니다. 결국에 둘다 얼마나 실제를 잘 예측하는지에 대한 기준이며 이를 민감도와 특이도로 표현하는 것입니다. 컨퓨전 매트릭스를 평가하기 위한 주요 성능 지표는 아래와 같습니다.




R을 이용한 컨퓨전매트릭스 성능 평가

iris 데이터를 사용해서 분류모델을 만들고 컨퓨전 매트릭스인 혼동행렬을 사용해서 분류모델을 평가해보겠습니다. 먼저 패키지를 설치해줘야하며 혼동행렬의 패키지는 'e1071' 입니다. 코드에 대해서 전체적인 설명을 먼저 하자면, 의사결정나무를 사용해서 분류모델을 만들 것인데, 주어진 데이터를 7:3으로 나눠서 7은 학습 데이터, 3은 평가 데이터로 사용합니다. 만들어진 분류 모델을 혼동행렬 패키지를 사용해서 성능 평가를 해보겠습니다.


# iris 데이터 추출

head(iris, 10)


# 특성치 확인

summary(iris)


# 의사결정나무 패키지

install.package("party")

# 교차분석 패키지

install.package("caret")

# 혼동행렬 패키지

install.package("e1071")


# 패키지 불러오기

library(party)

library(caret)

library(e1071)


# 데이터 7:3으로 나누기

sp=sample(2,nrow(iris),replace=TRUE, prob=c(0.7,0.3))

# 트레이닝, 테스트 데이터 선언

trainData=iris[sp==1,]

testData=iris[sp==2,]


# 크기와 종에 따른 분류 알고리즘 생성

myFomula=Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width


# 분류나무 생성

iris_ctree=ctree(myFomula, data=trainData


# 컨퓨전 매트릭스 생성

confusionMatrix(predict(iris_ctree),trainData($Species)


# ctree 도표 생성

plot(iris_ctree)


# 테스트 데이터 예측분류 모델

testPred=predict(iris_ctree, newdata=testData)

table(testPred, testData$Species)

confusionMatrix(testPred, testData$Species)


댓글