결측치 처리는 데이터 전처리에서 중요한 부분 중 하나로, 누락된 값에 대한 효과적인 대응이 모델의 성능에 직접적으로 영향을 미칩니다. 이 블로그에서는 결측치의 종류, 처리 방법, 대표적인 결측치 처리 기법, 그리고 각각의 장단점에 대해 자세히 다루어보겠습니다.
완전 무작위 결측은 누락된 값이 완전히 무작위로 발생하는 경우를 나타냅니다. 이는 다른 변수나 레코드와 아무런 관련이 없이 발생하는 결측치를 의미합니다. 주사위를 던진다고 생각할 수 있으며, 이 경우에는 결측치를 무시하고 삭제하는 것이 합리적일 수 있습니다.
무작위 결측은 다른 변수의 값에 의해 결측이 발생하는 경우를 말합니다. 즉, 다른 변수의 값에 따라 결측이 발생할 확률이 달라지는 상황입니다. 예를 들어, 남성이 질병 관련 질문에 답하지 않을 확률이 여성보다 높다면 해당 결측치는 무작위 결측으로 간주될 수 있습니다.
비무작위 결측은 결측이 발생한 값 자체가 결측 여부에 영향을 미치는 경우를 나타냅니다. 이는 대부분의 통계 기법에서 다루기 어려운 경우로, 결측된 값을 예측하는 데 도메인 지식과 추가적인 모델링이 필요한 상황입니다. 예를 들어, 소득 수준이 높은 사람들이 소득을 공개할 가능성이 낮을 경우 해당 소득 데이터는 비무작위 결측으로 간주될 수 있습니다.
결측치 처리는 데이터의 특성과 결측치 발생의 상황에 따라 다양한 방법을 활용할 수 있습니다. 각 방법의 특성과 적합한 상황을 고려하여 선택해야 합니다.
가장 간단한 결측치 처리 방법 중 하나로, 결측치를 포함하는 행이나 열을 제거하는 것입니다.
# 결측치가 있는 행 제거
df.dropna(axis=0, inplace=True)
# 결측치가 있는 열 제거
df.dropna(axis=1, inplace=True)
· 간단하고 빠르게 적용 가능
· 다른 데이터에 영향을 덜 미침
· 정보 손실이 크고, 데이터가 크게 줄어들 수 있음
· MCAR 상황에서만 적용 가능
결측치를 다른 값으로 대체하는 방법으로, 대체는 다양한 기법을 포함합니다.
# 평균 대체
mean_value = df['column_name'].mean()
df['column_name'].fillna(mean_value, inplace=True)
· 간단하고 빠르게 적용 가능
· 이상치에 민감
# 중앙값 대체
median_value = df['column_name'].median()
df['column_name'].fillna(median_value, inplace=True)
· 이상치에 덜 민감
· 데이터가 대칭적인 분포를 가진 경우에 유용
# 최빈값 대체
mode_value = df['column_name'].mode()[0]
df['column_name'].fillna(mode_value, inplace=True)
· 범주형 변수에 적용 가능
· 연속형 변수에는 사용이 제한적
from sklearn.linear_model import LinearRegression
# 회귀 대체
known_data = df.dropna(subset=['column_name_with_missing'])
unknown_data = df[df['column_name_with_missing'].isnull()]
X = known_data.drop(['column_name_with_missing'], axis=1)
y = known_data['column_name_with_missing']
model = LinearRegression()
model.fit(X, y)
predicted_values = model.predict(unknown_data.drop(['column_name_with_missing'], axis=1))
unknown_data['column_name_with_missing'] = predicted_values
# 원래 데이터프레임에 결측치 대체
df.update(unknown_data)
· 다른 변수들의 정보를 활용하여 정교한 대체 가능
· 회귀 모델의 가정이 충족되어야 함
· 계산 비용이 큼
결측치 처리는 데이터의 특성과 결측치 발생 원인에 따라 다양한 기법을 활용해야 합니다. 다음은 각 결측치 처리 기법을 선택할 때 고려해야 할 세부사항입니다.
· 평균 대체 : 변수가 정규 분포를 따르는 경우에 유용합니다. 이 때는 평균값을 사용하여 결측치를 대체합니다.
· 회귀 대체 : 다른 연속형 변수와의 관계를 고려하여 결측치를 예측하는 회귀 모델을 활용할 수 있습니다.
· 중앙값 대체 : 변수가 대칭적이거나 이상치가 존재하는 경우에 중앙값을 사용하여 결측치를 대체합니다.
· 최빈값 대체 : 범주형 변수에서 가장 빈번하게 나타나는 값을 사용하여 결측치를 대체합니다.
· 중앙값 대체 : 평균 대체는 이상치에 민감할 수 있으므로, 중앙값 대체를 고려합니다.
· 회귀 대체 : 변수 간 관계가 중요한 경우, 회귀 대체를 사용하여 다른 변수들의 정보를 활용해 결측치를 예측합니다.
· 평균 대체, 회귀 대체 등 : 다른 변수를 기반으로 결측치를 예측하는 방법들이 효과적일 수 있습니다.
· 패턴에 따른 전략 : 특정 패턴이 있는 경우, 해당 패턴을 파악하고 그에 따른 전략을 수립하여 결측치를 처리합니다.
결측치 처리는 데이터 전처리의 핵심 과정 중 하나로, 실제 데이터에서 발생하는 결측치를 효과적으로 다루는 것은 모델의 정확성과 신뢰성을 높이는 데 중요합니다. 다양한 결측치 처리 기법을 활용하고 데이터의 특성에 맞게 선택하는 것이 필요합니다.
평균 대체, 중앙값 대체, 최빈값 대체와 같은 간단한 방법부터, 회귀 대체와 같이 보다 정교한 방법까지 다양한 전략이 존재합니다. 선택한 방법은 데이터의 분포, 변수 간 관계, 이상치 존재 여부 등을 고려하여 결정되어야 합니다.
더 나아가 결측치 처리는 모델의 입출력에 직접적으로 영향을 미치기 때문에, 신중하고 체계적인 전략 수립이 필수적입니다. 향후 프로젝트에서는 이러한 결측치 처리 기법을 적절히 활용하여 높은 품질의 데이터를 확보하고, 모델의 성능을 극대화하는 것이 중요합니다.