원티드 포텐업 부트캠프 기록

[비전공자의 AI 부트캠프 일지 #6] 머신러닝 기초 정리_원티드 포텐업 부트캠프

졔예요 2025. 3. 2. 21:37
[비전공자의 AI 부트캠프 일지 #6]
머신러닝 기초 정리
원티드 포텐업 부트캠프

 

 지난 글에서 이야기했지만 머신러닝 파트에 들어가면서 새로운 어려움이라고 느껴진 이유가 수학적인 내용이었다. 이과와는 관련이 없던 사람이라 중요한 개념으로 경사하강법이 나오는데 이걸 이해하기 필요한 것이 미분이라고 한다. 새로운 배우는 언어이고 개념이라 쉽게 말하자면 초반 소통이 되지 않았다고 해야 할까...?

 하지만 그렇다고 머신러닝이나 딥러닝을 배우지 못하는 거나 만들지 못하는 것은 아니다. 서비스나 제품을 만들어가는 과정에서는 앞에 이야기했던 것처럼 비즈니스 이해와 내가 어떤 문제를 해결하고 싶은지, 어떻게 만들어가는지에 대한 이해가 더 중요하다고 나는 생각한다. 어렵다고 생각했던 경사하강법은 우리의 서비스에 대한 평가를 위해서 (더 잘 알면 좋겠지만) 개념을 느낌적인 부분에서 이해해도 충분히 가능했다. 

지난 머신러닝 파트 시작 포스팅

 

 

머신러닝 모델 개발 순서 

 머신러닝 모델을 만드는 전체적인 과정은 나는 아래 느낌으로 이해했다.

  1. 문제 정의 : 내가 해결하고자 하는 문제와 어떤 서비스(모델)를 만들 것인지
  2. 데이터 수집 : 그러면 문제를 해결하거나 설명할 수 있는 데이터들 모으기
  3. 탐색적 데이터 분석 : 모아진 데이터가 어떤 패턴이 있는지, 이상치, 내용이 없는 것이 있는지 확인하기
  4. 데이터 전처리 : 이상치나 내용이 없는 것(결측치)은 제거하고 패턴에 따라 새로운 데이터를 만들거나 글자는 숫자로 바꿔주기(라벨 or 원핫 인코딩)
  5. 데이터 분할 : 모델(기계)를 훈련시킬 데이터와 평가해 볼 데이터 나눠주기 
  6. 모델 선택 : 분류(그룹을 나눌래?) vs 회귀(다음 숫자는 뭘까?) 선택해 주기 
  7. 모델 학습 : 자, 이게 이전 기출문제니깐 문제랑 답 함께 공부해!
  8. 모델평가 : 공부했으니깐 이제 예시문제 풀어볼래?  
  9. 모델 튜닝 및 성능 개선 : 이 부분이 약한 것 같네 보충 수업... 아니면 필요한 정보를 더 가져다줄게  

 

데이터 수집 및 EDA

  데이터 분석 파트가 끝나면서 데이터를 수집할 수 있는 능력을 키우는 것이 중요하겠다. 라는 생각을 했는데 머신러닝 파트를 배우고 프로젝트 진행하면서 역시 데이터 수집 중요한 것 맞네.라고 했던 것 같다. 이 데이터가 과연 내가 하고 싶은 것에 필요한 데이터인가? 이걸 내가 결과라고 봐도 될까? 이 결과에 영향을 주는 것이 이 데이터가 맞을까? 에 대해서 계속 생각하고 찾아보게 된다.

  생각해야 할 것, 선택해야 하는 것들이 더 생기기 시작한다. 내가 무엇을 만들고 싶은지는 기계가 해주는 것이 아니었고 내가 이것이 답이다.라고 생각하는 것도, 모델을 만드는 것도 결국 스스로가 선택해야 하기 때문이다. 내가 해결하는 문제는 이것이고 이걸 하기 위해서 이런 것들이 필요하고 이게 유의미한 것 같아.라는 스토리는 내가 만드는 것이었다. 그 과정에서 기계는 내가 할 수 없는 통계적인 계산이나 숫자의 패턴 분석 그리고 이상한 부분이 있는지 확인하는 것을 좀 더 쉽게 만들어 줄 뿐이었다. 

 

데이터 분할 

 데이터 분할은 라이브러리와 명령어를 통해서 쉽게 분리할 수 있다. 아마 지금까지 유일하게 외우고 있는 코드아닐까... train_test_split() 

 데이터가 만약에 10,000개 있다고 가정한다면 보통 8,000개는 학습하는데 사용하고 2,000개는 평가하는 데 사용한다. 여기서 조금 의심이 생긴다면 8,000개의 학습 데이터를 다시 학습용 및 검증용 데이터로 나눠서 6,000개 학습용, 2,000개 검증용, 2,000개 평가용으로 데이터를 나눌 수 있다. 

 데이터 분할하는 과정과 모델 선택하고 학습하는 과정은 생각보다 단순했다. 다만, 이제 필요한 데이터의 양이 증가하면서 학습할 수 있는 환경을 조성하는 것이 필요했다. CPU가 아닌 GPU 환경에서 더 빠르게 학습하고 계산할 수 있는 환경을 만들어주기. (이렇게 엔비디아 주가가 오르는 이유를 몸소 느껴본다.)

머신러닝 기초 수업 시 활용한 데이터

 

모델링

 이제 준비된 데이터를 가지고 머신러닝 모델에 넣는데 여기서도 선택이 발생된다. 그룹으로 분류할까? 아니면 다음 값을 예측해 볼까?  머신러닝의 핵심은 바로 예측이다. 그리고 이 예측을 어떻게 할지가 바로 모델을 선택하는 기준이 된다. 예를 들어, 분류라고 하다면, 이 사람의 데이터는 a=1, b=20, c=100 이렇게 있는데 이 사람은 vip 될까? vvip 될까? 와 같이 분류를 예측하는 것이다. 회귀는 5일 전에는 1000원, 4일 전에는 1200원... 그러면 내일은 얼마일까?와 같이 앞의 값을 예측하는 것이다.

 그 후, 예측한 값이 실제 결과 값에 얼마나 맞췄는지를 통해서 이 모델의 성능을 평가하게 되는 것이다. 이때 필요한 개념이 바로 경사하강법이다. 기계가 계산한 예측 값과 실제 결과 값의 차이를 줄이기 위해서 점점 이 차이를 줄이기 위한 학습 알고리즘이다. 알고리즘이라니깐 나한테는 좀 어려웠는데 쉽게 발생한 오차를 최솟값( 0 )으로 만들기 위해서 사용하는 계산법. 이라고 이해했다. 

경사하강법 필기_이미 모르는 단어가 많았다 > 소통이 어려웠다...

 

 

 이번 포스팅을 통해서 머신러닝 개발 과정에 대해서 내가 이해했던 방식을 글로 풀어내면서 다시 한번 배우게 된 것 같아서 재미있었다. 또, 내가 이해한 방식이 낯선 것을 이해할 수 있는데 괜찮을지 궁금하기도 하다. 포스팅하는 목적이 배운 것을 내 안에 남겨보려고 했던 것이었는데 처음으로 그 방법을 살짝 느낀 것 같다. (맨날 찾기만 하는 것 같다🤔)

 근데, 글을 쓰면서 갑자기 생각난 것인 GPT는 왜 항상 random status = 42로 주는 것일까? 

파이팅💪