top of page

4.3 분류분석

키워드 : 머신러닝, 로지스틱 회귀, 의사결정나무, 나이브 베이즈, 서포트 벡터 머신, 기계학습, 군집분석, 회귀분석, 분류 분석, NLP, 자연어, 지리적 분석, 지도학습, 비지도학습, 클러스터링, 딥러닝, AI, 파이썬, 데이터 분석, 데이터 시각화, EDA, 데이터 수집, 데이터 모델링

01. 분류분석이란

분류 분석은 데이터를 다양한 그룹 또는 범주로 분류하는 것을 말합니다. 데이터의 특징과 패턴을 이용하여 해당 데이터를 어떤 그룹 또는 범주로 할당할지 결정합니다. 즉, 데이터가 주어졌을 때 학습된 모델을 통해 어느 범주에 속한 데이터인지 판단하고 예측할 수 있습니다. 예를 들면, 분류 분석은 데이터를 "예/아니오," "양성/음성," "카테고리 A/카테고리 B"와 같이 두 개 이상의 클래스 또는 레이블 중 하나로 분류합니다.

Untitled (19).png
제목을-입력해주세요_-010 (1).png

📌 분류분석군집분석의 차이

💬 분류분석 : 클래스 혹은 레이블의 분류에 ‘정답’이 있는 지도 학습 데이터가 주어졌을 때 학습된 모델을 통해 어느 범주에 속한                            데이터인지 판단하고 예측

💬 군집분석 : 클러스터에 ‘정답’의 개념이 없는 비지도 학습 데이터를 동일한 성격끼리 같은 그룹으로 그룹핑

즉, 분류분석은 어느 그룹으로 분류 할 것인지의 ‘예측’에 집중한다면 군집분석은 유사도에 따른 ‘그룹핑’에 집중하는 분석입니다.

02. 분류분석의 목적 및 활용

분류 분석의 목적은 크게 세 가지로 나뉩니다.

  • 클래스 예측 : 데이터 내의 패턴을 인식하여 새로운 데이터가 어떤 클래스로 분류되는지 예측합니다. 이를 통해 데이터를 이해하고 레이블링하여 더 쉽게 분석할 수 있습니다. 이는 이미지 분류와 같이 각 이미지가 어떤 객체나 카테고리에 속하는지 분류하는데 활용할 수 있습니다.

  • 데이터 특성 파악 : 분류된 데이터의 클래스들이 각각 어떤 특성을 가지고 있는지 파악합니다. 이는 마케팅 분야에서 고객들을 ‘만족’ 또는 ‘불만족’으로 클래스로 분류할 때 각 클래스에 해당하는 고객들이 주로 어떤 특성을 가지고 있는지 파악할 수 있습니다.

  • 이상치 탐지 : 분류 분석은 이상치 탐지에도 사용됩니다. 정상적인 데이터에서 벗어나는 이상한 패턴을 탐지하는 데 도움이 됩니다. 신용 카드 거래에서 사기 거래를 감지하는데 분류 분석을 활용할 수 있습니다.

03. 분류분석 기법 종류

데이터분석에서 많이 쓰이는 분류분석 기법은 회귀를 이용한 로지스틱 회귀, 나무형태로 나타나는 의사결정나무, 조건부확률을 이용한 나이브베이즈, 경계선을 활용한 서포트벡터머신이 있습니다.

(1) 로지스틱 회귀

로지스틱 회귀(Logistic Regression)는 회귀를 이용하여 데이터가 어떤 범주에 속할 확률을 예측하고, 가능성이 더 높은 범주에 분류해주는 모형입니다. 주로 두가지 클래스 중 하나를 예측하는 이진 분류에서 자주 사용되며, 종속 변수의 값을 0과 1 사이의 확률 값으로 예측합니다.

예를 들어 선형회귀는 공부시간과 시험점수의 관계를 직선으로 나타내서 예측하는 것입니다. 로지스틱 회귀의 경우 시험점수를 통해 등급을 분류하는 것입니다. 이를 이진분류로 하는 경우, 시험 점수를 통해 PASS/FAIL을 분류할 수 있습니다. 다중분류의 경우, 시험 점수를 통해 학점(A,B,C,D)을 예측하여 분류할 수 있습니다. 시험 점수를 통해 PASS,FAIL을 판정하는 모델을 만들고 PASS를 1, FAIL을 0이라고 할 때 로지스틱 회귀를 나타내는 그래프는 아래와 같습니다.

Untitled (8).png

이진 분류를 할 때, 데이터를 표현하는 그래프는 S자로 표현됩니다. 종속변수가 범주형인 경우 관계를 표현하기 위해서는 직선을 표현하는 함수가 아닌 S자 형태로 표현할 수 있는 함수가 필요합니다. 이 함수의 경우 ‘시그모이드 함수’라고 하는데 함수를 몰라도 로지스틱 회귀의 내용을 이해를 하는 데에는 전혀 문제가 없습니다.

Untitled (9).png

로지스틱 회귀는 특정 범주에 속할 확률을 추정할 수 있다는 장점이 있습니다. 뒤에서 언급할 의사결정나무와 같이 대부분의 분류 모형의 경우는 특정 범주 자체를 예측하나, 로지스틱 회귀는 범주에 속할 확률을 계산해줍니다. 따라서 범주에 속할 확률 자체에 관심이 있는 분야에서는 로지스틱 회귀가 자주 활용됩니다. 그러나 로지스틱 회귀 또한 선형 회귀 분석을 근간으로 하기 때문에, 선형 관계가 아닌 데이터에 대한 예측력이 떨어진다는 단점이 있습니다.

Scikit-Learn에서 로지스틱 회귀 분류를 구현하기 위한 코드는 아래와 같습니다. 이렇게 훈련한 모델을 사용해 데이터를 입력하여 예측을 해보면 예측에 대한 확룔값을 확인할 수 있습니다.

from sklearn.linear_model import LogisticRegression

 

lr = LogisticRegression() lr.fit(train_data, target_data)

(2) 의사결정나무

의사결정나무(Decision Tree)란, 여러번의 질문→분류 과정을 반복하여 우리가 궁금한 ‘문제’에 대한 답을 결정해주는 나무입니다. 이 ‘나무’가 우리가 만드는 ‘모델’이 되는데요. 예를 들어 “이메일을 스팸 또는 비스팸으로 분류”하고 싶다는 ‘문제’가 있습니다.

이 때 의사결정 나무는 <이메일에 '할인'이라는 단어가 포함되어 있나요? -> 예: 다음 질문을 봅니다 / 아니오: '비스팸'으로 분류 >하는 ‘질문→ 분류’ 과정을 반복하여 해당 메일이 스팸인지에 대한 답을 결정해줍니다.

즉 여러번의 질문을 거쳐 우리가 궁금한 문제에 대한 답을 내어주는 모델이 ‘의사결정 나무’인 것입니다. 예시에서 ‘질문’의 역할이 중요합니다. ‘질문’은 곧 데이터 특성을 나타냅니다. 실제 알고리즘에서는 수백 만개의 데이터를 분류하기 때문에 어떤 ‘질문’을 하는 지가 예측의 정확도를 결정합니다. 의사결정나무의 경우 로지스틱 회귀와 같이 분류와 회귀 모두에 사용될 수 있습니다. 의사결정나무의 구조는 아래와 같습니다.

Untitled (10).png

위의 그림에서의 원들이 스팸 분류 예시에서의 ‘질문’이 되고, 질문을 통해서 데이터를 분류한 최종 결과가 사각형으로 나타납니다.

Untitled (11).png

의사결정나무는 나무형태를 나타낸 모델로써 분류와 회귀가 모두 가능하고 이해하기 쉬운 모델이라는 장점이 있습니다.

반면 로지스틱 회귀와 달리 범주를 예측하고 범주에 속할 확률을 예측하지는 않기 때문에 각 예측값에 대한 효과를 파악하기 어렵다는 단점이 있습니다.

Scikit-Learn에서 의사결정나무를 구현하기 위한 코드는 아래와 같습니다.

from sklearn.tree import DecisionTreeClassifier

tree1 = DecisionTreeClassifier(criterion='entropy', max_depth=1, random_state=0).fit(X, y)

(3) 나이브 베이즈

나이브 베이즈 분류란, 베이즈 정리에 기반한 통계적 분류 기법입니다. 베이즈 정리를 간단히 설명해드리자면 조건부확률을 구하는 공식입니다. 즉, 데이터라는 조건이 주어졌을 때의 조건부확률을 구하는 정리입니다. 베이즈 정리에서는 사전 확률과 사후 확률이라는 개념이 나옵니다. 사전 확률은 데이터가 주어지기 전의 확률 값이며, 사후 확률은 데이터가 주어지면서 변하는 확률 값입니다.

예를 들어 나이브 베이즈 분류를 통해 스팸 메일 필터를 만들 수 있습니다. 입력 텍스트인 메일 본문이 주어졌을 때, 메일 본문이 정상 메일인지 스팸 메일인지 구분하기 위한 확률을 조건부 확률로 나타낼 수 있습니다.

Untitled (12).png

이를 베이즈 정리에 따라서 다음 식으로 나타낼 수 있습니다.

Untitled (13).png

메일 본문이 주어졌을 때 P(정상 메일|메일 본문)이 P(스팸 메일|메일 본문)보다 크다면 정상 메일으로 분류할 수 있습니다.

Untitled (14).png

이 나이브 베이즈는 왜 필요할까요? 데이터 개수가 적은 경우에 유용하기 때문입니다.

데이터가 매일 추가되는 상황에서 전체 데이터를 새로 분석할 필요 없이 나이브 베이즈를 이용하여 새로 추가된 데이터를 합쳐서 업데이트 하면 됩니다.

Scikit-Learn에서 나이브 베이즈 분류를 구현하기 위한 코드는 아래와 같습니다.

from sklearn.naive_bayes import GaussianNB

 

model = GaussianNB()

model.fit(features,label)

(4) 서포트벡터머신

서포트벡터머신이란 데이터를 분류하기 위해 가장 적절한 경계를 찾는 방법입니다.

여기서 ‘서포트벡터’는 분류를 결정하는 경계선 또는 평면을 정의하는 데 사용되는 데이터 포인트를 의미합니다.

이해를 위해 아래 그림을 살펴보겠습니다.

Untitled (15).png

위와 같이 집단을 분류할 수 있는 직선은 다양합니다. 그렇다면 두 직선 중 어느 직선이 집단을 더 잘 분류해준다고 볼 수 있을까요?

Untitled (16).png

바로 왼쪽 직선입니다. 위의 그림과 같이 새로운 데이터가 들어왔을 때, 왼쪽 직선의 경우 여전히 집단을 잘 분류하지만, 오른쪽의 경우 삼각형 데이터가 원 데이터로 분류되어있습니다. 그렇다면 두 집단을 잘 분류한 왼쪽 직선의 특징은 무엇일까요? 바로 직선을 중심으로 두 집단이 멀리 떨어져 있다는 특징이 있다는 것입니다. 이러한 특징으로 인해 새로운 데이터가 들어와도 여전히 다른 두 집단을 잘 분류할 수 있기 때문에 일반화가 쉬워집니다. 이러한 개념이 서포트벡터머신의 기본 개념입니다.

Untitled (17).png

적절한 직선을 찾기 위해서는 각 집단의 경계 부분에 위치한 데이터들을 찾으면 됩니다. 이 데이터들의 거리가 멀수록 두 집단을 잘 분류하는 것입니다. 따라서 적절한 직선을 구하기 위해서는 각 집단의 경계 부분에 위치한 데이터들을 지나는 평행한 직선을 그리면 됩니다.

이때, 경계선상에 있는 데이터 포인트들이 앞에서 언급한 ‘서포트 벡터’입니다. 그리고 각 집단의 평행한 직선의 수직 거리(가장 짧은 거리)가 곧 마진(margin)이 됩니다. 즉, 이 마진이 멀수록 데이터를 잘 분류한다고 볼 수 있습니다.

Untitled (18).png

서포트벡터머신은 마진 값에 따라 하드 마진 SVM과 소프트 마진 SVM으로 구분할 수 있습니다.

하드 마진의 경우, Hard: 엄격하게 집단을 구분하여 이상치를 허용해주지 않습니다.

반대로 소프트 마진은 Soft: 이상치를 허용하더라도 나머지 데이터를 잘 구분해주는 방법입니다.

Scikit-Learn에서 나이브 베이즈 분류를 구현하기 위한 코드는 아래와 같습니다.

import sklearn.svm as svm

svm.SVC(kernel = 'linear') # 선형 분리

svm.SVC(kernel = 'rbf') # 비선형 분리

04. 참고 자료

[데이터과학] 10 장 의사결정나무(tree model)

http://bigdata.dongguk.ac.kr/lectures/datascience/_book/%EC%9D%98%EC%82%AC%EA%B2%B0%EC%A0%95%EB%82%98%EB%AC%B4tree-model.html

[데이터 사이언스 스쿨] 6.6 베이즈 정리

https://datascienceschool.net/02%20mathematics/06.06%20%EB%B2%A0%EC%9D%B4%EC%A6%88%20%EC%A0%95%EB%A6%AC.html

[위키독스 : 딥 러닝을 이용한 자연어 처리 입문 ] 10-05 나이브 베이즈 분류기(Naive Bayes Classifier)

https://wikidocs.net/22892

bottom of page