1. 서 론
전력 계통은 공급과 수요를 모두 고려하는 시스템으로서, 안정적인 운용과 최적화된 운용 계획을 위해서는 전력 수요 예측의 정확성이 보장되어야 한다[1]. 전력 수요 예측은 전력 공급의 안정화, 효율적 운영, 발전기 시스템 운행 등에 큰 영향을 줄 수 있으므로 정확도가 떨어지는 전력 수요 예측은 계획되지
않은 설비의 사용으로 계통 안정도를 낮추고 추가적인 전력 구매 등의 경제적 손실을 발생시키게 된다[2].
2011년 9월 15일 0kw의 예비전력을 기록하게 된 대정전 이후, 전력 수요 예측의 중요성은 지속적으로 부각되고 있다. 그러나 최근 첨단 기술
산업의 발전에 따라 전력 사용량은 계속해서 증가하고 있고, 급격한 기후의 변화로 인한 가정의 냉난방을 위한 전력 사용량은 큰 변동성을 가지게 되었다.
이에 따라 전력 수요 예측은 여전히 지속적인 연구가 필요한 분야로 인식되고 있으며, 보다 정확한 전력사용량 예측을 위해서 다양한 전력 수요 예측 방법이
연구되고 있다.
과거에는 주로 전력 수요량의 시계열 특성에 주목하여 지수평활법을 이용해서 전력 수요를 예측하였고 기간을 평일, 주말, 특수일 등으로 세분화하는 방향으로
연구가 진행되었다[3]. 최근에는 여러 가지 기계학습 방법을 전력 수요 예측에 적용하려는 시도가 꾸준히 이루어지고 있다[4-7]. SVM (Support Vector Machine), LSTM (Long Short Term Memory), DNN(Deep Neural Network)
등을 이용한 연구가 진행되었으며, 국내 전력 계통에서의 전력 수요예측 연구도 꾸준히 진행되고 있다[8].
전력 계통 운용을 계획하기 위해서는 시간별 전력 수요 예측에서부터 연간 전력 수요 예측까지의 다양한 예측 기간에 대한 연구가 필요하다. 단기 수요
예측 중에서 1시간 전력 예측은 경제급전(economic dispatch)과 단기 발전 계획으로 사용된다. 24시간 또는 그 이후의 수요 예측은 전력
교환을 위한 계획에서 사용되며, 주 단위 이상의 예측은 전력 자원의 사용을 관리하고 계획하기 위해서 주로 사용된다[9].
본 논문에서는 XGBoost(eXtreme Gradient Boost)를 이용한 전국 일주일 단기 전력 수요 예측 방법을 제안한다. XGBoost는
GBM(Gradient Boosting Model)의 한 종류이며, 트리(tree)기반의 모델에 잔차(residual)를 학습시키는 부스팅(boosting)기법을
적용한 머신러닝 모델이다. 부스팅 기법을 사용하기 때문에 데이터에 대한 정확도가 높다는 장점이 있으며, 특히 XGBoost는 모델 학습 시 병렬 연산을
사용하므로 빠른 학습이 가능하다는 장점이 있다[10]. 또한 XGBoost는 서른 개 이상의 하이퍼파라미터(hyper parameter)를 지원하므로 다양한 데이터들에 대한 유연한 학습이 가능하다.
본 논문에서는 XGBoost 기반의 전력 수요 예측 방법 제안과 더불어 XGBoost의 주요 하이퍼파라미터들이 전력 수요 예측 모델 성능에 어떤 영향을
미치는지 분석해본다. 격자 탐색(grid search)기법을 사용하여 주요 하이퍼파라미터들이 전력 수요 예측 성능에 미치는 영향을 시각적으로 확인해보고자
한다.
본 연구는 전국 일주일 단기 전력 수요 예측을 위해 전력거래소에서 제공한 1시간 단위의 전국 발전량 데이터를 사용한다. 2014년 1월부터 2018년
12월까지 총 5년간의 데이터를 사용하였으며, 2014년 1월부터 2017년 12월까지는 학습 데이터로, 2018년 1월부터 2018년 12월까지는
테스트 데이터로 설정하였다. 그리고 예측 모델의 성능은 MAPE(mean absolute percentage error)를 기준으로 평가한다.
2. XGBoost 기반의 전력 수요 예측 시스템
2.1 XGBoost 알고리즘
XGBoost에서는 의사결정트리(decision tree) 모델에 부스팅 기법을 적용한다. 부스팅 기법은 단순한 분류가 가능한 약한 예측 모델들을
결합해서 강한 예측 모델을 만드는 알고리즘으로, 주어진 데이터를 약한 분류기를 통해서 학습한 후, 학습된 결과에서 나타나는 오차를 또 다른 약한 분류기에서
학습시켜 오차를 줄여나간다. 즉, 첫 번째 학습을 통해 생성된 모델에서 오류를 발생시키는 데이터들을 다음 모델을 이용하여 오류를 줄이고, 또 다시
발생된 오류 데이터들을 그 다음 모델을 이용하여 오류를 줄이는 방식을 순차적으로 적용하게 된다.
XGBoost는 부스팅 기법을 통해 모델들을 통합할 때, 모델별로 서로 다른 가중치를 부여하여 중요도가 높은 트리 모델에 높은 점수를 부여한다. t
번째 모델이 가지는 가중치는 t-1 번째의 오류에 따라서 결정된다. 앞서 언급했던 것처럼 XGBoost는 오차에 대한 순차적인 모델 학습을 통해 강한
모델을 만들어낸다. 학습을 위한 목적함수는 참값과 예측값사이의 손실 함수와 정규화항으로 구성되며 이러한 목적함수를 최소화하는 가중치를 구하여 모델을
학습한다[10].
2.2 XGBoost를 이용한 전력 수요 예측 과정
우선 일주일 단기 전력 수요 예측을 위해, 시간 및 요일을 입력 특징(feature)으로 고려한다. 이 입력특징은 전국 단위의 수요 예측이 시간대별
및 요일별로 패턴화된 특징을 가지고 있기 때문이다. 시간과 요일은 범주형(categorical) 데이터로서, 시간은 0시부터 23시를 1부터 24까지의
정수로 변환하였고, 요일은 월요일부터 일요일까지를 0에서 6까지의 정수로 변환 후 학습에 사용하였다. XGBoost는 트리기반의 알고리즘이므로 별도의
인코딩없이 범주형 데이터를 입력 특징으로 사용할 수 있다.
또 다른 입력특징으로 예측일 기준 1일 전부터 7일전 사이의 동시간대의 발전량을 선정하였다. 그러나 데이터가 충분하지 않은 경우, 입력 특징의 차원이
늘어나는 것은 예측 모델 학습에 부정적인 영향을 줄 수 있으므로, XGBoost의 특징 중요도(feature importance)기능을 사용하여 입력
특징을 선별한다. XGBoost를 이용해 학습을 진행한 후, 특징 중요도를 사용하면 모델 학습에 높은 중요도를 가진 입력 특징을 수치적으로 확인할
수 있다. 중요도는 ‘weight’, ‘gain’, ‘coverage’의 기준으로 산출된다.
‘weight’는 트리구조 학습과정에서 트리 분기의 기준이 되는 입력 특징의 발생빈도를 기준으로 한다. ‘gain’은 노드를 분기할 때, 엔트로피(entropy)의
감소량을 기준으로 중요도를 산정하며, ‘coverage’는 리프 노드(leaf node)의 분기에 결정된 입력 특징의 발생빈도를 기준으로 중요도를
산출한다.
본 논문에서의 전국 일주일 전력 수요 예측은 패턴화된 전력 수요량에 초점을 두어 학습한다. 한 주 동안의 전력 수요량은 월, 화 ~ 금, 토, 일
네 가지로 나누어지는 패턴을 확인할 수 있다. 월요일은 화 ~ 금과 비슷한 패턴을 보이기는 하나 변동성이 크기 때문에 분리하여 고려한다. 예측하고자
하는 날짜와 비슷한 패턴을 보이는 요일을 기준으로 분기하면, 엔트로피의 감소가 충분히 이루어질 것으로 판단하였다. 따라서 중요도는 ‘gain’을 기준으로
하여 산출하였고, 이를 그림 1에 나타내었다.
그림. 1. ‘gain’을 기준으로 산출한 입력 중요도
Fig. 1. Feature importance based on ‘gain’
그림. 2. 전력 수요 예측 블록 다이어그램
Fig. 2. Block diagram of load forecasting
7일 전(D_7)의 발전량은 예측 당일 기준으로 같은 요일의 발전량을 반영하기 때문에 가장 높은 중요도를 나타낸 것을 확인할 수 있었다. 1일 전(D_1)의
값은 토, 일, 월 3일을 제외하면 1일 전과 비슷한 전력 수요 패턴을 보이므로 상대적으로 높은 중요도를 나타내는 것으로 판단할 수 있다. 3일 전(D_3)의
경우는 ‘gain’을 기준으로 산출한 입력 중요도는 D_7, D_1에 비해 꽤 낮은 값이기는 하나, 월, 목, 금요일의 수요량을 예측하는 경우는 3일
전 데이터가 중요한 입력으로 사용될 수 있다. 최종적으로는 7일 전, 3일 전, 1일 전의 전력 발전량 데이터를 시간, 요일과 함께 XGBoost
모델의 입력 특징으로 사용하였다. 이 과정을 그림 2에 나타내었다.
3. XGBoost 하이퍼파라미터 최적화 및 분석
3.1 하이퍼파라미터 최적화 방법
머신러닝 모델을 설정하는 과정에서, 목적에 부합하는 모델을 선택하고 유효한 입력 특징을 결정하고 나면 하이퍼파라미터의 조절이 필요하다. 하이퍼파라미터는
머신러닝 모델을 학습할 때, 직접 설정해 주어야 하는 모델의 변수이다. 하이퍼파라미터는 이론적으로 정해지는 것이 아니라 학습 데이터에 따라 경험적으로
설정되어야 하는 값으로서, 최적의 하이퍼파라미터를 찾는 작업은 높은 성능을 얻기 위해 필수적인 작업이다.
하이퍼파라미터를 최적화를 위한 방법으로는 크게 3가지의 방법이 알려져 있다. 격자 탐색(grid search), 랜덤 탐색(random search),
베이지안 최적화(bayesian optimization)가 대표적인 방법이다[11,12].
격자 탐색은 하이퍼파라미터 공간을 격자로 분할한 뒤, 모든 격자 지점에 대한 모델 성능을 확인해보는 방법이다. 격자의 형태로 하이퍼파라미터를 찾을
경우, 비교적 균등하고 전체적인 탐색이 가능하다는 장점이 있다. 반면 간격이 너무 촘촘하거나, 확인해야 할 하이퍼파라미터의 개수가 늘어나면 탐색의
시간이 기하급수적으로 증가하는 단점을 가지고 있다.
랜덤 탐색은 하이퍼파라미터 공간에서 특정 구간의 하이퍼파라미터 값을 랜덤하게 설정하여 학습을 시도해 본 후, 그 중 가장 성능이 뛰어난 하이퍼파라미터의
값을 사용하는 방법이다. 하이퍼파라미터의 모든 값에 대해서 학습하면, 그만큼 학습의 횟수도 많아지기 때문에 효율적인 방법이 될 수 없다. 따라서 랜덤하게
탐색을 하여 학습횟수는 줄이면서도 높은 성능을 보장할 하이퍼 파라미터를 찾을 가능성이 있다. 그러나 어디까지나 랜덤한 경우에 따른 학습이므로, 최적이라는
사실을 보장하기는 힘들다.
베이지안 최적화는 통계학적인 방법을 이용해 하이퍼파라미터를 최적화하는 방식이다. 탐색된 몇 지점에서의 성능이 확인되면 가우시안 분포(Gaussian
distribution)와 같은 방식을 사용하여, 나머지 성능의 분포를 확률적으로 추정한다. 그런 다음 학습할 하이퍼파라미터 공간을 계산하여, 효율적인
하이퍼파라미터 탐색이 가능하도록 한다. 하지만 통계적인 방법을 사용하므로 랜덤 탐색의 경우와 마찬가지로 최적의 값을 찾는다는 보장을 하기는 힘들다.
본 연구에서는 XGBoost의 하이퍼파라미터 변화가 전력 수요 예측 모델의 성능에 어떤 영향을 미치는지 확인하는 것을 주요 목표로 두었다. 따라서
하이퍼파라미터 값에 따른 전반적인 성능의 변화를 확인하기에 적합한 격자 탐색을 사용한다. 하이퍼파라미터가 모델 성능에 미치는 영향을 파악하기 위해
하이퍼파라미터 격자 지점에 대한 성능을 시각적으로 표시한다.
3.2 하이퍼파라미터 최적화 과정
XGBoost의 하이퍼파라미터는 크게 일반 파라미터(general parameter), 학습 파라미터(learning task parameter),
부스트 파라미터(boost parameter)로 나눌 수 있다. 일반 파라미터와 학습파라미터는 다른 머신러닝 모델과 크게 다르지 않으므로, 부스트
파라미터에 초점을 맞추어 하이퍼파라미터를 분석한다.
부스트 하이퍼파라미터에서는 트리 모델의 크기를 결정하는 값, 데이터의 샘플링(sampling)을 결정하는 값, 정규화를 결정하는 값 등 세 가지 종류로
나눌 수 있다. 그 중 주요 파라미터인 max_depth, min_child_weight, subsample, gamma를 본 연구에서 분석해 본다.
이들 하이퍼파라미터에 대한 설명은 아래와 같다.
max_depth: 하나의 트리 모델의 형성과정에서 최대 트리 깊이를 지정한다. 값이 작으면, 입력 특징이 노드별로 충분히 분기되지 않아 과소적합(underfitting)이
발생하며, 값이 크면 과적합(overfitting)이 발생하게 된다.
min_child_weight: 노드 분기를 결정할 때, 한 노드에 있는 데이터 인스턴스(instance) 가중치(weight) 합의 최댓값으로 설명된다.
트리 모델이 노드를 분기할 때, 한 노드의 인스턴스 가중치 합이 지정된 값보다 작으면 분기를 종료한다. 즉, 트리 노드가 과도하게 발생하는 것을 막아
과적합을 방지하는 역할을 할 수 있다. 따라서 값을 크게 지정하면 과적합을 방지할 수 있다.
gamma: 트리 모델의 복잡도를 제한해주는 값이다. XGBoost 목적함수의 정규화 항에 포함되어 있는 감마값과 같다. 값이 클수록 트리 모델은
많은 리프 노드(leaf node)를 쉽게 만들지 못하게 된다.
subsample: 트리마다 사용하는 데이터 샘플링 비율을 설정하는 값이다. 이 값의 비율로 랜덤하게 데이터를 뽑아 트리를 생성한다. 값이 작으면
보수적인 모델 즉, 과적합이 발생하지 않는 방향으로 모델을 생성하게 된다.
그림. 3. 시계열 교차 검증 방식
Fig. 3. Time series cross validation
하이퍼파라미터를 조정할 때는 테스트에 사용할 데이터는 제외하여야 한다. 또한 전력수요량의 시계열적인 특성을 고려하여, 시계열 교차검증(time series
cross validation)을 적용한다. 시계열 교차 검증은 일반적인 교차검증(cross validation)과는 다르게 시계열 적인 특성을 반영하게
된다. 그림 3은 시계열 교차 검증의 방식을 나타낸 그림이다. 다섯 번의 검증을 시행한다고 할 때, 데이터를 여섯 개로 나누어 학습 데이터와 테스트 데이터가 연속적인
형태로 학습되게 한다. 본 연구에서도 다섯 번의 검증으로 하이퍼파라미터를 최적화한다.
3.3 하이퍼파라미터 분석
하이퍼파라미터가 모델 성능에 어떤 영향을 주는지 확인하기 위해, 각 하이퍼파라미터 설정값에 따라 수요 예측의 성능을 시각화한다. 첫 번째 실험에서는
max_depth, subsample, gamma 3가지의 하이퍼파라미터를 변화시켜 본다. 이 때 나머지 하이퍼파라미터들은 모두 디폴트값을 사용한다.
각 하이퍼파라미터의 격자는 max_depth = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, subsample = {0.1, 0.2,
0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}, gamma = {0.01, 0.1, 1, 3, 5, 7, 9, 11, 13,
15}로 설정하였다.
그림. 4. max_depth에 따른 성능 ((a) max_depth=4, (b) max_depth=11)
Fig. 4. Performance according to the value of max_depth
그림 4는 max_depth가 4와 13일 때, subsample과 gamma의 변화에 따른 모델의 성능을 나타낸 것이다. 회귀문제에서 평가 척도로 사용되는
R-square로 성능을 표시하였다. 위쪽 그래프와 아래쪽 그래프는 각각 학습 데이터에 대한 성능과 테스트 데이터에 대한 성능을 나타낸 것이다. max_depth의
값을 4에서 13까지 변화시켰을 때, 8 이전에는 학습 데이터와 테스트 데이터의 성능이 같이 증가하였으나, 8 이후에는 학습 데이터는 계속 증가하였으나,
테스트 데이터의 성능은 다소 감소한다는 것을 확인할 수 있었다. 본 실험에서의 최적의 max_depth는 8인 것으로 판단되며 8보다 큰 max_depth의
경우에는 과적합이 발생하는 것으로 보여진다.
그림 5는 max_depth의 최적값인 8인 상태에서의 시각화 그림이다. 학습 데이터에서는 subsample 값이 줄어듦에 따라 성능 감소폭이 두드러지는
것을 확인할 수 있으나, 테스트 데이터에 대해서는 성능에 큰 변화를 보이지 않는 것으로 나타났다. 테스트 데이터에 대해서는 subsample 값이
0.8일 때 가장 높은 성능을 보였다.
그림. 5. subsample의 변화에 따른 모델 성능
Fig. 5. Performance according to the value of subsample
두 번째 실험에서는 max_depth, min_child_weight, gamma를 변화시켜 가며 성능을 관찰하였다. 그림 6은 min_child_weight의 값이 모델 성능에 어떤 영향을 미치는지 확인하기 위한 시각화이다. min_child_weight는 앞서 설명한
것처럼 트리 노드의 과도한 분기를 제한하기 위한 하이퍼파라미터이다. 이러한 특성을 확인하기 위해서 과적합이 발생할 수 있도록 max_depth=13으로
설정해 놓은 상태에서 min_child_weight의 변화를 확인해 본다.
그림. 6. 과적합 상태에서 min_child_weight의 영향
Fig. 6. Performance according to the value of min_child_weight
그림. 7. 2018년 11월 4주간에 대한 발전량 참값과 수요 예측값 그래프
Fig. 7. Power generation real values vs. predicted power demand for 4 weeks of November
2018
과적합이 발생할 수 있는 상태에서 min_child_weight의 값이 증가하게 되면 분기가 제한되므로 과적합을 막아주게 된다. 따라서 min_child_weight가
증가하게 되면 학습 데이터에 대한 성능은 저하되지만, 과적합은 해소되어 테스트 데이터에 대한 성능은 조금씩 향상되는 것을 확인할 수 있다.
gamma의 경우 과도한 리프 노드의 발생을 제한하는 것으로 알려져 있으나, 0에서 14까지의 변화에서는 모델 성능에서의 큰 변화가 확인되지 않았다.
격자 탐색 기법을 통해서 구한 최적의 하이퍼파라미터는 표 1과 같다.
표 1. 하이퍼파라미터 최적화 값
Table 1. Optimal values of hyperparameters
max_depth
|
subsample
|
min_child_weight
|
gamma
|
8
|
0.8
|
1
|
0.01
|
3.4 전력 수요 예측 결과평가
전력 거래소에서 제공한 2014년 1월부터 2017년 12월까지의 1시간 단위 전국 발전량 데이터를 이용하여 하이퍼파라미터 설정하고 전력 수요 예측을
위한 XGBoost 모델을 학습하였다. 전력 수요 예측 평가를 위해서는 2018년 11월 데이터를 테스트 데이터로 사용하였다. 본 논문에서는 특수일(공휴일
등)을 고려하지 않았으므로, 해당 월 기준 7일 전후에 특수 일이 없는 11월을 기준으로 모델의 성능을 평가하였다. 평가 척도로는 MAPE를 사용하였다.
MAPE는 아래와 같은 방식으로 평가하며, 여기서 $y_{t}$는 참값, $\hat y_{t}$는 예측값이다.
표 2는 11월 각 주에 대한 MAPE를 나타낸 것이다. 1 주차는 10월 29일부터 11월 4일까지의 기간으로 지정하였으며, 2 주차는 11월 5일부터
11월 11일, 3주차는 11월 12일에서 11월 18일, 4 주차는 11월 19일에서 11월 25일까지의 기간으로 정하였다. 그림 7은 발전량의 참값과 예측값을 보여준다.
표 2. 2018년 11월 주간 예측 성능
Table 2. Performance for November 2018
1주차
|
2주차
|
3주차
|
4주차
|
0.9699
|
1.2786
|
1.2832
|
1.6151
|