[Project] 서울 전세가 예측(인코딩)
모델링에 들어가기 앞서 object 데이터에 대해 인코딩 처리를 해주어야 한다.
📌 인코딩
info를 찍어보면 object값이 자치구명, 건물명, 건물용도가 있는데
건물명은 브랜드아파트들을 구분하기 위해 살리고 싶었으나 데이터 결측치가 많은 관계로 drop 시켰다. (아쉬운 부분..)
인코딩 방법 중에 대표적으로 onehot, label 인코딩 방법이 있다.
이 중 label 인코딩을 할 경우 해당 컬럼의 데이터가 순서나 랭크가 없음에도 불구하고 인코딩을 함으로써 데이터가 왜곡될 수 있다.
(분류모델도 그런가 싶어 질문을 하니 결정트리 같은 경우에는 영향이 크게 안간다는 답변을 들을 수 있었다.)
또, onehot 인코딩은 카테고리 종류가 많을 경우 컬럼이 과하게 많아질 수 있으므로 범주화하는 방법도 고려할 수 있다.
현프로젝트의 경우 건물명, 건물용도는 순서, 랭크가 없으며, 카테고리가 많은 편은 아니기에 onehot 인코딩을 시켜주었다.
from sklearn.preprocessing import OneHotEncoder
oh = OneHotEncoder()
encoder = oh.fit_transform(df['자치구명'].values.reshape(-1,1)).toarray() # 인코딩 하기 전에 2차원 데이터로 변환
df_OneHot = pd.DataFrame(encoder, columns=["Gu_OneHot_Encoder_" + str(oh.categories_[0][i]) for i in range (len(oh.categories_[0]))])
df_merge = pd.concat([df, df_OneHot], axis=1)
df_merge
📌 계약일
계약일 컬럼은 20200810.0 과 같이 단순히 float로 인식되고 있는데
경제상황, 계절성에 따라 전세가에 영향을 끼칠 수 있기에 연도, 월을 구분해주었다.
df['계약일(년)'] = df['계약일'].astype(str).str[:4].astype(int)
df['계약일(월)'] = df['계약일'].astype(str).str[4:6].astype(int)
📌 로그변환(번외)
모델링 하기 전 데이터분포 그래프를 그려봤는데 너무 몰려있는 그림이 나와 로그 변환으로 해결해보려 했으나
결론적으로 크게 차이가 나지 않아서 포스팅 하지 않았다.
이에 대해서도 강사님께 질문을 한 결과 모든 데이터가 척척 딱맞긴 힘들다고... 그래서 다양한 방법을 사용해야 한다고 말씀하셨다.
데이터를 다루면서 어느정도 정답은 정해져 있을 거라고 생각했는데 또한번 생각을 바꾸게 된 계기(?)였던 것 같다.
그래서 다른 방법으로도 해결해보고 싶었는데 남은 프로젝트 기간 상 진행하지 못했던 게 아쉬워 이렇게 글이라도 남겨본다.