일곱 단계로 나눕니다
기계학습은 데이터에서 규칙을 찾는 방법입니다. 이 단원에서 다루는 두 갈래는 레이블이 있으면 지도학습, 없으면 비지도학습으로 나뉩니다. 이제 그것을 실제로 진행하는 순서로 세워 봅니다.
| 단계 | 이름 | 여기서 하는 일 |
|---|---|---|
| 1 | 문제 정의 | 무엇을 맞히게 할지 한 문장으로 적고, 어떤 데이터가 필요할지 생각한다 |
| 2 | 데이터 수집 | 필요한 데이터를 모은다. 양과 질이 성능을 좌우한다 |
| 3 | 데이터 전처리 | 속성(데이터가 가진 항목. 기온 · 요일 같은 것)을 확인하고, 학습할 수 있는 형태로 정리한다 |
| 4 | 모델 선정 | 문제에 맞는 학습 방법과 모델의 갈래를 고른다 |
| 5 | 학습과 모델 생성 | 고른 모델에 훈련 데이터를 학습시킨다 |
| 6 | 성능 평가와 개선 | 따로 남겨 둔 데이터로 얼마나 맞히는지 측정하고, 나쁘면 고친다 |
| 7 | 모델 적용 | 실제 문제에 쓰고, 쓰면서 드러나는 것을 살핀다 |
번호가 붙어 있지만 한 줄로 흐르지 않습니다. 6단계에서 성능이 나쁘면 3단계나 2단계로 돌아가고, 때로는 1단계로 돌아가 문제를 다시 적습니다. 돌아가는 것은 잘못된 것이 아니라 원래 그런 것입니다.
한 바퀴 돌아봅시다
잡은 문제
학교 정수기의 물이 하루에 얼마나 쓰일지 미리 가늠할 수 있을까?
미리 알면 물통을 언제 갈아 두어야 할지 정할 수 있습니다.
1단계 — 문제 정의
맞히려는 값을 「그날 쓰인 물의 양(L)」로 못박습니다. 근거로 삼을 값은 그날의 최고 기온, 요일, 체육 수업이 든 학급 수로 정합니다. 「물을 아끼자」 같은 문장으로 두면 무엇을 세야 할지 정해지지 않습니다.
2단계 — 데이터 수집
정수기의 날마다 남은 양을 기록해 쓰인 양을 구하고, 기온은 공개된 관측 자료에서 받아 옵니다. 며칠 치를 모을지, 언제까지 모을지를 먼저 정해 둡니다. 시험 기간만 모으면 평소를 배우지 못합니다.
3단계 — 데이터 전처리
두 자료를 날짜로 이어 붙이고, 측정하지 못한 날의 빈칸을 어떻게 할지 정합니다. 요일은 글자이므로 숫자로 바꾸어 둡니다. 휴업일처럼 아예 학교를 쓰지 않은 날은 빼기로 합니다.
4단계 — 모델 선정
답이 붙은 데이터가 있으니 지도학습이고, 맞히려는 값이 수치이니 회귀입니다. 「많이 쓴 날 · 적게 쓴 날」을 구분하기로 했다면 분류가 되었을 것입니다.
5단계 — 학습과 모델 생성
모은 데이터를 훈련용과 테스트용으로 나눕니다. 훈련용으로만 학습시키고 테스트용은 손대지 않고 남겨 둡니다.
6단계 — 성능 평가와 개선
남겨 둔 테스트 데이터를 넣어 실제 값과 얼마나 벌어지는지 봅니다. 많이 벌어진다면 어느 단계로 돌아갈지 정합니다.
7단계 — 모델 적용
내일의 예보 기온과 요일, 체육 수업이 든 학급 수를 넣어 내일 쓰일 양을 가늠해 보고, 물통을 갈 날을 정하는 데 참고합니다. 쓰면서 어긋난 날을 적어 두면 다음에 고칠 거리가 됩니다.
5단계에서 테스트 데이터로도 학습을 시켜 버리면 무슨 일이 생길까요? 성능을 측정하는 일이 왜 배운 적 없는 데이터로 이루어져야 하는지 생각해 보세요.
4단계에서 나뉘는 길
모델을 고르는 일은 물음 두 개로 나뉩니다. 외울 것이 아니라, 레이블과 맞히려는 값을 순서대로 물어본 것입니다.
레이블을 묻는 물음은 데이터를 보고 답하고, 맞히려는 값을 묻는 물음은 우리가 무엇을 묻기로 했는지를 보고 답합니다. 그래서 같은 데이터라도 1단계에서 문제를 어떻게 적었느냐에 따라 가는 길이 달라집니다.
측정하고, 고치고, 다시 측정합니다
모델을 만들었다고 끝이 아닙니다. 얼마나 쓸 만한지 측정해 보아야 합니다. 이때 학습에 쓴 데이터로 성능을 측정하지 않는다는 것을 지켜야 합니다.
훈련 데이터
모델을 가르치는 데 쓰는 데이터입니다. 모아 둔 데이터 가운데 이 몫이 규칙을 찾는 재료, 곧 학습 데이터이고, 테스트용과 구별할 때 훈련 데이터라고 부릅니다.
테스트 데이터
학습에 쓰지 않고 남겨 두었다가 성능을 측정하는 데 쓰는 데이터입니다.
가르칠 때 보여 준 문제로 시험을 보면 대개 잘 맞힙니다. 그러면 외운 것인지 배운 것인지 구분할 수 없습니다. 처음 보는 데이터에서 얼마나 하는지를 봐야 실제로 쓸 때의 모습을 알 수 있습니다.
성능이 나쁠 때 어디로 돌아가나
- 어느 한 갈래만 유난히 못 맞힌다 → 2단계. 그 갈래의 예가 너무 적었을 수 있다.
- 값이 통째로 이상하다 → 3단계. 단위가 섞였거나 빈칸을 잘못 메웠을 수 있다.
- 맞힐 수 있는 정보가 애초에 없다 → 1단계. 근거로 삼은 값이 답과 상관이 적었던 것이다.
고칠 때는 한 번에 하나만 바꿉니다. 데이터를 더 모으면서 모델도 바꾸고 설정도 만지면, 성능이 올라가도 무엇 덕분인지 알 수 없습니다. 바꾼 것과 그때의 값을 한 줄씩 적어 두는 것까지가 6단계입니다.
단계마다 무엇을 남기나
돌아가는 일이 잦기 때문에 지나온 단계마다 흔적을 남겨 두어야 합니다. 남겨 두지 않으면 성능이 좋아졌을 때 무엇 덕분인지 알 수 없고, 모둠원끼리 같은 단계에서 두 번 헤매게 됩니다.
| 단계 | 남겨 두는 것 |
|---|---|
| 문제 정의 | 맞히려는 값과 근거로 삼을 값을 적은 한 문장 |
| 데이터 수집 | 원본 파일과 어디서 언제 받았는지 |
| 데이터 전처리 | 무엇을 버리고 무엇을 채웠는지, 그렇게 한 까닭 |
| 모델 선정과 학습 | 고른 갈래와 왜 그것을 골랐는지 |
| 성능 평가 | 측정한 값과 다음에 바꿔 볼 것 한 가지 |
| 적용 | 실제로 쓰면서 어긋난 날과 그때의 상황 |
이 기록이 보고서의 많은 부분을 채웁니다. 발표할 때 「성능이 이만큼 나왔습니다」만 말하는 것과, 「무엇을 바꿨더니 어떻게 달라졌습니다」를 말하는 것은 전혀 다릅니다.
실제로 쓸 때 살필 것
7단계는 「다 만들었으니 쓴다」가 아닙니다. 만든 것이 사람들 사이에 놓이는 순간이라, 여기서 새로 살펴야 할 것이 생깁니다.
배운 적 없는 상황
학기 중 데이터로만 배운 모델을 방학에 쓰면 어긋나기 쉽습니다. 어떤 상황은 배우지 못했다는 것을 함께 적어 두어야 합니다.
틀렸을 때의 대가
물통을 늦게 가는 정도라면 감당할 수 있습니다. 사람에 관한 결정이라면 사람이 확인하는 단계를 사이에 둡니다.
모으는 데이터
쓰면서 데이터가 계속 쌓입니다. 그 안에 누구인지 알아볼 수 있는 값이 들어가고 있지는 않은지 봅니다.
다른 데 쓰이는 것
물 사용량을 가늠하려고 만든 것이 어느 반이 많이 쓰는지 비교하는 데 쓰일 수도 있습니다. 쓰임새를 좁혀 적어 두면 그런 일을 줄일 수 있습니다.
이 넷은 모델을 더 잘 만들어서 없앨 수 있는 문제가 아닙니다. 무엇을 모을지, 어디에 쓸지, 틀리면 어떻게 할지는 만드는 사람과 쓰는 사람이 정해야 하는 것입니다. 기계학습으로 문제를 해결한다는 말에는 여기까지가 들어 있습니다.
우리 주변의 문제를 하나 골라 일곱 단계를 한 줄씩 적어 보세요. 적다가 막히는 칸이 나왔다면, 그 칸이 이 문제에서 가장 먼저 풀어야 할 일입니다.
핵심 정리
일곱 단계
seven steps
- 문제 정의 → 수집 → 전처리 → 모델 선정
- 학습 → 성능 평가와 개선 → 적용
- 한 줄로 흐르지 않고, 돌아가는 것이 정상이다
모델 고르기
choosing the model
- 레이블이 있으면 지도학습, 없으면 비지도학습
- 맞히려는 값이 범주면 분류, 수치면 회귀
- 맞히려는 값을 묻는 물음의 답은 1단계에서 어떻게 적었느냐가 정한다
성능 측정하기
evaluating
- 훈련 데이터와 테스트 데이터를 나눈다
- 가르칠 때 본 문제로 시험 보면 외운 것과 배운 것을 구분할 수 없다
- 고칠 때는 한 번에 하나만, 그리고 적어 둔다
쓸 때 살필 것
when it goes live
- 배우지 못한 상황을 밝혀 적는다
- 사람에 관한 결정에는 사람이 확인하는 단계를 둔다
- 쓰임새를 좁혀 적어 다른 데 쓰이는 것을 줄인다
확인 퀴즈
배운 내용을 확인해 봅시다.
학습에 쓴 데이터로 성능을 측정하면 안 되는 까닭은?
전체 성능은 괜찮은데 어느 한 갈래만 유난히 못 맞히고 있습니다. 어디로 돌아가는 것이 알맞을까?
「그날 쓰인 물의 양」을 맞히려 합니다. 4단계에서 고를 갈래는?