이스트소프트 A.I. PLUS Lab은 작년에 이어서 올해도 과학기술정보통신부에서 주최하는
2021 인공지능 경진대회에 참가했습니다.
총 3개 분야로 진행된 대회에서 이스트소프트(팀명 deepest_04)는
수치해석분야 영역에서 1위를 달성했습니다.
이번 글에서는 2021 인공지능 온라인 경진대회 참가기를 소개하고자 합니다.
1. 2021 인공지능 경진대회 소개
2020년도에 이어 올해에도 2021년 인공지능 온라인 경진대회가 개최되었습니다. 과학기술정보통신부가 주최, 정보통신산업진흥원 주관으로 개최된 이번 대회는 6월 21일부터 7월 2일까지 2주간 진행되었습니다.
2021 인공지능 온라인 경진대회는 작년과 동일하게 대회를 통해 다양한 사회 이슈를 인공지능 경연을 통해 해결하고, 인공지능 기술 활용 확산 촉진을 위해 우수한 기술력 보유한 인공지능 중소 벤처 기업을 발굴하여 사업화를 하고자하는 목적으로 진행되었습니다. 해당 대회는 참가팀의 문제 해결 및 알고리즘 개발 기술력을 검증하고, 기술력이 검증된 참가팀의 보유한 아이디어의 사업화 가능성을 평가하여 최종 우수팀을 선발합니다.
올해 대회는 이미지/자연어/수치해석 등 총 3개 분야에서 총 10개의 문제가 출제되었습니다. 1~5인으로 구성된 팀이 주어진 10개 문제 중 하나의 문제에 참여할 수 있으며, 각 문제별로 1-4위의 우수 참가팀을 선발하는 방식입니다. 1차적으로 선발된 우수 참가팀을 대상으로 다시 한 번 대회 성적과 사업화 가능성 등을 종합평가한 후, 이미지 영역(상위 8팀), 자연어 영역(상위 6팀), 수치해석 영역(상위 6팀), 총 20개 팀을 최종 사업화 대상기업으로 선정 후 지원이 이루어집니다.
이스트소프트는 2020 인공지능 온라인 경진대회에도 참가하여 우수한 성적을 보여주었는데요, 작년 대회와 관련한 참가기는 ‘2020 인공지능 온라인 경진대회 참가기‘포스트에서 더욱 자세히 보실 수 있습니다.
2. 문제 소개 및 공략
(1) 문제 소개
이스트소프트는 4개의 팀이 참가해서 총 4개의 문제에 도전하였습니다. 이번 참가기에서는 4개의 문제 중에서 1위를 달성한 문제에 대해 소개하려고 합니다.
1위를 달성한 이스트소프트팀은 deepest_04 이며, 주제는 수치해석 영역이었습니다.
문제는 ‘전력 품질 예측 활용한 선제적 대응 및 고장 예측 모델’이었으며, 문제의 상세 내용은 다음과 같습니다.
주어진 20여개의 feature를 활용하여 전력 관련 3가지 도메인 (역률평균, 전류고조파평균, 전압고조파평균)에 대한 상태를 3가지(정상, 주의, 경고)로 분류하는 다중 레이블(multi-label) 다중 분류(multi-classification) 문제입니다.
(2) 주요 공략 기법
1. XGBoost
이번 대회에서 가장 중요했던 요소는 모델의 선택이었습니다. 인공지능 대회인 만큼 인공신경망 기반의 딥러닝 모델을 사용하는 것이 일반적인 접근방법 입니다. 또한 주최 측에서 제공한 베이스라인 모델도 1D-CNN과 fully-connected layer로 이루어진 인공신경망이었습니다. 이를 기반으로 이스트소프트 팀은 대회 초반에는 베이스라인 모델을 학습하여 제출해보았으나, 상위권 팀과의 점수가 다소 차이가 나는 상황이 발생했습니다. 물론 베이스라인 모델의 적절한 튜닝을 통하여 점수를 올리는 방법도 있었지만 이러한 방법만으로 상위권 팀의 점수를 따라잡기는 어려워보였습니다. 또한 해당 모델은 주최 측에서 참고용으로 제공한 것이기 때문에 최적의 모델은 아닐 것이라는 판단에 이르러 초반과는 다른 접근법을 생각하게 되었습니다.
새로운 접근법으로 계획한 것은 XGBoost를 사용해보는 것이었습니다. XGBoost(eXtreme Gradient Boosting)는 Gradient Boosting이라는 알고리즘을 사용할 수 있도록 구현해놓은 라이브러리 입니다. Gradient Boosting을 잘 모르시는 분들을 위해 Gradient Boosting 알고리즘에 대해 간단히 설명드리자면, 아래 그림과 같이 성능이 약한 분류기 (또는 결정 트리(decision tree))들을 결합하여 강한 분류기를 만들어내는 방법 입니다. 회귀(regression), 분류(classification)문제에 활용이 가능하며 뛰어난 성능으로 Kaggle과 같은 머신러닝 대회에서 우승한 많은 팀들이 XGBoost를 사용하였습니다.
해당 문제와 같이 데이터의 차원이 딥러닝 모델에서 주로 다루는 데이터(이미지, 비디오 등)의 차원에 비하여 매우 낮은 경우에는 딥러닝 모델의 구조가 간단하여도 많은 파라메터 수로 인해 과적합(overfitting) 가능성이 높을 수 있다고 판단하였습니다. 그래서 적은 수의 feature들에 대하여 잘 학습하는 XGBoost를 사용하여 모델을 학습한 후에 제출 점수가 낮을 경우, 딥러닝 모델을 만드는 쪽으로 계획하였습니다. 계획을 바탕으로 XGBoost의 가장 기본적인 분류 모델을 학습하여 제출해본 결과, 상위권 팀과 근접한 점수를 도달하는 결과를 얻을 수 있어서 XGBoost기반의 모델 최적화를 진행하는 쪽으로 계획하게 되었습니다.
2. Model / Labeling
본 문제에서의 Output은 3가지 도메인(레이블)에 대한 3가지 분류 입니다. 이러한 유형의 문제에서 생각 할 수 있는 가장 일반적인 분류 모델의 구조는 각 레이블 별로 다중 클래스를 분류하는 모델(정상, 주의, 경고를 분류하는 모델)을 생각 할 수 있고, 우리 팀은 해당 기본 모델을 기준으로 여러가지 모델을 적용해 보았습니다.
*네이밍의 경우 팀 내에서 자체적으로 임의설정하였습니다.
- vanilla classification : 앞에서 언급한 일반적으로 생각할 수 있는 모델 구조입니다.
- double classification : 레이블의 특성을 살펴보면 정상, 주의, 경고로 구성되어 있습니다.
이는 각 클래스간의 관계가 서로 연결되어 있다고 생각할 수 있습니다. 다시 말해 ‘주의’라는 특성은 ‘정상’과 ‘경고’사이에 있다고 볼 수 있는 것입니다.
위 내용을 토대로 레이블링은 다음과 같이 설정할 수 있습니다.
이는 각 레이블 별로 이진 클래스를 분류하는 2개의 모델로 구성할 수 있습니다. 또한 이 모델 구조의 경우, 이진 클래스 분류모델 6개를 동시에 학습하는 방법과 각 레이블에 대하여 먼저 정상인지 아닌지에 대한 모델 학습 후 정상이 아니라고 예측되는 결과들에 대하여 경고인지 아닌지 분류하는 방법으로도 시도해 볼 수 있었습니다.
그리고 이진 클래스 분류모델 6개로 학습하는 경우 $ (정상=True), (경고=True) $ 와 같은 클래스가 생성되는 경우가 있습니다. 우리는 정상이면서 동시에 경고인 상태를 가지는 경우를 학습시키지는 않았지만, 모델 구조의 특성상 100% 완벽한 학습이 이루어지지 않는다면 해당 클래스가 생성되며 이에 대한 후처리 작업이 필요했습니다. 모델 학습이 완료된 이후, 학습 데이터 셋과 테스트 데이터 셋에 대하여 해당 레이블이 차지하는 비율은 대략 0.1%~0.3% 정도였습니다. 이후 학습 데이터셋에서 해당 레이블의 실제 정답의 분포를 살펴보았을 때 절반 이상의 결과가 ‘경고’ 였고, 나머지 클래스는 상대적으로 적은 비율이었습니다. 해당 레이블의 비율이 상당히 적었기 때문에 제출점수에는 큰 영향을 끼치지는 않았지만 이스트소프트 팀은 아래 두가지 방법의 후처리를 시도하여 제출해 보았습니다.
- $ (정상=True), (경고=True) $ 은 모두 '경고'로 처리한 경우, 학습 데이터 셋에서 가장 많은 비율을 차지하는 클래스로 정답을 주었습니다.
- $ (정상=True), (경고=True) $ 중에서 높은 확률의 클래스로 처리한 경우, '정상'과 '경고'가 True인 확률 값을 조사하여 더 높은 확률 값을 가지는 클래스로 정답을 주었습니다.
-
total classification: 이 문제의 3가지 레이블을 하나로 통합하여 생각 가능합니다. 각 레이블의 상태를 묶어서 하나의 클래스로 본다면, 기존 3-레이블 3-클래스에서 1-레이블 27-클래스의 모델 구조를 생각할 수 있습니다. 다시 말해서, 27개의 클래스를 분류하는 모델 1개로 볼 수 있습니다.
-
regression: double classification 모델의 아이디어를 회귀모델에 적용하였습니다. 정상, 주의, 경고를 각각 2,1,0 과 같은 수에 대응시켜 회귀모델 학습을 해보았습니다.
이스트소프트팀은 레이블을 여러가지 관점에서 바라보고 다양한 모델 구조를 학습해 보았으나, 결과적으로는 가장 기본적인 vanilla classification 모델이 가장 좋은 성능을 보여준다는 것을 확인할 수 있었습니다.
3. Feature engineering
데이터의 feature를 가공하는 방법은 여러가지가 있으며, 가공 방법에 따라 우리가 구성한 머신러닝/딥러닝 모델의 성능에 많은 영향을 끼치게 됩니다. 이스트소프트 팀은 XGBoost기반의 모델을 사용하면서 XGBoost의 장단점을 이용하여 데이터를 가공하였습니다. XGBoost의 주요 특성과 그에 맞는 기법들을 아래와 같이 적용하였습니다.
- 결정 트리 모델은 인공신경망 모델과 다르게 데이터의 스케일에 영향을 크게 받지 않습니다. 따라서 데이터의 정규화 등의 전처리 작업을 하지 않아도 됩니다.
- 결측값을 모델 학습에 활용할 수 있습니다. 인공신경망 모델에서는 결측값은 별도의 방식으로 채워주지 않으면 학습을 시키기 어려운 반면에 XGBoost모델은 결측값도 학습에 이용할 수 있습니다. 앞의 항목과 같이 적용하여 데이터의 전처리 작업을 하지 않고 결측값을 모델 학습에 반영하였을 경우 약간의 성능 상승을 볼 수 있었습니다.
- Boosted 결정 트리는 적은 수의 feature들에 대하여 과적합이 비교적 덜 발생하는 장점이 있습니다. 하지만 레이어가 깊어질수록 feature들을 조합하여 새로운 feature를 계산 및 학습하는 방식의 인공신경망 모델과 달리 기존 feature들의 적당한 연산을 통해 만들어진 새로운 feature에 대한 학습은 불가능한 단점이 존재합니다. 따라서 기존 feature들의 적당한 연산으로 얻을 수 있는 XGBoost 모델이 학습하지 못한 새로운 feature들을 추가해 보고 모델 성능의 변화를 살펴보았습니다. 이후 새로운 feature들을 추가할 때마다 유의미한 성능 상승을 볼 수 있었습니다.
4. Cross validation / Ensemble
이번 대회에서 중요했던 마지막 요소는 모델의 일반화(generalization) 성능 이었습니다. 대회 기간동안 제출하는 모델의 성능은 테스트 셋의 30%(Public 데이터 셋)에 대한 점수만 볼 수 있었고, 최종 결과는 나머지 70% 테스트 셋(Private 데이터 셋)의 점수를 합산한 결과였습니다. 우리가 제출한 모델이 대회 기간동안 높은 점수를 얻었더라도, 과적합 모델이라면 최종점수는 낮아질 수 있는 가능성이 있었기 때문에 모델의 과적합을 피하는 전략도 고려해야 했습니다.
우리 팀은 머신러닝 대회에서 XGBoost 사용이 처음이었기 때문에 XGBoost 라이브러리 사용에 많은 우여곡절을 겪었습니다. 특히 XGBoost에서 제공하는 여러가지 parameter들이 있었으나, 학습 데이터 및 모델의 parameter 특성들을 제대로 파악하지 못한 상태에서 최적의 모델 parameter를 찾는 것은 매우 어려운 작업이었습니다. 그래서 parameter 설정은 기본으로 하고 모델의 일반화 성능을 위하여 k-fold 교차검증(cross validation)법으로 모델 k개를 학습한 후에 이 모델들을 하나로 합치는 앙상블(ensemble) 방법을 적용하였습니다.
k-fold 교차검증은 고정된 데이터 셋으로 학습 및 검증(=Public 데이터 셋에 대한 테스트)을 반복하게 될 경우, Public 데이터 셋에 과적합된 모델이 생길 가능성을 피하기 위한 방법 중에 하나 입니다. 아래 그림과 같이 기존에 가지고 있는 학습 데이터 셋을 k개의 fold로 나눈 후, 각각을 새로운 학습 데이터 셋과 검증(validation) 데이터 셋으로 분리하여 모델 학습에 이용합니다.
세부적으로는 다음과 같이 제출하는 전략을 구성하였습니다.
- 기존 학습 데이터 셋을 섞음(shuffle)
- 자체적인 성능 검증을 위하여 앞의 섞여져 있는 데이터 셋을 8:2로 나누어 8의 비율에 해당하는 데이터 셋으로 5-fold 교차검증 모델 학습
- 학습된 5-fold 교차검증 모델을 앙상블 하여 2의 비율에 해당하는 데이터 셋에 대해 검증 후, 성능이 좋을 경우 제출
- 제출된 모델이 성능이 좋을 경우 전체 데이터 셋을 사용하여 5-fold 교차검증 모델 학습 후 제출 (*주어진 학습 데이터를 최대한 활용하기 위한 선택)
5개의 모델을 하나로 합치는 앙상블 방법으로는 아래와 같은 방법들을 시도해 보았습니다.
그 결과, 첫 번째 방법(모델 평균)이 가장 좋은 성능을 보여주었습니다.
모델 평균: 아래 그림과 같이 각 클래스별로 모델들이 예측한 확률(probability)들을 평균하여 그 중에 가장 높은 값을 가지는 클래스를 선택합니다.
가장 강한 주장 모델 선택: 각 클래스별로 모델들이 예측한 확률 중에 가장 높은 값을 가지는 클래스를 선택합니다.
다수결 투표: 각 모델들의 예측값(클래스)을 조사하여 다수의 모델이 예측한 클래스를 선택합니다.
다수결 투표 - 동률 발생 시: 5개의 모델이 3개의 클래스 중에 하나를 예측하기 때문에 아래 그림과 같이 ‘정상’에 2표, ‘주의’에 1표, ‘경고’에 2표를 주는 경우의 동률이 발생할 수 있습니다. 동률이 발생하는 경우 이에 해당하는 모델의 클래스 확률값을 조사하여 높은 확률값을 가지는 클래스를 선택합니다.
3. 참가 결과
대회 진행 중에는 자신이 제출한 모델의 테스트 Public 데이터 셋(테스트 셋의 30%)에 대한 점수들을 확인 할 수 있으며, 대회 종료 전까지 테스트 Private 데이터 셋(Public 데이터 셋을 제외한 나머지 70%)에 대한 점수를 고려하여 최종 모델 2개를 선택 후 제출해야 합니다.
이후 대회 종료 시점에는 각 팀들이 제출한 2개 모델에 대하여 Private데이터 셋의 점수 및 최종 점수(0.3*Public점수+0.7*Private점수)를 계산하여 최종 점수가 높은 순으로 순위를 매깁니다. 각 문제별로 1위부터 5위까지의 팀은 재현성 검증을 위하여 주최측이 제시한 양식에 맞춰 모델 파일을 제출하고 재현성이 검증된 팀에 한하여 최종 순위를 정하게 됩니다.
이스트소프트-팀명 deepest_04는 수치해석 분야의 8번 문제에 도전하여, 1위를 달성하였습니다. 또한 이미지 분야의 3번 문제에서 팀명 est_snow도 2위를 달성하는 성과를 보여주었습니다.
4. 앞으로의 계획 및 대회 참가 소감
이스트소프트는 앞으로 해당 기술을 금융 분야에 적용하여 투자자들이 거래가 집중되어 있는 종목들에서 겪을 수 있는 위험도(risk)를 알려주는 솔루션 개발을 진행 중에 있습니다. 경진대회 문제와 비슷한 관점으로 보자면, 거래 집중종목들에 투자하려 할 때 해당 종목들의 위험성(변동성이 크거나 갑작스러운 급락/급등의 경우)을 ‘안전’, ‘주의’, ‘위험’과 같은 클래스로 분류하는 문제로 접근 할 수 있습니다. 또한 딥러닝기반 모델의 경우 모델이 예측한 값에 대한 원리를 설명하기 불가능하지만, XGBoost기반의 모델은 적은 수의 feature들에 대하여 결정 트리로 학습이 되기 때문에 결정 트리에 사용된 feature들의 정보를 이용해 어떤 feature들이 예측에 더 크게 관여했는지 등의 정보를 알 수 있습니다. 따라서 자사 솔루션을 사용하는 고객들에게 투자 위험도 예측에 관한 원리에 대해 설명해 드릴 수 있습니다.
마지막으로 경진대회 참가를 통해 느낀 소감을 간단하게 공유하며, 2021년 인공지능 경진대회 참가기의 글을 마치도록 하겠습니다.
본 대회는 모두에게 공개가 되어 있으며 누구나 사용할 수 있는 기학습된 모델(pre-trained model)의 구조 및 weight를 사전에 신청 후 허가받으면 사용할 수 있는 규정이 있었습니다. 이미 학습되어 있는 모델을 이용하는 것은 성능 향상에 매우 중요한 요소입니다. 이미지와 자연어 분야에서는 task별 성능좋은 유명한 모델들이 많이 있기 때문에 해당 분야 참가자들은 수많은 기학습 모델들을 신청하는 모습을 볼 수 있었습니다.
하지만 이스트소프트 팀을 포함한 수치해석분야 참가자들은 기학습된 모델 사전신청을 한 경우가 없었다는 점은 매우 놀라웠습니다. 이미지와 자연어 분야와 다르게 수치해석분야의 경우 데이터의 특성과 해결해야 하는 문제들의 종류가 매우 다양하기 때문에, 그에 맞는 학습된 모델을 찾는 것은 매우 어려운 일이기 때문에 사전신청의 비율이 적지 않았을까 라는 생각이 듭니다. 딥러닝 모델이 아닌 XGBoost를 사용하며 문제해결을 하는 과정에서 좀 더 넓은 시야를 가질 수 있었습니다. XGBoost를 사용하여 1위를 달성한 사례를 만들어 냈다는 점에서 이번 대회 참가는 좋은 경험이 되었습니다.
대회 진행 중에 점수가 기록된 리더보드의 타임라인이 없지만, 1위를 달성하는 과정이 매우 이상적 이었습니다. 대회 초중반에는 중상위권 등수에서 정체되어 있다가, 후반부로 들면서 점수상승과 함께 대회 종료 몇시간 전에야 Public 데이터 1위를 달성할 수 있었습니다. 오히려 이런 드라마틱한 과정이 보다 값진 결과로 느끼게 해준것 같습니다. 또한 가장 마지막에 제출한 모델이 가장 높은 점수를 받은 것 또한 대회참가의 만족도를 높여주었다고 생각합니다.
앞으로도 이스트소프트와 자사 기술 솔루션 개발에
많은 관심과 격려 부탁드립니다.
감사합니다.
참고문헌
[1] https://aiconnect.kr/main/competition/list
[2] https://en.wikipedia.org/wiki/XGBoost
[3] https://github.com/dmlc/xgboost/tree/master/demo#machine-learning-challenge-winning-solutions
[4] https://www.researchgate.net/figure/A-simple-example-of-visualizing-gradient-boosting_fig5_326379229
[5] https://jrc-park.tistory.com/m/166?category=0
[6] https://devkor.tistory.com/entry/Soft-Voting-과-Hard-Voting
[7] http://www.aitimes.com/news/articleView.html?idxno=139557