데이터 탐색(Data Exploration)
모델 학습 전에 데이터의 특성, 분포, 이상치, 결측치 등을 파악하여
이후 단계(전처리, 피처 엔지니어링, 모델링 등)에 필요한 정보를 얻음
원시 데이터(Raw Data)로부터 시작
훈련 데이터만 존재한다고 가정
테스트 데이터가 별도로 준비되어 있지 않으므로, 모델을 평가하기 위한 데이터를 나중에 분할하거나 교차 검증 등의 방법을 사용해야 함
데이터셋의 검토
• 변수의 분포 확인
통계적 기법: 평균, 중앙값, 분산, 표준편차 등 기본 통계량을 계산
시각화: 히스토그램, 박스 플롯, 커널 밀도 추정 등을 활용하여
변수들이 어떤 분포를 가지는지 시각적으로 파악
• 시각적 분석:
산점도(scatter plot), 페어플롯(pair plot), 상관관계 히트맵 등을 사용하여
변수 간의 관계, 패턴, 이상치 등을 찾음
전처리(Preprocessing)
• 데이터 클리닝 (Data Cleaning)
: 데이터셋에서 오류, 잡음, 불일치, 중복, 잘못된 데이터 등을 찾아내 수정 또는 제거
결측치 (Missing Values) 처리
데이터셋에 특정 변수의 값이 기록되지 않은 경우
삭제: 결측치가 있는 행 또는 열을 삭제
대체 (Imputation): 평균, 중앙값, 최빈값, 또는 더 정교한 예측 모델을 사용해 결측값을 채워 넣음
예측 기반 대체: 다른 변수들을 이용해 결측값을 예측
이상치 (Outliers)
데이터 분포에서 극단적으로 벗어난 값으로,
모델 성능에 악영향을 줄 수 있음
식별: 박스 플롯, 산점도, 통계적 방법(ex. Z-점수)을 활용해 이상치를 식별
처리: 이상치를 제거하거나, 변환(ex. 로그 변환)하여 영향을 줄이는 방법을 사용
• Feature Engineering
: 기존 데이터에서 모델 학습에 유용한 새로운 변수(피처)를 만들어내거나
기존 변수의 표현 방식을 변경하는 과정
정규화 (Normalization)
서로 다른 스케일을 가진 변수들을 일정한 범위(예: 0~1)로 조정해 모델이 특정 변수에 치우치지 않도록 함
Min-Max Scaling: 모든 값을 0과 1 사이로 변환
Z-Score Standardization: 평균을 0, 표준편차를 1
Binning
연속형 변수를 여러 구간(bin)으로 나누어 범주형 변수로 변환하거나, 노이즈를 줄이는 데 사용
동일 간격 Binning: 데이터 범위를 동일한 크기의 구간으로 나눔
동일 빈도 Binning: 각 구간에 데이터가 같은 수량으로
분포하도록 구간을 정함
범주형 변수 (Categorical Variables) 처리
모델이 숫자 데이터를 다루기 때문에,
텍스트나 범주형 데이터를 수치형으로 변환
One-Hot Encoding: 각 범주를 새로운 이진 변수로 변환
Label Encoding: 각 범주에 숫자를 할당
Target Encoding: 범주별로 목표 변수의 통계(ex.평균)를 사용하여 변환
• 피처 선택 (Feature Selection)
모델 학습에 가장 영향을 미치는 중요한 변수들만을 선택해,
불필요한 차원을 제거하는 과정
방법 :
데이터 분할(Data split)
: 모델 평가와 튜닝을 위해 데이터를 적절하게 나누는 단계
• 테스트 세트(Test Set)
실제 모델 평가나 최종 성능 측정을 위해 테스트 세트가 미리 분리되어 있음
테스트 세트는 모델 학습 과정에 전혀 관여하지 않고, 최종 평가용으로만 사용됨
• 검증 방법 별 데이터 분할 방식
모델 튜닝이나 성능 비교를 위해 추가로 데이터를 분할하는데,
검증 세트를 어떻게 구성할지는 선택한 검증 방법에 따라 달라짐
Holdout Validation (홀드아웃 검증)
데이터를 단순히 일정 비율(ex. 80% 학습, 20% 검증)로 나누는 방법
Cross Validation (교차 검증)
데이터를 여러 개의 폴드(fold)로 나누어, 각 폴드를 한 번씩 검증 세트로 사용하고 나머지 폴드를 학습 세트로 사용하는 방식
k-폴드 교차 검증이 대표적
Leave One Out Cross Validation (LOOCV)
데이터셋에서 한 개의 샘플을 검증 세트로, 나머지 모든 데이터를 학습 세트로 사용하는 극단적인 형태의 교차 검증
Training & Validation (학습&검증)
가능한 후보 모델과 각 모델의 다양한 하이퍼파라미터 설정을 대상으로
반복적으로 학습(training)하고 검증(validation)
• 다양한 모델 유형
Linear Models (선형 모델)
간단한 관계를 설명할 때 사용
ex. 선형 회귀(Linear Regression), 로지스틱 회귀(Logistic Regression)
Tree Models (트리 모델)
데이터의 비선형 관계를 포착할 수 있는 모델
ex. 결정 트리(Decision Tree), 랜덤 포레스트(Random Forest)
Ensemble Models (앙상블 모델)
여러 모델의 예측 결과를 결합하는 방식으로,
부스팅(Boosting), 배깅(Bagging) 방법 등이 포함됨
ex. XGBoost, Gradient Boosting, AdaBoost
• 검증 단계
: 학습 과정 중에 설정한 검증 데이터를 활용하여 각 모델의 성능을 평가
Test Set 전처리
학습 데이터에 적용했던 전처리 기법(ex. 결측치 처리, 스케일링, 인코딩)을
테스트 데이터에도 동일하게 적용해야 함
테스트 단계 (Evaluation)
학습 과정에 사용되지 않은 테스트 데이터를 통해 최종 성능을 평가
• 평가 지표 (Metrics)
→ 문제의 특성과 목표에 따라 적합한 평가 지표를 선택
각 예측과 실제 값 사이의 차이를 제곱하여 평균을 냄
제곱을 하므로 큰 오차가 있을 경우,
그 영향력이 급격히 커져 모델의 성능 평가에 크게 반영됨
MSE의 결과에 제곱근을 취하여, 실제 값과 동일한 단위로 표현
각 예측 오차의 절대값을 평균 내어 계산
예측 오차를 실제값에 대해 비율(%)로 표현
ex. 실제 값이 200이고 예측 값이 180인 경우,
오차는 20이지만 비율은 20/200 = 10%이 됨
→ 평균적으로 실제값의 몇 %만큼 예측이 틀렸는지를 나타냄
예측값과 실제값에 로그를 취한 후의 차이를 제곱하여 평균을 낸 지표
MSLE의 결과에 제곱근을 취해 데이터의 원래 단위와 동일한 스케일로 변환
회귀 모델이 전체 데이터의 분산(변동성)을 얼마나 잘 설명하고 있는지를
나타내는 지표
SST (Sum of Squares Total)
: 전체 데이터가 평균 를 중심으로 얼마나 흩어져 있는지를 나타냄
SSR (Regression Sum of Squares)
: 모델이 예측한 값 이 평균 로부터 벗어난 정도를 측정
SSE (Sum of Squared Errors)
: 실제 값 과 모델의 예측 값 사이의 오차 제곱의 합
→ 값이 높을수록 (= 모델이 더 많은 분산을 설명할수록),
모델이 실제 데이터를 더 잘 이해하고 예측한다고 판단
모델이 예측한 결과 중, 실제 정답과 일치한 비율
• 오분류 비용(Misclassification Cost)의 차이
현실에서는 상황에 따라 잘못된 예측이 주는 피해(=오분류 비용)가 다를 수 있음
ex. 1: 암 진단
실제 암 환자를 암이 없다고 예측(음성 오분류)하는 경우:
→ 환자가 필요한 치료를 받지 못해 매우 위험
암이 없는 사람을 암이라고 예측(양성 오분류)하는 경우:
→ 불필요한 검사나 불안감을 초래할 수 있지만, 생명에 직접적인 위협은 덜함
ex. 2: 미사일 발사 시스템
실제 발사 상황에서 미사일 발사를 감지하지 못하는 경우
→ 심각한 재앙으로 이어질 수 있음
실제 발사가 없는데도 발사라고 잘못 판단하는 경우
→ 경보를 울리지만, 큰 피해로 이어지지는 않을 수 있음
단순히 몇 개를 맞췄는지만 나타내므로, 한 모델이 높은 Accuracy를 보이더라도 치명적인 오분류가 발생할 수 있음
• Class-imbalanced dataset (클래스 불균형)
전체 데이터에서 한 클래스의 비율이 매우 높고,
다른 클래스의 비율이 매우 낮은 상황
→ 불균형 데이터에서는 대부분의 데이터가 다수 클래스에 속하기 때문에, 모델이 다수 클래스만 정확히 예측해도 높은 정확도를 얻을 수 있음
모델이 예측한 결과와 실제 결과를 네 가지 범주로 나누어 정리하는 도구
→ 혼동 행렬은 정확도만 보는 것보다 훨씬 정밀하게
모델이 어떤 오류를 자주 범하는지 알려줌
TP (True Positive): 실제 양성인 샘플을 양성으로 올바르게 예측한 경우
TN (True Negative): 실제 음성인 샘플을 음성으로 올바르게 예측한 경우
FP (False Positive): 실제 음성인데 양성으로 잘못 예측한 경우
FN (False Negative): 실제 양성인데 음성으로 잘못 예측한 경우
Type I (FP):
→ 실제로는 건강하지만 암이라고 진단
→ 과잉 검사, 비용 발생 (하지만 치료를 놓치진 않음)
Type II (FN):
→ 실제로는 암인데 정상이라고 진단
→ 치료 시기를 놓쳐 치명적 결과
질병 진단에서는 놓치는 것(FN)이 더 위험
스팸 필터링에서는 거짓 알람(FP)이 사용자 불편을 유발
스팸 필터링에서는 Type I Error(거짓 경고)를 줄이는 것이 중요
질병 진단에서는 Type II Error(중요한 걸 놓치는 것)을 줄이는 게 더 중요
• Accuracy (정확도)
• Sensitivity = True Positive Rate = Recall = Hit ratio (재현율, 민감도)
: 실제 Positive 중에서 모델이 Positive라고 맞춘 비율
• Specificity = True Negative Rate
: 실제 Negative 중에서 모델이 올바르게 음성으로 예측한 비율
• Precision (정밀도)
: 모델이 양성이라고 예측한 샘플 중 실제로 양성인 비율
• False Alarm Prob. (거짓 경보율) = False Positive Rate
: 실제는 Negative인데 Positive로 잘못 예측한 비율
Precision와 Recall의 조화 평균(harmonic mean),
두 지표의 균형이 잘 맞는지를 평가
조화 평균은 두 값 중 낮은 값에 민감한 특성을 가지고 있어,
Precision과 Recall 중 하나라도 낮으면 F1-score도 낮게 나오게 되어,
전체 성능 평가에 반영됨
→ F1-score양성 클래스에 대해
모델이 얼마나 신뢰할 수 있는 예측을 했는지를 보여줌
y : 실제 라벨
k : 임계값 기준 예측
• 모델 예측:
모델은 입력 x에 대해 클래스 1일 확률 p를 출력
• 임계값(Threshold) 적용:
모델의 임계값(threshold)을 변화시키면서, TPR과 FPR을 플롯
X축: FPR (False Positive Rate)
Y축: TPR (True Positive Rate)
각 점은 서로 다른 임계값 c에서 계산된 (FPR, TPR) 쌍을 나타냄
이상적인 모델은 가능한 한 왼쪽 상단 구석에 가까운 점들을 만들어야 함
→ 높은 TPR (양성을 잘 잡음)과 낮은 FPR (음성을 잘 배제함)
• AUC (Area Under the ROC Curve)
: ROC 곡선 아래의 면적으로, 모델이 얼마나 잘 분류하는지를 한 숫자로 요약한 값
AUC 값의 해석:
→ AUC가 높을수록 모델의 전반적인 구분 성능이 좋다는 것을 의미
Euclidean Distance (유클리드 거리 기준)
ROC Curve 상의 이상적인 점인 (FPR = 0, TPR = 1)을 기준으로,
실제 ROC Curve 상의 각 점과의 거리를 계산
→ (0,1) 과 가장 가까운 점을 찾기 위해 유클리드 거리를 계산
Youden’s Index (유든 지수 기준)
Positive를 잘 잡는 정도와 Negative를 잘 배제하는 정도를 합산한 뒤 1을 뺀 값
→ 최대값을 주는 c가 가장 성능 좋은 임계값으로 간주
Profit Matrix (이익 행렬)
각 분류 결과에 대해 실제로 얻는 보상이나 발생하는 손실을 나타냄
Probability Matrix
모델이 각 샘플에 대해 Positive일 확률 p를 출력
Expected Profit (기대 이익) 계산
각 분류 결과에 대해 (이익 행렬의 값 × 그 결과가 발생할 확률)을 모두 합산
Expected Profit (EP)
= C(1,1) × P(1,1) + C(1,0) × P(1,0) + C(0,1) × P(0,1) + C(0,0) × P(0,0)
• 가능한 상황 (Possible Scenarios)
훈련(Training) 세트와 테스트(Test) 세트가 모두 존재하지만,
테스트 세트에는 레이블(정답)이 없음
→ 실제 평가(최종 성능)를 위해 테스트 데이터를 사용할 수 없으므로
다른 방법(교차 검증, 검증 세트 분할)을 통해 모델 성능을 추정해야 함
오직 훈련 세트만 사용 가능한 경우
→ 테스트 데이터 없이 훈련 데이터만 존재한다면, 모델 선택 시
훈련 데이터에 기반한 평가 방법(교차 검증, 검증 세트 분할)을 사용해야 함
• 모델 선택의 목표 (Objective)
테스트 세트에서 가장 좋은 성능을 낼 것으로 예상되는 모델을 선택
• Naïve Approach (단순 접근 방식)
훈련 세트에서 가장 성능이 좋은 모델을 선택하는 방법
문제점:
과적합(Overfitting) 위험
훈련 세트에서 최고 성능을 보인 모델은 종종 과적합(overfitting)되어, 새로운 데이터(테스트 세트)에서는 성능이 저하될 수 있음
일반화 성능(Good Generalization)을 반영하지 못함
훈련 데이터에 특화된 모델은 실제 상황에서 데이터 분포가 조금만 달라져도 성능이 급격히 떨어질 위험이 있음
선형 회귀 모델 는 데이터의 전반적인 경향을 직선으로 표현하여
x와 y 사이의 선형 관계를 모델링
2차 회귀는 x와 y 사이 관계를 곡선(포물선)으로 모델링
항이 들어가기 때문에 데이터의 곡선형 패턴도 잡아낼 수 있음
(→ 다항 회귀도 입력 차원만 늘린 선형 회귀 문제로 변형 가능)
전체 데이터를 하나의 직선이나 하나의 곡선으로 설명하려 하지 않고,
데이터를 일정한 구간으로 나누어 각 구간에 별도의 직선을 맞춤
→ 선형 회귀(직선)와 2차 회귀(곡선)보다 유연하고 데이터에 잘 맞지만,
과적합 위험 있음
x축: 모델 복잡도
왼쪽: 모델이 간단하여 표현력이 낮은 경우 (Underfitting)
오른쪽: 모델이 매우 복잡하여 데이터의 세세한 패턴까지 학습하는 경우 (Overfitting)
y축: 에러 (오차)
Underfitting (과소적합) 영역:
모델이 너무 단순해서 데이터의 패턴을 전혀 잡지 못함.
훈련 에러와 일반화 에러가 모두 높음
Optimal Zone (최적 영역):
모델 복잡도가 적절하여, 훈련 데이터에도 잘 맞고 새로운 데이터에도 잘 일반화됨.
일반화 에러가 최소에 가까운 지점
Overfitting (과적합) 영역:
모델이 지나치게 복잡해져서 훈련 데이터의 잡음까지 학습하는 경우.
훈련 에러는 거의 0에 가깝지만, 일반화 에러는 다시 상승
Generalization Gap (훈련 에러와 일반화 에러의 차이)이 커지면,
모델의 실제 예측 성능은 떨어짐
데이터를 두 부분으로 나눔
매우 단순하고 빠르게 분할하여 모델의 성능을 측정할 수 있음
과적합 여부를 파악하기 어려움
데이터를 세 부분으로 나눔
검증 세트를 활용하여, 학습 중에 발생할 수 있는 과적합 문제를 미리 확인하고, 최적의 모델을 선택할 수 있음
but 데이터가 충분하지 않은 경우, 세 부분으로 나누면 각 세트의 데이터 양이 부족해져 성능 평가의 안정성이 떨어질 수 있음
전체 데이터를 K개의 폴드로 균등하게 나눔
첫 번째 반복 : 폴드 1을 검증 세트로, 폴드 2~5를 훈련 세트로 사용하여 모델을 학습한 후, 폴드 1에서 성능을 평가
두 번째 반복: 폴드 2를 검증 세트로, 나머지 폴드(1, 3, 4, 5)를 훈련 세트로 사용하여 평가
→ K번 반복하여, 각 폴드가 한 번씩 검증 세트 역할을 하게 됨
K번의 평가 결과(ex. 정확도, MSE)를 평균하여 최종 모델의 성능을 추정
→ 모든 데이터가 한 번씩 검증에 사용되므로,
데이터가 적은 경우에도 안정적인 성능 추정 가능
전체 데이터셋의 각 샘플을 한 번씩 검증 데이터로 사용하여,
나머지 모든 데이터를 학습에 사용하는 교차 검증 기법
데이터가 적은 경우 유리함
모든 샘플이 한 번씩 검증용으로 사용되므로, 데이터셋의 모든 정보를 평가에 반영할 수 있음
대규모 데이터셋에서는 실행에 많은 시간이 소요, 계산 비용이 큼
• 시계열 데이터의 특성
시간 순서 보존:
시계열 데이터는 시간 순서대로 정렬되어 있음.
미래 데이터를 과거 데이터로 학습하는 것은 현실적으로 불가능하며,
데이터 누수(Data Leakage)를 발생시킴
연속성:
데이터의 시간적 연속성을 유지해야 모델이 실제로 미래를 예측하는 데 도움이 됨
초기 일정 구간을 훈련 데이터로 사용한 후, 검증 데이터를 포함하는 방식
→ 점진적으로 더 많은 과거 정보를 포함하므로,
모델이 점점 더 많은 데이터를 학습
K-fold 교차 검증:
데이터를 무작위로 섞은 후,
여러 폴드로 나누어 각 폴드를 검증용으로 사용하는 방식.
but 시계열 데이터에서는 순서를 무시하면 미래 정보를 일부 포함하는 문제가 발생
→ Time-Series Cross Validation은 데이터를 임의로 섞지 않고 시간의 흐름에 따라 분할
→ SSE가 낮을수록 검증 데이터에 대해 잘 맞춘 모델로 판단
검증 세트에서 SSE = 2.4
모델이 데이터를 단순한 직선으로 설명하여,
데이터의 일부 곡선적 특성을 반영하지 못해 과소적합(underfitting) 상태
검증 세트에서 SSE = 0.9
2차 항을 포함하여 데이터의 곡선적 패턴을 어느 정도 반영
→ 훈련 데이터와 검증 데이터 모두에서 균형 잡힌 성능을 보이며,
가장 낮은 SSE를 기록하여 일반화 성능이 우수한 모델로 판단
검증 세트에서 SSE = 2.2
훈련 데이터에서는 거의 오차 없이 맞출 정도로 복잡하지만,
검증 세트에서는 데이터의 노이즈까지 학습한 결과 과적합(overfitting)이 발생