들어가며
이번에는 데이터를 정제하는 과정에 대해 알아볼 것이다
데이터 정제란 데이터가 누락되거나 중복되거나 이상값을 포함할 때 이를 찾아 수정하거나 제거하는 과정이다
이 과정이 이루어지지 않으면 분석 결과가 왜곡되거나 모델 성능이 저하할 수 있다
이번에는 그 중 누락된 값이 있을 때 어떻게 처리할 지 알아볼 것이다
기본적이지만 필수적인 과정인 것이다
누락된 값 정제
대부분 머신러닝 알고리즘은 누락된 특성을 다루지 못하므로 이를 처리해주어야 한다
처리하는 방법으로는 3가지 정도가 있다
1. 해당 구역을 제거한다
housing.dropna(subset=["total_bedrooms"], inplace=True)
이 방법은 값이 비어있는 행만 제거하는 것이다
2번째 방법과 같이 비교하면서 보면 이해가 쉬울 것이다
2. 전체 특성을 제거한다
housing.drop("total_bedrooms", axis=1)
이 방법은 아예 열 자체를 삭제시키는 것이다
즉 위의 예시대로라면 total_bedrooms 이라는 특성을 삭제시켜 아예 사용하지 않겠다는 것이다
1번의 방법은 열은 그대로 두지만 비어있는 값이 있는 행만 없애는 것이다
3. 누락된 값을 어떤 값으로 채운다
median = housing["total_bedrooms"].median()
housing["total_bedrooms"].fillna(median, inplace=True)
이 방법은 누락된 값을 0이나 평균,중간값 등으로 대체하는 방법이다
주로 이 방법이 데이터를 최대한 유지하므로 자주 선택된다
위의 코드는 median 즉 중간값을 대체값으로 사용한 것을 볼 수 있다
사이킷런 통한 데이터 정제
위의 코드대로 누락된 값을 정제해도 되지만
사이킷런에서 SimpleImputer 클래스를 제공하여 데이터를 편하게 정제하도록 도와준다
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy="median")
housing_num = housing.select_dtypes(include=[np.number])
imputer.fit(housing_num)
X = imputer.transform(housing_num)
우선 SimpleImputer 객체를 생성해야 한다
이 클래스는 strategy 매개변수를 활용하여 어떤 값으로 채울 지 정할 수 있다
중간값은 수치형 특성에서만 계산되기 때문에 수치 특성만 가진 데이터를 따로 빼주어야 한다
그 후 fit()을 하여 객체가 훈련 데이터를 학습하도록 한다
이 과정에서 중간값이 학습되는 것이다
마지막으로 transform()을 통해 누락된 값을 학습된 중간값으로 대체한다
strategy 매개변수는 median 외에도 최빈수(most_frequent), 상수("constant") 등으로 설정 가능하다
마치며
이번 글에서는 누락된 값을 어떻게 처리하는 지에 대한 데이터 정제에 대해 다뤄보았다
개념 자체는 이해하기 쉽고 구현도 쉬운 편에 속하는 것 같았다
하지만 매우 중요한 부분이여서 등한 시하면 큰 문제로 이어질 수 있으니 주의해야한다
다음 번에는 텍스트형 데이터를 어떻게 다루는 지에 대하여 알아 볼 것이다
'AI > Machine Learning' 카테고리의 다른 글
| [AI] 특성 스케일링(정규화, 표준화) (0) | 2026.02.07 |
|---|---|
| [AI] 텍스트 특성 다루기 (1) | 2026.02.06 |
| [AI] 테스트 세트 만들기 (0) | 2026.02.03 |
| [AI] 홀드아웃 검증(holdout validation), 교차 검증(cross-validation) (0) | 2026.01.21 |
| [AI] 과대 적합(overfitting), 과소 적합(underfitting) (1) | 2026.01.21 |
