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

알고리즘 | 정형 | 회귀 | 시계열 | 농업 | RMSE | 정성평가

  • moneyIcon 상금 : 400만원
  • 2,722명 마감

 

데이터 분석 중 삽질과정 공유합니다.

2023.10.29 09:20 5,032 조회 language

공공데이터 포털에서 공휴일 정보를 받아와서 활용할 계획이었습니다.

2019년 부터 2023년까지의 공휴일 정보를 공공데이터 포털에서 받아서 train 데이터에 합쳐보니

공휴일에도 판매를 하는 날도 있고 판매를 하지 않는 날도 있습니다. 신정에는 판매를 하지않고, 삼일절에는 판매를 합니다.

명확하지는 않아도 예측에 도움이 될거 같아서 테스트데이터에도 공휴일 데이터를 합쳐보았습니다.

그런데........

test 데이터 기간에는 공휴일이 하루도 존재하지 않네요. ㅠㅠ

똑같은 삽질을 하지마시고, 혹시나 다른 대회에서 사용하실분들 참고하시라고 코드 올려봅니다.

모두 좋은 결과 얻길 바랍니다~

코드
로그인이 필요합니다
0 / 1000
Umul
2023.10.29 15:56

대회 제공 데이터 이외의 외부 데이터 사용 금지 
라고 규칙에 적어져 있던데 혹시 규칙에 위배되지는 않는걸까요??

Saturday.K
2023.10.29 16:16

공휴일 정보는 data leakage 아니라는 다른 대회 답변을 봐서 괜찮다생각했는데,

이 대회 규칙이 외부 데이터 사용금지이니 특별히 예외가 아니라면 사용 안하는게 맞겠네요. 제가 규칙을 꼼꼼히 안봤던거같습니다.

Umul
2023.10.29 17:26

앗,, 관련 내용 공유해주셔서 감사합니다. 
정말 궁금해서 여쭤본건데 글로만 적으니 좀 적대적으로 보였을까 걱정되네요. 
남은 기간 파이팅 하시길 바라겠습니다!!

DACON.SeungYoon
2023.10.30 15:36

안녕하세요 Umul, Saturday.K 님
말씀해주신 것과 같이 API 등을 활용해서 merge를 하는 방식은
외부데이터를 불러와 기존 데이터와 병합하는 방식이기 때문에 규정 위반의 소지가 있습니다.
다만 공휴일 정보, 주말 정보 자체는 2023.03.04일 이전에 알 수 있는 도메인 지식으로 취급하기에 활용 가능하십니다. 
감사합니다.

Statistics
2023.10.29 22:40

일반적으로 날짜를 활용하는 데이터에서 공휴일 정보를 활용하는 것은 문제되지 않습니다.
앞선 전력사용량 예측대회에서도 외부데이터 활용은 불가능했지만 공휴일 정보 활용은 문제 없었습니다. 

그리고 공휴일 정보 활용이 삽질이라고 보기는 어렵습니다.
만약 train 안에서 공휴일에 따라 뭔가 가격 차이가 있다면 공휴일의 정보가 평일에 영향을 주지 않도록 역할이 있을 것이고, 
공휴일이 없는 test 예측 과정에서 공휴일을 제외한 나머지 날들의 정보를 활용하므로 성능이 개선될 여지가 있겠죠:)

일반적인 경매 휴일은 설, 추석 연휴와 일요일, 그리고 별도로 지정한 여름 휴가 등으로 보입니다. 
공휴일이 실제 가격에 큰 영향을 주지 않을 것 같으면 저 날들만 찾아서 제거하면 될 것 같네요:)
물론 한 끝이 아쉬우면 결국 공휴일 정보를 쓰게 되지 않을까요?ㅎㅎ

황병산눈보라
2023.11.02 21:04

공휴일이 어떤 건지 알 수 없지만, holidays모듈을 사용해서 하기와 같이 변환해도 좋을 것 같습니다! 
공휴일은 10으로  weekday 열에 들어갑니다.  

import holidays
import pandas as pd 

def add_weekday(df) :
    df['date'] = pd.to_datetime(df['timestamp'])
    df['weekcode'] = df['date'].dt.weekday

    year_min = df['date'].dt.date.unique().min().year
    year_max = df['date'].dt.date.unique().max().year
    kor_holidays = list(holidays.KOR(years=range(year_min, year_max)).keys())
    idx_kor_holidays = pd.to_datetime(kor_holidays)

    df_temp = df[['date', 'weekcode']].copy()
    df_temp.set_index('date', inplace=True)
    df_temp.loc[idx_kor_holidays, 'weekcode'] = 10
    df_temp.reset_index(inplace=True)

    df['weekcode'] = df_temp['weekcode']

    return df

DM_MSI
2023.11.03 08:49

오 holidays는 처음 보는데 한 번 활용해보면 좋을 것 같습니다!
감사합니다!