본문 바로가기

D.S/ML&DL

220121금 - 종속변수 변환에 따른 오차 차이 관찰#1

728x90

 

 

house price 데이터를 RL로 예측하는 분석을 해보고 있는데. 전처리를 참조하는 데이터와 비슷하게 했음에도 불구하고 오차 차이가 0.6정도가 난다. 왜죠??

 

처음에는 내 나름대로 전처리를 했으나 나중에는 하나하나 내가 다르게 했던 것들을 비교하며 바꾸었다. get_dummies()를 사용한 원핫인코딩 부분에서 0.1정도 줄이고는 도저히 안 줄여서 정말 한줄한줄 비교했는데...

결정적으로 오차의 차이가 확 준건 종속변수인 SalePrice 변환때문이었다.

 

 

log1p와 boxcox1p 의 오차율 차이의 원인?

 

처음에 SalePrice를 boxcox1p를 사용해서 변환했다. 그리고 그 밑은 log1p를 사용해 바꾼 것. skew 정도가 바뀌어서 평균이 오른쪽으로 이동했는데 큰 차이점은 값의 범위이다.

log1p의 SalePrice 값의 범위가 boxcox1p보다 훨씬 작다.

 

  • boxcox1p같은 경우 SalePrice범위가 25 ~ 45 사이이고
  • log1p에서는 10.5 ~ 13.5

 

boxcox1p로 줄였을 때 오차율 → 대부분의 모델이 0.68*

log1p로 줄였을 때 오차율 → 대부분의 모델이 0.11*

 

 

 

log1p + 정규화의 오차율

그럼 log1p → 정규화를 해줘서 값의 범위를 좌로 이동하면 오차율이 줄까?

  • boxcox1p같은 경우 값의 범위가 25 ~ 45 사이이고
  • log1p는 10.5 ~ 13.5
  • log1p + 정규화는 -4 ~ 4

 

 

결론은..그렇지 않음;;

log1p만 했을 때 오차률이 0.11* 이었고

정규화까지 하니 오차율이 0.28*이 나왔다.

 

그래서 그냥 log1p(y)를 좌로 이동해서 중심을 0으로 가져다 놓아봤는데 오차율엔 영향을 전혀 안 미친다.

  • (ex. log1p(y) -12.0 같이 그래프를 이동만 시켜서 다른 값의 범위에 놓음)

 

 

왜인것일까.? 다른 차이를 찾다가 범위의 위치보다 범위의 폭 차이가 나는 것을 확인했다.

 

데이터가 퍼져있는 범위가 가장 작은 log1p가 가장 잘 나왔다.

즉, 데이터가 밀집되어 있도록 (분산이 작게) 변환했을 때 가장 잘 나온 것..

직관적으로 생각했을 때 종속변수값들이 분포가 한 곳에 모여있으면 회귀모형과의 오차가 적어지는 게 맞는 것 같다.

 

그래서 log1p를 한 후 log1p를 더 해줬다. 분산은 더욱 작아졌음. 그럼 오차는 더 줄어들겠지?

 

 

더 줄어서 0.015* ...

 

그럼 이제 이런 의문이 생기네. 계속 log1p를 취해서(극단적으로 무한히?) 분산을 엄청 작게 만들어서 오차율을 엄청 줄인 모델이 정확도가 높을까? 궁금해서 각 다른 오차율로 만든 파일로 서브미션을 제출했다.

결론적으로 사실 점수가 크게 차이가 없었다. → 0.12*

 

log처리가 데이터 분산을 줄여서 회귀 오차율을 줄이긴 하지만 그렇다고 해서 그게 예측률을 올린다는 보장은 없다고 보이는.. log처리가 종속변수 분산을 줄여 회귀를 더 잘 할 수 있게 도와주는 주지만 그게 예측을 도와준다는 보장은 없다..라고 보인다.

 

오히려 feature 처리와 모델링 튜닝을 더 잘 해야 해야하지 않는가 생각이 드네.

하긴 저걸로 정확도가 올랐으면 사람들이 log1p만 엄청 적용해서 정확도를 올렸겠지..? -_-

 

 

 

 

 

반응형