작성
·
628
0
선생님 안녕하세요
머신러닝강의(2개)와 컴터비젼강의를 듣고 있는 회사원입니다 ㅎ
이번에 머신러닝강의중 타겟값(5개, 정수형태)의 로그변환에 대해서 조언을 받고싶어서 질문을 드립니다 ㅎ
바쁘시겟지만 조언 좀 부탁드리겟습니다
선생님 강의내용대로 예를들어, 아래와같은 5개타겟값(양수값)이 있을때, 이를 로그변환한 후 이값을 머신러닝으로 예측해서
로그값끼리 단순오차를 비교하면 평균오차2%대, 최대오차 4%대로 아주 좋은 결과가 나옵니다 ㅎ
근데. 로그를 벗기고 실제값(양수값)과 예측값(양수값)로 비교하면 평균오차는 4%대, 최대오차는 13%대로 최대오차에서 로그값과 비교하면 3배이상이 차이가 납니다ㅎ
여기서 조언을 듣고싶은것이, 실제값(양수형태)과 예측값(양수형태)의 비교에서 최대오차 혹은 평균오차를 더 작게 할수 잇는 방법이 있는지요?
예를들어, 최대오차가 크게 발생하는 실제값을 알아보고, 그값의 예측값에 가중치를 부여한다던지....
혹시 가능하시다면 코드도 넣어서 답변 부탁드리겠습니다 ㅎ
바쁘시겟지만 부탁드리겠습니다 ㅎ
-----------------------------------------------------------
##<참고>
예를들어, 타겟값[1, 10, 100, 10000, 100000]일때
##<로그값끼리 5개값의 단순오차비교하면> abs(log(y)-log(y_pred))/log(y)*100
5개평균오차 : 2%대
5개중 최대오차 : 4%대
##<로그를 벗기고, 실제값과 예측값비교하면> abs(y-y_pred))/y*100
5개평균오차 ; 4%대
5개중 최대오차 ; 13%대
바쁘시겟지만, 시간나실때 답변 부탁드리겠습니다 ㅎ
답변 1
0
안녕하십니까,
보통 타겟값에 로그 변환을 취하는 이유는 타겟값의 분포가 롱테일(long tail)형태로 불균일할 때 많이 사용합니다. 즉 회귀예측에서 타겟값이 평균값보다 아주 높은 값들이 일정 수준 존재할 때 이들에 대한 영향도를 모델에서 줄이기 위해 사용합니다.
따라서 학습 모델을 로그 변환된 타겟값으로 학습을 시키고, 이렇게 학습된 모델을 기반으로 예측을 한 다음에 (이때 예측된 값은 로그가 적용된 값) 이 예측값을 지수변환하여 최종 예측값을 얻는 방식입니다.
질문하신...
로그값끼리 단순오차를 비교하면 평균오차2%대, 최대오차 4%대로 아주 좋은 결과가 나옵니다 ㅎ
=> 로그 변환된 타겟값은 보다 정규 분포에 가까운 형태가 되므로 이건 당연히 오차의 평균과 분산이 좋을 수 밖에 없기에 이 결과로 기준으로 해서 비교 하시면 안됩니다.
로그 변환을 하여 하여 모델을 학습 시키는 이유는 학습 모델의 예측값이 좀더 표준 정규 분포 형태에 가깝게 모델을 유도하는 방식이지만 그렇다고 예측된 값이 로그 변환된 값 자체 정도의 정규 분포 형태를 기대하기는 어렵습니다. 때문에 최대 오차등을 더 줄이는 방식은 앞에도 말씀드린 대로 로그 변환하여 학습 모델을 만든후 예측값을 다시 지수 변환하는 방식과 같은 방법을 적용하는 외에는 별다른 방식을 추천해 드리기는 어려울 것 같습니다.
다만 예측 오류가 너무 크게 나는 데이터의 경우, 학습 데이터 또는 예측 데이터가 현실에서는 잘 발생하지 않는 불필요한 데이터가 섞여있는지등을 판단해 보시거나..(이 경우 해당 데이터는 학습이나 예측에서 제외를 한다거나)
제일 좋은 방식은 좀 더 다양한 피처 엔지니어링 방식을 적용해 보는것이 좋을 것 같습니다. 다양한 피처 엔지니어링은 본 강의에서 많은 시간을 들여서 설명 드리고 있으니 강의를 들으시면 적절한 방식을 적용해 보실 수 있을 것입니다.
감사합니다.
선생님 답변감사합니다 ㅎ
강의내용 다시한번 살펴보겟습니다 ㅎ