제주 특산물 가격 예측 AI 경진대회

대회가 끝난뒤 써보는 점수를 올리기 위해 했던 것들

2023.11.21 00:31 1,641 Views

대회가 끝난후 연습 데이터 추가 제출을 위한 복기... 한번 돌릴떄마다 기록으로 남겼어야했는데 안해놔서 기억이 가물가물하다.

사용모델: autogluon의 timeseriespredictor 사용


최초 모델

코드 공유 게시판에 있던 autogluon 모델을 그대로 사용.

시간/공급/가격만 놓고 preset 옵션은 default로 둠 => real score 693점

이후 삽질들

  1. 최초모델 + 옵션 중 num_val_window=3로 두고 과적합을 줄여보자 시도. train time이 매우 올라감. =>real score 702점
  2. 최초모델 + 품목,법인,지역을 더미화시켜 데이터 추가. =>692점
  3. 최초모델 + 품목,법인,지역을 더미화 + preset 옵션 best_quality. train time이 매우 올라감. => valid score 650 / real score 741
  4. 최초모델 + 품목,법인,지역을 더미화 + preset 옵션 best_quality. + num_val_window = 3  train time이 매우매우 올라감. => valid score 691 / real score 739
  5. 최초모델 + 품목,법인,지역을 더미화 + preset 옵션 high_quality.로변경 + international trade에서 감귤,양배추,브로콜리,당근 데이터 월평균값 열로 추가 =>real score 711 같은품목이니 당연히 영향을 줄거라 생각했지만, 지금생각해보니 무작정 넣기보단 plot을 그려보거나 cor값을 확인했어야했던것같다.
  6. 최초모델 + 품목,법인,지역을 더미화 + preset 옵션 high_quality + international trade데이터 + 년월일 더미화 추가 =>valid score 650 / real score 785



최초모델보다 점수가 좋아진건 딱 1건, 그나마도 1점..


특히 quality를 높여 모델을 추가 + 하이퍼파라미터 튜닝을 진행해도 오히려 점수는 안 좋아진다 ---- 과적합 문제인가?? 이유는 알수없음.


그래서 그냥 데이터를 추가하기보단 데이터를 만지기로 결정.


1.모델부터 재정의했다.

최초모델 + preset default + 품목, 법인, 지역 더미화 + 년월일 더미화 + 요일더미화 + 공휴일 더미화

=> 이걸 쓰기로 결정 왜? 그냥 trade는 별효과 없는것같아서 / preset은 quality를 높여도 시간만 쓰고 점수 향상에는 도움이 안되었다. 그래서 그냥 default로 둔다/  마찬가지로 window값도 시간 때문에 default / 추가적으로 요일과 공휴일 값을 더미화 시켰다.



2.plot을 먼저그려보기로 결정


감귤 너무나 명확한 추세가 보인다. 제일 잘 예측할거라 생각했는데

RMSE는 감귤이 제일 크다

Best model: WeightedEnsemble

Best model score: -1114.8294

ㄴpredict 후 valid RMSE값을 써놓은것








당근 2020년가격과 2022-2023년가격이 조금 이상한게 보인다.

희미한 빨간선은 나중에 이상치로 판단한 기준이 되는 가격 2600kg원

그리고 2023년부터 다른년도들과 다르게 평균가격이 확 오른게 보인다.

Best model: WeightedEnsemble

Best model score: -243.9298







걍 평균값 때려넣어도 괜찮겠다 싶을만큼 평안한 가격추세

빨간선은 이상치 기준이 되는 가격 1500kg원

Best model: WeightedEnsemble

Best model score: -665.4856









양배추

2019년을 제외하고는 가격추세가 잘 안보인다.

가격이 위아래로 요동치는게 보인다.

Best model: WeightedEnsemble

Best model score: -393.0219










브로콜리

추세가 보이느ㄴ..듯? 마는듯? 뭔가있는듯 한데 잘모르겠다

Best model: WeightedEnsemble

Best model score: -517.6120








plot을 통해 유의미한 정보를 뽑아낸것은? / boxplot도있는데 길어서 생략


무와 당근의 가격에서 2022년 하반기부터 어떤 문제가 발생해 가격이 어마어마하게 튀어 오르기시작했다. 는걸 알게되었다.

그중 당근은 2023년에 튀어오른 가격으로 평균값이 오른것이 확인되었다. => 어차피 2023년 3월 가격을 예측하는거니 오른 평균가격을 고려해야할것같다.

무는 가격이 올랐다가 다시 평년수준으로 되돌아왔다. => 다시 되돌아왔으니 2022년 하반기 가격튐은 명백한 이상치..라기보단 예측에 방해되는 요소다.


각 품종의 RMSE값 차이는 무의미하다...(or 크게 의미를 갖지않는다 정도로 해두자.)  왜? => 가격마다 편차정도가 다르니까. 예를들어 귤은 10000원정도의 편차, 다른 품종은 2000~4000정도 편차다 (대충 눈으로 본 편차다. 틀릴수있다.) 당연히 RMSE값도 품종에따라 크게 다를 수밖에 없다. => 그럼이걸 어떻게 해결할 수 있을까??? => 몰라


그럼 튄 값을 잡아 없애버리자! => 빨간선 위의 값들은 supply / price = 0으로 대체 , 나머지는? 모르겠다 눈으로봐선 아무리봐도모르겠다

야 근데  당근은 2023년 가격들의 평균값이 올랐잖아 고려안해? => 몰라 시간없어서 그냥 날렸다.

이상치로 날려버린뒤 제출 값 real score = 685.4314131979 ㅠㅠ 드디어 최초점수 693점보다 유의미하게 좋아졌다.



3.submission 제출된 값을 살펴보자


난 이때서야 알았는데 특정값들이 굉장히 작다는 것을 알게되었다.

빨간값들이 다른날과 안맞게 굉장히 낮다

알고보니 이런 날들이 일요일!

원래 데이터를 찾아보니 일요일마다 직판장이 쉬는지 supply / price = 0 이였다.


=>그래서 2023년 3월 중 일요일의 answer 값을 모두 0으로 대체 하였다.


점수 올리는데 꽤 큰 도움이 되었다.

위의 이상치처리 + 일요일 0값처리 후 제출값

real score = 673.2460327476


오예.. 최초점수 693점에서 20점이나 깎았다.








4. 이제 해봐야할 것들. =>시간이없어서 생각만하고 제출해보진못했다. 제출 횟수좀 늘려주지


  • 당근가격이 2023년부근에서 쭉 올라와있는것을 plot에서 확인했다.

   => 다른년도 당근 가격도 비슷하게 scaling up? 해서 학습 해보자


  • submission 값중에서 일요일이 아닌데 굉장히 낮은 값을 또 확인했다.

당근 가격이 kg당 2~10원이라니 말이되나? => 원래 데이터 확인 당근은 0인 값이 많다!(boxplot으로도 확인)









=> 비정상적으로 낮은 값들은 원래 데이터 확인 후 0으로 대체








예를들어 위의 CR_E_S  = 당근/E법인/S지역의 3월 데이터를 살펴보면


싹다 0임을 알 수 있다.

















autogluon은 자동으로 valid set 나눠서 검증한다. 어떻게 나눠서 검증하는지는 모르겠다. 시계열이니까 cross validation은 당연히 아닐것 같은데..

=>근데 어차피 우리가 예측해야하는건 3월4일 ~ 3월 31일 데이터니까. 이것만 잘 맞으면 되는거아냐?

=> autogluon에서 valid set을 내가 직접 만들어서 훈련하는 방법을 찾아보자.

=> 3월달 데이터(or 3월근처 데이터 ex) 2월~4월데이터 ))들만 모아서 학습해보면 어떨까? ->꼼수?같긴한데 잘될지 안될지는 모르는거니까


autogluon의 default 옵션말고 하이퍼파라미터를 직접 튜닝해서 예측해보고싶다! => preset에 best_quality 넣으면 하이퍼파라미터 튜닝도 해준다는데 시간만 잡아먹고 score만 더 구려진다

=> 내가 직접 설정해보자

=> 모델 별 하이퍼파라미터들의 set 설정

=> 2019년 1일1일 ~ 2020년 3월3일까지(train) 파라미터마다 fit 후 predict해서 실제값과 비교해서 RMSE값(valid) 구하기 , 22년까지 fit predict RMSE값 구하기... 반복

=>20년3월4일~31일, 21년3월4일~31일,22년3월4일~31일  RMSE값이 파라미터마다 나올거고 이 평균합?or 합이 가장 작은 파라미터가 최적이라고 생각!


해봐야할 거 결론:

  • 특출나게 다른 2023년 당근가격을 위해 2019~2022년 당근가격 scaling


  • 예측된 값에서 비정상적으로 낮은 answer 값 확인 및 교정


  • 년도별 3월달 or 2~4월 데이터만 모아서 학습


  • 직접 하이퍼파라미터 튜닝해보기



또 고려해볼만한게 있을까? 아직은 잘 모르겠다