태양광 발전량 예측 AI 경진대회

알고리즘 | 정형 | 회귀 | 에너지ㅣPinball Loss

  • moneyIcon Prize : 600만원
  • 2,329명 마감

 

몇가지 분석 내용 공유

2020.12.27 01:16 6,852 Views

안녕하세요, 세아아부지입니다.


혼자 이것저것 시도한 것들과 의문인 것들을 공유합니다.





1. DNI, DHI보다는 GHI


대상이 "태양광" 발전인데요, DNI와 DHI를 합한 GHI가 있습니다.

단일 변수로 당일 발전량(TARGET)을 설명할 때 DNI, DHI보다 GHI가 설명력이 높습니다.

물론 모형에서도 GHI 파생변수들이 설명력이 좋구요.





2. lightgbm의 quantile objective와 pinball loss


모형적합과정에서 pinball loss를 어떻게 구현해야하나 고민을 했는데요, baseline예제에서처럼 lightgbm에서 objective를 'quantile'로 지정하면, metric도 역시 'quantile'로 지정되는데 이게 바로 pinball loss 더라구요.

그래서 lightgbm을 쓰면 평가지표의 설정에 대한 고민은 덜 수 있습니다.

대신 다른 알고리즘을 활용하기는 쉽지 않을 것 같습니다.





3. TARGET의 0.1, ... , 0.9 분위수의 의미



train 데이터와 test 데이터는 같을 수 밖에 없고, 실제 TARGET값도 하나일 겁니다.

그런데 "quantile"이라는 0.1, ... , 0.9 까지 9개 값을 예측해야하는, 직관적이지 않은 상황인데요.

다른 분이 이미 질문을 하셨더라구요. 어쨌든 설정된 답이 있고 맞추기만 하면 될 겁니다.



그런데, 그럼 주최측에서는 어떻게 답을 설정했을까?라는 고민이 뒤따르더라구요.

적당히 무난한 방법이 분포를 활용한 방법이 아닐까 생각합니다.

실제 TARGET값을 중심으로 표준편차 등의 특성으로 설명될 분포를 입혀서 9개 분위수를 만들지 않았을까 생각이 드네요.






4. 모형 적합 방향


test 81개 데이터 각각에 대한 0.1~0.9 분위수 예측값을 그린 그래프입니다.

(스코어 기준으로 1.98?)


등수와 상관없이 이쁜 예측 모형 결과를 만드려고 많은걸 고민했었는데요,

그래프가 이쁘게 나와서 만족했습니다.


물론 lightgbm의 quantile regression 활용했고 다양한 파생변수 만들었습니다.



그런데, 여기서 제가 뭘 했냐면, 그냥 0.1 분위수 예측값에 0.9 곱해서 좀 더 줄인다음 업로드해봤습니다.

스코어가 1.97로 줄어들더라구요.


0.1 분위수가 생각보다 작지 않게 예측이 되는 경향이 있는 것 같습니다.

이건 3.과 관련이 있을거라 생각하는데요, 지금 스코어를 계산할 때 쓰일 정답 quantile값들을 실제값이 아닙니다.

그럼 아무리 훌륭한 모형을 만들어도, 분포를 활용해서 만든 가상의 분위수를 설명하는건 한계가 생길 수 밖에 없습니다.





5. 약간의 고민


4.의 상황에서, 파생변수를 만들고 파라미터를 최적화하는 것보다 "정답 분위수 생성 방법"을 고민해서 방향을 설정하는 것이 나을 수 있겠다는 생각을 합니다.


A. 0.1 분위수를 계산할 때 alpha값을 꼭 0.1로 줘야할 필요가 있을까?

    (이미 앞에서 시도한 것처럼 0.09로 더 작게 주면 점수가 좋아질거니까요)


B. 꼭 quantile regression을 써야하나? 일반적인 regression을 해서 TARGET의 예측값(0.5 분위수로 가정)을 만들고,

    그 후 분포를 활용해서 나머지 8개 분위수를 추정해도 될 것 같은데?







시간을 많이 쓰면 안되는데 배우는 재미에 여러가지 시도를 하느라 푹 빠져있네요.


좋은 의견있으면 함께 공유해주세요:)





로그인이 필요합니다
0 / 1000
SDSTony
2020.12.27 04:36

3번 같은 경우 데이콘에서 올려준 pinball loss 공식을 보면 해당 sample의 ground truth(GT)값과 분위수 값별 loss를 구합니다. 분위수 값별 각기 다른 GT값은 없는걸로 알고 있습니다. 추정컨데, 1개의 GT값을 9번 사용하여 loss를 구하지 않을까 싶습니다. 

당쇠
2020.12.27 10:06

세아아부지님 

좋은 내용 공유 감사합니다. 

Statistics
2020.12.27 10:36

4. A.에서 말한 것처럼 모형의 quantile alpha값을 0.1, 0.2, ..., 0.9가 아니라 0.06, 0.17, ..., 0.94로 지정해서 좀 더 넒게 벌려줬더니
스코어가 1.98에서 1.965로 더 좋아졌습니다. 

train 데이터와 test 데이터의 특성이 동일하고, 정답 quantile 값이 실제 quantile과 비슷한 경향을 보인다면 이런일이 일어나는 건 쉽지 않죠.
pinball loss를 기준으로 적합한 quantile regression이면 저렇게 quantile alpha를 바꾸면 지표상으로는 더 안좋아져야하는것이 정상입니다.

물론... 제 모형이... 문제가 있거나 우연일수도 있구요ㅎㅎ

우왕여긴어디일까요
2020.12.27 17:16

quantile alpha값을 정해진 값이 아닌 근사치로 해도 가능했었군요... 좋은 정보 감사합니다.

고라파덕
2020.12.28 10:21

1번 관련해서 질문 좀 드리겠습니다.
단순히 DNI DHI 두 변수만 가지고 GHI를 계산 할 수 없는걸로 알고있습니다.
GHI = DHI +DNI*cos(Θ)로 알고 있고 Θ는 태양의 천정각으로 주어진 데이터 셋 만으로는 계산을 할 수 없는데요
GHI를 어떤 방식으로 유도해서 활용하셨는지 알 수 있을까요?

Statistics
2020.12.28 10:27

영업기밀인데...  등수도 높으시네요! 더 높이 올라가시라고 알려드립니다ㅎㅎ

결국 해는 동쪽에서 띄고 서쪽에서 지면 각도는 0~180도로 바뀌겠죠? 천정각은 90도를 빼면 되구요.

30분 단위지만 각 날짜별로 DHI DNI가 처음으로 0보다 클때를 해뜨는 시간, 마지막으로 0보다 클때를 해지는 시간으로 보고 대충 계산했습니다:)

고라파덕
2020.12.28 13:19

음...천정각 + 고도각 = 90으로 알고 있고 고도각은 계절에 따라 하루중 최대값이 달라지는걸로 알고 있습니다.
제가 잘못 알고 있다면 정정해 주시면 감사하겠지만 제가 이해하고 있는대로라면 적당히 근사 하려고 해도 대략적인 Month of Year 정도는 알아야 가능 할것 같은데 이것까지 하려면 좀 복잡해질것 같아서요.

일단 DNI DHI를 가공하는 아이디어 자체는 감사드립니다

Statistics
2020.12.28 13:24

현실적인 수준에서 타협이 필요하죠.
사실 GHI를 계산할 때는 (굳이 그정도 까지 할 필요는 없을 것 같아서) 안썼지만, 
TARGET으로 계절을 유추하는 것도 가능합니다. 
TARGET에 대해서 특정 분포를 적합하는 optimization을 해보니 TARGET이 정점이 되는 시각과 이론적인 최대 TRAGET값이 달라지는게 뽝하고 보입니다. 

문제는 test겠죠. 1000일이나 되는 train 데이터는 연속적이기 때문에 큰 문제가 안되지만, 
7일 데이터로 계절까지 유추해서 미묘한걸 반영해봐야 얼마나 차이가 크겠어요
해뜨는거 해지는거만해도 충분할 겁니다.

제조업데싸활동중
2020.12.28 17:21

와 단순히 이동평균, 더미 변수등과 같은 파생변수를 생성해서 일정 이상 성능이 안올라갔는데 
역시 도메인 지식을 활용한 파생변수 + 대회 자체의 체점평가 방식에 대한 역추적 사고방식을 결합해서 성능을 더 높이셨군요 멋집니다.

저도 LIGHT LGBM  quantile을 썻고, 앞단에 하이퍼 파라미터 옵티마이제이션을 하고 나름 도출된 최적 파라미터로 
예측을 시도했거든요.. 정말 새로운 시각을 제공해주셔서 감사합니다!! 일주일 정도 쉬었는데 다시 의욕이 나네요 감사합니다!

Pilryoung
2021.01.07 16:04

안녕하세요, 글 너무 재밌게 잘 봤습니다. 

말씀하신대로 추측해서 GHI를 구축한 결과, 성능이 눈에 띄게 좋아지더군요. 
근데 궁금한게 있어서 여쭤봅니다. GHI라는게 일사량과 매우 비슷한 변수인 것 같은데 음수가 나오는 경우도 발생하더라구요. 
이러한 경우에는 어떻게 해석해야 맞는 것일지 궁금해서 여쭤봅니다.

좋은 하루 되세요 :)

Statistics
2021.01.07 17:36

안녕하세요,
DHI, DNI가 양수라서 GHI도 모두 양수가 나오는게 맞습니다.
추측 과정에서 생긴 문제일텐데요, 지평선으로 해가 뜨기 전이나 해가 넘어간 이후까지 모두 계산하신 것 같네요.
해석의 문제는 아닌 것 같고 그냥 음수를 0으로 바꾸는 작업을 하시면 될 것 같아요.

Pilryoung
2021.01.08 12:37

답변 감사합니다 :) 

GHI = DHI +DNI*cos(Θ)  
GHI를 구하는 식이 위와 같은 것으로 알고 있는데, 예를 들어 천정각이 15라면 COS(15) = -0.75의 값으로 근사하게되는데, 
이 경우 DHI가 충분히 크지 않다면 음수가 나오게 되는데 제가 이해한게 맞을까요..? ㅠㅠ 

Brook
2021.01.14 12:01

좋은 내용 공유 감사합니다.