머신러닝의 기본 흐름 이해하기: 데이터부터 첫 모델까지

2026. 3. 29. 13:33·ML & DL

K-NN으로 시작하는 첫 머신러닝 실습 흐름

머신러닝을 이해하는 가장 좋은 방법은 이론을 오래 붙잡고 있는 것이 아니라, 실제로 한 번 끝까지 돌려보는 것이라고 한다. 데이터를 불러오고, 나누고, 모델을 만들고, 예측을 해보고, 그 결과를 평가하는 전체 흐름을 한 번 경험해보면 이후에 배우는 알고리즘들이 훨씬 명확하게 연결된다. 이번 글에서는 그 첫 번째 경험을 만드는 데 초점을 둔다.

 

머신러닝은 결국 데이터를 다루는 작업이기 때문에 가장 먼저 해야 할 일은 데이터를 준비하는 것이다. 데이터는 CSV 파일 형태일 수도 있고, 데이터베이스에서 불러올 수도 있으며, 라이브러리에서 제공하는 샘플 데이터일 수도 있다. 입문 단계에서는 구조가 잘 정리된 데이터를 사용하는 것이 이해해 도움이 될 것이다.

 

파이썬에서는 보통 pandas를 사용해 데이터를 불러온다. 데이터가 메모리 위에 올라오면, 이제부터는 그 데이터를 어떻게 나눌 것인지가 중요한 문제가 된다. 머신러닝에서는 데이터를 단순히 한 번 사용하는 것이 아니라, 훈련데이터와 테스트 데이터로 나누는 과정이 반드시 필요하다.

 

훈련 데이터는 모델이 패턴을 학습하는 데 사용하는 데이터이고, 테스트 데이터는 그렇게 학습된 모델이 새로운 데이터에 대해서도 잘 작동하는지 확인하기 위한 데이터이다. 이 구분이 중요한 이유는, 모델이 단순히 데이터를 "외우는 것"이 아니라 일반화(generalization) 능력을 갖추고 있는지를 확인하기 위해서이다.

 

예를 들어 전체 데이터를 모두 사용해 모델을 만들고, 같은 데이터로 평가까지 해버리면 결과는 매우 좋아 보일 수 있다. 하지만 이는 실제로 새로운 데이터에 대해 잘 예측한다는 의미가 아니다. 이미 본 데이터를 다시 맞추는 것은 어렵지 않기 때문이다. 그래서 일부 데이터를 따로 떼어두고, 모델이 처음 보는 데이터에서도 잘 작동하는지를 확인해야 한다.

 

이 과정을 파이썬에서는 보통 train_test_split 함수를 통해 수행한다.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

 

여기서 X는 입력 데이터(특성), y는 우리가 예측하려는 값(타깃)이다. 이렇게 나누어두면 모델은 X_train과 y_train을 이용해 학습하고, X_test를 이용해 평가하게 된다.

 

scikit-learn에서 데이터는 대문자 $X$로 표시하고 레이블은 소문자 $y$로 표기한다. 이는 수학에서 함수의 입력을 $x$, 출력을 $y$로 나타내는 표준 공식 $f(x)=y$에서 유래된 것이다. 수학의 표기 방식을 따르되 데이터는 2차원 배열(행렬)이므로 대문자 $X$를, 타깃은 1차원 배열(벡터)이므로 소문자 $y$를 사용한다.

 

데이터를 나누었다고 해서 바로 모델을 만드는 것이 좋은 접근은 아니다. 그 전에 반드시 해야 할 일이 하나 있다. 바로 데이터를 먼저 살펴보는 것이다. 이 과정은 흔히 EDA(탐색적 데이터 분석, Exploratory Data Analysis)라고 부른다.

 

데이터를 살펴본다는 것은 단순히 값을 훑어보는 것이 아니라, 데이터의 구조와 특징을 이해하는 과정이다. 예를 들어 어떤 열이 숫자인지, 어떤 열이 범주형 데이터인지, 값의 범위는 어떻게 되는지, 이상치가 있는지 등을 확인해야 한다. 이런 과정을 거치지 않으면 모델이 예상치 못한 방식으로 동작할 수 있다.

 

아래 EDA Report 포스팅을 참고해보자. https://dreamyhand.tistory.com/351

 

[EDA Report] IBM HR 데이터 기반 직원 이직 요인 탐색적 분석 (feat. 타자료 회귀분석)

첫 번째 팀 단위 프로젝트를 마무리한 뒤, 마지막 과제로 EDA Report 작성이 주어졌다. 어차피 학습 과정의 일부이기도 해서, 우리 팀은 전체 프로세스를 직접 연습해보기로 했다.각자 관심있는 주

dreamyhand.tistory.com

 

간단한 예로 pandas의 head()를 사용하면 데이터의 앞부분을 확인할 수 있고, describe()를 사용하면 기본적인 통계 정보를 볼 수 있다.

df.head()
df.describe()

 

또한 matplotlib 같은 라이브러리를 활용하면 변수의 분포나 관계를 시각적으로 확인할 수 있다. 숫자로만 보는 것보다 훨씬 직관적으로 데이터의 특징을 파악할 수 있기 때문에, 이 단계는 반드시 거쳐야 한다.

 

이제 데이터에 대한 기본적인 이해가 끝났다면, 드디어 첫 번째 머신러닝 모델을 만들어볼 차례이다. 입문 단계에서 가장 많이 사용하는 알고리즘 중 하나가 k-최근접 이웃(K-Nearest Neighbors, K-NN) 이다.

 

K-NN은 매우 직관적인 알고리즘이다. 새로운 데이터가 들어왔을 때, 기존 데이터 중에서 가장 가까운 K개의 이웃을 찾아 그 이웃들의 정보를 바탕으로 결과를 결정한다. 예를 들어 분류 문제라면, 주변에 있는 데이터들이 어떤 클래스에 속해 있는지를 보고 다수결로 결정한다.

 

이 알고리즘의 핵심은 "유사한 데이터는 비슷한 결과를 가진다"는 가정이다. 즉, 데이터 간의 거리를 기준으로 판단을 내리는 방식이다. 그래서 K-NN에서는 거리 계산 방식과 K 값이 중요한 역할을 한다.

 

scikit-learn에서는 K-NN 모델을 다음과 같이 만들 수 있다.

from sklearn.neighbors import KNeighborsClassifier

model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

 

여기서 n_neighbors=3은 가까운 이웃을 3개 참고하겠다는 의미이다. 이 값에 따라 모델의 성향이 달라지는데, 너무 작으면 데이터에 과하게 민감해지고, 너무 크면 경향이 너무 단순해질 수 있다.

 

모델을 학습시킨 다음에는 실제로 예측을 수행해볼 수 있다.

pred = model.predict(X_test)

 

이렇게 하면 테스트 데이터에 대한 예측 결과가 반환된다. 이제 중요한 것은 이 예측이 얼마나 잘 맞았는지를 평가하는 것이다.

 

모델 평가에서는 단순히 "잘 맞았다"는 느낌이 아니라, 정량적인 기준이 필요하다. 분류 문제에서는 보통 정확도(accuracy)를 가장 기본적인 지표로 사용한다.

model.score(X_test, y_test)

 

이 값은 모델이 테스트 데이터에서 얼마나 정확하게 예측했는지를 나타낸다. 예를 들어 0.9라는 값이 나왔다면, 전체 테스트 데이터 중 90%를 맞췄다는 의미이다.

 

하지만 여기서 한 가지 더 생각해볼 점이 있다. 정확도가 높다고 해서 항상 좋은 모델이라고 볼 수는 없다. 데이터가 불균형한 경우에는 특정 클래스만 잘 맞춰도 높은 정확도가 나올 수 있기 때문이다. 그래서 이후 단계에서는 정밀도, 재현율 같은 다양한 평가 지표를 함께 고려하게 된다. 하지만 입문 단계에서는 우선 정확도 개념을 이해하는 것만으로도 충분하다고 한다.

 

여기까지가 머신러닝의 가장 기본적인 흐름이다. 데이터를 준비하고, 훈련 데이터와 테스트 데이터로 나누고, 데이터를 먼저 살펴본 뒤, 모델을 만들고, 예측을 수행하고, 결과를 평가하는 과정이다. 이 흐름을 한 번이라도 제대로 경험해보면 이후에는 배우는 알고리즘들은 단순히 "모델의 종류"로 이해되기 시작할 것이다.

 

즉, 중요한 것은 특정 알고리즘 하나를 깊게 아는 것이 아니라, 머신러닝이 어떻게 흘러가는지 전체 구조를 이해하는 것이라고 생각한다.

 

 

'ML & DL' 카테고리의 다른 글

[ML] 스마트폰 센서 데이터로 사용자 행동 분류하기: HAR 다중분류 실습  (0) 2026.04.05
머신러닝을 한 단계 더 이해하기  (0) 2026.03.29
머신러닝 성능을 바꾸는 핵심 요소  (0) 2026.03.29
지도학습 핵심 개념과 대표 알고리즘  (0) 2026.03.29
머신러닝을 시작할 때 먼저 알아야 할 것들  (0) 2026.03.29
'ML & DL' 카테고리의 다른 글
  • 머신러닝을 한 단계 더 이해하기
  • 머신러닝 성능을 바꾸는 핵심 요소
  • 지도학습 핵심 개념과 대표 알고리즘
  • 머신러닝을 시작할 때 먼저 알아야 할 것들
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • 전체
    오늘
    어제
    • 분류 전체보기 (170) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (5)
        • Project Portfolio (5)
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (84)
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (10)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • GitHub
    • WikiDocs
  • 공지사항

  • 인기 글

  • 태그

    python problem
    복합과거
    맥 git
    프랑스어 공부
    점프투파이썬 연습문제
    파이썬 크롤링
    어린왕자 불어
    파이썬 streamlit
    어린왕자 프랑스어
    파이썬 문제
    Python
    불어 공부
    streamlit
    Stata
    프로젝트 오일러
    GIT
    share.streamlit.io
    머신러닝
    초보자를 위한 파이썬 300제
    객체
    Le Petit Prince
    불어 관계대명사
    Github
    자바
    파이썬
    machine learning
    passe compose
    MySQL
    python streamlit
    점프투파이썬 연습문제 풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
J. Son
머신러닝의 기본 흐름 이해하기: 데이터부터 첫 모델까지
상단으로

티스토리툴바