기계학습 모델 구현 보고서

운동 시간과 소모 칼로리 예측

30일치 내 운동 기록에서 직선 하나를 찾아내면,
아직 해 보지 않은 운동 시간의 칼로리도 말할 수 있을까?

지도학습 · 예측 (선형 회귀) 도구: 오렌지 스포츠 · 보건 · 피트니스

기계학습 모델 구현 보고서를 어떻게 쓰는지 보여 주는 예시 프로젝트입니다. 문항을 푸는 순서와 근거를 대는 방식을 참고하되, 내용은 자신의 프로젝트로 채웁니다. 표와 그래프의 숫자는 수업에서 원리를 확인하려고 지어낸 값이며 실제 측정값이 아닙니다.

기계학습 모델 구현 보고서 예시 내려받기

이 페이지의 문항 1~8을 그대로 담은 보고서 파일입니다. 내려받아 작성 방법을 확인하고 자신의 프로젝트로 바꾸어 채웁니다.

아이디어에서 설계까지

이 모델은 어쩌다 만들게 됐을까?

무엇이 불편했고, 왜 규칙을 직접 쓰는 대신 기계학습을 골랐는지 따라가 봅시다.

보고서 여덟 문항은 이 여섯 단계를 따라간다 1 문제 정의 2 데이터 수집 3 데이터 전처리 4 유형· 알고리즘 선정 5 모델 생성 6 성능 평가 문항 1 · 2 문항 4 문항 3 문항 5 문항 6 · 7
문항 번호와 단계 번호가 나란히 가지 않는다. 유형과 알고리즘은 데이터를 모아 정리한 다음에 고르는 것이라 보고서에서는 문항 3이지만 실제 작업은 데이터 전처리를 마친 뒤에 한다.
1

어디서 아이디어를 얻었나 — 실생활의 불편함

운동을 끝내고 기기에 뜬 칼로리를 봤는데, 같은 시간을 움직였는데도 트레드밀과 자전거가 서로 다른 수치를 보여 줬다. 어느 쪽을 믿어야 할지 알 수 없어서, 내 기록을 직접 쌓아 나에게 맞는 기준을 만들어 보기로 했다.

2

왜 기계학습인가 — 규칙을 직접 쓰기 어렵다

칼로리 = 시간 × 8 같은 식을 내가 정해서 쓸 수도 있다. 그런데 8이라는 숫자는 어디서 나오는가? 사람마다 체중과 운동 강도가 달라 아무 수나 넣을 수 없다. 기계학습은 그 숫자를 내 기록에서 직접 찾아 준다.

3

왜 예측인가 — 답의 생김새가 정한다

내가 얻고 싶은 답은 「몇 kcal」라는 하나의 숫자다. 「많이 탔다 / 적게 탔다」는 칸으로 나누는 것이 아니고, 비슷한 날끼리 묶는 것도 아니다. 얻고 싶은 답의 생김새가 방법을 정한다.

무엇을 풀 것인가

「칼로리가 궁금하다」는 아직 문제가 아니다?

인공지능이 손댈 수 있는 모양으로 문제를 다시 써 봅시다.

문항 1. 문제 정의

실생활이나 학문 분야에서 인공지능으로 해결하고자 하는 문제를 구체적으로 정의하시오. 어떤 상황에서 어떤 불편함 또는 필요가 발생하는지를 포함하여 서술하시오.

운동을 꾸준히 하고 있지만 실제로 칼로리를 얼마나 소모했는지 알기 어렵다. 운동 기기마다 계산 방식이 달라 같은 시간을 움직여도 표시되는 수치가 다르고, 결국 「많이 움직이면 많이 탄다」는 감각에만 기대게 된다.

내 운동 기록을 학습시켜, 운동 시간(분)을 넣으면 소모 칼로리(kcal)를 알려 주는 모델을 만들고자 한다. 목표 칼로리에 맞춰 운동 시간을 정하는 데 쓰는 것이 목적이다.

자기점검 체크리스트

  • ☑ 해결하고자 하는 문제가 실생활 또는 학문 분야와 연관되어 구체적으로 제시되어 있다.
  • ☑ 문제가 발생하는 상황(불편함·필요성)이 명확하게 서술되어 있다.

무엇이 들어가고 무엇이 나오는가

만들 모델을 한 문장으로 말하면 어떻게 될까?

입력과 출력을 못 박으면 만들 것의 윤곽이 잡힙니다.

문항 2. 모델 설명 (입력 → 출력)

구현하려는 인공지능 모델을 설명하시오. 이 모델은 어떤 데이터를 입력받아, 어떤 결과를 출력하는가? 입력과 출력을 중심으로 모델의 역할을 구체적으로 서술하시오.

  • ■ 입력: 하루 운동 시간 (단위: 분) — 숫자 하나
  • ■ 출력: 예측 소모 칼로리 (단위: kcal) — 숫자 하나

지난 운동 기록으로 시간과 칼로리 사이를 지나는 직선 하나를 찾아 두고, 새로운 운동 시간이 들어오면 그 직선 위의 높이를 답으로 내놓는다. 모델이 학습하는 것은 칼로리 값 자체가 아니라 직선의 기울기와 높이다.

숫자 하나가 들어가서 숫자 하나가 나온다 입력 운동 시간 45분 학습된 모델 칼로리 = 7.2 × 시간 − 10 출력 예측 칼로리 314 kcal 학습이 정한 것은 가운데 상자의 7.2와 −10, 두 개뿐이다

자기점검 체크리스트

  • ☑ 만들고자 하는 모델의 입력 데이터(종류·형태)가 명확히 제시되어 있다.
  • ☑ 모델이 출력하는 결과(레이블·수치·군집 등)가 구체적으로 서술되어 있다.
  • ☑ 입력과 출력을 통해 모델의 역할이 명확하게 드러난다.

어떤 방법으로 풀 것인가

회귀·분류·군집 중 무엇을 고를지는 취향일까?

두 번의 질문으로 유형이 정해지고, 정해진 유형이 도구를 정합니다.

문항 3. 기계학습 유형 및 구현 도구 선택

위에서 구상한 모델을 구현하기 위해 아래 ①, ② 순서대로 선택하고 그 이유를 서술하시오. ① 기계학습 유형: 지도학습과 비지도학습 중 이 모델에 적합한 유형을 선택하고, 분류·군집·예측 등의 개념을 활용하여 그 이유를 설명하시오. ② 구현 도구: ①에서 선택한 유형을 구현하기 위해 티처블머신·코랩·오렌지 중 어떤 도구를 선택했는지 밝히고, 그 이유를 서술하시오.

유형은 취향이 아니라 두 번의 질문으로 정해진다 데이터에 정답(레이블)이 함께 들어 있는가? 아니오 예 비지도학습 군집 지도학습 출력이 숫자인가, 범주인가? 숫자 범주 예측 (회귀) ↑ 이 프로젝트 분류
이 나무의 잎 세 개가 예측 · 분류 · 군집이 각각 앉는 자리다. 같은 나무에서 나뉘어 나왔다는 것이 보이면 「왜 이 방법인가」에 답할 수 있다.

① 기계학습 유형: 지도학습 — 예측 (선형 회귀)

모아 둔 운동 기록에는 그날 실제로 소모한 칼로리가 함께 적혀 있다. 정답이 붙어 있으므로 지도학습이다. 그리고 내놓아야 할 답이 연속된 숫자이므로, 미리 정해 둔 범주(고를 수 있는 칸) 가운데 하나를 집는 분류가 아니라 수치를 맞히는 예측을 쓴다.

다른 방법이 아닌 이유: 분류로 하려면 칼로리를 「적음·보통·많음」 같은 칸으로 미리 잘라야 하는데, 어디서 자를지 내가 정해야 하고 자르는 순간 정보가 사라진다. 군집은 정답을 쓰지 않고 비슷한 날끼리 묶는 방법이라, 이미 갖고 있는 칼로리 정답을 버리게 된다.

② 구현 도구: 오렌지(Orange)

표 형태의 CSV를 그대로 읽어 들이고, 선형 회귀와 산점도를 블록을 잇는 것만으로 만들 수 있다. 회귀선이 데이터 위에 바로 겹쳐 보이므로 결과를 눈으로 확인하기 쉽다. 티처블머신은 사진·소리를 다루는 도구라 표 데이터에는 맞지 않고, 코랩은 같은 일을 할 수 있지만 코드를 직접 써야 해서 이번 목적에는 과하다.

자기점검 체크리스트

  • ☑ 지도학습 또는 비지도학습 중 하나를 명확히 선택하였다.
  • ☑ 분류·군집·예측 등의 개념을 활용하여 유형 선택 이유가 논리적으로 서술되어 있다.
  • ☑ 구현 도구를 선택하고 그 이유가 기계학습 유형과 연결되어 설명되어 있다.

무엇으로 배우게 할 것인가

데이터를 얼마나, 어디까지 모아야 할까?

모아 둔 범위가 곧 모델이 답할 수 있는 범위가 됩니다.

문항 4. 데이터 설명

모델 학습에 사용한 데이터를 설명하시오. 데이터의 출처·유형·수량·특성 등을 작성하고, 필요한 경우 스크린샷을 첨부하시오.

  • • 출처: 스마트폰 건강 앱의 운동 기록 내보내기 (직접 수집)
  • • 유형: 수치형 정형 데이터 (CSV, 2개 열)
  • • 수량: 30일간의 유산소 운동 기록 (30행)
  • • 범위: 운동 시간 20분 ~ 75분 — 이 범위를 적어 두는 것이 중요하다
운동 시간(분) | 소모 칼로리(kcal)
    ─────────────┼──────────────────
    20           | 122
    35           | 254
    50           | 350
    60           | 434
    75           | 518
    (이하 25행 생략 / 전체 30행)

실제 수행평가 때는 여기에 건강 앱 기록 내보내기 화면 및 오렌지 CSV 불러오기 화면 스크린샷을 붙입니다.

데이터를 모을 때 놓치기 쉬운 것

  • 범위가 곧 모델의 사정거리다. 20~75분만 모았다면 이 모델은 그 바깥을 모른다. 120분을 물어봐도 답은 나오지만, 그 답을 믿을 근거는 데이터에 없다.
  • 한쪽에 몰린 기록은 직선을 기울인다. 30일 중 25일이 30분대라면 사실상 30분 근처만 학습한 셈이다. 시간대를 고르게 흩어 두어야 한다.
  • 다른 조건이 섞이면 원인을 구별할 수 없다. 같은 30분이라도 걷기와 달리기는 다르다. 기록을 모을 때 운동 종류를 한 가지로 고정하거나, 최소한 어떤 운동이었는지 함께 적어 둔다.
  • 남의 기록을 가져다 쓸 때는 출처와 이용 조건을 확인한다. 공개 데이터셋이라도 라이선스가 붙어 있고, 사람에 관한 기록이면 누구의 것인지 알 수 없게 되어 있어야 한다.

자기점검 체크리스트

  • ☑ 데이터의 출처(직접 촬영·공개 데이터셋·직접 수집 등)가 명시되어 있다.
  • ☑ 데이터의 유형(이미지·텍스트·수치 등)과 수량이 구체적으로 서술되어 있다.
  • ☑ 학습에 사용된 데이터 화면 또는 데이터 목록 스크린샷이 첨부되어 있다.

모델은 무엇을 배웠는가

R²가 0.97이면 잘 만든 걸까?

학습이 찾아낸 숫자 두 개와, 그 숫자를 읽는 법을 봅시다.

문항 5. 학습 결과

수집한 데이터로 모델을 학습시킨 결과를 서술하시오. 학습이 완료된 화면 또는 학습 결과를 스크린샷으로 첨부하고, 수치나 지표를 포함하여 결과의 의미를 간략히 설명하시오.

이 결과를 직접 만들어 보려면 — 오렌지에서 잇는 순서

  1. File 블록을 놓고 운동 기록 CSV를 불러온다.
  2. 열 설정에서 소모 칼로리를 target으로, 운동 시간을 feature로 지정한다. 이것을 빠뜨리면 무엇을 맞혀야 하는지 모델이 알 수 없다.
  3. Scatter Plot을 이어 점이 어떻게 흩어져 있는지 먼저 눈으로 본다. 직선으로 보이지 않으면 선형 회귀를 쓸 상황이 아니다.
  4. Linear Regression과 Test and Score를 잇고, 교차 검증을 켜서 R²와 평균 오차를 읽는다.
  5. Predictions에 새 값을 넣어 실제로 답이 나오는지 확인한다.

이 상자는 보고서에 쓰는 답이 아니라 따라 해 보라는 안내다.

  • 산점도에서 점들이 한 줄로 늘어서 있어 시간이 긴 날일수록 칼로리도 큰 값으로 기록되어 있음을 눈으로 확인했다.
  • 학습된 회귀식: 칼로리 = 7.2 × 운동 시간 − 10
  • R² = 0.97 / 평균 절대 오차 약 12 kcal
  • 식의 −10은 「0분일 때의 칼로리」가 아니라 선의 높이를 맞춰 준 숫자다. 0분은 기록이 없는 자리이므로 이 값은 해석하지 않는다.
  • R² 0.97은 학습에 쓴 20~75분 구간에 붙은 점수이며, 그 바깥까지 보장하지 않는다.

실제 수행평가 때는 여기에 오렌지 회귀선 산점도 및 Test and Score 결과 화면 스크린샷을 붙입니다.

R²와 평균 절대 오차는 무엇을 측정하는 숫자인가

평균 절대 오차 12 kcal: 예측값이 실제 기록에서 평균 12 kcal쯤 빗나간다는 뜻이다. 단위가 kcal이라 「얼마나 틀리는가」를 바로 가늠할 수 있다.

R² = 0.97: 날마다 오르내리는 칼로리 값의 97%를 운동 시간만으로 설명할 수 있다는 뜻이다. 1에 가까울수록 직선이 점들을 잘 지나간다.

다만 R²가 높다는 것이 「예측이 항상 맞는다」는 뜻은 아니다. R²는 학습에 쓴 데이터의 범위 안에서 직선이 얼마나 잘 맞는지를 측정한다. 그 바깥에서도 맞을지는 이 숫자가 말해 주지 않는다.

소모 칼로리(kcal) 학습한 구간 학습하지 않은 구간 0 300 600 900 0 30 60 90 120 운동 시간(분) 식이 말한 854 실제 690
파란 굵은 선은 기록이 있는 20~75분 구간이고, 주황 점선은 그 선을 그냥 늘여 놓은 것이다. 점선 구간에는 이 선이 맞다고 볼 근거가 하나도 없다.

식의 −10은 「가만히 있어도 −10 kcal」라는 뜻이 아니다

식에 운동 시간 0분을 넣으면 −10 kcal가 나온다. 하지만 칼로리가 음수로 소모되는 일은 없다. 모순처럼 보이는 이 숫자는 실은 아주 평범한 것이다.

−10은 「기본으로 깔리는 칼로리」가 아니라 20~75분 구간의 점들을 가장 잘 지나가도록 선의 높이를 맞춰 준 숫자다. 0분은 기록이 하나도 없는 자리이고, 거기까지 선을 늘였을 때 나오는 값일 뿐이다.

그래서 절편을 해석할 때는 x=0이 실제로 있을 수 있는 상황인지 먼저 본다. 없는 상황이라면 그 값은 해석하지 않는다.

자기점검 체크리스트

  • ☑ 학습이 완료된 모델 화면 또는 학습 결과 스크린샷이 첨부되어 있다.
  • ☑ 모델의 학습 결과를 확인할 수 있는 수치나 지표가 언급되어 있다.
  • ☑ 학습 결과의 의미(모델이 잘 학습되었는지 여부 등)가 서술되어 있다.

새로운 값을 넣으면 맞히는가

잘 맞던 모델이 갑자기 크게 빗나가는 이유는?

학습 범위 안과 밖에 각각 물어보고 결과를 비교해 봅시다.

문항 6. 테스트 및 결과 분석

학습된 모델에 새로운 데이터를 직접 입력하여 성능을 테스트하시오. 테스트 전 예상했던 결과와 실제 결과를 비교하고, 차이가 발생했다면 그 원인을 분석하시오.

■ 테스트 1 — 학습 범위 안 (45분)

  • 예상: 약 314 kcal (= 7.2 × 45 − 10)
  • 실제 기록: 302 kcal
  • 차이: 12 kcal — 평균 절대 오차와 비슷한 정도. 예상대로 맞았다.

■ 테스트 2 — 학습 범위 밖 (120분)

  • 예상: 약 854 kcal (= 7.2 × 120 − 10)
  • 실제 기록: 690 kcal
  • 차이: 164 kcal — 테스트 1의 열세 배가 넘는다. 예상이 크게 빗나갔다.

■ 분석

두 테스트의 차이를 만든 것은 모델의 성능이 아니라 물어본 자리다. 45분은 20~75분 안이라 비슷한 기록이 여러 날 있었지만, 120분짜리 기록은 학습 데이터에 한 건도 없었다. 모델은 그 구간을 배운 적이 없으면서도 직선을 그대로 늘여 답을 내놓았다.

실제로 두 시간을 움직이면 뒤로 갈수록 속도가 떨어져 분당 소모량이 줄어든다. 점들은 완만하게 눕는 곡선을 그리는데, 직선은 그 사실을 알 방법이 없다.

즉 R² 0.97은 20~75분 구간에 한해 붙은 점수였다. 모델을 쓸 때는 성능 지표만 볼 것이 아니라 지금 묻는 값이 학습 범위 안인지 먼저 확인해야 한다.

자기점검 체크리스트

  • ☑ 학습에 사용하지 않은 새로운 데이터로 테스트를 수행하였다.
  • ☑ 테스트 전 예상 결과와 실제 결과가 모두 서술되어 있다.
  • ☑ 예상과 실제 사이에 차이가 있다면 그 원인이 분석되어 있다. (차이가 없으면 이유 서술)

어디에 쓰고 무엇을 고칠 것인가

고치기만 하면 나아지기만 할까?

쓸모와 한계를 나란히 놓고, 개선해도 남는 어려움까지 봅시다.

문항 7. 기대 효과 및 개선 사항

기대 효과: 이 모델을 자신의 관심 분야(예: 의료·환경·스포츠 등)에 적용한다면 어떤 효과를 기대할 수 있는지 서술하시오. 개선 사항: 현재 모델의 한계를 바탕으로, 성능을 향상시키기 위해 필요한 개선사항을 구체적으로 서술하시오.

기대 효과

관심 분야: 스포츠 · 보건

식을 거꾸로 풀면 목표 칼로리에서 필요한 운동 시간을 역산할 수 있다. 300 kcal를 태우려면 약 43분이 필요하다는 식이다.

기기가 알려 주는 값을 그대로 믿는 대신 내 기록으로 만든 기준을 갖게 된다는 것이 이 모델의 쓸모다.

개선 사항

한계: 변수가 운동 시간 하나뿐이라 운동 종류·강도·체중이 전혀 반영되지 않는다. 그리고 학습 범위인 20~75분 밖에서는 믿을 수 없다.

개선 방향: ① 운동 종류와 심박수를 열로 추가해 여러 변수를 함께 쓰는 회귀로 넓힌다. ② 긴 시간대 기록을 실제로 더 모은다 — 범위 밖 문제는 모델을 바꿔서가 아니라 데이터를 넓혀야 풀린다.

개선해도 남는 어려움

변수를 늘리면 정확해지지만 데이터를 모으기는 어려워진다. 심박수까지 기록하려면 장비가 필요하고, 기록해야 할 항목이 늘수록 빠뜨리는 날이 생긴다. 빠진 값이 많은 데이터는 변수가 적은 데이터보다 나쁠 수 있다.

그리고 이 모델은 내 기록으로 만든 것이라 나에게만 맞는다. 여러 사람에게 쓰려면 사람마다 따로 만들거나 체중·나이를 변수로 넣어야 하는데, 그 순간 남의 몸 정보를 모으는 일이 된다. 더 정확한 모델과 덜 모으는 것 사이에서 무엇을 택할지는 정확도만으로 정할 수 없다.

자기점검 체크리스트

  • ☑ 자신의 관심 분야가 명시되고, 모델 적용 시 기대되는 효과가 구체적으로 서술되어 있다.
  • ☑ 현재 모델의 한계 또는 부족한 점이 언급되어 있다.
  • ☑ 성능 향상을 위한 개선사항(데이터 확충·모델 변경·파라미터 조정 등)이 제시되어 있다.

무엇이 남았는가

만들기 전과 후, 무엇이 달라졌을까?

점수가 아니라 생각의 변화를 적는 자리입니다.

문항 8. 소감

기계학습 모델을 직접 구현하는 과정에서 달라진 생각, 어려웠던 점, 새롭게 알게 된 것, 또는 느낀 점을 자유롭게 서술하시오.

블록 몇 개를 잇자 자동으로 직선이 그려지는 것이 신기했다. 내가 정하지 않은 7.2라는 숫자를 컴퓨터가 내 기록에서 찾아냈다는 점이 특히 그랬다.

R²가 0.97이라고 나왔을 때는 모델이 거의 완벽한 줄 알았다. 그런데 120분을 넣어 보고 크게 빗나가는 것을 보고, 그 점수가 내가 기록해 둔 시간대 안에서만 붙은 점수였다는 걸 알았다. 숫자가 높다고 안심하면 안 된다는 것이 이번에 가장 크게 남았다.

모델을 고치는 것보다 데이터를 더 넓게 모으는 쪽이 답일 때가 있다는 것도 알게 됐다. 다음에는 두 시간짜리 운동 기록부터 쌓아 보고 싶다.

자기점검 체크리스트

  • ☑ 기계학습 구현 과정에서 새롭게 알게 된 것 또는 달라진 생각이 포함되어 있다.
  • ☑ 자신의 경험을 바탕으로 진솔하게 작성되어 있다.