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

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

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

 

[필독] 모델 학습 및 추론에 관한 안내

2021.01.06 17:50 4,552 Views

안녕하세요. 태양광 발전량 예측 AI 경진대회 참가자 여러분.


먼저 태양광 발전량 예측 AI 경진대회를 열띤 열정으로 참가해주시어 감사 드립니다.


일부 모델 학습에 관한 규칙에 오해의 여지가 있을 수 있다고 판단하여 관련 규칙을 다시 안내 드립니다.


이번 태양광 발전량 예측 AI 경진대회에서 Test 데이터셋은 온전히 추론용으로만 사용 가능합니다.


이외의 용도로 Test 데이터셋을 사용시 실격이 될 수 있음을 알려드립니다.


다시 한 번 태양광 발전량 예측 AI 경진대회에 참가해주심에 감사드리며, 무사히 대회가 마무리 될 수 있도록 노력하겠습니다.


감사합니다.


-데이콘 팀 드림-

로그인이 필요합니다
0 / 1000
Statistics
2021.01.07 17:52

안녕하세요, "온전히 추론용"이라는 표현이 애매하네요.
보통 추론 통계라고 하면 통계적 검정이나 머신러닝 알고리즘 등을 활용한 분석방법을 의미하는데요, 
저 표현은 단호해보이지만 제가 느끼기로는 Test 데이터로 무얼하든 큰 문제가 없다는 느낌으로 다가옵니다.
혹시라도 나중에 문제의 소지가 될 수 있을  것 같네요. 

"Test 데이터는 Train 데이터와 동일한 전처리 등을 적용하고 Train 데이터로 만든 모형을 활용한 예측하는데만 활용할 수 있다" 로 이해하면 될까요?

Jamm
2021.01.08 05:31

세아아부지님 말씀대로, 의도는 이런것같네요. : 
'train데이터만 사용해서 학습하고, 모델로 예측할때 test셋을 입력으로 주시오. 괜히 test셋을 모델 학습에 쓰려고 하지 마시오.'

저도 '온전히 추론용' 이라는 표현이 애매하다고 생각되는게, 예를 들면 이런 상황이 있을 수도 있을 것 같습니다. : 
1. train 데이터와 test 데이터를 비교하여 train 데이터에서 아웃라이어로 판단될 수 있는 부분을 삭제.
2. 데이터를 스케일링 할때 train + test 전체를 concat 하여 fit_transform 을 적용. 
3. test 데이터의 값과 분포를 이용하여, 그와 유사한 패턴을 보이는 부분이 train 데이터에 있는지 여부 확인. 여기서 파악한 특징을 이용해 피쳐엔지니어링을 진행. 
4. test 데이터에 존재하는 결측치 혹은 이상치를, train에서 얻은 정보를 사용하지 않고, test 데이터 내부에서 패턴을 찾거나 test셋을 가지고 머신러닝 모델을 학습시켜서 (test에서 결측치를 빼고 학습시킨 오토인코더?) 자체적으로 채움. 
test에 [1, 3, 4, 7, nan, 1000000000, nan, 999999999, -1, 128, 207, 335, ...] 와 같은 데이터가 있으면 임의로 패턴을 찾아 채우거나 머신러닝을 이용해 결측치를 채우면 실격. 

등등의 상황이 바로 생각이 나는데 (적절한 예시일수도 아닐 수도 있습니다), 위 4가지 상황 모두 '온전히 추론' 용도로 test셋을 사용하지 않았기 때문에 실격이 될 수 있는건가요?

Jamm
2021.01.08 05:25

제 기억으로는 이 test 데이터 학습 사용 금지하는 규칙이 논란(?) 으로 등장하기 시작한게 컴퓨터비젼 대회에서 수도라벨링을 이용한 모델들이 대부분 입상권으로 들어온 이후였던 것 같은데, 매번 적절한 단어선택이 참 어려운 것 같습니다. 예시로 들었던 1, 2, 3, 4번 상황은 어떻게 보면 당연한 과정일 수도 있고, 어떻게 보면 실수일 수 있는 부분이고, 어떻게 보면 극한의 데이터 분석을 통해 만드는 피쳐엔지니어링이 될 수도 있는데 (심지어 test셋에서 출발하는 피쳐엔지니어링은 그 성과를 정답과 비교해볼 수도 없는 상황이죠.) '온전히 추론용' 이라는 단어는 위 네가지 상황 모두를 실격처리 시킬 수 있는 표현이라고 보여집니다.


그래서 제 생각도 세아아부지님이 달아주신 댓글과 같습니다. 댓글 시작에 써놓은 '의도' 처럼, 보통 대회 진행하듯이, 피쳐엔지니어링 하고, test에 적용하고, train학습, test예측, 제출. 이러한 테크를 벗어나지 않으신 분들은 하시던 내용 그대로 하시면 문제되지 않을 것 같습니다. 
제가 잘못 생각하고 있는 부분이 있다면 답글 달아주시면 감사하겠습니다.

Jamm
2021.01.08 06:11

다른 토론 글중에 fit 이 아닌 evaluate 과정에서 test셋 활용은 가능한가에 대한 토론글을 읽어보았습니다. 
예를 들어 '어제', '오늘' 의 값을 이용해 '내일','모레' 의 값을 예측하려고 한다면, 


1) train에서 '0일', '1일' 을 정하고(x_train), '2일', '3일' 을 학습(y_train), 이후 train 안에 있는 다른 부분인 '10일', '11일' (x_valid)을 이용해 ,  '12일','13일'(y_valid) 예측, 검증, 및 모델 수정 (O) - 데이콘의 의도


2) train에서 '0일', '1일' 을 정하고(x_train), '2일', '3일' 을 학습(y_train), 이후 test 안에 있는 '1일', '2일'을 (x_valid)를 이용해, test 의 '3일', '4일' (y_valid)을 예측 후, 검증, 및 모델 수정 (X) - 검증 과정에서 test를 사용하지 말라는 말의 의미

2.1) 위의 방법 2) 를 사용하여 학습시킨 모델을 이용하여 test셋의 마지막 이틀 '5일','6일' (x_test) 을 이용하여 '7일','8일' (submission) 예측하여 제출 (X) - 룰 위반으로 실격

2.2) 위의 방법 1) 을 사용하여 학습시킨 모델을 이용하여 test셋의 마지막 이틀 '5일','6일' (x_test)을 이용하여 '7일','8일' (submission) 예측하여 제출 (O) - test셋의 전부를 활용하지 않아도 된다는 내용의 안내의 의도


3) 위의 방법 1) 처럼 학습시키다가 2)의 검증 방법으로 test 의 앞부분의 검증 점수 확인 후 아무것도 하지 않고 그대로 test '5일','6일' 예측 점수 제출. (test 셋을 이용한 검증의 의미가 사라지지만 O) - 실제 모델 학습시에는 train만을 이용해서 학습 및 검증을 진행하였기 때문에, test 데이터의 앞부분 점수는 그냥 심심해서 띄워본것뿐.

Jamm
2021.01.08 05:47

4) train 데이터를 전혀 활용하지 않고, test 의 '0일','1일'(x_train) 을 이용하여 test의 '2일','3일'(y_train) 을 학습한 후, test의 '1일','2일'(x_valid)를 가지고 test의 '3일','4일'(y_valid)을 예측 검증 및 모델 수정 (X)

if 위 방법 4) 가 실격이라면 test데이터의 앞부분을 학습에 사용할 수 없으므로, train 없이 test 데이터의 앞부분을 사용하여 패턴을 파악하며 시작하는 자기회귀모델 혹은 다른 통계모델 등을 사용하는것 역시 실격 (O)
금지하시려고 하는 내용이 이게 맞는지, 제가 잘 이해하고 있는지 답변 주시면 감사하겠습니다. 

이런 상황들은 test데이터의 7일을 전부 X_test (인풋)으로 쓰겠다고 결심하신 분 아니면 충분히 발생할 수 있는 상황으로 보입니다. 
특히 2) 와 같은 상황을 막을 방법은 없지만, 확인할 수 있는 방법 역시 없으니, 이는 '대회' 라는 구조적 한계로 보입니다. 제가 만약 실제 현업 데이터 담당자였다면 forecasting 을 한다면 진행할 수 있는 상황이 1) 밖에 없을테니까요. 

deepstat
2021.01.08 13:24

Jamm 님 감사합니다. 깔끔하게 정리해주셨네요.

DACON.JIN
2021.01.08 15:49

안녕하세요. 세아아부지님, Jamm님. 먼저 해당 의견을 주신 것에 대해 감사드립니다.

세아아부지님, Jamm님께서 이해하신 내용이 맞습니다. Jamm 님께서 예시를 들어주신 부분들 또한 저희가 공지의 올린 의도와 부합합니다.

Jamm
2021.01.08 16:24

 고생이 많으십니다 ㅠㅠ

nagne
2021.01.11 16:26

안녕하세요, 담당자님.

혹시 train data를 30일 씩 끊어 Month 변수를 추가한 후 모델을 학습하여 

해당 모델로 test data의 Month를 예측하여 변수로 사용하는 방법은 가능할까요? 

감사합니다.