1. 계획 설정
가. 문제 인식
나는 평소 해외축구를 즐겨 본다. 특히 토트넘 핫스퍼 팬이라 EPL(English Premier League) 경기를 자주 챙겨보는 편이다. EPL은 세계 최고의 축구 리그로 세계 최고의 선수들이 모여 있다. 나의 경우 많은 축구 경기 결과를 확인하고 있음에도 불구하고 내가 예측한 대로 축구 경기가 흘러가지 않는 경우가 많고, 특히 내가 응원하는 팀이 패배할 경우 많은 상실감을 느끼기도 한다. 이런 상황에서 내가 EPL 경기 결과를 예측할 수 있다면 좋을 것 같았고, 주어진 데이터를 활용한 딥러닝 알고리즘으로 본 문제를 해결하려고 한다.
나. 관련 조사 시행
EPL 승부예측을 위해 여러 관련 데이터를 조사하였고, 그 결과 다음과 같은 데이터를 모을 수 있었다.
- football-data.org: 축구 경기, 대회, 팀, 선수별 여러 데이터를 제공해주는 무료 API 사이트
링크: https://www.football-data.org/
- FootyStats: 년도별, 선수별 스탯 csv 데이터(유료)
링크: https://footystats.org/kr/download-stats-csv?season=20062007
- kaggle EA Sports FC 24 complete player dataset(csv 파일): 2024년 선수들의 FIFA 능력치
링크: https://www.kaggle.com/datasets/stefanoleone992/ea-sports-fc-24-complete-player-dataset
- kaggle FIFA 23 complete player dataset, FIFA 22 complete player dataset, Fifa 21 Player Ratings: 2023, 2022, 2021년 선수들의 피파 능력치
링크: https://www.kaggle.com/datasets/stefanoleone992/fifa-23-complete-player-dataset,
https://www.kaggle.com/datasets/stefanoleone992/fifa-22-complete-player-dataset,
https://www.kaggle.com/datasets/ahmettezcantekin/fifa-21-player-ratings
- fifa player_stats.csv (from Github): 2005~2020년의 선수들의 FIFA 능력치
링크: https://github.com/lbenz730/fifa_model
- EPL 클럽별 스탯, 순위 csv 데이터 (from Github)
링크: https://github.com/hyunilyoo/epl-prediction/tree/master/data
- kaggle Premier League Matches results 1993-2023 dataset
링크: https://www.kaggle.com/datasets/evangower/premier-league-matches-19922022
다. 문제 해결 방안 설계
이용할 데이터셋: 경기할 당시의 홈/어웨이 승률, FIFA player stats 데이터셋
이용할 모델: RNN, LSTM 등 시계열 데이터를 위한 모델 – 옛날 경기일수록 현재의 예측에 더 영향을 주지 않을 것이라 판단하여 본 문제를 시계열 데이터 예측으로 간주하였다.
2. 이론적 배경 – 사용한 딥러닝 모델: RNN, LSTM
가. 딥러닝
딥러닝은 인공지능(AI)과 머신러닝의 중요한 부분으로, 복잡한 데이터에서 패턴을 학습하는 데 사용되는 심층 신경망 기술을 말한다. 딥러닝은 데이터의 추상적인 특징을 자동으로 학습할 수 있도록 한다.
나. 딥러닝 모델
1). 순환 신경망(RNN)
구조 및 기능: RNN(Recurrent Neural Network)은 시퀀스 데이터 처리에 적합한 신경망 구조이다. RNN의 핵심적인 특징은 네트워크 내의 순환(loop)이 있어서, 이전의 정보를 기억하면서 새로운 입력에 대해 반응할 수 있다는 점이다. 기본적인 RNN 셀은 크게 두 부분으로 나눌 수 있는데, 이는 현재 시점의 입력을 받는 부분과 이전 시점의 출력(상태)을 받는 부분이다.
1. 현재 입력(X_t): 시간 t에서의 입력이다.
2. 이전 상태(h_{t-1}): 시간 t-1에서의 출력(혹은 상태)이다. 이전의 정보를 담고 있으며, RNN의 핵심적인 요소이다.
3. 현재 상태(h_t): 현재 입력과 이전 상태를 기반으로 계산된다. 이것은 현재 시점의 출력으로도 사용되며, 다음 시점으로 전달되어 이전 상태 정보를 제공한다.
4. 가중치(W): 입력과 이전 상태에 적용되는 가중치이다. 학습 과정에서 최적화된다.
작동 과정
1. 초기 상태 설정: 최초의 이전 상태(h_0)는 보통 0 또는 무작위 작은 값으로 초기화된다.
2. 시간 t에서의 계산:
- 현재 시점 t의 입력(X_t)과 이전 시점 t-1의 상태(h_{t-1})를 받는다.
- 이 두 정보를 가중치 W와 결합하고, 활성화 함수(예: tanh, ReLU)를 통해 현재 시점 t의 상태(h_t)를 계산한다.
- 이 상태(h_t)는 필요에 따라 출력으로 사용되며, 다음 시점 t+1의 계산을 위해 이전 상태로 전달된다.
3. 순환 반복: 모든 시퀀스 데이터가 네트워크를 통과할 때까지 이 과정을 반복한다.
특징
- 메모리 기능: RNN은 이전의 정보를 현재의 결정에 반영할 수 있는 내부 메모리를 가지고 있다. 이를 통해 시퀀스의 컨텍스트를 이해하고, 시간적인 패턴을 학습할 수 있다.
- 가변 길이 입력 처리: RNN은 가변 길이의 시퀀스 데이터를 처리할 수 있다. 이는 자연어 처리(NLP), 시계열 분석 등 다양한 분야에서 RNN이 유용하게 사용될 수 있는 이유 중 하나다.
- 장기 의존성 문제: 기본 RNN은 장기간에 걸친 의존성을 학습하는 데 어려움이 있다. 이를 해결하기 위해 LSTM(Long Short-Term Memory) 같은 고급 RNN 구조가 개발되었다.
2). LSTM(Long Short-Term Memory)
구조 및 기능: LSTM은 순환 신경망(RNN)의 한 종류로, RNN의 장기 의존성 문제를 해결하기 위해 설계되었다. LSTM의 핵심은 '셀 상태'라는 내부 메커니즘을 통해 정보를 장기간 저장하고, 필요에 따라 정보를 추가하거나 삭제하는 능력이다. LSTM 셀은 크게 세 가지 주요 게이트로 구성되는데, 입력 게이트, 삭제 게이트, 출력 게이트가 그것이다. 이 게이트들은 셀 상태와 출력을 조절하는 데 핵심적인 역할을 한다.
1. 입력 게이트: 새로운 정보를 셀 상태에 추가할지 결정한다.
2. 삭제 게이트: 셀 상태에서 어떤 정보를 삭제할지 결정한다.
3. 출력 게이트: 셀 상태를 기반으로 어떤 값을 출력할지 결정한다.
작동 과정
1. 삭제 게이트: 시간 t에서 첫 번째 단계는 어떤 정보를 셀 상태에서 삭제할지 결정하는 것이다. 이전 상태 (h_{t-1})과 현재 입력 (x_t)를 받아 시그모이드 함수를 적용한다. 이 함수의 출력은 0과 1 사이의 값으로, 셀 상태의 각 부분이 얼마나 중요한지를 결정한다(0은 "전혀 중요하지 않음", 1은 "매우 중요").
2. 입력 게이트: 다음으로, 어떤 새로운 정보를 셀 상태에 저장할지 결정한다. 이 과정은 두 부분으로 나뉜다. 첫 번째는 시그모이드 함수를 사용해 어떤 값을 업데이트할지 결정하고, 두 번째는 tanh 함수를 사용해 새로운 후보 값 (C_t)를 생성하여 셀 상태에 추가할 수 있는 값을 생성한다.
3. 셀 상태 업데이트: 이전 단계에서 삭제할 정보를 제거하고, 새로운 정보를 추가함으로써 셀 상태 (C_{t-1})를 업데이트한다. 이는 이전 셀 상태에서 삭제 게이트의 출력에 따라 일부 정보를 제거하고, 입력 게이트에서 생성된 새로운 후보 값을 추가함으로써 이루어진다.
4. 출력 게이트와 셀 출력: 마지막 단계는 셀의 출력, 즉 다음 상태 (h_t)를 결정하는 것이다. 시그모이드 함수를 사용해 셀 상태의 어떤 부분을 출력할지 결정하고, 셀 상태를 tanh 함수에 통과시켜 -1과 1 사이의 값을 얻은 다음, 이를 시그모이드 게이트의 출력과 곱하여 실제 출력 (h_t)를 결정한다.
특징
- LSTM은 장기 의존성 문제를 해결하기 위해 설계되었으며, 복잡한 시퀀스 데이터에서 중요한 패턴을 학습할 수 있다.
- 다양한 시퀀스 데이터 처리 작업(기계 번역, 음성 인식, 텍스트 생성 등)에 사용된다.
다. 축구 데이터 - FIFA rating
EA Sports에서는 Mueller-Moehring의 EA 프로듀서 팀이 감독하여 선수들의 데이터를 관리하고 있다. 그 팀은 25명의 EA 프로듀서와 400명의 외부 데이터 기여자로 구성되어있다. 그러나 EA Sports의 직원이 매 경기마다 모든 선수를 지켜보는 것은 불가능하기 때문에, 6,000명 이상의 자원봉사자로 구성된 팀이 1년 내내 선수 데이터베이스를 유지하고 업데이트하는 데 도움을 준다고 한다.
선수의 최종 전체 등급이 계산되는 방식은 축구적 능력치들과 선수의 국제적 인지도, 포지션에 따라 다르게 결정된다. 기존 세부 능력치에 골키퍼, 수비수, 미드필더, 공격수에 따라 다른 포지션 계수와 능력치를 곱하고 국제적 평판의 영향까지 반영하여 최종 등급이 계산된다. 또한, 본 등급은 매년 1~2월에 업데이트된다. 본 탐구에서는 이 선수의 최종 등급을 데이터로 이용할 것이다.
라. 선행 논문 탐색
1). European Soccer League Outcome Predictor, Sang Ahn(Stanford University) 외, 2022.
- dataset:
이 논문에서는 Kaggle에서 가져온 2008/2009~2015/2016 시즌에 걸쳐 유럽 상위 5개 축구 리그의 경기 데이터를 활용한다. 추출된 기능에는 경기 형식, 공격 및 수비 성능(득점/실점 수), Bet365의 경기 전 베팅 확률 등 팀 수준 데이터가 포함된다.
- 사용된 알고리즘 및 모델:
사용된 핵심 알고리즘은 기존 팀 지표와 함께 플레이어 수준 데이터로 보강된 완전 연결 신경망이다. 모델 아키텍처는 Leaky ReLU 활성화 함수, 소프트맥스 출력 레이어, 향상된 일반화를 위한 드롭아웃 정규화를 갖춘 5개의 숨겨진 레이어로 구성했다. 활용되는 손실 함수는 범주형 교차 엔트로피이다. 또한 효율적인 경사 하강을 위해 Adam 최적화를 사용했다.
- 결과:
개발된 모델은 팀 ELO 점수에만 의존하는 기본 모델에 비해 향상된 예측 정확도를 보여주었다. 테스트셋에서 기본 모델은 50.46%의 정확도를 달성하여 기본 정확도 45.62%를 능가했다. 그러나 모델은 본질적으로 더 예측하기 어려운 무승부 결과를 예측하는 데 특히 어려움을 겪는다고 한다.
2). Football Match Prediction using Deep Learning, Ahmed Amr Awadallah (Stanford University) 외, 2020.
- dataset:
연구진은 2008/2009시즌부터 2018/2019시즌까지 프리미어리그 경기 데이터(총 4180행 x 78열)를 분석했다.
예측에 사용된 최종 기능에는 홈 및 원정 팀 Elo 점수, 마지막 경기 이후 일수, 승률 및 무승부 비율, 최근 성적 동향, 현재 시즌 통계가 포함되었다.
- 사용된 알고리즘 및 모델:
추출된 24개의 특징을 기반으로 일치 결과를 예측하기 위해 가중 행렬 초기화를 사용하여 기준 모델로 구현하는 로지스틱 회귀를 사용했다. 또한, Random Forest Classifier를 사용하여 데이터의 비선형 패턴을 포착하여 각 경기 결과에 대한 예측 확률을 제공하는 데 활용했다. 은닉계층에 300개 및 100개의 노드가 있는 3계층 완전히 연결된 네트워크를 사용하고 소프트맥스 활성화 및 교차 엔트로피 손실을 사용하여 30,000 에포크 동안 훈련한 신경망도 이용했다. LSTM(Long Short-Term Memory) 또한 LSTM 레이어와 소프트맥스 출력으로 매치 데이터의 순차적 정보를 캡처하는 데 활용했다.
- 결과:
로지스틱 회귀는 약 60.95%의 train data 정확도와 53.68%의 test data 정확도를 달성했다. Random Forest Classifier는 train data 정확도는 78.5%로 나타났지만 test data 정확도는 40.66%로 낮아 과적합 문제가 있었다. 신경망 중 가장 성능이 좋은 아키텍처는 30,000 에포크 훈련 이후 train data 정확도가 61.46%, test data 정확도가 56.36%였다. LSTM 같은 경우 train data 정확도는 59.5%, test data 정확도는 58.2%로 다른 모델보다 뛰어난 성능을 보였지만 무승부 예측에는 여전히 성능이 좋지 못했다.
3. 모델링
1). 승부 예측 인공지능 개요
- 보유한 데이터: 년도별 프리미어리그 경기 결과 데이터(1993-2024), 년도별 선수들의 피파 능력치(전체 능력치 및 세부 능력치, 2005-2024)
- 이용할 데이터: 각각의 팀의 FIFA rating 평균 및 최고 rating, 각각의 팀의 홈/어웨이 승률
- 데이터 사용 이유: 각각의 팀의 FIFA rating의 평균 및 최고 점수가 각각의 팀의 수준을 나타내고, 또한 홈/어웨이 승률으로 각 팀의 상대팀에 대한 우위 정도를 파악할 수 있기 때문에 각각의 팀의 승률을 데이터로 이용한다.
- 데이터 전처리: 년도별 각각의 팀의 FIFA rating(전체 능력치) 평균 및 최고 rating(전체 능력치)을 정리한 데이터 셋을 만든다. 또한, 년도별 프리미어리그 경기 결과 데이터를 통해 각각의 팀의 년도별 홈/어웨이 승률을 정리한 데이터 셋을 만들어 학습에 활용한다.
2). 딥러닝 모델 사용
- 우선적으로 사용할 모델: RNN, LSTM
이유: 축구 팀의 선수진은 시간이 지날수록 변화하고 축구 전술 양상 및 규칙도 시간에 따라 변화하기 때문에 비교적 과거의 데이터는 현재에 영향을 미치는 정도가 적을 수밖에 없다. 따라서 현재의 데이터가 미래의 예측에 보다 많은 영향을 미치게 하기 위해서 시계열 데이터를 다루는 분야에 장점이 있는 RNN과 LSTM 모델을 사용할 것이다.
4. 데이터 전처리
가. 각각의 팀의 홈/어웨이 승률
프리미어리그의 승강제로 인하여 각각의 년도가 진행되는 과정에서 리그 구성 팀들이 매 시즌마다 바뀌었다는 점을 고려하여 그 전 시즌에 강등된 팀의 승률을 데이터의 평균으로 대체하였다.
선행 연구 분석 과정에서 각각의 연구가 무승부 예측에 약점을 보였다는 점을 고려하여 홈 승률, 어웨이 승률과 함께 무승부 비율을 추가로 계산하여 특징으로 추출하였다.
최종 데이터
나. 각각의 팀의 FIFA rating 평균 및 최고 rating
각각의 년도별 FIFA rating 데이터셋에서 각각의 팀명은 어떤 데이터에서는 풀 네임으로 쓰고, 어떤 데이터에서는 줄여서 쓰는 등 그 명칭이 서로 다른 문자열 비교에서의 문제가 발생했다. 따라서 일일이 각각의 데이터에서 특정 팀의 명칭을 찾아서 수정하는 작업을 변경했다.
ex) 승률 데이터 팀명 – Bolton, 평점 데이터 팀명 – Bolton Wanderers → Bolton으로 모두 수정.
특정 년도에 특정 팀이 FIFA 게임 데이터셋에 없어서 선수가 한 명도 없게 계산되어버리는 경우가 존재했다. 이 경우 그 FIFA rating 평균 및 최고 rating을 평균값으로 대체해주었다. 이 과정을 모두 거쳐 프리미어리그의 모든 팀에 대해 FIFA rating 평균 및 최고 rating을 데이터셋으로 정리했다.
다. 최종 training dataset, test dataset
앞서 수집하여 만든 2개의 데이터셋을 합쳐서 최종 데이터셋을 만들었다. 먼저, 각각의 training data와 test data의 칼럼은 'Year','Home','Away','Home_homewin','Away_awaywin','Home_draw','Away_draw','Home_avg','Home_MAX','Away_avg','Away_MAX' 이다. 각각의 feature의 의미를 순서대로 설명하면 (경기가 치뤄진 년도), (홈 팀), (어웨이 팀), (홈 팀의 홈 승률), (어웨이 팀의 어웨이 승률), (홈 팀의 무승부 확률), (어웨이 팀의 무승부 확률), (홈 팀의 평균 FIFA 평점), (홈 팀의 최대 FIFA 평점), (어웨이 팀의 평균 FIFA 평점), (어웨이 팀의 최대 FIFA 평점)이다. training data의 training label의 칼럼은 'R'(Result-경기 결과) 하나이고, 이는 'D'(무승부), 'H'(홈 팀 승리), 'A'(어웨이 팀 승리) 3개 중 하나로 구성된다.
training dataset은 2005~2023년의 경기 데이터셋을 바탕으로 구성했고, test datset은 2024년의 경기 데이터셋을 바탕으로 구성했다. (test dataset 구성에서 그동안 한 번도 프리미어리그에 속하지 않았던 Luton Town은 데이터 부족으로 이 팀이 참여한 경기를 모두 제외했다.)
그 결과 훈련 데이터셋은 7220경기, 테스트 데이터셋은 328경기로 만들어졌다.
5. 알고리즘 설계
내가 개발할 인공지능의 알고리즘은 간단하게 "입력 → 모델 → 출력"으로 표시할 수 있다. 이때 입력 데이터는 [‘Year','Home','Away','Home_homewin','Away_awaywin','Home_draw','Away_draw','Home_avg','Home_MAX','Away_avg','Away_MAX']의 feature를 가진 위에서 전처리한 데이터이다. 본 데이터는 시계열 데이터이므로 모델으로는 RNN 기반 모델(RNN, LSTM 등)을 사용할 것이다. 출력 데이터는 각각의 경기의 결과 'R' 만 출력하면 된다.
먼저 입력 계층에는 (배치 크기, 시퀀스 길이, feature 수)의 형태의 입력 데이터가 들어온다. RNN 계층은 RNN/LSTM 계층이 들어가는 층이고, 양방향 RNN이나 RNN 유닛 수 증가 등을 통해 성능 향상을 시도해볼 수 있다. 완전 연결 계층은 RNN 계층의 출력을 받아서 최종 예측을 위한 층이고, 활성화 함수는 relu 함수 등으로 설정할 수 있다. 출력 계층은 softmax 함수를 활성화 함수로 사용하는 (‘H’, ‘D’, ‘A’) 중 하나로 분류하는 3진 분류 계층이다. 손실함수로는 'categorical_crossentropy' 등을 사용할 수 있다.
6. 모델 개발 및 시행착오
가. LSTM
학습 데이터셋은 현재 2005년부터 2023년까지 순서대로 정리되어있는 상태이고 그 팀명과 연도도 열에 포함이 되어있다. 그러나 데이터의 순서가 연도를 나타내고, 그 데이터의 승률, FIFA 평점 등이 그 팀을 특정지으므로 연도와 홈/어웨이 팀명은 학습에 필요가 없다. 따라서 연도와 홈/어웨이 팀명은 훈련 데이터에서 제거하였다. 또한 라벨은 H(홈 팀 승리), A(어웨이 팀 승리), D(무승부) 이렇게 3개로 모두 문자로 되어있다. 따라서 StringLookup 레이어를 사용하여 문자열 라벨을 인덱스로 변환했다. 한편, 훈련 데이터셋을 train data와 validation data로 8:2 비율로 분할하였다. 이때, LSTM 모델의 학습에서는 시계열 데이터 분석이기 때문에 현재 시간 순서대로 정리되어있는 훈련 데이터가 마구 섞이면 안되므로 shuffle=False로 설정해주어 섞이는 것을 막았다. 이때, LSTM 모델의 학습에서는 시계열 데이터 분석이기 때문에 현재 시간 순서대로 정리되어있는 훈련 데이터가 마구 섞이면 안되므로 shuffle=False로 설정해주어 섞이는 것을 막았다. 다음으로 모델 구조를 정의했다. 입력 데이터의 크기(data.shape[1])을 이용하여 입력 계층을 추가하고, LSTM 레이어를 추가한 뒤, 완전 연결 계층과 출력 계층을 추가하였다. 이때 완전 연결 계층의 활성화 함수는 ReLU를 사용했고, 출력 계층의 활성화 함수로는 다중 분류이므로 softmax를 사용했다. 손실 함수로는 sparse_categorical_crossentropy를, 옵티마이저로는 adam을 사용했다. 이후 모델을 훈련시켰는데, 이때도 LSTM 모델의 시계열 데이터 분석의 특징을 살리기 위해 shuffle=False로 설정해주었다. 여러 번 훈련시켜본 결과 데이터셋도 작고 해서 에포크는 10번, 배치 사이즈는 16 정도로 했을 때가 결과가 가장 잘 나와서 하이퍼파라미터는 이렇게 설정해주었다. 또한 테스트 데이터도 훈련 데이터와 마찬가지로 전처리해준 다음 모델 테스트도 해 보았다.
학습 과정에서의 손실(Loss)과 정확도(Accuracy)이다. 학습이 진행될수록 미세하지만 손실이 줄어들고, 정확도는 증가하고 있다. 그러나 에포크가 지나갈수록 그 학습되는 정도가 거의 없어서 에포크는 10번만 설정한 것이다. 또한 정확도를 보면 훈련 정확도와 validation 정확도가 거의 차이가 나지 않는 것으로 보아 과적합의 우려는 적은 것으로 보인다. 테스트 손실과 정확도는 다음과 같았다 - Test Loss: 0.9834573268890381, Test Accuracy: 0.5304877758026123.
나. 단순 RNN
앞선 LSTM 모델에서 RNN 계층만 단순 RNN(SimpleRNN)으로 바꾸어서 다시 훈련을 시켜보았다. 이외 모든 전처리 과정과 하이퍼파라미터, 손실함수 및 활성화 함수 등은 동일하게 설정해주었다.
훈련 과정에서의 손실 값 감소와 정확도 증가를 나타내는 그래프이다. LSTM보다 좀 더 울퉁불퉁하게 학습이 진행되었음을 알 수 있었다. 이 모델 역시 훈련 정확도와 validation 정확도의 차이가 적은 편이다. 테스트 손실 및 정확도는 다음과 같았다. - Test Loss: 0.9831950664520264, Test Accuracy: 0.5365853905677795.
다. 양방향 LSTM
다음으로 RNN 계층에 과거, 미래의 정보를 모두 파악하게 해 준다는 양방향 RNN을 사용해보았다. 역시 다른 조건은 모두 동일하게 설정해주었다.
훈련 과정에서의 손실, 정확도 변화이다. 그다지 그 변화가 크진 않은 것으로 보아 제대로 학습이 되고 있지는 않은 것으로 보인다. 최종 테스트 손실과 정확도는 다음과 같았다 - Test Loss: 0.9807664155960083, Test Accuracy: 0.5274389982223511.
라. 선행논문 참고
RNN 기반 모델을 3개나 바꿔가며 사용해보아도 그 정확도가 약 53%로 거의 모두 같았고 진전이 보이지 않았다. 따라서 앞서 선행논문: European Soccer League Outcome Predictor, Sang Ahn(Stanford University) 외, 2022.에서 사용한 모델을 만들어서 직접 학습시켜 보았다. 논문에서는 다음과 같이 나와 있었다: “사용된 핵심 알고리즘은 기존 팀 지표와 함께 플레이어 수준 데이터로 보강된 완전 연결 신경망이다. 모델 아키텍처는 Leaky ReLU 활성화 함수, 소프트맥스 출력 레이어, 향상된 일반화를 위한 드롭아웃 정규화를 갖춘 5개의 숨겨진 레이어로 구성했다. 활용되는 손실 함수는 범주형 교차 엔트로피이다. 또한 효율적인 경사 하강을 위해 Adam 최적화를 사용했다.” 따라서 이에 맞게 모델 구조를 다시 설정했다.
학습 중의 loss 감소와 정확도 증가 그래프이다. loss는 초반에 급격히 감소하다가 이후 거의 감소하지 않았고, 훈련과 validation 값이 거의 같았다. 정확도는 꾸준히 증가하였으며, 오히려 훈련 정확도보다 validation 정확도가 더 높은 모습을 보였다. 최종 손실과 정확도는 다음과 같았다 - Test Loss: 1.002458095550537, Test Accuracy: 0.5640243887901306. 약 56.4%로 RNN을 이용한 모델보다 정확도가 더 높게 나온 모습을 볼 수 있었다. 기존 선행 논문에서 이 모델을 사용했을 때의 정확도가 50.46%였다는 점에서 이는 많은 발전이라고 볼 수 있다.
마. 드롭아웃 적용
가~라의 모델의 그다지 과적합의 모습은 보이지 않았지만. 더욱 성능을 높여보고 싶어서 LSTM 모델 구조에 드롭아웃을 적용시켜 보았다.
위는 학습 중의 손실, 정확도 변화이다. 드롭아웃을 적용한 결과가 매우 큰 부작용을 낳았다. train 정확도와 loss는 변할 생각을 않고, validation 정확도와 loss는 너무 큰 폭으로 왔다갔다 거렸다. 결국 실제 test 결과는 처참했다. - Test Accuracy: 0.22256097197532654.
바. 클래스 불균형 문제 해결 시도
가~라의 모델에서 볼 수 있듯 무승부 예측은 못하고 있다. 선행 논문에서 무승부 예측을 거의 하지 못한다는 결과를 본 이후 이를 막기 위해 무승부 확률까지 데이터셋에 넣어주었음에도 불구하고 무승부 예측은 못하고 있었다. 이는 무승부가 홈 팀 승리, 어웨이 팀 승리에 비해 그 클래스 개수가 적어서 발생하는 문제로 판단했고, 따라서 클래스 불균형 문제를 해결하기 위해 smote를 이용한 오버샘플링으로 데이터를 다시 균형이 맞게 만들어 주었다. 이후 선행 연구에서의 모델, 단순 RNN, LSTM 모델에 이 오버샘플링한 데이터를 적용시켜 각각 학습해 보았다. 그러나 드롭아웃 계층을 적용시켰음에도 불구하고 과적합이 심하게 된 모습을 보였다. 결국 실제 테스트 정확도도 세 개의 모두 모두 비슷하게 약 31% 정도로 매우 낮았다.
7. 사용자 친화적으로 개선
마지막으로 이 모델을 실제 사용자가 편리하게 쓸 수 있게 개선해주었다. 모델은 가장 높은 정확도를 보였던 라(선행논문 참고) 모델을 선택하였다. 사용자에게 홈 팀과 어웨이 팀을 입력받고, test 데이터로부터 모델이 승부 결과를 예측하는 데에 필요한 각 팀의 여러 데이터를 가져왔다. (승률, FIFA 평점 등) 이후 이 모델에게 예측을 시키고 그 결과를 출력하는 것으로 프로그램 코드를 짰다. 그 사용 예시는 아래와 같다.
8. 결론 및 소감
모델 학습 결과 여러 방식의 LSTM보다 선행 연구를 바탕으로 만든 모델로 학습시켰을 경우 보다 정확도가 높게 나왔다. 이 결과로부터 내가 LSTM, RNN 계층의 모델을 사용했을 때 결과가 더 잘 나올 것으로 예측했던 것이 그렇게 좋은 예측은 아니었다는 것을 알았다. 이는 기존 선행 연구와 내 데이터가 그 종류와 양상의 차이가 크다는 점에서 오는 것으로 보인다. 또한 선행 연구에 비해 내 데이터를 사용했을 때 동일한 모델에서 더 좋은 정확도를 찾아낸 것으로 보아 내 데이터가 선행 연구에서 쓴 모델과 더 잘 맞는다고 해석할 수 있었다. 결과적으로 많은 시도를 통해 55% 이상의 정확도를 이끌어냈다는 점에서 상당히 뿌듯했고 만족스럽다.
본 탐구를 진행하면서 많은 경험을 쌓을 수 있었다. “축구 승부 예측”이라는 목표를 정하고, 이 목표를 이루기 위한 모델 설계 및 데이터 수집, 전처리, 모델 학습과 수많은 시행착오를 통해 어느 수준 이상의 성과를 낼 수 있었다. 본 탐구를 통해 앞으로도 목표를 세우고 정보과학을 통해 이 목표를 해결해나가는 활동을 보다 수월하게 진행할 수 있을 것 같다.
'정보과학융합탐구' 카테고리의 다른 글
[정융탐] EPL 축구 경기 승부예측 AI 개발 프로젝트 (3) (0) | 2024.06.23 |
---|---|
[정융탐] EPL 축구 경기 승부예측 AI 개발 프로젝트 (2) (0) | 2024.05.27 |
[정융탐] EPL 축구 경기 승부예측 AI 개발 프로젝트 (1) (2) | 2024.04.06 |
[정융탐] EPL 축구 경기 승부예측 AI 개발 프로젝트 계획 (2) | 2024.03.23 |