부록 D22: 머신러닝의 기본
이 장에서 배울 것
이번 장에서는 머신러닝(machine learning)의 기본을 배웁니다. 머신러닝은 컴퓨터가 데이터에서 규칙을 찾아 새로운 데이터에 대해 예측하도록 만드는 방법입니다. 계산생물학에서는 유전자 발현량으로 질병 여부를 예측하거나, 세포 유형을 분류하거나, 단백질 기능을 추정할 때 머신러닝을 씁니다.
핵심 용어를 먼저 정리하겠습니다.
- 특징(feature): 예측에 사용하는 입력값입니다. 예를 들어 유전자 발현량, 나이, 변이 개수가 특징이 될 수 있습니다.
- 라벨(label): 맞히고 싶은 정답입니다. 예를 들어 암/정상, 세포 유형, 질병 여부가 라벨이 될 수 있습니다.
- 지도학습(supervised learning): 특징과 라벨을 함께 주고 모델을 학습시키는 방법입니다.
- 비지도학습(unsupervised learning): 라벨 없이 패턴을 찾는 방법입니다.
- 학습 데이터(training data): 모델이 규칙을 배우는 데 쓰는 데이터입니다.
- 테스트 데이터(test data): 학습이 끝난 모델을 평가하는 데이터입니다.
- 과적합(overfitting): 모델이 학습 데이터만 너무 외워서 새 데이터에는 약해지는 현상입니다.
- 정규화(regularization): 모델이 너무 복잡해지지 않도록 억제하는 장치입니다.
- 교차검증(cross-validation): 데이터를 여러 번 나누어 모델 성능을 더 안정적으로 평가하는 방법입니다.
가장 쉬운 비유: 문제집을 외운 학생
어떤 학생이 문제집 답만 외웠다고 합시다. 같은 문제집 시험은 잘 보지만, 조금만 바뀐 새 문제는 못 풉니다. 이것이 과적합과 비슷합니다. 머신러닝 모델도 학습 데이터만 외우면 새 생물 데이터에 약해집니다.
좋은 모델은 학습 데이터에서 일반적인 규칙을 배우고, 처음 보는 데이터에도 어느 정도 맞게 예측해야 합니다.
특징과 라벨
머신러닝 데이터는 보통 특징과 라벨로 나눕니다.
특징: 유전자 A 발현량, 유전자 B 발현량, 나이
라벨: 암 또는 정상
모델은 특징을 보고 라벨을 예측합니다. 라벨이 있는 문제는 지도학습입니다. 라벨이 없고 비슷한 샘플끼리 묶는 문제는 비지도학습입니다.
학습 데이터와 테스트 데이터
모델을 평가하려면 학습에 쓰지 않은 데이터를 따로 남겨야 합니다. 학습 데이터로 모델을 만들고, 테스트 데이터로 “새 데이터에도 잘 맞는지” 확인합니다.
전체 데이터 100개
학습 데이터 80개
테스트 데이터 20개
이렇게 나누는 것은 모델이 정답을 외웠는지, 일반화했는지 확인하기 위해서입니다.
과적합
과적합은 모델이 너무 복잡해서 학습 데이터의 작은 잡음까지 외워 버리는 현상입니다. 생물 데이터는 샘플 수는 적고 유전자 수는 많은 경우가 많아서 과적합 위험이 큽니다.
예를 들어 환자 20명 데이터로 유전자 2만 개를 사용해 질병을 예측하면, 우연한 패턴을 진짜 규칙으로 착각할 수 있습니다.
교차검증
교차검증은 데이터를 여러 조각으로 나누어, 번갈아 가며 학습과 검증을 하는 방법입니다. 한 번만 나누면 우연히 쉬운 테스트셋이나 어려운 테스트셋이 걸릴 수 있습니다. 교차검증은 이런 우연을 줄여 줍니다.
정규화
정규화는 모델이 너무 복잡해지지 않도록 벌점을 주는 방법입니다. 입문 단계에서는 “모델이 학습 데이터를 너무 세세하게 외우지 못하게 하는 안전장치”라고 이해하면 됩니다.
성능 지표
분류 모델은 예측이 맞았는지 틀렸는지를 봅니다. 가장 쉬운 지표는 정확도입니다.
정확도 = 맞힌 개수 / 전체 개수
하지만 질병 데이터처럼 한쪽 클래스가 매우 적으면 정확도만 보면 위험할 수 있습니다. 그래서 정밀도와 재현율도 봅니다.
정밀도 = 진짜 양성으로 맞힌 수 / 양성이라고 예측한 수
재현율 = 진짜 양성으로 맞힌 수 / 실제 양성 수
계산 감각
예를 들어 모델이 20개 중 16개를 맞혔다면 정확도는 16 / 20 = 0.8, 즉 80%입니다.
양성이라고 예측한 것이 10개이고 그중 진짜 양성이 7개라면 정밀도는 7 / 10 = 0.7입니다. 실제 양성이 14개이고 그중 7개를 찾았다면 재현율은 7 / 14 = 0.5입니다.
생물정보학에서 왜 중요한가
머신러닝은 생물정보학에서 강력하지만 조심해야 합니다. 유전자 수가 많고 샘플 수가 적은 데이터에서는 과적합이 잘 생깁니다. 따라서 데이터 분할, 교차검증, 독립 검증, 생물학적 해석이 함께 필요합니다.
보강: 데이터 누수는 성능을 가짜로 높인다
머신러닝에서 가장 위험한 실수 중 하나는 데이터 누수(data leakage)입니다. 데이터 누수는 테스트 데이터의 정보가 학습 과정에 몰래 들어가는 상황입니다. 그러면 모델 성능이 실제보다 훨씬 좋아 보입니다.
예를 들어 전체 샘플을 먼저 이용해 유전자 100개를 고른 뒤, 그다음 학습/테스트로 나누면 테스트 데이터 정보가 특징 선택에 이미 들어간 것입니다. 올바른 방식은 학습 데이터 안에서만 특징 선택을 하고, 테스트 데이터는 마지막 평가 때만 사용하는 것입니다.
나쁜 흐름: 전체 데이터로 특징 선택 → train/test split → 평가
좋은 흐름: train/test split → train 안에서 특징 선택 → test로 최종 평가
검증셋과 테스트셋
테스트셋은 마지막에 한 번만 보는 시험지에 가깝습니다. 모델 선택과 하이퍼파라미터 조정에는 검증셋을 쓰는 것이 안전합니다.
학습셋: 모델이 배운다.
검증셋: 모델 선택과 조정에 쓴다.
테스트셋: 최종 성능을 확인한다.
테스트셋을 여러 번 보면서 모델을 고치면, 테스트셋에도 과적합될 수 있습니다.
클래스 불균형과 정확도의 함정
희귀질환 데이터에서 실제 양성이 1%뿐이라고 합시다. 모델이 모든 사람을 음성이라고 예측하면 정확도는 99%입니다. 하지만 양성 환자를 한 명도 찾지 못하므로 쓸모가 없습니다. 이런 상황에서는 정확도보다 재현율, 정밀도, F1 점수, PR curve가 더 중요할 수 있습니다.
정확도: 전체 중 맞힌 비율
정밀도: 양성 예측 중 진짜 양성 비율
재현율: 실제 양성 중 찾아낸 비율
생물정보학 머신러닝은 샘플 수가 적고 특징 수가 많은 경우가 많습니다. 그래서 독립 검증 코호트, 데이터 누수 방지, 클래스 불균형 점검이 필수입니다.
보강 학습: train/test split, cross-validation, overfitting
왜 필요한가: 모델이 학습 데이터가 아니라 새 데이터에서도 작동하는지 확인하기 위해 필요합니다.
공식 읽기: 일반화 성능 ≠ 학습 데이터 성능. 훈련 성능은 모델이 본 데이터에서의 성능이고, 일반화 성능은 보지 못한 데이터에서의 성능입니다.
숫자 예시: 100개 샘플을 80:20으로 나누면 train 80개, test 20개입니다.
생물정보학에서 쓰이는 장면: 발현량 기반 질병 분류, 세포 유형 분류, 단백질 기능 예측 모델 평가에서 쓰입니다.
흔한 오해와 주의점: test 데이터를 특징 선택이나 정규화에 미리 쓰면 data leakage가 생겨 성능이 부풀려집니다.
핵심 정리
머신러닝은 데이터에서 규칙을 배워 예측하는 방법입니다. 특징은 입력값, 라벨은 맞히려는 정답입니다. 학습 데이터와 테스트 데이터를 나누는 이유는 새 데이터 성능을 보기 위해서입니다. 과적합은 학습 데이터를 외우는 현상이며, 교차검증과 정규화는 이를 줄이는 데 도움을 줍니다.
문제 풀이
머신러닝의 기본
주관식 답안은 Gemini API로 채점합니다. API 키는 이 브라우저에만 저장됩니다.
-
1. [쉬움] 객관식
머신러닝에서 특징(feature)이 뜻하는 것은?
-
2. [쉬움] 객관식
라벨(label)의 설명으로 가장 적절한 것은?
-
3. [쉬움] 객관식
지도학습의 특징은?
-
4. [계산] 객관식
20개 중 16개를 맞힌 모델의 정확도는?
-
5. [계산] 객관식
전체 데이터 100개를 80:20으로 나누면 테스트 데이터는 몇 개인가?
-
6. [계산] 객관식
양성 예측 10개 중 진짜 양성이 7개이면 정밀도는?
-
7. [계산] 객관식
실제 양성 14개 중 7개를 찾았다면 재현율은?
-
8. [계산] 객관식
50개 중 45개를 맞힌 정확도는?
-
9. [계산] 객관식
전체 200개 중 학습 데이터가 150개이면 테스트 데이터는?
-
10. [보통] 객관식
과적합의 설명으로 가장 적절한 것은?
-
11. [보통] 객관식
교차검증의 목적은?
-
12. [보통] 객관식
정규화의 직관으로 적절한 것은?
-
13. [계산] 객관식
30개 중 21개를 맞힌 정확도는?
-
14. [계산] 객관식
양성 예측 8개 중 진짜 양성 6개이면 정밀도는?
-
15. [계산] 객관식
실제 양성 12개 중 9개를 찾았다면 재현율은?
-
16. [계산] 객관식
전체 120개를 75% 학습 데이터로 쓰면 학습 데이터는?
-
17. [계산] 객관식
전체 120개에서 학습 90개이면 테스트 데이터는?
-
18. [계산] 객관식
양성 예측 5개 중 진짜 양성 5개이면 정밀도는?
-
19. [계산] 객관식
실제 양성 20개 중 10개를 찾았다면 재현율은?
-
20. [계산] 객관식
100개 중 60개를 맞힌 정확도는?
-
21. [보통] 객관식
생물 데이터에서 과적합이 특히 위험한 이유는?
-
22. [쉬움] 객관식
테스트 데이터를 따로 남기는 이유는?
-
23. [보통] 객관식
정확도만으로 부족할 수 있는 상황은?
-
24. [쉬움] 객관식
지도학습 문제에 해당하는 것은?
-
25. [계산] 객관식
전체 100개 중 82개를 맞혔다. 정확도는?
-
26. [계산] 객관식
양성이라고 예측한 20개 중 진짜 양성이 15개였다. 정밀도는?
-
27. [계산] 객관식
실제 양성 30개 중 모델이 18개를 찾았다. 재현율은?
-
28. [계산] 객관식
TP=12, FP=3, FN=8, TN=77일 때 정확도는?
-
29. [계산] 객관식
TP=10, FP=5, FN=10일 때 F1 점수는? 정밀도와 재현율이 각각 2/3, 1/2라고 보고 계산한다.
-
30. [사례 판단] 객관식
희귀질환 1% 데이터에서 모두 음성으로 예측한 모델의 정확도가 99%였다. 가장 적절한 해석은?
-
31. [사례 판단] 객관식
전체 데이터를 사용해 유전자 특징을 고른 뒤 train/test로 나누었다. 가장 우려되는 문제는?
-
32. [개념 구분] 객관식
테스트셋의 가장 적절한 용도는?
-
33. [쉬움] 객관식
overfitting은?
-
34. [쉬움] 객관식
100개를 80:20으로 나누면 test는?
-
35. [보통] 객관식
5-fold CV는?
-
36. [어려움] 객관식
data leakage 예는?
-
37. [보통] 객관식
질병 5%, 정상 95%에서 accuracy만 위험한 이유는?
-
주관식 38. [보통] 주관식 · Gemini 채점
특징과 라벨의 차이를 생물정보학 예시로 설명하라.
-
주관식 39. [보통] 주관식 · Gemini 채점
학습 데이터와 테스트 데이터를 나누는 이유를 설명하라.
-
주관식 40. [보통] 주관식 · Gemini 채점
과적합이 생물정보학에서 위험한 이유를 설명하라.
-
주관식 41. [보통] 주관식 · Gemini 채점
정확도, 정밀도, 재현율이 각각 무엇을 보는지 설명하라.
-
주관식 42. [심화] 주관식 · Gemini 채점
생물정보학 머신러닝에서 데이터 누수가 왜 위험한지 예시와 함께 설명하라.
-
주관식 43. [보통] 주관식 · Gemini 채점
120개 샘플의 5-fold cross-validation에서 각 평가 fold는 몇 개인가?
-
주관식 44. [보통] 주관식 · Gemini 채점
발현량 분류 모델에서 data leakage 예를 하나 들고 왜 위험한지 설명하라.
-
주관식 45. [보통] 주관식 · Gemini 채점
불균형 질병 데이터에서 accuracy 외에 봐야 할 지표를 설명하라.