기계학습 모델 구현 보고서

신용점수와 소득으로 대출 승인 여부 분류

모델이 그은 선 하나가 누구는 승인, 누구는 거절로 나눈다면
그 선은 어디에 있어야 옳을까?

지도학습 · 분류 (로지스틱 회귀) 도구: 오렌지 금융 · 은행 · 핀테크

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

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

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

아이디어에서 설계까지

심사 기준은 누가 정하는 걸까?

사람이 판단하던 일을 모델에 맡길 때 무엇이 달라지는지 따라가 봅시다.

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

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

대출 심사가 며칠씩 걸린다는 이야기를 들었다. 급한 사람에게는 그 며칠이 크다. 그런데 심사가 무엇을 보고 정해지는지는 신청자가 알 수 없다는 점이 더 마음에 걸렸다. 기준을 눈에 보이게 만들 수 있을지 궁금했다.

2

왜 기계학습인가 — 기준선을 내가 정할 수 없다

신용점수 700점 이상이면 승인처럼 내가 정해 버릴 수도 있다. 그런데 왜 700인가? 690인 사람과 710인 사람이 그렇게 다른가? 기계학습은 그 선을 과거 기록에서 찾아 준다.

3

왜 분류인가 — 답의 생김새가 정한다

얻고 싶은 답은 「승인」과 「거절」 둘 중 하나다. 숫자를 맞히는 것이 아니고, 비슷한 신청자끼리 묶는 것도 아니다. 얻고 싶은 답의 생김새가 방법을 정한다.

무엇을 풀 것인가

빠른 심사와 공정한 심사는 같은 말일까?

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

문항 1. 문제 정의

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

대출 심사는 사람이 서류를 하나씩 보며 판단한다. 시간이 오래 걸리고, 같은 서류를 보고도 심사자에 따라 결과가 달라질 수 있다. 신청자는 왜 그런 결과가 나왔는지 알기 어렵다.

그래서 신용점수와 월소득을 넣으면 승인 가능성이 높은 신청인지 낮은 신청인지를 같은 기준으로 구별해 주는 모델을 만들고자 한다. 사람의 최종 판단을 대신하려는 것이 아니라, 먼저 살펴보는 데 쓰는 것이 목적이다.

자기점검 체크리스트

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

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

모델이 내놓는 것은 「승인」일까, 숫자일까?

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

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

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

  • ■ 입력: 신용점수(점) · 월소득(만원) — 숫자 두 개
  • ■ 출력: 승인 확률(0~100%)과, 그 확률을 기준선과 비교해 정한 승인 / 거절

모델이 직접 내놓는 것은 「승인」이라는 말이 아니라 확률이라는 숫자다. 확률 몇 %부터 승인으로 볼지는 사람이 정하는 기준선이고, 여기서는 흔히 쓰는 50%를 썼다. 그래서 기준선을 옮기면 같은 모델이 다른 결정을 내놓는다.

모델이 내놓는 것은 확률이고, 나누는 것은 사람이 정한 선이다 입력 신용점수 640점 월소득 295만원 학습된 모델 승인 확률 49% 사람이 정한 기준선 50% 이상이면 승인 → 거절 49%를 거절로 만든 것은 모델이 아니라 50%라는 선이다

자기점검 체크리스트

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

어떤 방법으로 풀 것인가

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

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

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

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

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

① 기계학습 유형: 지도학습 — 분류 (로지스틱 회귀)

과거 심사 기록에는 건마다 승인이었는지 거절이었는지가 함께 적혀 있다. 정답이 붙어 있으므로 지도학습이다. 그리고 내놓아야 할 답이 「승인」과 「거절」이라는 두 개의 범주이므로, 수치를 맞히는 예측이 아니라 범주 하나를 집는 분류를 쓴다.

다른 방법이 아닌 이유: 예측(회귀)로 하면 「승인 점수 73.2점」 같은 숫자가 나오는데, 결국 몇 점부터 승인인지를 다시 정해야 하므로 문제를 미룰 뿐이다. 군집은 정답을 쓰지 않고 비슷한 신청자끼리 묶는 방법이라, 이미 갖고 있는 승인·거절 정답을 버리게 된다.

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

표 형태의 CSV를 그대로 읽어 들이고, 로지스틱 회귀와 산점도를 블록을 잇는 것만으로 만들 수 있다. 특히 혼동 행렬(Confusion Matrix) 블록이 따로 있어, 정확도 하나가 아니라 어떤 종류의 오류가 몇 건인지를 바로 볼 수 있다는 점이 이 문제에서 결정적이었다. 티처블머신은 사진·소리를 다루는 도구라 표 데이터에는 맞지 않고, 코랩은 같은 일을 할 수 있지만 코드를 직접 써야 해서 이번 목적에는 과하다.

자기점검 체크리스트

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

무엇으로 배우게 할 것인가

과거의 심사 기록을 그대로 배워도 될까?

모아 둔 데이터가 곧 모델이 물려받는 기준이 됩니다.

문항 4. 데이터 설명

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

  • • 출처: 공개 데이터 플랫폼에 올라온 대출 심사 데이터셋 (이용 조건을 확인하고 내려받음)
  • • 유형: 수치형 정형 데이터 (CSV, 특성 2개 + 결과 1개)
  • • 수량: 1,000행 — 승인 700건 / 거절 300건
  • • 범위: 신용점수 300~900점, 월소득 50~600만원
신용점수 | 월소득(만원) | 결과
─────────┼──────────────┼──────
   760   |     320      | 승인
   480   |     200      | 거절
   830   |     250      | 승인
   400   |     150      | 거절
   620   |     480      | 승인
(이하 995행 생략 / 전체 1,000행)

실제 수행평가 때는 여기에 데이터셋 내려받기 화면 및 오렌지 CSV 불러오기 화면 스크린샷을 붙입니다.

사람에 관한 데이터라서 더 조심해야 하는 것

  • 정답이 「옳은 판단」이 아니라 「과거의 판단」이다. 이 데이터의 승인·거절은 과거에 사람이 내린 결정이다. 그 결정에 치우침이 있었다면 모델은 그 치우침을 그대로 배운다. 정확도가 높다는 것은 과거를 잘 따라 했다는 뜻이지 옳다는 뜻이 아니다.
  • 승인 700 대 거절 300으로 한쪽이 많다. 이러면 아무것도 안 하고 전부 승인이라고만 해도 정확도 70%가 나온다. 정확도만 보면 안 되는 이유가 여기 있다.
  • 넣지 않기로 한 열도 결정이다. 성별·나이·사는 곳처럼 사람을 구분하는 정보는 일부러 넣지 않았다. 다만 넣지 않아도 다른 열을 통해 간접적으로 드러날 수 있다.
  • 사람에 관한 자료는 누구의 것인지 알 수 없게 되어 있어야 한다. 이름·주민번호·계좌번호가 섞여 있으면 그 열은 지우고 시작한다.

자기점검 체크리스트

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

모델은 무엇을 배웠는가

정확도 88%면 잘 만든 걸까?

모델이 그은 선 하나와, 그 선이 만들어 내는 네 가지 결과를 봅시다.

문항 5. 학습 결과

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

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

  1. File 블록을 놓고 심사 기록 CSV를 불러온다.
  2. 열 설정에서 결과(승인/거절)를 target으로 지정한다. 이때 자료형이 수치가 아니라 범주로 잡혀 있어야 분류 모델이 붙는다.
  3. Scatter Plot을 이어 두 특성으로 점을 찍고 색을 결과로 칠한다. 색이 뒤섞여 있으면 이 두 특성만으로는 나눌 수 없다는 뜻이다.
  4. Logistic Regression과 Test and Score를 잇고, 1,000건 가운데 20%를 시험용으로 떼어 두는 방식(Random sampling)을 고른다. 학습용 크기는 80%, 반복은 1회로 둔다. 반복을 늘리면 혼동 행렬에 여러 회차의 건수가 더해져 200건이 넘게 나온다.
  5. Confusion Matrix를 이어 어떤 종류의 오류가 몇 건인지를 본다. 정확도 하나만 보고 끝내지 않는다.
  6. Predictions에 새 신청자를 넣어 확률이 얼마로 나오는지 확인한다.

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

  • 산점도에서 승인과 거절이 대각선을 사이에 두고 나뉘어 있어, 두 특성만으로도 어느 정도 나눌 수 있음을 확인했다.
  • 모델이 찾은 경계: 신용점수 + 1.2 × 월소득 = 1,000 — 이 값보다 크면 승인 쪽, 작으면 거절 쪽이다.
  • 홀드아웃 검증 정확도 88.0% (떼어 둔 테스트 200건 중 176건을 맞힘)
  • 계수 1.2는 월소득 1만원이 신용점수 1.2점만큼의 무게로 쓰였다는 뜻이다. 모델이 그렇게 정한 것이지, 소득이 실제로 그만큼 중요하다는 뜻은 아니다.
  • 같은 88%라도 틀린 24건의 속을 봐야 한다 — 아래 표가 그것이다.

■ 혼동 행렬 (테스트 200건)

  모델: 승인 모델: 거절
실제 승인 (140명) 132
맞게 승인
8
잘못 거절
실제 거절 (60명) 16
잘못 승인
44
맞게 거절

실제 수행평가 때는 여기에 오렌지 Test and Score 및 Confusion Matrix 화면 스크린샷을 붙입니다.

정확도 하나로는 알 수 없는 것

정확도 88%는 200건 중 176건을 맞혔다는 뜻이다. 그런데 이 데이터는 승인이 70%라서, 아무 생각 없이 전부 승인이라고만 해도 70%가 나온다. 88%는 그 70%보다 얼마나 나은지를 봐야 의미가 있다.

틀린 24건은 성격이 전혀 다른 둘로 나뉜다. 잘못 승인 16건은 갚기 어려운 사람에게 빌려준 것이고, 잘못 거절 8건은 갚을 수 있었던 사람을 돌려보낸 것이다. 수는 16 대 8이지만, 둘의 무게는 수로 비교할 수 없다.

이 둘을 나누어 보여 주는 표가 혼동 행렬이다. 분류 모델에서는 정확도보다 이 표를 먼저 본다.

월소득(만원) 가운데 띠 = 승인 확률 45~55% 구간 0 200 400 600 300 450 600 750 900 신용점수(점) 승인 쪽 거절 쪽 테스트 3 — 49%
채운 점이 승인, 빈 점이 거절이다. 주황 선이 모델이 찾은 경계이고, 옅은 띠 안은 확률이 50% 근처라 조금만 달라도 결과가 뒤집히는 자리다. 빨간 점이 문항 6의 테스트 3이다.

자기점검 체크리스트

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

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

51%와 49%는 얼마나 다른 걸까?

확실한 사례와 경계 사례에 각각 물어보고 결과를 비교해 봅시다.

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

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

■ 테스트 1 — 경계에서 멀리 떨어진 신청 (신용점수 810 / 월소득 420만원)

  • 경계식 값: 810 + 1.2 × 420 = 1,314 (기준 1,000보다 훨씬 큼)
  • 예상: 승인 — 실제 출력: 승인 확률 96%
  • 예상대로 맞았다.

■ 테스트 2 — 반대쪽으로 멀리 떨어진 신청 (신용점수 430 / 월소득 160만원)

  • 경계식 값: 430 + 1.2 × 160 = 622 (기준보다 훨씬 작음)
  • 예상: 거절 — 실제 출력: 거절 확률 93%
  • 예상대로 맞았다.

■ 테스트 3 — 경계 바로 옆의 신청 (신용점수 640 / 월소득 295만원)

  • 경계식 값: 640 + 1.2 × 295 = 994 (기준 1,000보다 6 작음)
  • 예상: 판단하기 어려움 — 실제 출력: 승인 확률 49% → 거절
  • 여기서 문제가 드러났다. 월소득이 5만원만 더 많았다면 1,000이 되어 승인으로 뒤집힌다.

■ 분석

모델은 세 번 다 제대로 계산했다. 문제는 계산이 아니라 결정이다. 테스트 1·2는 경계에서 멀어 확률이 90%대로 나왔지만, 테스트 3은 49%였다. 49%와 51%는 모델이 보기에 거의 같은 값인데, 결과는 거절과 승인으로 완전히 나뉜다.

이렇게 나눈 것은 모델이 아니라 「50% 이상이면 승인」이라는 기준선이다. 그 선은 학습으로 정해진 것이 아니라 사람이 골라 넣은 값이다. 선을 45%로 내리면 테스트 3은 승인이 되고, 55%로 올리면 지금 승인되던 사람들 일부가 거절된다.

그래서 이런 모델은 확률이 경계 근처인 사람을 자동으로 처리하지 않는 것이 맞다. 확률과 함께 「이 판단은 확실하지 않다」는 표시를 같이 내보내고, 그런 건은 사람이 다시 본다.

자기점검 체크리스트

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

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

틀렸을 때 손해를 보는 사람은 누구일까?

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

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

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

기대 효과

관심 분야: 금융 · 핀테크

확률이 90%를 넘거나 10% 아래인 명백한 건을 먼저 걸러 내면, 사람은 애매한 건에 시간을 더 쓸 수 있다. 전체 심사를 대신하는 것이 아니라 사람이 볼 순서를 정해 주는 쓰임이다.

기준을 식 하나로 적어 둘 수 있다는 점도 쓸모다. 심사자에 따라 결과가 달라지는 문제를 적어도 드러내 놓고 이야기할 수 있게 된다.

개선 사항

한계: 특성이 두 개뿐이라 부채·고용 형태·거래 기간처럼 중요한 것이 빠져 있다. 그리고 학습한 정답이 과거의 결정이므로 과거의 치우침을 그대로 물려받았을 수 있다.

개선 방향: ① 특성을 늘리되 사람을 구분하는 정보는 넣지 않는다. ② 경계 근처 건을 「판단 보류」로 따로 빼는 세 번째 출력을 만든다. ③ 승인·거절 비율이 한쪽으로 쏠린 것을 맞추고, 정확도 대신 두 오류를 나눠 보는 지표로 평가한다.

개선해도 남는 어려움

두 오류의 무게가 다르고, 손해를 보는 사람도 다르다. 잘못 승인하면 빌려준 쪽이 돈을 잃는다. 잘못 거절하면 갚을 수 있었던 사람이 돈을 못 빌린다 — 등록금이나 치료비가 걸려 있었을 수도 있다. 기준선을 올리면 잘못 승인이 줄고 잘못 거절이 늘며, 내리면 그 반대다. 어디에 둘지는 정확도가 정해 주지 않는다. 누구의 손해를 더 무겁게 볼 것인지를 정하는 일이기 때문이다.

거절당한 사람에게 이유를 말할 수 있어야 한다. 「식의 값이 994라서」는 계산 과정이지 이유가 아니다. 특성을 늘려 정확도를 올릴수록 설명은 더 어려워진다 — 정확한 모델과 설명할 수 있는 모델이 늘 같지는 않다.

그리고 과거를 잘 맞히는 것과 옳게 판단하는 것은 다르다. 과거 심사에 치우침이 있었다면, 그 치우침을 잘 재현할수록 정확도는 올라간다. 정확도를 올리는 노력이 오히려 문제를 키우는 방향일 수 있다. 이것은 데이터를 더 모아서 풀리는 문제가 아니다.

자기점검 체크리스트

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

무엇이 남았는가

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

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

문항 8. 소감

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

처음에는 정확도 88%가 나왔을 때 꽤 잘 만든 줄 알았다. 그런데 혼동 행렬을 보고 나서 생각이 바뀌었다. 승인이 원래 70%인 데이터라 전부 승인이라고만 해도 70%가 나온다는 걸 알고 나니, 88%라는 숫자가 처음처럼 커 보이지 않았다.

가장 오래 생각한 건 기준선을 50%로 둔 것이었다. 그냥 절반이니까 골랐는데, 테스트 3에서 49%가 나와 거절되는 걸 보고 그 선이 사람의 결정이었다는 게 실감났다. 선을 조금만 옮겨도 어떤 사람은 대출을 받고 어떤 사람은 못 받는다.

학습 데이터의 정답이 「옳은 판단」이 아니라 「과거의 판단」이라는 것도 이번에 처음 생각해 봤다. 과거가 치우쳐 있으면 잘 맞힐수록 그걸 따라 하게 된다는 게 이상하게 느껴졌다. 사람에 관한 결정을 다루는 모델은 정확도만 올려서는 안 되겠다고 생각했다.

자기점검 체크리스트

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