인프런 커뮤니티 질문&답변
rmsle 평가할 때, 음수값 포함
해결된 질문
작성
·
126
·
수정됨
0
print('rmsle: ', mean_squared_log_error(y_val, pred)) - 이 코드를 실행할 때, 해당 오류가 나옵니다. 
 Mean Squared Logarithmic Error cannot be used when targets contain negative values.
 궁금한 것이, 회귀모델을 사용할 때 pred에서 음수값이 나오면 어떻게 처리하면 되는지 궁금합니다. 사실 y_tr 통계값에서 min값이 0이기 때문에 예측 모델에서 음수값이 나오면 안된다고 생각하는데 혹시나 나오게 되면 어떤식으로 전처리를 해야하는지 궁금합니다.
- 또한 선생님이 실행하신 랜덤포레스트 모델에서 r2_score가 0.77정도 나오는데 저는 같은 과정으로 해도 0.24정도 나와 차이가 큽니다.. 완전히 같을 순 없지만 비슷해야한다고 생각하는데 너무 차이가 나서 저의 코드가 잘못되어 그런것일지 궁금합니다. 
답변 2
0
- 음수값이 일부라면 처리하지 않아도 됩니다. 후 처리하다가 다른 것을 건들까봐 조심스럽습니다. - rmlse는 로그 때문에 저런 워닝이 나올 수도 있어요 
 
- 차이가 너무 큰것 같은데 제코드와 작성한코드가 다른가요? 제가 작성한 코드 복사 붙여넣기 해도 0.24인지 확인 부탁드려요 
0
안녕하세요, 인프런 AI 인턴입니다. 어리둥절님.
RMSLE(Root Mean Squared Logarithmic Error) 지표는 데이터에 음수가 포함될 경우 사용하기 어려운 점이 있습니다. 사실, RMSLE를 사용하기 위해서는 모든 타겟 값이 양수여야 합니다. 그 이유는 로그 함수를 적용할 때, 음수나 0이 들어가게 되면 수학적으로 정의되지 않거나 오류가 발생할 수 있기 때문입니다.
- 예측값에서 음수 처리 방법: 회귀 모델의 예측치에서 음수가 발생하는 경우, 다음과 같은 방법을 고려해볼 수 있습니다. - 예측값을 절대값 함수 또는 정수로 변경: pred = np.clip(pred, a_min=0, a_max=None)같은 방법으로 음수값을 0 이상으로 제한할 수 있습니다.
 
- 데이터 스케일링: 모델 학습 전, 타켓 값에 일정한 스케일(예: MinMaxScaler)을 제공해 자동으로 음수값이 나오지 않도록 하는 것도 방법입니다.
 
 
- 예측값을 절대값 함수 또는 정수로 변경: 
- 예측 성능 차이: 선생님이 수행하신 예제에서 - r2_score가 더 높게 나오는데, 같은 데이터와 파라미터를 사용해도 차이가 클 수 있는 이유는 여러 가지가 있습니다.- 데이터셋의 샘플링 차이: 랜덤으로 데이터를 분리하는 과정에서 차이가 발생할 수 있으며, 혹시 환경 변수로 인해 난수가 달리 적용될 수도 있습니다.
 
- 모델의 하이퍼파라미터 차이: 미세한 하이퍼파라미터 차이로 인해 성능에 차이가 날 수 있습니다.
 
- 전처리의 차이: 데이터 전처리 과정의 미세한 차이로 인해 결과에 차이가 날 수 있습니다.
 
 
- 데이터셋의 샘플링 차이: 랜덤으로 데이터를 분리하는 과정에서 차이가 발생할 수 있으며, 혹시 환경 변수로 인해 난수가 달리 적용될 수도 있습니다.
이에 대해 유사한 상황을 다룬 해결 방안을 담은 게시물을 추천드립니다:
- “RMSLE 사용 시 음수값 발생 문제와 해결 방법”: RMSLE를 사용할 때 음수값이 발견될 땐 어떻게 처리해야 하는지와 모델 평가차의 차이를 줄이는 방법에 대해 논의하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





