데이터분석 전처리·평가지표 정리
전처리 선택과 분류·회귀 평가지표를 상황별로 고르는 기준을 설명합니다.
데이터 전처리
결측값은 발생 원인을 먼저 확인하고 삭제·단순 대치·모델 기반 대치를 선택합니다. 이상값은 오류일 수도 있지만 중요한 희귀 사건일 수 있으므로 자동 제거하면 안 됩니다.
- 표준화는 평균 0, 표준편차 1로 변환한다.
- 원-핫 인코딩은 범주마다 이진 열을 만든다.
- 학습·검증 데이터 분리 전에 전체 데이터로 변환기를 학습하면 누수가 생긴다.
분류지표
정밀도는 양성 예측의 정확성, 재현율은 실제 양성을 찾아낸 비율입니다. 거짓음성 비용이 큰 질병 탐지나 이상 탐지에서는 재현율의 중요도가 커질 수 있습니다.
- F1은 정밀도와 재현율의 조화평균이다.
- 불균형 데이터에서는 정확도만 보면 오해할 수 있다.
- ROC-AUC는 임계값 전반의 분류 성능을 요약한다.
회귀와 검증
MAE는 절대오차 평균, RMSE는 큰 오차에 더 큰 패널티를 줍니다. 교차검증은 여러 분할에서 성능을 반복 측정해 특정 분할에 대한 우연을 줄입니다.
- 과적합은 학습 성능과 검증 성능의 차이로 의심할 수 있다.
- 규제는 모델 복잡도를 제어한다.
- 시계열 데이터는 시간 순서를 무시한 무작위 분할에 주의한다.
데이터 누수 없이 지표를 선택하는 순서
전처리기의 통계와 모델 매개변수는 학습 데이터에서 학습합니다. 모델과 하이퍼파라미터는 검증 데이터의 성능이나 학습 영역 안의 교차검증 결과로 선택합니다. 테스트 데이터는 이 선택에 사용하지 않고 최종 평가용으로 보관합니다. 지표는 양성·음성 오류의 비용이나 수치 오차에 줄 벌점을 기준으로 정합니다.
- 재현율을 높이면 일반적으로 거짓양성이 늘 수 있어 정밀도와 함께 본다.
- 교차검증에서는 매번 학습 분할에만 스케일링·대치·특성 선택기를 fit하고 검증 분할에는 학습된 변환만 적용한다.
- 시계열은 미래 정보가 과거 학습 구간으로 들어오지 않도록 순서를 보존한다.
통계적 판단과 임계값 조정
모델 평가는 단일 점수보다 오차의 종류와 업무 비용을 함께 봐야 합니다. 가설검정에서는 유의수준·p값·1종 및 2종 오류를 구분하고, 분류에서는 임계값을 바꿀 때 정밀도와 재현율이 어떻게 교환되는지 확인합니다.
- 1종 오류는 참인 귀무가설을 기각하고 2종 오류는 거짓인 귀무가설을 기각하지 못하는 오류다.
- p값은 귀무가설과 검정의 가정 아래에서 관측된 검정통계량만큼 또는 더 극단적인 결과가 나올 확률이다. 극단적인 방향은 단측·양측 대립가설에 따라 정하며, 귀무가설이 참일 확률이 아니다.
- PR 곡선은 양성 클래스가 희소한 문제에서 ROC 곡선과 함께 확인할 가치가 크다.
- 특성 선택기는 학습 분할에만 적합한다. 검증 성능으로 선택 방법과 하이퍼파라미터를 비교하되 테스트 데이터는 최종 평가 전까지 사용하지 않는다.
분석기획·탐색·통계 추론 연결
분석은 해결할 업무문제와 성공 기준을 먼저 정하고 필요한 데이터를 확보·정제한 뒤 탐색, 모델링, 평가, 적용으로 이어집니다. 기술통계는 관측 자료를 요약하고 추론통계는 표본을 바탕으로 모집단에 관한 불확실성을 다룹니다.
- 평균은 극단값에 민감하고 중앙값은 순서 중심의 강건한 대표값이며 분산·표준편차는 평균 주변 산포를 나타낸다.
- 상관계수는 선형 연관의 방향과 강도를 나타내지만 인과관계나 비선형 관계 부재를 증명하지 않는다.
- 신뢰구간은 반복 표본추출에서 정해진 비율의 구간이 모수를 포함하도록 만든 절차이며 특정 계산 구간에 모수가 있을 확률이라고 단순 해석하지 않는다.
- 표본 편향·결측 발생 방식·측정 오류를 확인하지 않은 채 모델 성능만 높이면 실제 적용 타당성이 떨어진다.
- EDA에서 분포·이상값·변수 관계를 확인한 결과는 전처리와 모델 선택의 근거로 남긴다.
모델별 전제와 과적합 제어
회귀·분류·군집 모델은 목표변수 유무와 데이터 관계에 따라 선택합니다. 성능 비교에서는 동일한 검증 분할과 지표를 사용하고, 복잡도를 높였을 때 학습 오차만 줄고 검증 오차가 커지는지 확인합니다.
- 선형회귀는 선형성·독립성·등분산성·잔차 정규성 등의 진단을 하고 다중공선성은 계수 해석 안정성에 영향을 줄 수 있다.
- 로지스틱 회귀는 선형 결합을 로짓과 확률로 연결하며 분류 임계값은 오류 비용에 따라 조정한다.
- 의사결정나무는 해석이 쉽지만 깊어지면 과적합할 수 있고 앙상블은 여러 모델의 오차를 결합해 일반화를 높인다.
- k-means는 군집 수와 초기 중심, 거리 척도에 민감하고 범주형·비구형 군집에 그대로 적합하다고 단정할 수 없다.
- L1 규제는 일부 계수를 0으로 만들 수 있고 L2 규제는 큰 계수를 제곱 벌점으로 완화한다.
R 자료구조와 인덱싱
R 코드는 객체의 자료구조를 먼저 확인한 뒤 원소·열·행을 구분해 읽습니다. 원자 벡터는 한 자료형으로 구성되고, 리스트는 서로 다른 형태의 객체를 담을 수 있습니다. 데이터 프레임은 열마다 자료형이 다를 수 있는 표 형태입니다.
- x <- c(2, 8, 10)에서 x[1]은 첫 원소 2다. R의 위치 인덱스는 1부터 시작하며 x[0]은 첫 원소가 아니라 빈 선택이다.
- 리스트 z에서 z[1]은 첫 원소를 담은 부분 리스트이고 z[[1]]은 그 안의 객체다. 데이터 프레임 d에서도 d["score"]는 한 열짜리 데이터 프레임, d[["score"]]는 score 열 자체다.
- d[행, 열]에서 비운 방향은 전체를 선택한다. d[3:4, ]는 3·4행의 모든 열이다. 한 열을 고른 뒤에도 표 형태를 유지하려면 d[, "score", drop = FALSE]를 사용한다.
- factor는 범주를 수준(levels)과 내부 정수 코드로 표현한다. as.numeric(f)를 원래 수치라고 단정하면 안 된다. 범주에 순서가 있다면 levels의 순서와 ordered = TRUE를 명시한다.
R 결측값·조건 선택·기술통계 추적
결측값을 제외하는 것은 0으로 바꾸는 것이 아닙니다. x <- c(2, NA, 8, 10)을 예로 들어 계산에 포함된 관측값과 분모를 먼저 적어봅니다. 아래 값은 이 자료에 대한 계산이며 모든 결측값을 삭제하라는 뜻은 아닙니다.
- 결측 여부는 x == NA가 아니라 is.na(x)로 검사한다. 이 예제의 결과는 FALSE, TRUE, FALSE, FALSE다.
- mean(x)는 NA이고 mean(x, na.rm = TRUE)는 (2 + 8 + 10) / 3 = 20/3이다. length(x)는 결측을 포함한 원소 수 4, sum(!is.na(x))는 유효 관측값 수 3이다.
- var(x, na.rm = TRUE)는 표본분산이다. 평균 20/3에 대한 제곱편차합 104/3을 유효 관측값 수 3에서 1을 뺀 2로 나눠 52/3을 얻는다. 원래 벡터 길이 4를 분모로 쓰지 않는다.
- d <- data.frame(id = 1:4, score = x)일 때 d[!is.na(d$score) & d$score >= 8, ]는 FALSE, FALSE, TRUE, TRUE 조건으로 3·4행을 선택한다. 벡터의 원소별 조건 결합에는 &&가 아니라 &를 쓴다.
직접 풀어보는 예제와 단계별 해설
지표 이름보다 무엇을 분모로 나누는지가 중요합니다. 실제 사용자 통계가 아닌 자체 설계 데이터로 같은 모델을 여러 지표에서 비교합니다.
정확도 95%인 모델이 양성을 하나도 못 찾을 수 있다
1,000건 중 실제 양성은 50건입니다. 모델 A의 혼동행렬을 계산한 뒤, 전부 음성이라고 예측하는 모델 B와 비교하세요. 양성은 이 문제에서 찾아내려는 대상으로 정의합니다.
| 실제 구분 | 양성 예측 | 음성 예측 | 합계 |
|---|---|---|---|
| 양성 | 40 (TP) | 10 (FN) | 50 |
| 음성 | 60 (FP) | 890 (TN) | 950 |
| 합계 | 100 | 900 | 1000 |
| 지표 | 모델 A 계산 | 결과 |
|---|---|---|
| 정확도 | (40 + 890) / 1000 | 93% |
| 정밀도 | 40 / (40 + 60) | 40% |
| 재현율 | 40 / (40 + 10) | 80% |
| F1 | 2 × 40 / (2 × 40 + 60 + 10) | 약 53.33% |
풀이 순서
- 정밀도는 양성이라고 예측한 100건 중 맞은 40건, 재현율은 실제 양성 50건 중 찾아낸 40건을 셉니다. 분모가 서로 다릅니다.
- 모델 B는 음성 950건을 맞혀 정확도 95%가 되지만 실제 양성 50건을 모두 놓쳐 재현율은 0%입니다. 양성을 찾는 목적이라면 정확도만으로 B가 낫다고 판단할 수 없습니다.
- B는 양성 예측이 없으므로 정밀도 식의 분모가 0입니다. 이는 100%라는 뜻이 아닙니다. 분석 도구에서는 미정의 값을 처리하는 정책에 따라 0이나 다른 표시를 사용할 수 있으므로 보고서에 그 기준을 적어야 합니다.
틀리기 쉬운 지점: 높은 지표 하나만 고르지 말고 실제 양성 비율, 놓친 양성의 비용, 잘못된 경보의 비용을 함께 보세요. 이 예제의 숫자를 실제 서비스 이용자 결과로 해석하면 안 됩니다.
MAE와 RMSE에서 모델 순위가 뒤집히는 경우
정답은 [10, 10, 10], 모델 A의 예측은 [10, 10, 16], B는 [13, 13, 13]입니다. 같은 세 건의 오차로 두 지표를 계산하세요.
Python 3
from math import sqrt
actual = [10, 10, 10]
for name, predicted in [('A', [10, 10, 16]), ('B', [13, 13, 13])]:
errors = [p - a for p, a in zip(predicted, actual)]
mae = sum(abs(e) for e in errors) / len(errors)
rmse = sqrt(sum(e * e for e in errors) / len(errors))
print(name, f'{mae:.2f}', f'{rmse:.2f}')넓은 표는 좌우로 밀어 나머지 열을 볼 수 있습니다.
| 모델 | 예측 − 정답 | 절대오차 합 | 제곱오차 합 |
|---|---|---|---|
| A | 0, 0, 6 | 6 | 36 |
| B | 3, 3, 3 | 9 | 27 |
풀이 순서
- MAE는 A가 6/3=2, B가 9/3=3이므로 A가 작습니다. 반면 RMSE는 A가 √(36/3)≈3.46, B가 √(27/3)=3이므로 B가 작습니다.
- A의 한 번의 큰 오차 6이 제곱 과정에서 크게 반영됩니다. 큰 오차를 특히 줄여야 하는 목적과 전체 절대오차를 줄이는 목적이 다른 선택을 만들 수 있습니다.
- 오차의 평균에 제곱근을 취하는 것이 아닙니다. 먼저 각 오차를 제곱하고 평균을 구한 다음 마지막에 제곱근을 취합니다.
확인 결과
A 2.00 3.46
B 3.00 3.00틀리기 쉬운 지점: 두 모델은 같은 검증 데이터와 같은 목표 단위로 비교해야 합니다. 학습 데이터 오차와 별도 검증 데이터 오차를 섞어 우열을 정하지 마세요.
검증 방법과 참고 문서
혼동행렬을 1,000개의 실제·예측 레이블로 펼쳐 다시 집계하고 정확도·정밀도·재현율·F1을 분수로 대조합니다. 회귀 코드는 Python으로 실행하여 표시값과 계산표를 확인합니다.
예제·데이터·풀이표: 정처LAB 자체 설계 · AI 보조 작성 및 로컬 검증 · 예제 수정일 2026-09-27
혼동하기 쉬운 지점
- 불균형 데이터에서도 정확도만으로 모델 선택
- 검증 데이터로 하이퍼파라미터를 고른 뒤 같은 데이터로 최종 성능 주장
- 상관관계를 인과관계로 단정
개념을 확인했다면 관련 문제에 적용해보세요.
첫 관련 문제 풀기