왜 계획서부터 쓸까요?
잘 지키려고 쓰는 것이 아닙니다
계획서가 없으면 생기는 일
계획서 없이 시작한 모둠에서 자주 나오는 장면이 있습니다. 발표 시간에 「정확도가 82%가 나왔습니다」까지는 말하는데, 「82%면 잘한 건가요?」라는 물음에 답하지 못합니다. 무엇을 기준으로 삼겠다고 정해 둔 적이 없기 때문입니다.
또 하나는 모둠원마다 다른 것을 만들고 있는 경우입니다. 한 사람은 자리가 있는지 없는지를 맞히는 것으로, 다른 사람은 몇 자리가 남는지를 맞히는 것으로 알고 있습니다. 둘 다 열심히 했는데 합쳐지지 않습니다.
모둠원이 같은 것을 봅니다
문장 하나로 못박아 두면 각자 다른 것을 만드는 일이 생기지 않습니다.
바꾼 것을 알 수 있습니다
처음에 무엇을 정했는지 남아 있어야 나중에 무엇을 왜 바꾸었는지 말할 수 있습니다.
막힐 곳이 미리 드러납니다
칸을 채우다 보면 「이 데이터를 어디서 구하지?」 같은 물음이 시작하기 전에 떠오릅니다.
계획서는 고쳐 쓰라고 있는 문서입니다. 처음 적은 대로 끝나는 프로젝트는 거의 없습니다. 데이터를 모으다 문장을 고치고, 성능을 측정하다 기준을 고칩니다. 그때는 지우지 말고 고친 곳에 줄을 긋고 옆에 새로 적습니다. 그래야 처음 생각이 남습니다.
한 장에 담을 다섯 칸
문제 해결 과정의 여섯 단계에 역할 분담과 시작 전 점검을 더하면 계획서 한 장이 됩니다. 아래 순서대로 채워 나갑니다.
1무엇을 맞히게 할 것인가 — 한 문장
2어떤 데이터를 어디서 어떻게 모을 것인가
3무엇으로 측정하고 어디까지가 성공인가
4누가 무엇을 맡을 것인가
5만들기 전에 무엇을 점검할 것인가
전처리와 알고리즘은 데이터를 실제로 열어 보기 전에는 정하기 어렵습니다. 계획서에는 「이런 손질이 필요할 것 같다」 정도의 예상만 적어 두고, 확정은 해 보면서 합니다.
두 모둠원이 한 주 동안 따로 작업했는데, 한 사람은 「자리가 있다 · 없다」를, 다른 사람은 「빈 좌석 수」를 맞히는 모델을 만들어 왔습니다. 계획서 다섯 칸 가운데 어느 칸을 먼저 채웠다면 이 일을 막을 수 있었을까요?
1칸 — 한 문장으로 적기
문장 하나에서 입력과 출력이 나뉘어 나옵니다
문장에서 두 가지를 추출합니다
주제를 좁혀 만든 한 문장에는 이미 입력과 출력이 들어 있습니다. 그것을 따로 떼어 적어 두는 것이 1칸에서 할 일입니다.
예로 삼는 문장
요일 · 교시 · 시험 기간 · 날씨 데이터로 도서관의 빈 좌석 수를 예측하는 모델을 만든다
| 칸 | 적는 것 | 예 |
|---|---|---|
| 입력 | 맞힐 때 근거로 삼는 값들 | 요일, 교시, 시험 기간인지 여부, 그날의 날씨 |
| 출력 | 맞히려는 값 하나 | 그 시간대의 빈 좌석 수 |
| 갈래 | 예측(회귀) · 분류 · 묶기(군집) 중 하나 | 숫자를 맞히므로 예측(회귀) |
| 하지 않는 것 | 범위 밖이라고 못박아 두는 일 | 자리를 배정하거나 예약을 받지는 않는다 |
마지막 줄을 빠뜨리지 마세요. 「하지 않는 것」을 적어 두면 프로젝트가 도중에 부풀어 오르는 것을 막습니다. 좋은 생각이 떠올랐을 때 그것이 이번에 할 일인지 아닌지를 이 칸이 정해 줍니다.
입력에 답을 몰래 넣지 않도록 조심합니다
빈 좌석 수를 맞히려는데 입력에 「그 시간에 앉아 있던 사람 수」를 넣으면 어떻게 될까요? 전체 좌석 수에서 빼기만 하면 답이 나오므로 오차가 거의 0에 가깝게 나옵니다. 잘 맞힌 것이 아니라 답을 알려 주고 맞히라고 한 것입니다.
이런 값은 실제로 쓸 때는 손에 넣을 수 없다는 공통점이 있습니다. 「예측하려는 시점에 내가 이 값을 이미 알고 있는가?」를 입력마다 물어보면 걸러 낼 수 있습니다.
빈 좌석 수를 맞히는 입력 후보로 「전날 같은 교시의 빈 좌석 수」와 「그날 열람실 퇴실 기록」이 올라왔습니다. 둘 가운데 입력에 넣어도 되는 것은 어느 쪽이고, 다른 하나는 왜 안 될까요?
2칸 — 데이터를 어디서 어떻게
여기서 막히면 아무리 좋은 주제도 나아가지 못합니다
필요한 값마다 다섯 가지를 적습니다
1칸에서 적은 입력 하나하나에 대해 아래 다섯 가지를 채웁니다. 한 줄이라도 비면 그 값은 아직 확보한 것이 아닙니다.
- 무엇을 — 값의 이름과 단위 (「빈 좌석 수(개)」)
- 어디서 — 출처 (「정해진 시각마다 열람실에서 직접 셈」)
- 어떻게 — 얻는 방법 (「모둠원이 돌아가며 같은 시각에 센다」)
- 얼마나 — 몇 번, 며칠치 (「두 주 동안 하루 네 번」)
- 언제까지 — 마감 날짜
모으는 방법 네 가지
| 방법 | 좋은 점 | 미리 정해 둘 것 |
|---|---|---|
| 직접 측정하기 | 내 문제에 딱 맞는 값을 얻습니다. 무엇을 어떻게 측정했는지 전부 알고 있습니다. | 측정하는 기준을 통일합니다. 사람마다 「빈 좌석」의 뜻이 다르면(가방만 놓인 자리는?) 값이 뒤섞입니다. |
| 설문 | 직접 측정하기 어려운 것(생각, 습관)을 물어볼 수 있습니다. | 누가 답했는지에 따라 결과가 크게 달라지므로, 답한 사람들이 한쪽으로 몰리지 않았는지 확인해 적어 둡니다. |
| 공개 데이터 | 양이 많고 이미 정리되어 있습니다. 공공 기관이 내놓은 자료가 많습니다. | 열 이름과 단위를 먼저 확인합니다. 내려받은 곳의 주소와 받은 날짜를 반드시 기록해 둡니다. |
| 웹에서 모으기 | 공개 데이터로 나와 있지 않은 것도 모을 수 있습니다. | 그 사이트가 허락하는지 먼저 봅니다. 이용 약관과 저작권을 확인하고, 짧은 시간에 많이 요청해 서버에 부담을 주지 않습니다. |
얼마나 모아야 할까요
정해진 최소치는 없습니다. 문제마다, 값의 종류마다 다릅니다. 그 대신 시작하기 전에 확인할 수 있는 것이 둘 있습니다.
갈래마다 개수가 비슷한가
분류라면 각 갈래의 예가 고르게 있어야 합니다. 한 갈래만 잔뜩이면 모델은 그 갈래로 찍기만 해도 높은 점수를 받습니다.
값의 범위가 고르게 퍼져 있는가
예측이라면 낮은 값과 높은 값이 모두 있어야 합니다. 시험 기간에만 세었다면 한산한 날의 좌석 수는 배우지 못합니다.
모을 수 없다는 것을 알았다면 계획을 고칩니다. 데이터에 맞추어 문제를 다시 적는 것은 물러선 것이 아니라 정상적인 절차입니다. 없는 데이터를 있다고 치고 진행하면 마지막 주에 아무것도 남지 않습니다.
한 모둠이 급식 대기 시간을 맞히려고 비 오는 날에만 줄 길이를 측정했습니다. 이 모델이 맑은 날의 대기 시간을 맞힌다면 믿을 만할까요? 어떤 데이터를 더 모아야 할까요?
3칸 — 어디까지 나와야 성공인가
나중에 정하면, 나온 값을 성공이라고 부르게 됩니다
계획서에서 가장 자주 비어 있는 칸이면서, 비어 있으면 프로젝트 전체가 흐려지는 칸입니다. 시작하기 전에 적어야 하는 데는 까닭이 있습니다.
무엇으로 측정할 것인가
성능 지표를 갈래에 맞추어 고릅니다. 계획서에는 고른 지표의 이름과 왜 그것을 골랐는지를 함께 적습니다.
| 갈래 | 주로 쓰는 지표 | 읽는 법 |
|---|---|---|
| 예측 | 평균절대오차(MAE), 평균제곱오차(MSE) | 실제 값과 얼마나 벌어졌는지를 봅니다. 작을수록 좋습니다. 단위가 원래 값과 같은 평균절대오차가 읽기 쉽습니다. |
| 분류 | 정확도, 정밀도, 재현율, F1-점수 | 정확도만 보면 속기 쉽습니다. 혼동 행렬(맞힌 것과 틀린 것을 갈래별로 늘어놓은 표)을 함께 놓고 어느 쪽으로 틀리는지까지 봅니다. |
| 묶기 | 정해진 정답이 없습니다 | 나뉜 무리를 사람이 살펴보고 뜻이 통하는 묶음인지 말로 설명할 수 있는지로 판단합니다. |
무엇보다 나아야 하는지를 함께 적습니다
「정확도 90%」라는 값만으로는 잘한 것인지 알 수 없습니다. 100개 가운데 90개가 한 갈래인 데이터라면 아무 생각 없이 그 갈래로 찍기만 해도 90%가 나오기 때문입니다. 그래서 계획서에는 비교할 상대를 함께 적어 둡니다.
분류라면
「가장 많은 갈래로 무조건 찍기」보다 나은가? 이 값을 먼저 계산해 적어 두고, 모델이 그것을 넘는지 봅니다.
예측이라면
「언제나 평균값을 답하기」보다 나은가? 그때의 오차를 먼저 구해 두면 모델의 오차가 의미 있게 작은지 알 수 있습니다.
두 가지로 틀릴 수 있다면 어느 쪽이 더 아픈지 정합니다
분류에서 틀리는 방식은 둘입니다. 있는 것을 없다고 하는 것과 없는 것을 있다고 하는 것입니다. 두 가지의 대가는 대개 같지 않습니다. 비가 온다고 해서 우산을 챙겼는데 오지 않은 것과, 오지 않는다고 해서 그냥 나갔다가 비를 맞은 것 중 어느 쪽이 더 곤란한가요? 모둠에서 미리 정하고 그 까닭을 적어 둡니다. 이 결정이 정밀도를 볼지 재현율을 볼지를 정해 줍니다.
적어 둔 목표를 넘기지 못해도 괜찮습니다. 프로젝트의 결과는 수치가 아니라 수치를 설명할 수 있는가입니다. 「비교할 상대보다 나아지지 않았고, 그 까닭은 이러이러하다고 보인다」까지 말할 수 있으면 그것으로 한 바퀴를 제대로 돈 것입니다. 거꾸로 목표를 나중에 정해 슬쩍 맞춘 프로젝트는 수치가 높아도 남는 것이 없습니다.
급식 잔반량을 예측하는 모델의 평균 오차가 3kg으로 나왔습니다. 날마다 지난달 평균값만 답했을 때의 평균 오차는 3.2kg이었습니다. 이 모델은 비교할 상대보다 얼마나 나아졌고, 모둠은 이 결과를 어떻게 적어야 할까요?
4칸 — 누가 무엇을 맡을 것인가
역할을 나눈다는 것은 따로 한다는 뜻이 아닙니다
네 가지 역할
모둠원이 몇 명이든 아래 네 가지 일은 반드시 누군가 맡아야 합니다. 인원이 적으면 한 사람이 둘을 맡되, 맡은 것을 적어 두는 것은 그대로 합니다.
| 역할 | 하는 일 | 남기는 것 |
|---|---|---|
| 데이터 | 모으고, 세는 기준을 통일하고, 빠진 값을 채웁니다. | 원본 파일, 출처, 세는 기준 |
| 모델 | 알고리즘을 고르고 학습시키고 설정값을 바꿔 봅니다. | 고른 까닭, 설정값, 그때의 수치 |
| 기록 | 언제 무엇을 바꿨고 결과가 어떻게 달라졌는지 적습니다. | 한 줄씩 쌓인 변경 기록 |
| 정리 · 발표 | 흩어진 기록을 하나의 이야기로 엮고 발표를 준비합니다. | 보고서와 발표 자료 |
가장 빠릅니다. 하지만 나머지는 무엇이 왜 그렇게 되었는지 모른 채 끝나고, 그 사람이 하루 결석하면 프로젝트가 멈춥니다. 발표에서 「이건 제가 안 해서 모르겠는데요」가 나옵니다.
느리지만 남는 것이 사람 수만큼 됩니다. 손이 비는 사람이 생기면 다른 역할의 기록을 읽고 확인하는 일을 맡기면 됩니다.
나눈 것은 작업이지 결정이 아닙니다. 데이터를 어디까지 버릴지, 어느 지표를 볼지 같은 것은 모둠이 함께 정하고 기록 담당이 적어 둡니다. 협력한다는 것은 같이 앉아 있는 것이 아니라, 각자의 판단을 남들이 볼 수 있게 적어 두는 것입니다.
모델 담당이 설정값을 다섯 번 바꿔 보았는데 아무도 적어 두지 않았습니다. 발표 날 가장 좋았던 결과를 보이려 할 때 무엇이 곤란해질까요? 이 모둠은 네 역할 가운데 무엇이 비어 있었나요?
5칸 — 만들기 전에 점검하기
데이터를 모으고 난 뒤에는 되돌리기가 어렵습니다
인공지능이 사회에 미치는 영향은 남이 만든 것에만 해당하지 않습니다. 우리가 만드는 것에도 그대로 해당합니다.
네 가지를 물어봅니다
| 점검할 것 | 묻는 말 | 걸렸을 때 하는 일 |
|---|---|---|
| 개인 정보 | 데이터에 누구인지 알아볼 수 있는 값이 들어가는가? (이름, 학번, 얼굴, 목소리) | 필요 없으면 지웁니다. 필요하면 학생 A, 학생 B처럼 바꿔 적습니다. |
| 치우침 | 누구의 데이터가 빠져 있는가? 어떤 상황이 기록되지 않았는가? | 빠진 쪽을 더 모읍니다. 못 모으면 「이 모델은 이런 경우는 배우지 못했다」고 밝혀 적습니다. |
| 틀렸을 때 | 모델이 틀리면 누가 그 대가를 치르는가? | 대가를 치르는 사람이 만든 사람이 아니라면, 사람이 확인하는 단계를 사이에 둡니다. |
| 다른 쓰임 | 만든 것이 원래 뜻과 다르게 쓰일 수 있는가? | 쓰임을 좁혀 적어 두고, 그렇게 쓰면 안 되는 경우를 함께 적습니다. |
완성한 뒤에 하는 점검이 아닙니다
이 네 물음을 마지막에 던지면 대개 늦습니다. 이름이 붙은 채로 데이터를 다 모은 뒤에 지우려면 처음부터 다시 모아야 하고, 한쪽으로 치우친 것을 발표 전날 알면 고칠 시간이 없습니다. 모으기 시작하기 전에 한 번 살펴보는 것만으로 대부분을 피할 수 있습니다.
열람실 이용자를 얼굴 사진으로 세겠다는 모둠이 있습니다. 네 점검 가운데 어디에 걸리나요? 모으기 전에 방법을 어떻게 바꾸면 같은 값을 얻을 수 있을까요?
계획서 한 장
다섯 칸을 한 장에 모으면 이런 모습이 됩니다
채워 놓은 예
앞에서 예로 삼은 도서관 좌석 문제로 채워 본 것입니다. 쓰는 방식을 보여 주려고 만든 예이며, 실제로 측정해 본 값이 아닙니다. 각자의 주제로 바꾸어 채웁니다.
| 칸 | 항목 | 적은 내용 |
|---|---|---|
| 1 | 문제 한 문장 | 요일 · 교시 · 시험 기간 · 날씨 데이터로 도서관 열람실의 빈 좌석 수를 예측하는 모델을 만든다 |
| 입력 | 요일, 교시, 시험 기간인지 여부, 그날의 날씨 | |
| 출력 | 그 시간대의 빈 좌석 수(개) | |
| 갈래 | 지도학습 · 예측(회귀) | |
| 하지 않는 것 | 자리를 배정하거나 예약을 받는 기능은 만들지 않는다 | |
| 2 | 모을 데이터와 방법 | 열람실 빈 좌석 수 — 모둠원이 정해진 시각에 직접 센다 / 날씨 — 기상청 공개 자료를 내려받는다 |
| 양과 마감 | 두 주 동안 하루 네 차례, 시험 기간과 평상시가 모두 들어가게 한다. 다음 달 첫 주까지 | |
| 예상되는 손질 | 세지 못한 날의 빈칸 처리, 요일을 더미 인코딩(요일마다 0과 1로 된 칸을 따로 두는 방법)으로 바꾸기, 「빈 좌석」의 뜻을 통일하기(가방만 놓인 자리는 찬 것으로 본다) | |
| 3 | 측정하는 지표 | 평균절대오차(MAE) — 단위가 좌석 수와 같아 읽기 쉽다 |
| 비교할 상대 | 「언제나 전체 평균 빈 좌석 수를 답하기」의 평균절대오차 | |
| 성공이라 부를 선 | 위 상대보다 눈에 띄게 작을 것. 넘지 못하면 그 까닭을 설명한다 | |
| 4 | 역할 | 데이터 — 학생 A · 학생 B / 모델 — 학생 C / 기록 — 학생 D / 정리 · 발표 — 모두 |
| 5 | 시작 전 점검 | 사람을 알아볼 값은 모으지 않는다(자리 수만 센다) / 시험 기간에만 몰리지 않게 한다 / 틀려도 헛걸음 정도이며, 예약 기능이 없으므로 자리를 빼앗는 일은 생기지 않는다 |
계획서 다음에 오는 것
이 계획서대로 한 바퀴를 돌고 나면 기계학습 모델 구현 보고서가 남습니다. 어떤 문항에 무엇을 어떻게 적는지는 예시 프로젝트들이 보여 줍니다. 예측(회귀) · 분류 · 묶기(군집)가 각각 어떻게 다르게 쓰이는지 나란히 놓고 볼 수 있습니다.
예시 프로젝트 보러 가기이 표를 다 채웠다고 계획이 끝난 것은 아닙니다. 채우다가 「이건 못 하겠는데」 싶은 칸이 나왔다면, 시작하기 전에 막힐 곳을 찾아낸 것입니다. 그 칸을 메울 방법을 찾거나, 문제 한 문장으로 돌아가 고쳐 적습니다.
예시 계획서의 주제를 「급식 대기 줄 길이 예측」으로 바꾼다면, 3칸의 「비교할 상대」에는 무엇을 적어야 할까요? 4칸과 5칸에서 새로 적어야 할 것도 하나씩 찾아보세요.
핵심 정리
계획서는 고쳐 쓰는 문서
잘 지키려고 쓰는 것이 아니라 무엇을 왜 바꾸었는지 말하기 위해 씁니다. 고칠 때는 지우지 말고 줄을 긋고 옆에 새로 적습니다.
입력과 출력을 나누어 적기
한 문장에서 입력 · 출력 · 갈래 · 하지 않는 것을 추출합니다. 입력마다 「예측하려는 시점에 이 값을 이미 알고 있는가?」를 물어 답을 몰래 넣지 않도록 합니다.
데이터는 다섯 가지로 적기
무엇을 · 어디서 · 어떻게 · 얼마나 · 언제까지. 정해진 최소치는 없지만 갈래마다 개수가 비슷하고 값의 범위가 고르게 퍼져 있어야 합니다. 모을 수 없으면 계획을 고칩니다.
성공 기준은 시작 전에
지표만으로는 부족하고 비교할 상대가 함께 있어야 합니다. 「늘 다수 갈래로 찍기」나 「늘 평균값 답하기」보다 나은지를 봅니다. 넘지 못했어도 까닭을 설명하면 결과입니다.
나눈 것은 작업이지 결정이 아니다
데이터 · 모델 · 기록 · 정리를 나누어 맡되, 중요한 판단은 함께 정하고 기록으로 남깁니다. 그 기록이 보고서의 절반이 됩니다.
점검은 시작 전에
개인 정보 · 치우침 · 틀렸을 때의 대가 · 다른 쓰임. 모으고 난 뒤에는 되돌리기 어렵기 때문에 시작하기 전에 한 번 살펴봅니다.
확인 퀴즈
배운 내용을 확인해 봅시다.