작성
·
58
0
안녕하세요, 수업을 듣다가 fraud detection을 예시로 주셨던 범주형 데이터 속성중에 세트 자체에서 불균형이 큰 경우, 예를 들어 yes 는 1000 개고 no 가 5개 밖에 없는 극단적인 불균형이 있을 때는 모델의 정확도를 맞추기 어렵다고 설명주신 부분에 질문이 있어요.
저도 사실 제 프로젝트를 하던중에 비슷한 문제가 있었어서 SMOTE같은 방법을 써서 어떻게 해서든 불균형 문제를 완화해보려고 노력했는데 주어진 데이터 자체가 너무 불균형이 심하면 설명주셨던 것처럼 별다른 방법을 찾지 못했습니다. 만약 그럼에도 불구하고 그 데이터가 중요한 속성들과 데이터라면 어떻게 다루는 것이 좋을까요?
제가 예전에 했던 방법은 정확하게는 기억이 나지 않지만 그 그룹군을 아예 나누어 data frame을 따로 짜서 분석을 진행해보려고 했던 것 같아요. (예시: no = fraud 그룹군 df, yes = non_fraud 그룹군)
실질적으로는 보통 어떻게 접근하거나 해결하는 지 궁금합니다...!
답변 1
0
네 좋은 질문인 것 같아요. 실제로 데이터 불균형 (unbalanced data)관련해서는 job interview에서 전형적으로 물어보는 질문 중 하나입니다. 데이터의 특징에 따라 여러가지 방법을 적용해볼수있는데, 실무에서 가장 많이 사용하는 방법은 앙상블(ensemble) 기법입니다. XGBoost 를 많이 사용하는데, scale_pos_weight 같은 패러미터를 써서 weight조절이 가능합니다. 그 외에도 SMOTE 같은 방식(오버샘플링)이 있지만, 이 경우 새로운 데이터가 실제 데이터 분포를 충분히 반영하지 못할 수 있기 때문에 추가로 판단해야 되구요. 언더샘플링 방식도 있지만 말씀하신 것처럼 극단적인 불균형에는 어울리지 않아 보입니다. 이외에도 Isolation Forest, Autoencoder 방식 등이 있기도 합니다. 각각 데이터 특성에 따라 섞어서 쓰기도 하고, 모든 방식을 쓴 다음 performance를 비교해서 채택하기도 합니다. 좋은 질문입니다 소요요님!!