강의

멘토링

커뮤니티

Inflearn Community Q&A

ubb58550's profile image
ubb58550

asked

[Revised Edition] The Complete Guide to Python Machine Learning

이상치 제거에 대한 질문입니다.

Written on

·

769

0

안녕하세요.

서적과 병행하며 강의 듣고 있는데 이상치 제거와 관련하여 질문이 있어 글을 남깁니다.

1. 서적의 p.269에 보면 이상치 제거를 할 때 fraud(Class  1)의 이상치만 제거하셨는데 이유가 있는지 궁금합니다.

2. 이상치를  제거할 때 적정 숫자가 있는지 궁금합니다.

처음에는 상관관계 히트맵에서 음의 상관관계가 높은 피쳐 하나만 선택하여 그 피쳐 내 이상치만 제거하였는데 생각보다 성능 개선이 되질 않아 다른 열의 이상치들도 다 제거하였습니다.

데이터 shape: 제거 전:(641329, 18) -> 제거 후(600012, 18)

그 결과 accuracy는 5%정도 올라갔습니다.  그런데 이상치를 너무 많이 제거한 거 같아서.. 이렇게 해도 되는지 궁금합니다.

3. 그리고

               precision    recall  f1-score   support

     class 0       0.80      1.00      0.89     95699
     class 1       0.00      0.00      0.00     24304

    accuracy                           0.80    120003
   macro avg       0.40      0.50      0.44    120003
weighted avg       0.64      0.80      0.71    120003

Accuracy: 79.75%

3. 그리고 이상치 제거 후 위의 결과와 같이 class 1에 대한 정밀도나, 재현율이 0으로 떨어졌습니다;


물론 이상치 제거 전의 성능도 좋지 않아서...(아래의 표는 이상치 제거 전 성능입니다.)
              precision    recall  f1-score   support

     class 0       0.75      1.00      0.86     96071
     class 1       0.46      0.00      0.01     32195

    accuracy                           0.75    128266
   macro avg       0.61      0.50      0.43    128266
weighted avg       0.68      0.75      0.64    128266

Accuracy: 74.88%

3. 이런 상황에서 성능개선을 위한 방법 중 참고할만한 것이 있는지 궁금합니다.

감사합니다.
python머신러닝 배워볼래요? 통계

Answer 1

0

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

안녕하십니까,

0. 이상치 제거는 과유불급이 되지 않도록 유의가 필요합니다. 이상치를 제거하면 할 수록 성능이 좋아질 수 있습니다. 이 때문에 자꾸 이상치의 범위를 조절해가면서 성능을 좋게하려는 시도를 할 수 있습니다. 하지만 유의해야할 사항은 이상치 역시 현실에서 발생 가능한 데이터라는 것입니다.  현실에서 발생가능할 확률이 희박하거나 오류에 가까운 데이터 정도를 일반적으로 이상치로 제거해주면 좋습니다.

그렇지 않고 학습데이터/테스트 데이터의 일반적인 범위에서 벗어난다고 무조건 제거해 버리면 해당 테스트 데이터에서는 좋을지 몰라도 다른 테스트 데이터에서는 성능이 오히려 떨어질 수 있습니다.

1. class=1 인 경우에 대해서 정밀도/정확도 부분의 성능 영향을 좀더 강조하기 위해서 1인 경우만 삭제했습니다. 0 인 경우 이상치 삭제를 하셔도 무방하지만, 위에서 언급드린 대로 현실에서 발생가능할 확률이 희박하거나 오류에 가까운 데이터 정도를 이상치로 제거해줄수 있도록 범위를 한정하는게 좋습니다.

2. 위에서 언급드린 대로 현실에서 발생가능할 확률이 희박하거나 오류에 가까운 데이터 정도를 이상치로 제거해줄수 있도록 범위를 한정하는게 좋습니다.

그리고 어떻게 데이터 가공을 하셨는지 모르겠지만 데이터 shape: 제거 전:(641329, 18) -> 제거 후(600012, 18) 입니다. 이게 책에서 예제로 제공한 creditcard 데이터 세트인지 의심이 드는군요. creditcard 데이터세트는 shape이 (284807, 31) 입니다.

만일 아니라고 한다면 거의 4만개 이상의 데이터를 삭제하셨습니다. 이것은 이상치 제거라기 보기에는 어렵고 인위적으로 성능을 향상시키기 위해서 예외가 될만한 데이터를 다 삭제했다고 볼 수 있습니다. 테스트 데이터가 고정된 경우 이처럼 예외 데이터를 삭제해 가면서 성능을 높이고자 하는 유혹을 받을 수 있습니다만, 이런 경우는 바람직한 모델 생성 방법이 아닙니다.

그리고 정확도 accuracy는 불균일한 데이터 세트(0이 많고 1이 극도로 적은)에서는 적합한 평가 지표가 아닙니다. accuracy 보다는  precision/recall에 더 유의하실 필요가 있습니다.

3. 이상치 제거후 recall이 0 이 되었다는 것은 학습에 필요한 데이터를 잘못 삭제하였기 때문으로 추정됩니다. 그리고 원래 데이터 세트(책의 creditcard 데이터 세트가 아닌것 같습니다)에 성능이 안나오는것은 어떤 모델을 어떻게 만들었는지 기반 설명이 없기 때문에 뭐라 말씀드릴 수가 없습니다. 좀 더 자세한 설명 부탁드립니다.

감사합니다.


ubb58550's profile image
ubb58550

asked

Ask a question