2020.03.05 20:14 셀렉트스타 상 추가
2020.03.06 11:30 셀렉트스타 상을 위한 특별 평가지표 공개
🏆 총 상금 250만원
•🥇1위 - 100만원
•🥈2위 - 70만원
•🥉3위 - 30만원
•🥇특별상 - 50만원
※ 셀렉트스타 특별상은 Private 리더보드 기준 상위 10팀에 대하여 특별 평가지표를 적용하여, 1등에게 시상하는 상입니다.
※ 기존 상금과 중복 수상 가능합니다.
※ 특별 평가지표 적용은 전체 Test set 에 적용하여 값을 산출합니다.
특별 평가지표
특별 평가지표는 총 80일간의 test set 데이터에 대하여
- 실제 값에 대한 일자별 최대/최소 값과 예측 값에 대한 일자별 최대/최소 값 도출
- 선정된 160개의 샘플 (80일 * 2) 들에 대하여 MSE 산출
코드로 구현하면 아래와 같이 구현 가능합니다.
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
def SelectStar_metric(y_true, y_pred):
# 로직 1. y_true와 y_pred의 일별 min max 값을 구한다
# A. pd.concat을 위한 인덱스 맞춰주기
y_true.reset_index(drop = True, inplace = True)
y_pred.reset_index(drop = True, inplace = True)
# B. 일자별로 그룹하기 위한 변수 생성
# 테스트 기간이 80일이며, 10분단위 데이터가 시간 순서대로 정렬되어 있기 때문에
# 0번 부터 79번을 차례대로 각각 144번 반복하여 변수 생성
group_id = pd.Series(np.repeat([i for i in range(80)], 144), name = 'group_id')
# C. group_id 추가
y_true = pd.concat([y_true, group_id], axis = 1)
y_pred = pd.concat([y_pred, group_id], axis = 1)
# D. 일자별 min max 값 산출
# groupby를 통해 일자별로 묶어준 후, 일자별 min max 값을 산출한다
y_true = y_true.groupby('group_id').agg(['min', 'max'])
y_pred = y_pred.groupby('group_id').agg(['min', 'max'])
# 로직 2. 선정된 160개의 sample들에 대하여 MSE를 산출한다
return mean_squared_error(y_true, y_pred)