작성
·
20
0
안녕하세요.
3-4 이진분류 모델링 실습 .ipynb 파일에서 궁금증이 생겨 질문 드립니다.
이직 여부 예측 분류 문제에서 직원 샘플에 대해 여러 가지 종류의 feature가 있는 것을 알 수 있습니다.
이 feature 중에는 숫자형 데이터도 존재하고, 범주형 데이터, 문자형 데이터(drop해서 삭제)도 존재합니다.
숫자형 데이터 같은 경우에는 그대로 모델링에 사용해도 되지만, 범주형 데이터 같은 경우에는
숫자 1 ~ 5 혹은 1 ~ 4 형태이긴 하지만 해당 숫자가 연속성을 가진 숫자가 아니고,
특정 의미(Bad, Good 등)를 가지는 범주를 나타내는 형태로 의미가 파악이 됩니다.
그렇기에 해당 데이터들에는 원핫 인코딩을 해야 할 것이라고 생각이 되는데, 이러한 생각이
맞는지 여쭈어 보고 싶습니다.
더불어 문자 데이터 feature는 삭제하고, 범주형 데이터는 원핫 인코딩을 하고, 숫자형 데이터는
그대로 이용해서 모델을 학습하고 예측을 한 결과,
이직 여부에서 Yes(1.0)인 경우에서의 정밀도와 재현율이 상당히 낮게 나오는 것을 확인할 수 있었습니다.
그래서 혹시 Yes(1.0)이 200개, No(0.0)이 1050개로 차이가 나서 이런 결과가 나온 것인가 싶어 훈련, 평가 데이터 분류에서 stratify=y를 하였는데도 결과는 크게 달라지지 않았습니다.
이에 대해서도 선생님께 여쭈어 보고 싶습니다.
읽어주셔서 감사합니다.
답변 2
0
안녕하세요? 질문 올려 주셨군요.^^
범주형 변수에 대해서
말씀하신대로, 범주형은 일반적으로 원핫 인코딩(가변수화)를 수행한 후 모델링 합니다.
범주형인데, 순서형인 경우, 숫자의 간격이 등간격 의미로 이해하고 숫자로 모델링을 시도하기도 합니다. 만약 만족도가 1이 매우 불만, 5가 매우 만족일 때, 1,2,3,4,5의 간격이 숫자로써도 의미가 있다면 숫자로 두고 모델링 시도해볼 수 있습니다.
이진 분류 문제인데, 두 클래스간 불균형 문제가 존재합니다.
클래스가 불균형 일때, 모델은 대체로 다수이 클래스를 더 많이 예측하려는 경향이 있습니다.
stratify=y 옵션은 전체 데이터에서 0과 1의 비율을 유지하면서 데이터를 분할하는 방법입니다. 예를 들어 전체 데이터에서 0 : 1 = 0.8 : 0.2 라면, 데이터 분할할때, train과 val에서도 0 : 1 = 0.8 : 0.2 을 유지하도록 해주는 옵션입니다.
클래스가 불균형일 때 해결하는 몇가지 방법이 있습니다.
데이터의 클래스 불균형을 해소하기 : resampling 기법들 - down sampling, up sampling
좀더 쉬운 방법 - 예측 후, 결과를 0.5 기준이 아닌, 다른 기준으로 조절하기
다만, 위 두가지 방법은 모델의 전체 성능을 높이기 위한 것이 아니라, 이직(1) 클래스의 성능을 높이기 위한 방법입니다. 이렇게 하면, 잔류(0) 클래스의 성능은 좀 떨어지게 됩니다. trade-off 관계이지요.
이처럼 클래스가 불균형이 극심한 경우의 문제를 이상탐지 문제라고 부르고 이를 해결하기 위한 별도의 모델링 기법들이 있습니다.
답변이 되셨기를 바랍니다. 또 궁금한점 있으면 질문 올려주세요.^^
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 맛동산님!
질문해주신 이진분류 모델링 실습에서의 피처 처리 방식은 매우 중요한 부분입니다.
범주형 데이터의 원핫 인코딩: 범주형 데이터가 숫자로 표현되어 있더라도, 해당 숫자가 연속적이지 않으면 원핫 인코딩을 통해 각각의 범주를 개별적인 피처로 변환해야 합니다. 이는 각 카테고리를 독립적인 변수로 다뤄 모델이 범주 간 순서를 인식하지 않도록 하기 위함입니다.
클래스 불균형: 이직 여부 예측에서 Yes와 No의 비율이 크게 차이나면, 특히 ‘Yes’ 클래스의 샘플 수가 적어 모델이 편향되기 쉽습니다. 이 경우, 데이터의 클래스 균형을 맞추거나, 클래스 불균형에 강한 평가 척도를 활용하는 방법이 있습니다. 예로, SMOTE와 같은 오버샘플링 기법을 사용할 수 있습니다.
모델의 성능 개선: 정밀도와 재현율의 개선이 필요한 경우, 다음과 같은 방법을 고려해볼 수 있습니다:
유사한 질문 및 해결 방법 관련 참고 링크:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.