Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2 머신러닝 프로젝트

Updated: 22 aug 2026

이 장에서는 캘리포니아 주택 가격 데이터를 이용하여 머신러닝 프로젝트의 전체 흐름을 살펴본다.

최종적으로 다음 질문에 답할 수 있게 된다.

실제 데이터를 이용해 머신러닝 문제를 어떻게 정의하고, 어떤 데이터를 활용하고, 어떤 모델을 선택하고, 새로운 데이터에 대해 어떻게 평가할 것인가?

프로젝트의 전체 흐름은 다음과 같다.

문제 정의 → 데이터 이해 → 훈련셋과 테스트셋 분리 → 탐색적 데이터분석 → 데이터 준비 → 모델 훈련 → 모델 비교 → 최종 평가

2.1문제 정의와 데이터

머신러닝 프로젝트는 모델을 고르는 것보다 무엇을 예측하려는지 명확히 하는 것에서 시작한다.

여기서는 1990년 미국 캘리포니아의 20,640개 구역에 대한 데이터를 사용한다. 각 구역의 데이터는 경도, 위도, 주택 건물 중위연령, 총 방 수, 총 침실 수, 인구, 가구 수, 중위소득, 중위 주택가격, 해안 근접도 등 총 10개의 특성이 포함되어 있다.

캘리포니아는 미국 서부에 위치하며, 1990년 당시 2,976만명의 인구를 가졌다.

이 프로젝트의 목표는 다른 특성을 이용하여 각 구역의 중위 주택가격을 예측하는 것이다.

  • 특성(feature): 중위 주택가격을 제외한 입력 정보

  • 타깃(target): 중위 주택가격

  • 학습 유형: 지도 학습

  • 문제 유형: 회귀

타깃이 수치형 값이므로 분류가 아니라 회귀 문제다.

또한 여러 특성을 이용해 하나의 수치형 타깃을 예측하므로 다중 회귀(multiple regression)이자 단변량 회귀(univariate regression) 문제다.

2.2데이터셋 탐색

모델을 훈련하기 전에 데이터의 구조와 품질을 먼저 확인한다.

데이터셋 탐색에서는 다음을 살펴본다.

  • 각 행과 열이 무엇을 의미하는가?

  • 결측치는 있는가?

  • 범주형 특성과 수치형 특성은 무엇인가?

  • 특성의 값 범위와 분포는 어떠한가?

  • 타깃 값에는 특별한 제한이나 이상한 점이 있는가?

2.2.1범주형 특성과 수치형 특성

2.2.1.1범주형 특성

ocean_proximity는 해안과의 위치 관계를 나타내는 범주형 특성이다. 이 특성의 값은 <1H OCEAN, INLAND, NEAR OCEAN, NEAR BAY, ISLAND와 같은 범주형 값으로 구성된다.

특성값설명
<1H OCEAN해안에서 1시간 이내
INLAND내륙
NEAR OCEAN해안 근처
NEAR BAY샌프란시스코의 Bay Area 구역
ISLAND

2.2.1.2수치형 특성

나머지 특성은 수치형 특성이다. 수치형 특성에 대해서는 먼저 평균, 표준편차, 사분위수 등의 요약 통계를 살펴본다.

히스토그램을 이용해 분포를 확인하는 것도 권장된다.

히스토그램에서 몇 가지 중요한 사실을 확인할 수 있다.

  • 특성마다 사용하는 단위와 스케일이 다르다.

  • 일부 특성은 한쪽으로 치우친 분포를 보인다.

  • 일부 특성은 값의 상한이 인위적으로 제한되어 있다.

  • total_bedrooms에는 결측치가 존재한다.

이런 특징은 이후의 데이터 전처리 방법을 결정하는 근거가 된다.

2.3훈련셋과 테스트셋

모델을 훈련하기 전에 전체 훈련 데이터를 훈련셋(training set)과 테스트셋(test set)으로 나눈다.

  • 훈련셋: 모델의 훈련과 모델 선택에 사용

  • 테스트셋: 최종적으로 선택된 모델의 일반화 성능을 평가하는 데 사용

테스트셋은 모델을 선택하거나 조정하는 과정에서 사용하지 않는다.

2.3.1무작위 샘플링과 계층 샘플링

가장 간단한 방법은 전체 데이터에서 무작위로 샘플을 선택하는 무작위 샘플링(random sampling)이다.

그러나 데이터가 충분히 크지 않거나 중요한 집단의 비율을 유지해야 하는 경우에는 특정 집단이 훈련셋이나 테스트셋에 지나치게 많이 또는 적게 포함될 수 있다.

계층 샘플링(stratified sampling)은 중요한 특성을 기준으로 데이터를 여러 계층으로 나눈 뒤, 전체 데이터에서의 비율이 각 데이터셋에도 비슷하게 유지되도록 샘플을 선택하는 방법이다.

2.3.2중위소득 구간 활용

캘리포니아 주택 가격 데이터에서는 중위소득이 주택가격과 밀접하게 관련될 가능성이 있으므로, 중위소득 구간을 5개로 구분한 다음에 중위소득 구간의 비율을 유지하도록 계층 샘플링을 사용할 수 있다.

구간범위
10.0 ~ 1.5
21.5 ~ 3.0
33.0 ~ 4.5
44.5 ~ 6.0
56.0 ~

중요한 것은 특정 샘플링 방법을 항상 사용하는 것이 아니라,

훈련셋과 테스트셋이 실제 데이터의 중요한 특성을 적절히 대표하는가?

를 확인하는 것이다.

2.4훈련셋만 이용한 탐색적 데이터분석

훈련셋과 테스트셋을 나눈 뒤에는 훈련셋만 이용해 데이터의 관계를 탐색한다.

2.4.1지리적 정보 시각화

위도와 경도를 이용하면 주택가격의 지리적 분포를 확인할 수 있다. 점의 크기는 해당 구역의 인구를 나타내고, 점이 많이 모여 있을수록 지역의 인구 밀도가 높음을 의미한다.

2.4.2상관관계

수치형 특성들 사이의 선형 관계는 피어슨 상관계수(Pearson correlation coefficient)로 확인할 수 있다.

상관계수는 -1에서 1 사이의 값을 가지며,

  • 1에 가까울수록 강한 양의 선형 관계

  • -1에 가까울수록 강한 음의 선형 관계

  • 0에 가까울수록 약한 선형 관계

를 나타낸다.

상관계수가 0에 가깝다고 해서 두 특성 사이에 모든 종류의 관계가 없다는 뜻은 아니다.

중위 주택가격과 중위소득의 상관계수가 0.68로 상당히 높다. 이는 중위소득이 높을수록 중위 주택가격도 높아지는 선형적 경향이 비교적 강하게 나타남을 의미한다. 아래 산점도가 이 사실을 잘 확인시켜준다.

2.5입력 데이터와 타깃 분리

지도 학습 모델을 훈련하려면 훈련셋을 입력 데이터타깃으로 분리한다.

입력 데이터에는 예측에 사용할 특성만 포함하고, 타깃에는 예측하려는 중위 주택가격만 포함한다.

이렇게 분리하면 이후의 전처리는 입력 데이터에 적용하고, 타깃은 모델이 예측해야 할 값으로 유지할 수 있다.

2.6데이터 정제와 전처리

실제 데이터는 그대로 모델에 넣기 어려운 경우가 많다.

이 데이터에서는 다음 전처리가 필요하다.

  • 결측치 처리

  • 범주형 특성의 원-핫 인코딩

  • 수치형 특성의 스케일링

  • 필요에 따른 특성 변환과 특성 조합

전처리의 목적은 단순히 데이터를 ‘깨끗하게’ 만드는 것이 아니라,

모델이 의미 있게 사용할 수 있는 형태로 데이터를 변환하는 것

이다.

2.6.1결측치 처리

total_bedrooms에는 일부 값이 누락되어 있는데, 많은 머신러닝 모델은 결측치가 있는 훈련셋을 활용하지 못한다.

결측치를 처리하는 대표적인 방법은

  • 해당 샘플 제거

  • 해당 특성 제거

  • 평균, 중앙값 등의 대표값으로 대체

하는 것이다.

2.6.2원-핫 인코딩

머신러닝 모델은 일반적으로 문자열 형태의 범주형 값을 직접 사용하지 못한다.

ocean_proximity와 같은 범주형 특성은 원-핫 인코딩(one-hot encoding)을 이용해 각 범주형 값을 0과 1로 표현된 새로운 특성으로 변환할 수 있다.

이렇게 새롭게 생성된 특성을 더미(dummy) 특성이라 한다.

ocean_proximity 특성은 다섯 개의 범주로 구성되기에 원-핫 인코딩을 통해 다섯 개의 새로운 더미 특성을 생성하여 원래 특성 대신 모델 훈련에 활용한다.

2.6.3특성 스케일링

수치형 특성마다 값의 범위가 크게 다르면 일부 머신러닝 알고리즘의 훈련에 영향을 줄 수 있다.

특성 스케일링은 정규화 또는 표준화를 통해 수치형 특성을 일정 크기로 변환하는 과정을 의미한다.

용어정의
정규화(Normalization)데이터 값을 일정한 범위로 맞추는 일반적인 과정.\n 대표적으로 특성값을 0과 1 사이의 값으로 변환하는 min-max 스케일링이 많이 활용됨
표준화(Standardization)평균을 0, 표준편차를 1로 맞추는 과정

모든 모델이 스케일링에 똑같이 민감한 것은 아니지만, 여러 모델을 일관된 방식으로 비교할 때 유용하다.

2.6.4특성 변환

일부 수치형 특성은 한쪽으로 심하게 치우친 분포를 보인다. 이런 경우 로그 함수를 적용한 값으로 구성된 새로운 특성을 생성하는 로그 변환을 적용하여 분포의 치우침을 줄일 수 있다.

log(x)\log(x)

아래 그림은 구역별 인구로 구성된 population 특성값에 로그함수를 적용할 때 분포가 보다 균형잡히는 것을 잘 보여준다.

2.6.5특성 공학

기존 특성을 조합해 새로운 특성을 만들 수도 있다.

예를 들어 다음과 같은 비율은 원래 값보다 구역의 특성을 더 잘 나타낼 수 있다.

  • 전체 방 수 대비 침실 수

  • 가구당 방 수

  • 가구당 평균 가구원 수

이처럼 기존 특성을 선택하거나 조합하여 모델에 더 유용한 특성을 만드는 과정을 특성 공학(feature engineering)이라고 한다.

2.7사이킷런 모델, 변환기, 파이프라인

2.7.1모델과 변환기

사이킷런에서는 데이터 변환을 담당하는 객체와 예측을 담당하는 객체를 비슷한 방식으로 사용할 수 있다.

  • 변환기(transformer): fit()으로 필요한 정보를 결정하고 transform()으로 데이터를 변환

  • 예측기(predictor): fit()으로 모델을 훈련하고 predict()로 새로운 값을 예측

2.7.2PipelineColumnTransformer

전처리 단계를 일일이 따로 실행하기보다 여러 단계를 하나의 파이프라인(pipeline)으로 묶는 것이 안전하고 재사용하기 쉽다.

Pipeline은 여러 처리 단계를 순서대로 연결한다.

반면에 ColumnTransformer는 서로 다른 특성 집합에 서로 다른 전처리를 적용한다.

예를 들어

  • 수치형 특성 → 결측치 처리 + 스케일링

  • 범주형 특성 → 결측치 처리 + 원-핫 인코딩

과 같이 서로 다른 처리를 하나의 전처리 과정으로 구성할 수 있다.

파이프라인의 핵심은 훈련 데이터에 적용한 전처리를 새로운 데이터에도 동일한 방식으로 적용하는 것이다.

2.8모델 선택

전처리가 완료되면 여러 회귀 모델을 같은 조건에서 훈련시켜 서로 비교할 수 있다.

이 장에서는 다음 세 회귀 모델을 비교한다.

  • LinearRegression

  • DecisionTreeRegressor

  • RandomForestRegressor

각 모델의 내부 원리는 뒤의 장에서 자세히 다룬다. 여기서는 서로 다른 모델을 어떻게 비교하고 선택하는가에 집중한다.

2.9모델 성능 평가

2.9.1RMSE로 훈련 성능 확인

회귀 모델의 예측 오차는 RMSE(root mean squared error)라 불리는 평균 제곱근 오차로 평가할 수 있다.

RMSE는 예측 오차의 제곱의 평균값에 제곱근을 취한 값이며, 0에 가까울수록 실제값과 예측값의 차이가 작다는 뜻이다.

캘리포니아 주택가격으로 훈련된 세 예측 모델의 훈련셋에 대한 RMSE는 대략 다음과 같다.

모델훈련셋 RMSE관찰
선형 회귀약 68,688훈련 데이터에서도 오차가 큼
결정트리0훈련 데이터에는 완벽하게 맞음
랜덤 포레스트약 17,474선형 회귀보다 훈련 오차가 작음

하지만 훈련셋 성능만으로는 어떤 모델이 새로운 데이터에서 잘 작동할지 판단할 수 없다. 특히 결정트리의 RMSE가 0이라는 사실은 오히려 과대적합을 의심하게 한다.

2.9.2교차 검증으로 모델 비교하기

테스트셋은 최종 평가를 위해 남겨 두어야 한다. 그렇다면 훈련 과정에서 여러 모델을 어떻게 비교할 수 있을까?

교차 검증(cross-validation)은 훈련셋을 다시 여러 부분으로 나누어 모델을 반복해서 훈련하고 검증하는 방법이다.

k-겹 교차 검증에서는

  1. 훈련셋을 k개의 폴드(fold)로 나눈다.

  2. 하나의 폴드를 검증용으로 남기고 나머지로 모델을 훈련한다.

  3. 검증용 폴드에서 성능을 측정한다.

  4. 검증용 폴드를 바꾸어 k번 반복한다.

  5. 여러 검증 결과를 함께 보고 모델의 성능을 판단한다.

아래 그림은 5-겹 교차 검증을 묘사한다.

교차 검증을 이용하면 한 번의 훈련 결과만 보는 것보다 모델의 일반화 성능을 더 안정적으로 비교할 수 있다.

아래 표는 10-겹 교차 검증을 통해 얻은 세 가지 모델의 성능(평균 RMSE)을 요약한다.

모델명교차 검증 평균 RMSE성능 평가 요약
선형 회귀 모델약 7만세 모델 중 가장 높은(나쁜) 오차를 보임
결정트리 회귀 모델약 6만7천선형 회귀 모델보다 약간 낫지만 여전히 꽤 높은 오차를 보임
랜덤 포레스트 회귀 모델약 4만7천훈련이 다소 오래 걸리지만 세 모델 중 성능이 가장 뛰어남

이 장에서 중요한 구분은 다음과 같다.

  • 훈련셋: 모델 훈련과 모델 선택

  • 교차 검증: 훈련셋 내부에서 모델 비교

  • 테스트셋: 최종 모델의 마지막 평가

2.10하이퍼파라미터 미세 조정

선택된 모델을 이용하여 훈련을 시작하기 전에 사람이 모델의 훈련과정동안 파라미터를 학습하는 알고리즘 세팅을 위해 사람이 정하는 설정값을 모델의 하이퍼파라미터(hyperparameter)라고 한다.

예를 들어 랜덤 포레스트에서는 트리의 수나 일부 분할 관련 설정이 하이퍼파라미터다.

참고로 선택된 모델의 훈련을 통해 데이터에서 결정되는 값은 모델 파라미터(model parameter)이며 모델의 하이퍼파라미터와는 완전히 다른 값이다.

교차 검증 성능이 좋은 하이퍼파라미터 조합을 탐색하는 대표적인 방법은 다음과 같다.

  • 그리드 탐색(grid search): 미리 지정한 조합을 체계적으로 확인

  • 랜덤 탐색(randomized search): 탐색 공간에서 일부 조합을 무작위로 선택

2.11최종 모델 평가

가장 좋은 성능을 내는 하이퍼파라미터로 모델의 훈련을 마친 뒤에야 테스트셋을 사용한다.

최종 모델에 테스트셋의 입력 데이터를 넣어 예측값을 만들고, 실제 타깃과 비교하여 RMSE를 계산한다.

이 값은 지금까지 모델 선택에 사용하지 않았던 데이터에서 측정한 결과이므로 일반화 성능의 최종 추정치로 사용한다.

테스트셋의 결과가 기대보다 좋지 않더라도, 같은 테스트셋을 반복해서 확인하며 모델을 다시 조정하면 최종 평가의 의미가 약해진다.

2.12모델 저장과 활용

훈련과 평가가 끝난 모델은 저장해 두었다가 새로운 데이터의 예측에 다시 사용할 수 있다.

파이프라인 전체를 함께 저장하면 전처리와 예측 과정을 동일하게 재사용할 수 있다.

실제 프로젝트에서는 모델 파일 자체보다도 다음 내용을 함께 기록하는 것이 중요하다.

  • 어떤 데이터로 훈련했는가?

  • 어떤 특성과 전처리를 사용했는가?

  • 어떤 기준으로 모델을 선택했는가?

  • 어떤 테스트 데이터에서 어느 정도의 성능을 보였는가?

2.13핵심 정리

이 장에서 살펴본 머신러닝 프로젝트의 핵심 흐름은 다음과 같다.

  1. 문제를 정의하고 타깃을 정한다.

  2. 데이터의 구조와 품질을 확인한다.

  3. 훈련셋과 테스트셋을 먼저 분리한다.

  4. 훈련셋만 이용해 데이터를 탐색한다.

  5. 결측치, 범주형 특성, 스케일 등을 적절히 전처리한다.

  6. 파이프라인으로 전처리와 모델을 연결한다.

  7. 교차 검증을 이용해 여러 모델과 하이퍼파라미터를 비교한다.

  8. 최종 모델과 하이퍼파라미터 선택이 끝난 뒤 테스트셋에서 최종 일반화 성능을 평가한다.

한 문장으로 정리하면 다음과 같다.

머신러닝 프로젝트의 핵심은 모델 하나를 훈련하는 것이 아니라, 데이터 준비부터 최종 평가까지 전체 분석 과정을 타당하게 설계하는 것이다.

2.14연습문제

2.14.1문제 1. 프로젝트 설계

다음 질문에 답하라.

  1. 캘리포니아 주택 가격 프로젝트의 특성과 타깃은 무엇인가?

  2. 이 문제가 회귀 문제인 이유는 무엇인가?

  3. 모델을 훈련하기 전에 훈련셋과 테스트셋을 나누는 이유는 무엇인가?

  4. 테스트셋을 모델 선택에 반복해서 사용하면 왜 문제가 되는가?

해설 보기
  1. 중위 주택가격을 제외한 입력 정보가 특성이고, 중위 주택가격이 타깃이다.

  2. 예측하려는 타깃이 수치형 값이기 때문이다.

  3. 모델 훈련과 선택에 사용하지 않은 데이터에서 일반화 성능을 최종 평가하기 위해서다.

  4. 테스트셋의 정보가 모델 선택에 반영되어 더 이상 독립적인 최종 평가 데이터로 보기 어려워지기 때문이다.


2.14.2문제 2. 데이터 탐색과 전처리

  1. 왜 테스트셋이 아니라 훈련셋만 이용해 탐색적 데이터분석을 진행하는가?

  2. ocean_proximity에 원-핫 인코딩이 필요한 이유는 무엇인가?

  3. total_bedrooms의 결측치를 처리해야 하는 이유는 무엇인가?

  4. 특성 스케일링이 필요한 경우는 언제인가?

  5. 특성 공학이란 무엇인가?

해설 보기
  1. 테스트셋의 정보가 분석과 모델 설계에 들어가는 것을 막기 위해서다.

  2. 범주형 값을 머신러닝 모델이 사용할 수 있는 수치 형태로 변환하기 위해서다.

  3. 많은 머신러닝 모델은 결측값을 그대로 처리할 수 없기 때문이다.

  4. 특성마다 값의 범위가 크게 다르고 사용하는 모델이 스케일에 민감할 때 필요하다.

  5. 문제 해결에 도움이 되는 특성을 선택하거나 기존 특성에서 새로운 특성을 만들어 사용하는 과정이다.


2.14.3문제 3. 모델 평가와 일반화

선형 회귀, 결정트리, 랜덤 포레스트의 훈련셋 RMSE가 각각 약 68,688, 0, 17,474라고 하자.

  1. 훈련셋 RMSE만 보고 결정트리가 가장 좋은 모델이라고 결론 내리면 안 되는 이유는 무엇인가?

  2. 결정트리에서 어떤 문제를 의심할 수 있는가?

  3. 교차 검증은 어떤 목적으로 사용하는가?

  4. 교차 검증과 테스트셋 평가의 역할은 어떻게 다른가?

해설 보기
  1. 훈련 데이터에 지나치게 맞춘 모델일 수 있으며 새로운 데이터의 성능을 보여주지 않기 때문이다.

  2. 과대적합을 의심할 수 있다.

  3. 훈련셋 내부에서 여러 모델의 일반화 성능을 비교하기 위해 사용한다.

  4. 교차 검증은 모델 선택 과정에 사용하고, 테스트셋은 모든 선택이 끝난 최종 모델을 평가하는 데 사용한다.


2.14.4문제 4. 파이프라인과 모델 선택

  1. Pipeline을 사용하는 가장 중요한 이유는 무엇인가?

  2. ColumnTransformer는 어떤 상황에서 유용한가?

  3. 모델 파라미터와 하이퍼파라미터의 차이는 무엇인가?

  4. 그리드 탐색과 랜덤 탐색의 공통 목적은 무엇인가?

  5. 하이퍼파라미터를 테스트셋을 보면서 선택하면 안 되는 이유는 무엇인가?

해설 보기
  1. 전처리와 모델 훈련·예측을 정해진 순서로 일관되게 적용하기 위해서다.

  2. 수치형 특성과 범주형 특성처럼 서로 다른 특성 집합에 서로 다른 전처리를 적용할 때 유용하다.

  3. 모델 파라미터는 훈련을 통해 데이터에서 결정되고, 하이퍼파라미터는 훈련 전에 정하는 설정값이다.

  4. 모델의 하이퍼파라미터 조합을 탐색하여 더 나은 설정을 찾는 것이다.

  5. 테스트셋의 정보가 모델 선택에 반영되어 최종 평가가 낙관적으로 편향될 수 있기 때문이다.


2.14.5문제 5. 코드 워크아웃으로 확인하기

(코드 워크아웃) 머신러닝 프로젝트를 실행하면서 다음을 확인하라.

  1. 훈련셋과 테스트셋은 어떤 코드로 분리하는가?

  2. 수치형 특성과 범주형 특성에는 각각 어떤 전처리를 적용하는가?

  3. 전처리 파이프라인은 어떻게 구성되는가?

  4. 세 회귀 모델은 어떤 방식으로 훈련하고 비교하는가?

  5. 교차 검증은 어디에서 사용되는가?

  6. 최종 테스트셋은 언제 사용되는가?

해설 보기

정확한 코드와 실행 결과는 코드 워크아웃에서 직접 확인한다.

핵심은 훈련셋과 테스트셋을 먼저 분리하고, 훈련셋 안에서 전처리·모델 비교·교차 검증을 수행한 뒤, 최종 선택이 끝난 모델만 테스트셋에서 평가한다는 것이다.