코딩/이슈

[pandas] 피쳐엔지니어링 주의: 더미코딩 순서

CDeo 2024. 10. 23. 23:34
아주아주 간단한건데, 너무 자주 까먹어서 메모겸 올립니다.

더미코딩을 사용하는 분류문제에서 종종 예기치 못한 차원 에러가 생깁니다. 예를들면 다음과 같습니다.

ValueError: shapes (1,1) and (3,) not aligned: 1 (dim 1) != 3 (dim 0)

 

데이터를 나눈 다음에 더미코딩을 하여 차원이 달라져 생긴 문제입니다. 특히 카테고리수가 많고, 심각한 약소 카테고리가 존재하여 나뉘어진 데이터셋에 해당 카테고리가 등장하지 않는 경우의 일입니다.

 

종종 어떤 문제들은 구조적으로 데이터 나누기를 먼저하도록 강제하기도 합니다. 예를들어,같은 모델을 사용하는데, 조건을 다르게하여 실험할 때에, 조건마다 데이터 나누는 방식이 달라질 때가 있습니다. 조건 1에서는 랜덤으로 나누고, 조건 2에서는 k곂 교차검증을 위한 나눔등 다양할 수 있습니다. 이 경우, 하나의 스크립트와 하나의 저장된 데이터 파일을 이용하여 args만 다르게 주면 실험이 가능하다는 실용성이 있습니다만, 조건문 내에서 split하는 바람에 코드가 길어지며, 그에따른 실수가 나올 수 있습니다.

 

이런 문제에 더하여 앞서 말씀드린 치명적인 오류를 방지하기 위해서라도, 차라리 데이터셋이 중복되어도  먼저 더미코딩을 하고, 여러 경우에 대한 데이터셋을 만들어 두고, 스크립트로 간단하게 불러만 오는것이 좋아보입니다. 물론 저의 경우 조건의 경우의 수가 많고, 모델자체는 그리 무겁지 않기 때문에 data preprocessing에서 비교적 시간을 잡아먹으며, 무엇보다 공간복잡도가 그리 크지 않은 문제라 나온 결론일 수 있습니다.

 

더 좋은 방법론이나, 결론이 있다면 알려주세요!

감사합니다:)

 

그림 참조

https://towardsdatascience.com/building-a-one-hot-encoding-layer-with-tensorflow-f907d686bf39

 

Building a One Hot Encoding Layer with Tensorflow

How to create a Custom Neural Network layer to One Hot Encode categorical input features in TensorFlow

towardsdatascience.com