인프런 커뮤니티 질문&답변

어리둥절님의 프로필 이미지
어리둥절

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

작업형2 모의문제2

rmsle 평가할 때, 음수값 포함

해결된 질문

작성

·

23

·

수정됨

0

print('rmsle: ', mean_squared_log_error(y_val, pred)) 

  1. 이 코드를 실행할 때, 해당 오류가 나옵니다.
    Mean Squared Logarithmic Error cannot be used when targets contain negative values.

    궁금한 것이, 회귀모델을 사용할 때 pred에서 음수값이 나오면 어떻게 처리하면 되는지 궁금합니다. 사실 y_tr 통계값에서 min값이 0이기 때문에 예측 모델에서 음수값이 나오면 안된다고 생각하는데 혹시나 나오게 되면 어떤식으로 전처리를 해야하는지 궁금합니다.

 

  1. 또한 선생님이 실행하신 랜덤포레스트 모델에서 r2_score가 0.77정도 나오는데 저는 같은 과정으로 해도 0.24정도 나와 차이가 큽니다.. 완전히 같을 순 없지만 비슷해야한다고 생각하는데 너무 차이가 나서 저의 코드가 잘못되어 그런것일지 궁금합니다.

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

  1. 음수값이 일부라면 처리하지 않아도 됩니다. 후 처리하다가 다른 것을 건들까봐 조심스럽습니다.

    1. rmlse는 로그 때문에 저런 워닝이 나올 수도 있어요

  2. 차이가 너무 큰것 같은데 제코드와 작성한코드가 다른가요? 제가 작성한 코드 복사 붙여넣기 해도 0.24인지 확인 부탁드려요

     

0

안녕하세요, 인프런 AI 인턴입니다. 어리둥절님.

RMSLE(Root Mean Squared Logarithmic Error) 지표는 데이터에 음수가 포함될 경우 사용하기 어려운 점이 있습니다. 사실, RMSLE를 사용하기 위해서는 모든 타겟 값이 양수여야 합니다. 그 이유는 로그 함수를 적용할 때, 음수나 0이 들어가게 되면 수학적으로 정의되지 않거나 오류가 발생할 수 있기 때문입니다.

  1. 예측값에서 음수 처리 방법: 회귀 모델의 예측치에서 음수가 발생하는 경우, 다음과 같은 방법을 고려해볼 수 있습니다.

    • 예측값을 절대값 함수 또는 정수로 변경: pred = np.clip(pred, a_min=0, a_max=None) 같은 방법으로 음수값을 0 이상으로 제한할 수 있습니다.
    • 데이터 스케일링: 모델 학습 전, 타켓 값에 일정한 스케일(예: MinMaxScaler)을 제공해 자동으로 음수값이 나오지 않도록 하는 것도 방법입니다.
  2. 예측 성능 차이: 선생님이 수행하신 예제에서 r2_score가 더 높게 나오는데, 같은 데이터와 파라미터를 사용해도 차이가 클 수 있는 이유는 여러 가지가 있습니다.

    • 데이터셋의 샘플링 차이: 랜덤으로 데이터를 분리하는 과정에서 차이가 발생할 수 있으며, 혹시 환경 변수로 인해 난수가 달리 적용될 수도 있습니다.
    • 모델의 하이퍼파라미터 차이: 미세한 하이퍼파라미터 차이로 인해 성능에 차이가 날 수 있습니다.
    • 전처리의 차이: 데이터 전처리 과정의 미세한 차이로 인해 결과에 차이가 날 수 있습니다.

이에 대해 유사한 상황을 다룬 해결 방안을 담은 게시물을 추천드립니다:
- “RMSLE 사용 시 음수값 발생 문제와 해결 방법”: RMSLE를 사용할 때 음수값이 발견될 땐 어떻게 처리해야 하는지와 모델 평가차의 차이를 줄이는 방법에 대해 논의하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

어리둥절님의 프로필 이미지
어리둥절

작성한 질문수

질문하기