본문 바로가기
Python 데이터 분석 입문

(Python 데이터 분석 입문 12편) 머신러닝 모델, 의사결정나무 모델, 성능 평가 지수

by mangoseed3434 2026. 1. 7.

안녕하세요? mangoseed3434입니다.

 

이번에는 머신러닝 모델에 대해 실습할 수 있었습니다.

 

오늘도 'Do it! 쉽게 배우는 파이썬 데이터 분석'에 수록된 가이드를 따라하면서 포스팅을 작성합니다.

 

 

 

'Do it! 쉽게 배우는 파이썬 데이터 분석'으로 실습한 마지막 포스팅이 될 것 같아요.


 

1. 머신러닝 모델

 

머신러닝 모델 (Machine Learning Model)

: 기존의  데이터에서 패턴을 찾고,  이를 근거로 결정을 내릴 수 있는 프로그램

 

머신러닝 모델은 값을 입력하면 일정 규칙에 따라 계산한 예측값을 출력합니다.

일반적으로, 함수를 통해 input을 output으로 전환할 수 있습니다.

 

함수를 만들 때에는 사람이 의도적으로 수학방정식을 만들 수 있습니다.

머신러닝 모델을 만드는 과정은 컴퓨터가 input에서 패턴을 찾아 output으로 변환할 수 있는 함수를 만드는 과정입니다.

 


 

2. 예측 변수, 타겟 변수

 

머신러닝 모델을 만들 때에는 두 종류의 변수를 사용합니다.

 

예측 변수 (Predictor Variable)

: 예측하고자 하는 모델에 입력하는 값, input

 

타겟 변수 (Target Variable)

: 예측하고자 하는 모델이 출력하는 값, output

 


 

3. 머신러닝 모델의 용도

 

머신러닝 모델은 미래를 예측하는 용도로 주로 사용됩니다.

 

과거에 발생한 값을 예측 변수로 사용하고 미래에 발생할 값을 타겟 변수로 사용하면 미래를 예측하는 모델을 만들 수 있습니다.


 

4. 의사결정나무 모델

 

의사결정나무 모델은 단순한 구조와 작동 원리를 이해하기 쉽다는 장점이 있습니다.

그래서 머신러닝 모델은 의사결정나무 모델을 기반으로 만들 때가 많습니다.

 

의사결정나무 모델 (Decision Tree)

: 정해진 순서대로 주어진 질문에 이분법(Yes/No)으로 답하면 마지막에 결론을 얻는 머신러닝 모델의 한 종류

 

의사결정나무를 통해 분석하고자 하는 데이터에 대해 정해진 순서대로 질문을 합니다.

그리고 각 질문에 대한 답을 하면 최종적으로 타겟 변수에 대한 1개의 답을 얻을 수 있습니다.

 


 

5. 의사결정나무 모델을 만드는 과정

 

의사결정나무 모델은 4개의 단계를 통해 만들 수 있습니다

.


 

1단계 : 타겟 변수의 변별성이 있는 예측 변수 선택하기 

 

타겟 변수를 가장 잘 선별하는 예측 변수를 찾습니다.

이를 위해, 모든 예측 변수를 이분법(Yes/No)으로 답할 수 있는 질문을 만듭니다.

 

예시) 음주를 하는가?

예시) 성별이 남자인가?

예시) 흡연을 하는가?

 

만든 질문들에 모델을 만들기 위해 사용할 데이터를 대입합니다.

그리고 각 질문에 대한 Yes와 No의 비율을 구합니다.

 

예시 1. 타겟 변수를 잘 분리하는 예측 변수 선택하기 예시

 

Yes와 No의 비율 차이가 클수록 타겟 변수에 대한 변별성이 높은 예측 변수입니다.

 

위 예시 1에서는 '음주를 하는가?'에 대한 Yes와 No의 비율 차이가 가장 큰 것을 알 수 있습니다.

예시 1은 범주 변수였기 때문에 이분법으로 답할 수 있는 질문을 쉽게 만들 수 있습니다.

 

하지만, '나이'와 같은 연속 변수는 모든 경우의 수대로 질문을 만들어야 합니다.

 

예시) 50살 이하인가?

예시) 51살 이하인가?

예시) 52살 이하인가?

 

모델 제작에 사용할 모든 예측 변수로 질문을 만든 후, 타겟 변수를 가장 잘 분리하는 예측 변수를 첫 번째 질문으로 사용합니다.

 


 

2단계 : 노드를 통해 질문의 답변에 따라 데이터를 분할하기

 

노드 (Node)

: 주어진 질문에 대해 동일한 답변을 가져서 함께 분류된 집단

 

의사결정나무 모델의 도식에서 노드는 직사각형으로 표현합니다.

주어진 질문에 대한 답변에 따라 하위의 다른 노드로 분류됩니다.

주어진 질문에 'Yes'면 좌측 하단의 노드로, 'No'면 우측 하단의 노드로 보냅니다.

 

예시 2. 노드를 통한 데이터 분할

 


 

3단계 : 각 노드에서 타겟 변수의 변별성이 있는 예측 변수 선택하기

 

이제 1단계 작업을 노드별로 반복합니다.

단, 첫 번째 질문에 사용된 예측 변수를 제외한 나머지 예측 변수를 이용합니다.

나머지 예측 변수를 이용해 타겟 변수를 가장 잘 분리하는 두 번째 예측 변수를 찾습니다.

 


 

4단계 : 노드가 완전히 분리될 때까지 반복하기

 

노드에 1개의 범주만 남아 완전히 분리될 때까지 '변수 선택 및 노드 분할'을 반복합니다.

 

예시 3. 실습으로 만든 의사결정나무 모델

 


 

6. 의사결정나무 모델의 특징

 

첫 번째 : 노드마다 분할되는 횟수가 다르다.

예측 변수를 선택하고 노드를 분할하는 횟수가 노드마다 다르다.

 

두 번째 : 노드마다 선택되는 예측 변수가 다르다.

앞선 질문에 따라 하위 노드의 질문을 구성하는 예측 변수가 다르다.

 

세 번째 : 노드를 구성하는 예측 변수로 사용되지 않는 변수도 있다.

데이터 내 모든 변수를 예측 변수로 사용하지 않을 수 있다.

 


 

7. 실습하기

 

교재에 수록된 가이드를 따라 '인적 정보로 소득을 예측하는 의사결정나무 모델 구축'에 대해 실습해 볼 수 있었습니다.

 


 

1단계 : Raw Data 구조 확인하기

 

df.info( )

 

의사결정나무 모델 구축에 사용할 Raw Data의 구조를 확인했습니다.

Raw Data에는 age부터 income까지 총 15개의 변수를 포함하고 있으며, non-null을 통해 결측치가 없는 것을 알 수 있습니다.

 

또한 각 변수를 구성하는 값의 유형을 알 수 있습니다.

int64는 정수이고, object는 문자입니다.

 

income을 타겟 변수로 사용하고, 나머지 14개 변수를 예측 변수로 사용했습니다.

 


 

2단계 : 타겟변수 전처리하기

 

먼저, 타겟 변수인 income의 구조를 확인하고 전처리합니다.

df.value_counts()
df.value_counts(normalize = True)

 

타겟 변수인 income이 50K를 기준으로 분류되어 있는 것을 알 수 있었습니다.

 

변수의 값이 문자이니 np.where 조건문을 이용해 값을 수정합니다.

 

np.where 조건문

 

df.value_counts(normalize = True)의 결과 비율이 np조건문을 처리하기 전/후로 동일한 것을 알 수 있습니다.

 


 

3단계 : 문자 변수를 숫자 변수로 전처리하기 (원-핫 인코딩)

 

의사결정나무 모델을 만들 때 사용하는 모두 변수는 숫자 변수여야 합니다.

1단계에서 object(문자) 변수가 9종류인 것을 알 수 있었습니다.

문자 변수를 원-핫 인코딩을 통해 숫자 변수로 전환합니다.

 

원-핫 인코딩 (One-Hot Encoding)

: 범주형 데이터를 컴퓨터가 처리할 수 있는 0과 1로 이루어진 벡터 형태로 변환하는 기법

 

 

pd.get_dummies( ) 함수

 

pandas 패키지의 get_dumies( ) 함수를 이용해 원-핫 인코딩을 할 수 있습니다.

 

원-핫 인코딩에 앞서, 타겟 변수인 income을 추출하겠습니다.

그리고 타겟 변수 이외의 모든 예측 변수에 원-핫 인코딩을 적용하겠습니다.

이후에 다시 타겟 변수 income을 데이터프레임에 부여했습니다.

 


 

4단계 : 데이터 분할하기

 

머신러닝 모델을 구축할 때, 가지고 있는 모든 Raw Data를 사용하지 않고 Raw Data의 일부만 무작위로 추출해서 사용합니다.

모든 Raw Data를 사용해 머신러닝 모델을 만들면, 성능을 신뢰할 수 없기 때문입니다.

머신러닝 모델을 만들 때 사용한 데이터를 머신러닝 모델의 성능을 평가할 때 사용한다면, 성능이 높은 결과가 나옵니다.

이 경우, 성능이 좋아서인지 혹은 학습한 데이터라 잘 예측한 것인지 알 수 없습니다.

그래서 머신러닝 모델 구축 과정에서 교차 검증을 수반합니다.

 

교차 검증 (Cross Validation)

: Raw Data를 일정비율로 분할해서 일부는 모델을 만들때 사용하고 나머지는 평가할 때 사용하는 방법

 

예시 4. 교차 검증

 

위 예시 4처럼, Raw Data를 일정 비율에 따라 훈련용과 평가용으로 분할합니다.

분할한 Raw Data는 2종류가 있습니다.

 

1. 트레이닝 세트 (Training Set)

: 머신러닝 모델을 만들 때 사용하는 데이터

 

2. 테스트 세트 (Test Set)

: 머신러닝 모델의 성능을 평가할 때 사용하는 데이터

 

트레이닝 세트를 이용해 머신러닝 모델을 만듭니다.

이후, 테스트 세트를 이용해 만든 머신러닝 모델의 성능을 측정합니다.

머신러닝 모델 입장에서 테스트 세트는 학습한 적 없는 데이터이기 때문에 측정된 성능을 신뢰할 수 있습니다.

 

Python 환경에서는 scikit-learn 패키지는 머신러닝 모델을 만들 때 사용되는 패키지입니다.

scikit-learn 패키지를 로드할 때는 sklearn을 입력하면 됩니다.

 

sklearn.model_selection의 train_teest_split( ) 함수를 이용해 Raw Data를 트레이닝 세트와 테스트 세트로 분할할 수 있습니다.

 

train_test_split( ) 함수

 

train_test_split( ) 함수의 ( 괄호 ) 안에는 4개의 파라미터를 지정해야 합니다.

 

train_test_split(분할할 Raw Data, test_size, stratify, random_state)

 

1. 분할할 Raw Data

: 트레이닝 세트와 테스트 세트로 분할할 데이터 프레임

 

2. test_size

: Raw Data에서 테스트 세트의 비율

데이터가 많을수록 트레이닝 세트의 비율이 높고 데이터가 적을수록 테스트 세트의 비율이 높습니다.

 

3. stratify

: 범주별 비율을 통일할 변수

주로 타겟 변수를 입력합니다.

 

4. random_state

: 난수 초깃값

train_test_split( ) 함수는 난수를 이용해 Raw Data를 무작위로 추출합니다.

그래서 코드를 실행할 때 마다 추출되는 데이터가 상이합니다.

하지만, 난수를 상수로 지정하면 코드를 실행할 때마다 항상 동일한 데이터가 추출됩니다.

 

그리고 train_test_split( ) 함수는 트레이닝 세트와 테스트 세트를 함께 출력합니다.

그래서 각 세트를 할당할 변수를 2개 지정해야합니다.

앞에 입력한 변수에는 트레이닝 세트를 할당합니다.

뒤에 입력한 변수에는 테스트 세트를 할당합니다.

 

모델을 만들 때 난수를 고정하는 이유

의사결정나무 모델은 타겟 변수를 가장 잘 분리하는 예측 변수를 선택해 노드를 분할합니다.

단, 2개 이상의 예측 변수가 똑같이 타겟 변수를 분리하는 경우가 있습니다.

이럴 경우, 난수를 이용해 무작위로 예측 변수를 선택하기 때문에  코드를 실행할 때 마다 추출되는 데이터(결과)가 상이합니다.

그래서 난수를 상수로 지정해서 코드를 여러 번 실행해도 항상 동일한 데이터(결과)가 나오게 고정합니다.

 

 

분할한 각 세트에서 타겟 변수의 범주별 비율이 유사한 점을 확인할 수 있습니다.

train_test_split( ) 함수를 이용해 stratify에 타겟 변수를 지정했기 때문입니다.

 


 

5단계 : 의사결정나무 모델 설정하기

 

의사결정나무 모델을 만들 때에는, 앞서 만든 트레이닝 세트를 이용합니다.

 

Python 환경에서는 sklearn의 tree.DecisionTreeClassifier( ) 함수를 이용해 의사결정나무 모델을 만들 수 있습니다.

tree.DecisionTreeClassifier( ) 함수

 

tree.DecisionTreeClassifier( ) 함수의 ( 괄호 ) 안에는 2개의 파라미터를 입력합니다.

 

tree.DecisionTreeClasssifier(random_state, max_depth)

 

1. random_state

: 난수 초깃값

의사결정나무 모델 제작 시, 변수 선택 과정에서 난수를 이용합니다.

그래서 코드를 실행할 때 마다 추출되는 데이터가 상이합니다.

하지만, 난수를 상수로 지정하면 코드를 실행할 때마다 항상 동일한 데이터가 추출됩니다.

 

2. max_depth

: 의사결정나무의 깊이

노드를 최대 몇 번 분할할지 지정하는 파라미터입니다.

숫자가  클수록 분할 횟수가 많아지고 복잡한 의사결정나무 모델이 만들ㅇ러집니다.

값을 지정하지 않으면 노드를 최대한 많이 분할합니다.

 


 

6단계 : 의사결정나무 모델 만들기

 

df.clif( ) 함수

 

 

트레이닝 세트에서 타겟 변수와 예측 변수를 각각 추출해 데이터 프레임을 만들어야 합니다.

이후, df.fit( ) 함수의 X(대문자)에는 예측 변수를 입력하고 y(소문자)에는 타겟 변수를 입력합니다.

 


 

7단계 : 의사결정나무 모델 시각화하기

 

sklearn의 tree.plot_tree( ) 함수를 이용해 의사결정나무 모델을 시각화 할 수 있습니다.

tree.plot_tree( ) 함수

 

tree.plot_tree(데이터프레임) 코드 뒤에 ;를 입력하면 그래프만 출력할 수 있습니다.

 

예시 5. 실습으로 만든 의사결정나무 모델

 

예시 5의 의사결정나무 모델에 가독성을 향상하고자 수정할 수 있습니다.

tree.plot_tree( ) 함수의 파라미터

 

예시 6. 실습으로 만든 의사결정나무 모델

 

예시 6에서 중앙 최상단에 있는 첫번째 노드를 이용해 의사결정나무 모델을 해석하는 방법을 정리하겠습니다.

 

 

1. 분리 기준 (marital_status_Married-civ-spouse <= 0.5)

노드를 분리할 때 사용할 기준입니다.

기준을 충족하는 데이터는 좌하단의 하위노드로 할당합니다.

기준을 충족하지 않는 데이터는 우하단의 하위노드로 할당합니다.

 

위 예시에서, 원-핫 인코딩을 통해 '결혼'에 대한 변수를 1이면 기혼, 0이면 비혼으로 지정했습니다.

조건을 충족하면(0, 비혼) 좌하단의 하위노드로 이동하고, 조건을 충족하지 않으면(1, 기혼) 우하단의 하위노드로 이동합니다.

 


 

2. 노드에 해당하는 데이터의 비율 (samples = 100.0%)

트레이닝 세트를 구성하는 데이터의 몇 퍼센트가 해당 노드로 분류됐는지 표시합니다.

 

위 예시에서, 첫 번째 노드는 데이터가 나뉘지 않았기 때문에 100%의 데이터가 이 노드에 속합니다.

 


 

3. 타겟 변수의 클래스별 비율 (value = [0.239. 0.761])

타겟 변수의 클래스별 비율을 알파벳 순으로 나타냅니다.

 

위 예시에서, 타겟 변수의 클래스는 'low'와 'high'입니다.

알파벳순을 고려하면, 'high'가 0.239, 'low'가 0.761인 것을 알 수 있습니다.

 


 

4. 우세한 클래스 (class = low)

0.5를 기준으로 타겟 변수의 클래스 중 더 많은 클래스를 나타냅니다.

 

위 예시에서, 'high'가 0.239이고, 'low'가 0.761이기 때문에, 'low'가 표시됬습니다.

 


 

5. 노드의 색깔

우세한 타겟 변수의 클래스에 따라 노드의 색깔이 정해집니다.

 

위 예시에서, 'high'의 비율이 높은 노드는 주황색이고, 'low'의 비율이 높은 노드는 푸른색입니다.

 


 

6. 노드의 색농도

한 클래스의 구성 비율이 우세한 정도가 노도의 색농도로 표현됩니다.

한 클래스의 비율이 다른 클래스보다 높을수록 농도가 진합니다.

두 클래스의 비율이 비슷할수록 농도가 연합니다.

 


 

8단계 : 모델을 이용해 예측하기 (테스트 세트 적용하기)

 

앞서 만든 머신러닝 모델에 테스트 세트의 타겟 변수를 예측합니다.

이를 위해, 테스트 세트에서 예측 변수와 테스트 세트를 각각 추출합니다.

df.drop( ) 함수

 

df.drop( ) 함수를 이용해 타겟 변수인 income을 제외한 14개의 예측 변수를 추출합니다.

그리고 타겟 변수인 income만 별도로 다른 데이터프레임에 추출합니다.

 

예시 7. 학습한 머신러닝의 테스트 세트 적용 결과

 

model.predict( ) 함수를 이용해 머신러닝 모델에 테스트 세트를 적용해 타겟 변수 값을 예측할 수 있습니다.

 

위 예시 7에서 좌측의 빨간색 박스로 표시한 부분이 머신러닝의 테스트 세트 적용 결과입니다.

pred는 머신러닝 모델이 train_x를 구성하는 예측 변수만 이용해서 예측한 타겟 변수입니다.

income과 pred의 결과가 같으면 예측이 맞은 경우이고, 결과가 다르면 예측이 틀린 경우입니다.

 


 

9단계 : 혼동 행렬 만들기

 

이론값(예측값)과 실험값(실제값)을 대조해 머신러닝 모델의 예측이 얼마나 잘 맞았는지 성능을 평가합니다.

 

머신러닝 모델의 성능 평가를 위해 혼동 행렬을 만듭니다.

 

혼동 행렬 (Confusion Matrix)

: 머신러닝 모델의 성능을 평가하기 위해 실제값과 모델의 예측값을 비교하여 표 형태로 시각화한 행렬

 

Python 환경에서 sklearn.metrics의 confusion_matrix( ) 함수를 이용해 혼동 행렬을 만들 수 있습니다.

 

confusion_matrix( ) 함수

 

confusion_matrix( ) 함수의 ( 괄호 ) 안에는 3개의 파라미터를 입력합니다.

 

confusion_matrix(y_true, y_pred, labels)

 

1. y_true

: 테스트 세트의 실제 타겟 변수

 

2. y_pred

: 테스트 세트로 예상한 타겟 변수

 

3. labels

: 클래스 배치 순서

 

코드 실행 결과로 나온 혼동 행령에 히트맵을 적용하겠습니다.

 

ConfusionMatrixDisplay( ) 함수

 

sklearn.metrics의 ConfusionMatrixDisplay( ) 함수를 이용해 혼동 행렬을 시각화 할 수 있습니다.

예시 8. 실습으로 만든 머신러닝 모델의 성능지표

 

혼동 행렬의 행은 실제 빈도입니다.

혼동 행렬의 열은 모델이 예측한 빈도입니다.

 

첫 번째 열을 해석하면, 모델은 총 2,383명을 high로 예측했습니다.

예측한 high에서 실제로 high인 사람은 1,801명입니다. (정답)

예측한 high에서 실제로 high가 아닌 사람은 582명입니다. (오답)

 

두 번째 열을 해석하면, 모델은 총 12,270명을 low로 예측했습니다.

예측한 low에서 실제로 low인 사람은 10,565명입니다. (정답)

예측한 low에서 실제로 low가 아닌 사람은 1,705명입니다. (오답)

 

혼동 행렬의 좌상단과 우하단의 값은 예측이 맞은 빈도입니다.

혼동 행렬의 좌하단과 우상단의 값은 예측이 틀린 빈도입니다.

 

예시 9. 혼동 행렬의 셀 이름

 

혼동 행렬의 각 셀을 표현하는 단어가 있습니다.

 

1. 정답 여부 (True / False)

: 머신러닝 모델의 예측값이 실제값과 일치하면 True이고, 일치하지 않으면 False입니다.

 

2. 예측 클래스 (Positive / Negative)

: 타겟 변수의 클래스 중 머신러닝 모델이 예측하는 관심있는 클래스는 Positive이고 관심없는 클래스는 Negative입니다.

 

 

위 2종류의 단어들을 조합해서 혼동 행렬의 각 셀은 TP, FP, FN, TN으로 줄여서 표현합니다.

 


 

10단계 : 머신러닝 모델 성능 평가하기

 

머신러닝 모델의 성능 평가 지표에는 4종류가 있습니다.

 

1. 정확도 (Accuracy)

: 머신러닝 모델의 예측이 True인 비율

예시 10. 머신러닝 모델의 정확도

 

sklearn.metrics의 accuracy_score( ) 함수를 이용해 머신러닝의 정확도를 계산할 수 있습니다.

accuracy_score( ) 함수

 

accuracy_score( ) 함수의 ( 괄호 ) 안에는 2개의 파라미터를 입력합니다.

 

1. y_true

: 테스트 세트의 실제 타겟 변수

 

2. y_pred

: 테스트 세트로 예상한 타겟 변수

 

실습으로 구축한 머신러닝 모델의 정확도는 약 84%입니다

 


 

2. 정밀도 (Precision)

: 예측값의 Positive에서 True Positive의 비율, 관심 클래스를 예측해서 맞춘 비율

예시 11. 머신러닝 모델의 정밀도

 

sklearn.metrics의 precision_score( ) 함수를 이용해 머신러닝 모델의 정밀도를 계산할 수 있습니다.

precision_score( ) 함수

 

precision_score( ) 함수의 ( 괄호 ) 안에는 3개의 파라미터를 입력합니다.

 

1. y_true

: 테스트 세트의 실제 타겟 변수

 

2. y_pred

: 테스트 세트로 예상한 타겟 변수

 

3. pos_label

: 관심 클래스

 

실습으로 구축한 머신러닝 모델의 정밀도는 약 75.5%입니다.

 


 

3. 재현율 (Recall)

: 실제 Positive에서 True Positive의 비율, 실제 데이터에서 관심 클래스를 찾아낸 비율

예시 12. 머신러닝 모델의 재현율

 

sklearn.metrics의 recall_score( ) 함수를 이용해 머신러닝 모델의 재현율을 계산할 수 있습니다.

 

recall_score( ) 함수

 

recall_score( ) 함수의 ( 괄호 ) 안에는 3개의 파라미터를 입력합니다.

 

1. y_true

: 테스트 세트의 실제 타겟 변수

 

2. y_pred

: 테스트 세트로 예상한 타겟 변수

 

3. pos_label

: 관심 클래스

 

실습으로 구축한 머신러닝 모델의 재현율은 약 51%입니다.

 


 

4. F1 Score

: 정밀도와 재현율의 조화평균, 0 ~ 1 사이의 값을 가지며 1에 가까울수록 머신러닝 모델의 성능이 우수

 

예시 13. 머신러닝 모델의 F1-Score

 

sklearn.metrics의 f1_score( ) 함수를 이용해 머신러닝 모델의 F1-Score를 계산할 수 있습니다.

 

f1_score( ) 함수

 

f1_score( ) 함수의 ( 괄호 ) 안에는 3개의 파라미터를 입력합니다.

 

1. y_true

: 테스트 세트의 실제 타겟 변수

 

2. y_pred

: 테스트 세트로 예상한 타겟 변수

 

3. pos_label

: 관심 클래스

 

실습으로 구축한 머신러닝 모델의 f1-score는 약 61%입니다.

 


 

11단계 : 성능 평가 지표 선택 기준

1. 정확도 (Accuracy)
모델의 일반적인 성능을 표현할 때 사용합니다.

하지만, 정확도는 타겟 변수의 클래스별 비율이 불균형하면 신뢰하기 어렵다는 제한점이 있다.

따라서, 정확도만 봐서는 점수가 높더라도 머신러닝 모델의 성능이 좋아서인지, 자료가 불균형해서인지 판단할 수 없습니다.
목적에 따라 정밀도, 재현율 등 한가지 이상의 지표를 함께 검토해야 합니다.


2. 정밀도 (Precision)
타겟 변수의 한쪽 클래스에 분명한 관심이 있을 때 사용합니다.
머신러닝 모델을 사용하는 목적이 타겟 변수의 클래스 중에서 관심을 두는 한쪽 클래스를 정확하게 예측할 때 사용합니다.
예시) 고속득자를 예측해 고가의 제품을 홍보할 때 → 고소득자로 예측했을 때 얼마나 잘 맞췄는가? → 정밀도 사용

3. 재현율 (Recall)
관심 클래스를 최대한 많이 찾아야할 때 사용합니다.
예시) 전염병에 감염된 사람을 최대한 많이 찾아서 격리할 때 → 실제값 전염병에 감염된 사람 중 몇 %가 감염됬는지 예측하는지 살펴볼 때 → 재현율 사용

4. F1 Score
재현율과 정밀도가 모두 중요할 때 사용합니다.
여러 모델을 만들어 성능을 비교할 때 사용합니다.




관심 클래스로 예측해서 틀릴 때의 손실 VS 관심 클래스를 놓칠 때의 손실
예시) 고소득자에게 값비싼 선물을 보내 구매를 독려하는 마케팅

전자의 경우) 구매할 가능성이 낮은 저소득자에게 고가의 선물을 보냄

후자의 경우) 구매할 가능성이 있는 고소득자에게 고가의 선물을 보내지 않음

 

전자의 경우가 손실이 더 큼 → 비관심 클래스(Negative)를 관심 클래스(Positive)로 예측하는 오류를 줄여야 함

→ 정밀도를 기준으로 평가

 

 

 

관심 클래스로 예측해서 틀릴 때의 손실 VS 관심 클래스를 놓칠 때의 손실

예시) 전염병에 걸린 사람을 찾아 격리하는 방역 활동

전자의 경우) 정상인을 확진자로 분류해서 불필요한 격리

후자의 경우) 확진자를 정상인으로 분류해서 격리하지 않아 전염병 확산

 

후자의 경우가 손실이 더 큼 → 관심 클래스(Positive)를 비관심 클래스(Negative)로 예측하는 오류를 줄여야 함

→ 재현율을 기준으로 평가


 

머신러닝에 대해 학습한 내용을 정리했습니다.

 

이제 다른 책을 공부해보려고요.

그리고 Github 이용과 텍스트 마이닝에 대해서도 공부해보려고 합니다.