Machine Learning: Missing Value에 대한 해결법
1. Drop Columns with Missing Values
데이터 전처리가 간단하다.
그러나 컬럼을 통째로 버리면 그만큼 모델이 사용할 정보가 적어드는 단점이 있다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
data = pd.DataFrame() | |
#data.isnull() 은 data의 각 value의 null여부를 담고있는 dataframe을 반환함. | |
#data.sum()은 각 row에서의 총합을 가진 series를 반환한다. | |
#data.any()는 각 row에서 하나라도 True를 가졌는지 여부를 가진 series를 반환한다. | |
#series에 대한 연산자 연산은 각 value에대한 연산을 수행한 결과를 series로 반환합니다. | |
#series의 인덱스로 series또는 list를 넣으면 인덱스로 구한 값들을 가진 series를 반환합니다. | |
missing_val_cols = [col for col in data.columns | |
if data[col].isnull().any()] | |
#axis=0 : row, axis=1 : column | |
data.drop(missing_val_cols, axis=1) |
2. Imputation
Missing Values를 다른 데이터로 채워 넣는다.
1번 방법보단 전처리가 복잡하지만 여전히 간단하다. 또한 해당 column이 가진 정보도 그대로 이용 가능하다. 그러나 임의로 채워넣은 데이터로인해 정보에 왜곡이 생기는 단점이 있다. 모델은 임의로 채워넣은 데이터와 아닌 데이터를 구분하지 못한다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
from sklearn.impute import SimpleImputer | |
data = pd.DataFrame() | |
imputer = SimpleImputer() | |
imputed_data = pd.DataFrame(imputer.fit_transform(data)) #imputed 된 dataframe, column이름도 index로 치환됨... | |
imputed_data.columns = data.columns #바뀐 column이름들 다시 넣어주기 |
3. An Extension To Imputation
Imputation과 함깨, Imputation여부를 나타내는 새 column을 생성한다.
새 column들은 각각 자신이 나타내는 column에서 어떤 row가 missing value를 가지고 있는지 나타낸다. 이는 Model이 임의로 채워진 데이터들과 원본 데이터를 구분할 수 있게 한다. 즉 정보의 왜곡이 없다.
댓글
댓글 쓰기