KNN 기법은 데이터의 패턴을 활용하여 결측치를 예측한다. 결측치를 가진 데이터와 가까운 거리에 있는 데이터(이웃)를 찾아서 이웃들 사이의 적절한 값으로 대체하는 방식이다. 이러한 방식으로 여러 변수의 상관관계를 반영할 수 있다. 또한 데이터의 분포 가정을 요구하지 않는다. 비모수적인 기법으로, 데이터가 특정 분포(정규분포 등)를 따른다는 가정을 할 필요가 없다. 그러나 데이터의 크기(스케일)이 너무 크면 거리를 계산할 때 특정 변수만을 과하게 반영할 수 있기 때문에 적절한 스케일링을 적용할 필요가 있다.
KNN은 수치형, 범주형 데이터 두 가지 모두 적용된다는 장점이 있다. 또한 변수 간의 상관관계를 활용하여 결측값을 예측하기에 실제값과 유사한 값으로 대체할 수 있다. 그러나 데이터가 많거나 차원이 높으면 계산 비용이 높아지고, 예측 오류가 발생할 수 있다. 또한 이웃의 개수를 정해주어야한다. 임의로 값을 정할 수 있기 때문에 이웃의 개수와 거리 측정 방법에 따라 결과가 민감하게 변한다.
다음은 KNN의 예제 코드이다.
import numpy as np
import pandas as pd
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=3)
train_x = pd.DataFrame(imputer.fit_transform(train_x), columns=train_x.columns)
KNN의 주요 파라미터
- n_neighbors(k값) : 이웃의 수를 정하는 매개변수이다. 기본값은 5이다. k값이 작으면 노이즈의 영향을 받을 수 있게 되고, 크면 전역적인 패턴을 반영하게 된다.
- weight : 이웃의 가중치 여부를 결정한다. 'uniform'은 모든 이웃에게 동일한 가중치를 적용하고, 'distance'는 거리에 따라 가중치를 적용한다. 가까울수록 더 높은 가중치를 적용한다.
- metric : 거리 측정 방식을 결정한다. 'manhattan', 'euclidean', 'minkowski' 방식이 있다.
적용하기에 좋은 상황
KNN은 주변의 데이터를 반영하기에 결측치가 데이터 전반에 걸쳐 무작위로 발생할 경우 적용하기에 좋다. 또한 데이터 패턴 반영하여 예측하기 때문에 평균값이나 최빈값으로 단순 대체하는 방식보다 품질을 높일 수 있다.
'머신러닝 > EDA' 카테고리의 다른 글
| [EDA] DBSCAN 기법 (4) | 2024.12.24 |
|---|---|
| [EDA] Z-score (6) | 2024.12.24 |
| [EDA] IQR(Interquartile Range, 사분범위) (3) | 2024.12.23 |
| [EDA] 결측치 예측 기반 탐색(Predictive Imputation) - IterativeImputer (4) | 2024.12.22 |
| [EDA] 결측치 대체 (5) | 2024.12.22 |