반응형

kaggle을 풀면서 초반에 해야하는 가장 중요한 행위중 하나라고 한다면, 결측값 처리가 그 중 하나가 될 수 있을 것 같다.

 

그러니 결측값이 있는지 확인하는 방법과 그것을 처리하는 방법에 대해서 타이타닉 데이터로 정리하고자 한다.

 

결측값이 있는지 확인하는 방법은 몇가지가 있다.

 

Part A. 결측값 확인

 

1. 가장 무난한 방법으로, isnull을 사용하여 총 개수의 합을 확인한다. (df_train은 pandas)

2. 시각화를 하고싶을때 주로 사용하는 방법이다.

 현재 모델의 경우 Age, Cabin, Embarked가 결측값이 존재하는 것으로 확인되었다.

 

Part B. 결측값 처리

1. 해당 feature제거, 혹은 해당 data제거

주로 feature 제거(세로 열 제거)는 해당 feature에 결측값이 너무 많아 필요없는 데이터일때

       data제거(가로 행 제거)는 몇개 없어서 버려도 될때 사용된다. 

 

new_df = df.drop(['Cabin'],axis=1) #세로 열 제거
new_df = df.drop(df[df['Embarked'].isnull()].index, axis=0) #가로 행 제거

 

2. 결측값을 새로운 값으로 치환하기

결측이라는 것조차 하나의 data라고 보고싶은 case일때는 새로운 값으로 바꾼다.(-1, N등)

또한 평균, 중앙값등으로 바꿀 수도 있다. 이는 나이와 같은 연속적인 값일때 주로 사용된다.

  #특정 값으로 바꾸기
  df['Embarked'] = df['Embarked'].fillna('N')
  # 컬럼의 평균으로 대체하기
  df['Age'] = df['Age'].fillna(df['Age'].mean())

3. 다른 feature로 부터 힌트를 받아와서 해결하기

이 방법은 다른 방법에 비해서 난이도가 높지만, 그만큼 성능 향상율이 높다.

 

예시를 들기에는 어렵지만, 주로 상관관계가 짙은 두 변수중 하나가 null값이 있을때, 그 상관관계를 통해 바꿔넣는다. 

(추후에 포스팅할 heatmap을 활용해보자)

 

ex) 타이타닉 문제의 경우, Age를 Name으로 추리하는 경우가 흔했다.

 

반응형

+ Recent posts