courses
축구 예측은 어렵습니다. 득점이 적은 종목이라 굴절된 한 슈팅이 결과를 뒤집을 수 있고, 경기의 상당 부분이 운에 좌우되기 때문입니다. 대표팀 축구는 더 어렵습니다. 국가대표팀은 1년에 경쟁 경기 수가 손에 꼽힐 정도라, 클럽 경기보다 학습할 데이터가 훨씬 적습니다.
설상가상으로, FIFA는 이번 월드컵에서 과제를 더 어렵게 만들었습니다. 48개국으로 확대된 월드컵은 새로운 포맷을 도입했습니다. 12개 조에서 각 조 1, 2위가 자동 진출하고, 3위 팀 중 성적이 좋은 8팀도 추가로 진출합니다. 이 때문에 조별리그 향방을 예측하기가 특히 어렵습니다. 저는 이런 도전(과 축구)을 좋아하기 때문에, 바로 그 부분을 예측하기로 했습니다.
이는 제 EURO 2024 예측 프로젝트의 후속편으로, 거의 바닥부터 다시 만들었습니다. 지난번에는 전부 주피터 노트북에서 작업하며 경기당 가장 가능성 높은 단일 스코어라인만 예측했습니다. 이번에는 최신 결과를 수집하고 스스로 재학습하며, 대회 전체를 10,000번 몬테카를로 시뮬레이션하는 엔드 투 엔드 MLOps 파이프라인을 구축해, 경기 단위 예측을 각 팀의 진출 확률로 전환했습니다.
이 글에서는 프로젝트의 핵심을 간략히 안내합니다. 데이터와 피처, 재현성을 보장하는 MLOps 관행, 파이프라인 아키텍처, 그리고 대표팀 축구를 가장 잘 예측한 모델은 무엇인지까지요. 전체 코드는 프로젝트 저장소에서 확인할 수 있습니다. 그리고 물론, 모델이 꼽은 우승 팀도 알려드리겠습니다. (스포일러: 스페인과 아르헨티나를 각각 약 16%로 가장 높게 봅니다. 더 흥미로운 건 그 결론에 이르는 과정입니다.)
대회 분위기를 더 느끼고 싶다면, 저희 Data & AI World Cup 세션 녹화 영상을 보시거나, FIFA 월드컵 2026 예측 대회에 참여해 보세요. 우승자에게는 공식 월드컵 저지와 함께 Claude Enterprise 3개월 구독권이 제공됩니다. 실시간 리더보드도 확인하세요.
FIFA 월드컵 2026 예측
한눈에 보기
- 이 파이프라인은 2026년 FIFA 월드컵을 예측하는 엔드 투 엔드 MLOps로, 최신 대표팀 경기 결과를 가져와 대회 기간에는 2시간마다 Google Cloud에서 자동으로 재학습합니다.
- API-Football과 Elo 레이팅 데이터를 Bronze–Silver–Gold 메달리온 아키텍처로 처리하고, DVC로 버전 관리해 완전한 재현성을 확보했습니다.
- 다섯 계열의 열 가지 모델을 347경기 홀드아웃에서 비교했습니다. XGBoost가 근소하게 우승했지만 상위 다섯 모델은 거의 차이가 없었고, 팀 간 Elo 격차가 예측력의 대부분을 설명했습니다.
- 몬테카를로 시뮬레이션으로 대회를 10,000번 플레이해, 경기 단위 득점 예측을 각 팀의 진출 및 우승 확률로 전환했습니다.
- 2026년 6월 10일 기준, 모델이 꼽은 우승 후보는 스페인과 아르헨티나로 각각 약 16%입니다. 실시간 예측은 2시간마다 새로고침되는 Streamlit 대시보드에서 확인할 수 있습니다.
예측 뒤에 있는 데이터
예측의 품질은 투입되는 재료의 품질에 좌우됩니다. 우선 원재료부터 살펴볼 가치가 있습니다. 모델은 두 가지 실시간 데이터 소스에서 학습하고 이를 하나의 정돈된 피처 테이블로 변환합니다.
데이터 출처
모든 것은 두 곳에서 출발합니다. API-Football은 경기 일정과 경기별 통계를 제공합니다. 누가 누구와 언제, 어디서 경기했으며 결과가 어땠는지까지요. eloratings.net은 모든 국가대표팀의 Elo 레이팅을 제공합니다.
Elo 레이팅은 팀의 전력을 하나의 숫자로 표현한 값입니다. 모든 팀은 이 스케일 어딘가에 위치하며, 경기 후에는 레이팅이 업데이트됩니다. 더 강한 팀을 이기면 많이 오르고, 더 약한 팀에게 지면 크게 떨어집니다. 체스에서 유래해 축구에도 잘 맞도록 응용된 개념입니다. 전체 개념이 궁금하시다면, 이전 DataCamp 글에서 2022 월드컵을 배경으로 직관을 자세히 설명합니다.
두 소스를 결합해 2018년 이후 약 6,900건의 A매치로 구성된 Gold 데이터셋을 만들어 학습합니다.
모델이 예측하는 것
여기서 중요한 설계 선택이 나옵니다. 승/무/패 결과를 직접 예측하는 대신, 모델은 더 세밀한 값을 예측합니다. 바로 각 팀이 경기에서 넣는 득점 수입니다. 축구의 득점 수는 좋은 근사로 푸아송 분포를 따릅니다. 일정 시간 창에서 드물게 발생하는 사건의 횟수를 모델링하는 표준 방식입니다.
결과가 아니라 득점을 예측해야 이후 모든 것이 가능해집니다. 모델이 임의의 대진에 대해 그럴듯한 스코어라인을 생성할 수 있으면, 실제로 모두가 궁금해하는 질문—누가 조별리그를 통과하고 누가 트로피를 들어 올리는가—을 그 스코어라인을 수천 번 시뮬레이션해 답할 수 있습니다.
핵심 피처
각 경기는 소수의, 신중하게 고른 피처로 설명됩니다.
- Elo 격차: 두 팀의 레이팅 차이. 모델에서 단연 가장 중요한 피처로, 중요도가 다음 피처 대비 두 자릿수(약 100배) 더 큽니다. 직관에도 부합합니다. 두 팀 간 전력 차이가 예상 결과를 가장 많이 설명합니다.
- Elo 합: 두 팀 레이팅의 합으로, 경기의 전반적 수준을 나타냅니다. 격차만으로는 아르헨티나 대 스페인과 산마리노 대 안도라를 구분할 수 없습니다. 두 경기는 균형은 비슷하지만 수준은 완전히 다르기 때문입니다. 합을 통해 그 정보를 복원합니다.
- 최근 Elo 변화(최근 5경기): 각 팀의 최근 레이팅 변화량. 상대 강약을 이미 반영하면서 폼을 포착합니다.
- 최근 득점/실점(최근 5경기): 각 팀의 최근 공격/수비 산출을 절대치로 계산합니다.
- 경기 맥락: 대회 급(월드컵 본선과 예선, 네이션스리그는 무게가 다릅니다), 토너먼트 여부, 중립 경기장 여부.
모든 피처는 철저히 누수 안전합니다. 킥오프 이전에 이용 가능한 정보만 사용합니다. 당연해 보이지만, 테스트에서는 뛰어나 보이다가 현실에서 무너지는 모델을 우연히 만들어내는 가장 쉬운 방법이 바로 이 원칙을 어기는 것입니다.
채택되지 않은 아이디어 하나: 경기 내 통계로 팀을 클러스터링해 만든 "플레이 스타일" 피처 세트를 계획했는데, 이는 비지도 학습 단계였습니다. 실제로는 팀이 의미 있게 분리되지 않아, 모델에 잡음을 공급하느니 제외했습니다. 부정적 결과도 결과입니다.
데이터 재현성 유지
두 소스에서 데이터가 계속 들어오는 만큼, 원시 파일에서 모델 준비 피처까지의 경로는 매번 동일해야 합니다. 이를 보장하는 것이 바로 메달리온 아키텍처입니다. 세 개의 레이어로 데이터를 구성합니다.
- Bronze: 도착한 원시 데이터를 그대로 보존합니다. 손대지 않습니다.
- Silver: 정리하고 표준화합니다. 여기서 두 소스 간 팀명 매핑(철자가 자주 다릅니다), 스키마 검증, Elo 레이팅과 경기 기록 조인, 결측 및 이상치 처리 등을 수행합니다.
- Gold: 모델링 레이어로, 경기당 한 행에 모든 피처가 계산된 깨끗한 테이블입니다.
각 레이어는 다음 레이어의 입력이므로, 이상이 보이면 한 단계씩 거슬러 올라가 원인을 찾을 수 있습니다. 전체 경로를 재현 가능하게 만들기 위해 DVC(Data Version Control)를 사용합니다. 새로운 결과가 들어올 때마다 dvc repro 한 번으로 Silver와 Gold를 Bronze에서부터 재생성합니다. 입력이 바뀐 단계만 다시 실행하고, 결과 데이터셋에 버전을 매겨 이전 상태를 정확히 복원할 수 있게 합니다.
최적의 모델 선택
득점 예측은 연구가 많이 된 문제이며, 정답인 도구가 하나로 정해져 있지 않습니다. 그래서 저는 한 가지 방법에 고정하지 않고 열 개를 만들어 경쟁시켰습니다.
도전자들
열 개의 모델은 다섯 계열과 단순 베이스라인으로 구성됩니다. 각 모델의 내부를 알 필요는 없습니다. 중요한 것은 득점 메커니즘에 대해 매우 다른 가정을 한다는 점입니다.
| 계열 | 모델 | 핵심 아이디어 |
|---|---|---|
| 베이스라인 | 평균율 푸아송 | 모든 팀이 피처를 무시하고 장기 평균 득점만 낸다고 가정합니다. 다른 모델이 넘어야 할 하한선입니다. |
| 통계적 | 이변량 푸아송, 음이항 | 두 팀의 득점 수를 사건 카운팅에 적합한 확률분포로 직접 모델링합니다. |
| 베이즈 | 베이즈 푸아송(MCMC) | 카운팅 아이디어는 같지만, 각 추정치에 대한 불확실성 범위를 전체 분포로 반환합니다. 계산 비용이 큽니다. 다른 모델보다 적합 시간이 약 100배 느립니다. |
| 시계열 | SARIMAX | 팀의 결과를 시간에 따른 시퀀스로 보고 이를 앞으로 투영합니다. |
| 머신러닝 | 리지, 랜덤 포레스트, XGBoost | 고정된 방정식에 얽매이지 않고 피처에서 직접 패턴을 학습합니다. |
| 딥러닝 | LSTM, 1D CNN | 데이터의 순차적/국소적 패턴을 찾는 신경망입니다. |
평가 방법
열 명의 후보를 눈대중으로 고를 수는 없습니다. 각 모델은 세 단계를 거치고, 코드를 통해 다음 단계 이동 여부가 결정됩니다. 이것이 코드 기반 배포의 의미입니다. 수동 튜닝이 아니라 자동 점검으로 모델이 환경 간 승격되므로, 선택 과정 전체가 재현 가능하고 감사가 쉽습니다.
- 실험. 모든 모델은 2022 월드컵 이전의 A매치만으로 학습합니다. 모든 경기가 동일하게 취급되지는 않습니다. 최신 경기와 더 중요한 경기에 더 큰 가중치(시간 감쇠 및 경기 중요도 가중치)를 부여해, 최근 경쟁 경기 결과가 오래된 평가전보다 모델에 더 큰 영향을 주게 합니다. 그런 다음 교차 검증으로 푸아송 음의 로그우도(NLL)를 최소화하도록 하이퍼파라미터를 튜닝합니다. NLL은 예측한 득점률이 실제 득점과 얼마나 잘 맞는지를 나타내는 점수로, 낮을수록 좋습니다. 이 단계의 결과는 각 모델의 최적 튜닝 버전입니다.
- 품질 보증. 튜닝된 모델을 처음 보는 경기로 시험합니다. 2022 월드컵과 그 이후 열린 6개의 메이저 대회(EURO, 아프리카 네이션스컵 2회, 코파 아메리카, 아시안컵, 골드컵)를 포함한 총 347경기입니다. 여기서는 지표를 순위확률점수(RPS)로 바꿉니다. 패–무–승처럼 자연스러운 순서가 있는 확률 예측의 정확도를 측정하며, 대체로 올바른 방향에 자신감을 보일수록 보상합니다. 역시 낮을수록 좋습니다. 여기서 가장 강한 모델이 도전자가 됩니다. RPS가 적절한 기준인 이유는, 실제 목표가 단순 득점 합이 아니라 팀의 진출 단계 예측이기 때문입니다.
- 배포. 도전자를 현 챔피언과 비교합니다. 승리하면 승격되고, 이용 가능한 모든 경기로 다시 적합해 대회 시작 시점에 최대한의 데이터를 학습한 상태로 들어갑니다.
우승 모델
어떤 접근이 최종 우승을 차지했을까요? 다음은 RPS(낮을수록 좋음)로 평가한 홀드아웃 리더보드 전체입니다.
| 모델 | 홀드아웃 RPS |
|---|---|
| XGBoost | 0.18289 |
| 베이즈 푸아송 | 0.18316 |
| 음이항 | 0.18373 |
| 이변량 푸아송 | 0.18389 |
| 랜덤 포레스트 | 0.18392 |
| SARIMAX | 0.18583 |
| 리지 | 0.18813 |
| LSTM | 0.19299 |
| 1D CNN | 0.20916 |
| 평균율 푸아송(베이스라인) | 0.22872 |
이 결과에서 네 가지가 눈에 띕니다.
- XGBoost가 이겼지만 근소했습니다. 상위 다섯 모델(XGBoost, 베이즈 푸아송, 음이항, 이변량 푸아송, 랜덤 포레스트)은 서로 약 0.0011 RPS 이내로 붙었습니다. 매우 다른 접근 다섯 개가 이렇게 가깝게 모이면, 한계는 모델이 아니라 데이터와 피처가 정하는 경우가 많습니다. 여기서는 Elo 격차가 대부분의 일을 해서 모델 선택이 지표를 크게 움직이지 않습니다.
- 하나의 피처가 지배합니다. Elo 격차는 다른 피처 대비 약 100배 중요한 최상위 예측 변수였습니다. 놀랍기보다는 안심되는 결과입니다. 단판 승부에서는 두 팀 간 전력 차이가 이야기의 대부분을 차지합니다.
- 딥러닝은 꼴찌(베이스라인 제외)였습니다. 1D CNN과 LSTM은 순위에서 가장 약했습니다. 학습 경기 수가 약 7,000경기뿐이라, 파라미터가 많은 네트워크를 먹여 살릴 데이터가 부족합니다. 작은 구조화 데이터셋에는 고전적 방법이 훨씬 잘 버팁니다.
- 고전적 모델에 과적합 징후가 없습니다. 보통은 미지 데이터에서 훈련 때보다 성능이 조금 떨어집니다. 여기서는 거의 모든 모델(LSTM 제외)이 교차 검증보다 홀드아웃 대회에서 더 좋은 점수를 냈습니다. 대회 축구가 일상 A매치보다 예측 가능하기 때문일 가능성이 큽니다. 높은 stakes, 더 강하고 익숙한 팀들, 중립 경기장이 무작위성을 덜어냅니다.
실제 대회에서는 열 개를 모두 돌리지 않습니다. 더 작은 로스터를 유지합니다. 기준점으로 평균율 베이스라인, 그리고 상위 세 모델입니다. XGBoost와 베이즈 푸아송이 상위 두 자리를 차지합니다.
3위는 사실상 동률입니다. 음이항과 이변량 푸아송은 0.0002 RPS 이내로 붙고 난수 시드에 따라 순위가 바뀝니다. 통계적으로 구분되지 않는 두 모델 중에서는, 축구 예측 문헌에서 더 탄탄한 정식화를 가진 이변량 푸아송을 선택했습니다(Karlis and Ntzoufras, 2004).
결국 로스터는 XGBoost(머신러닝), 이변량 푸아송(고전 통계), 베이즈 푸아송(베이지안 추론)으로 구성됩니다. 다음 섹션에서는 이 모델들이 어떻게 실행·재학습되며, 단일 경기 예측을 전체 대회 전망으로 바꾸는지 다룹니다.
프로덕션에 올리기
노트북에만 사는 모델은 앉아 있는 동안에만 쓸모가 있습니다. 한 달짜리 대회 기간 동안 경기를 예측하려면, 전체가 스스로 돌아가야 합니다. 새 결과 수집, 재학습, 재시뮬레이션, 예측 갱신까지 사람 손 없이요. 그 역할을 파이프라인이 맡습니다.
GCP에서 2시간마다 도는 파이프라인
프로젝트 전체는 Google Cloud Run의 단일 예약 작업으로 실행됩니다. 대회 전에는 하루 한 번 깨우고, 6월 11일 개막전부터는 2시간마다 실행합니다. 각 실행은 동일한 사이클을 따릅니다.
- 신규 데이터 확인. 직전 실행 이후 끝난 경기가 없으면 할 일이 없으니 조기 종료합니다.
- 수집 및 재생성. 새로운 결과가 들어왔으면 데이터 소스에서 끌어오고,
dvc repro한 번으로 Silver와 Gold 레이어를 재생성해 피처를 최신 상태로 만듭니다. - 재학습, 예측, 시뮬레이션. 로스터 모델을 최신 상태로 만들고(곧 설명), 예정된 모든 대진을 예측한 뒤 대회를 전체 시뮬레이션합니다.
- 점수화. 경기가 끝나면 해당 경기의 사전 예측을 채점해, 아래에서 설명할 모니터링에 반영합니다.
모든 단계가 스케줄에 따라 코드로 트리거되므로, 대회 중에 수동 버튼을 누를 일은 없습니다. 새 결과 입력, 갱신 예측 출력.
두 가지 모드: 동결 vs. 라운드별
이 프로젝트는 동시에 실험이기도 합니다. 대회 기간 로스터를 두 개의 병렬 모드로 돌립니다. 그리고 그 차이는 데이터로 확인하려는 질문과 연결됩니다. 대회가 진행되며 재학습하면 예측이 더 좋아질까요?
- 동결. 대회가 시작되는 순간 모델을 고정하고 다시는 재학습하지 않습니다. 시뮬레이션은 업데이트된 대진표로 시작하므로 결과에는 반응하지만, 모델 파라미터 자체는 변하지 않습니다.
- 라운드별. 하이퍼파라미터(상위 설정)는 고정하되, 모델이 학습하는 파라미터는 매 조별리그 라운드 종료와 매 토너먼트 라운드 종료 후 이용 가능한 모든 데이터로 재적합합니다. 즉, 대회를 치르면서 계속 학습합니다.
두 모드를 나란히 돌리면 대회가 끝난 뒤 두 측면에서 비교할 수 있습니다. 순수 예측 정확도, 그리고 참가 팀이 줄어들수록 불확실성이 얼마나 빨리 줄어드는지입니다. 라운드별이 이기면 정기 재학습의 가치가 입증되고, 동결이 선전하면 추가 복잡성이 가치 없을 수 있습니다.
예측에서 대회로: 몬테카를로 시뮬레이션
단일 경기 예측은 비교적 간단합니다. 이를 "각 팀의 우승 확률"로 바꾸는 단계에서 몬테카를로 시뮬레이션이 필요합니다.
먼저 추론입니다. 이미 확정된 대진만 예측하는 대신, 48개 팀 사이의 모든 가능한 대진을 예측합니다. 과해 보일 수 있지만, 토너먼트에서는 어떤 팀이든 결선에서 만나 가능하므로 모든 페어링에 대한 예측이 준비되어 있어야 합니다.
다음으로 룰을 코드화해야 하는데, 2026년 포맷은 특히 까다롭습니다. 12개 조에서 각 조 상위 2팀이 자동 진출하고, 3위 중 상위 8팀도 진출합니다. 이 8팀이 어떤 32강 슬롯에 들어가는지는 이들이 나온 조 조합에 따라 달라집니다.
열두 조 중 여덟 조를 고르는 방법은 495가지(12C8)이고, 각각 다른 32강 대진을 만듭니다. 깔끔한 공식이 없고, FIFA가 표를 발표할 뿐입니다. 그래서 저는(정확히는 제 유능한 동료 Cursor가) 공식 표를 바탕으로 495개 조합 전부를 매핑으로 하드코딩했습니다.
"best_third_mappings": {
"EFGHIJKL": {
"74": "3F",
"77": "3G",
"79": "3E",
"80": "3K",
"81": "3I",
"82": "3H",
"85": "3J",
"87": "3L"
},
"DFGHIJKL": ...
EFGHIJKL 같은 키는 3위로 진출한 여덟 개 조를 나타내고, 값은 그 팀들(3E, 3F 등)을 특정 32강 경기 번호에 배정합니다. 이게 하나의 항목이고, 전체 매핑은 495번 반복됩니다. 조합마다 한 번씩입니다.
세 개최국(미국, 캐나다, 멕시코)에 대해서는 별도의 처리가 하나 있습니다. 개최국이 자국에서 열리는 경기를 치를 때는 그 경기만 홈 어드밴티지를 적용하고, 나머지는 중립 경기로 처리합니다.
예측과 규칙을 갖췄다면, 시뮬레이션은 대회를 10,000번 돌립니다. 각 실행에서 다음 절차를 따릅니다.
- 모델의 예측 분포에서 홈/원정 득점을 샘플링해 모든 경기의 스코어라인을 생성
- 실제 승점 및 타이브레이크 규칙에 따라 조별리그 진행
- 최고의 3위 테이블 산정
- 위 매핑으로 토너먼트 브래킷 채우기
- 우승 팀이 나올 때까지 진행
10,000번의 시뮬레이션에서, 결승 진출 혹은 우승을 차지한 비율이 해당 팀의 확률이 됩니다. 한 번의 실행은 추정치이고, 만 번의 실행이 예측입니다.
MLflow로 전 과정 추적
지금까지 설명한 모든 실행(두 모드 전부)은 MLflow(DagsHub 호스팅)에 기록됩니다. 실험 추적은 각 실행의 입력, 설정, 결과, 출력을 체계적으로 기록해 서로 비교하거나 정확히 재현할 수 있게 합니다. 그중 몇 가지를 짚어보면 다음과 같습니다.
- 재현성. 시뮬레이션은 토너먼트 라운드에서 파생된 고정 난수 시드를 사용하고, 동결/라운드별 모드가 같은 시드를 공유합니다. 즉, 두 모드 간 차이는 시뮬레이션 내부의 운이 아니라 모델 자체에서 비롯됩니다. 각 실행은 본 데이터 스냅샷(골드 행 수와 타임스탬프)도 기록해, 결과를 항상 입력으로 소급할 수 있습니다.
- 실험 태깅. 각 실행에는 모드(동결/라운드별)와 라이프사이클 단계(실험, QA, 라이브 추론, 리핏)가 태그로 기록되어, 앞선 섹션의 승격 흐름을 반영합니다.
- 비교. 선택 지표로 홀드아웃 RPS를 기록하고, 계보 추적을 위해 현재 챔피언 실행 참조를 함께 남깁니다. 적합 시간도 기록하는데, 여기서 베이즈 모델의 약 100배 느린 훈련이 숫자로 드러납니다.
학습된 모델과 예측 파일(토너먼트 확률, 조 순위, 경기 예측)은 실행 아티팩트로 저장되며, 라이브 대시보드는 바로 이 파일을 읽습니다. 이렇게 해서 루프가 닫힙니다. 원시 결과에서 시작해, 학습과 시뮬레이션을 거쳐, 온라인에서 볼 수 있는 숫자까지.
드리프트 모니터링
마지막 단계는 경기가 종료된 뒤에 돌아갑니다. 실제 결과가 들어오면 사전 예측을 채점해 단순 평균율 베이스라인과 비교합니다. 만약 전체 모델이 팀에 대한 정보를 전혀 모르는 모델보다 뒤처지기 시작하면, 이는 드리프트의 경고 신호입니다. 대회 이전에 학습한 패턴이 현재 경기장에서 벌어지는 일과 맞지 않을 수 있음을 뜻합니다.
이는 라이브 예측 시스템에서 표준 관행이며, 더 자세한 탐지 방식은 데이터 드리프트와 모델 드리프트 가이드에서 읽을 수 있습니다.
그렇다면, 누가 월드컵을 우승하나요?
이 모든 장치의 목적은 결국 이것입니다.
우승 후보
개막 하루 전인 2026년 6월 10일 기준으로, 모델의 최상단은 명확하고 그 뒤는 촘촘합니다. 스페인과 아르헨티나가 각각 약 16%의 우승 확률로 선두입니다. 현 월드챔피언(아르헨티나)과 현 유럽챔피언(스페인)이 최상단에 오른 것은 모델이 현실에 기반하고 있음을 보여주는 안심 신호입니다.
그 뒤를 프랑스, 잉글랜드, 브라질, 콜롬비아가 바짝 추격합니다. 이 수치는 실시간으로 변하며 실제 결과가 들어오는 즉시 움직입니다. 그러니 6월 10일의 스냅샷으로 받아들이세요. 대시보드는 지연이 최대 두 시간인 최신 수치를 항상 보여줍니다.
라이브 대시보드
말이 나왔으니 덧붙이면, 이 글의 모든 숫자는 파이프라인이 실행될 때 자동으로 업데이트되는 라이브 Streamlit 앱에서 가져옵니다. wc2026-predictions.streamlit.app에서 대회 내내 따라가 보세요. 주요 보기는 네 가지입니다.
- 토너먼트 개요: 각 팀이 어디까지 갈지 한눈에 보여줍니다.
- 조별 순위: 각 조에서 팀별 1·2·3·4위 확률(최고의 3위 룰 덕분에 3위-통과와 3위-탈락을 구분)입니다.
- 경기 예측: 각 조별 경기의 홈 승/무/원정 승 확률과 가장 가능성 높은 토너먼트 대진입니다.
- 가장 흔한 토너먼트 매치업: 시뮬레이션에서 가장 자주 등장하는 페어링입니다.
경기 보기에서 주의할 점이 하나 있습니다. 몇몇 팀이 동시에 두 개의 32강 슬롯에 나타납니다. 버그가 아닙니다. 조가 너무 균형 있어 모델이 그 팀의 최종 순위를 자신 있게 가르지 못할 때 발생합니다. 최고의 3위의 불확실성과 결합하면, 두 가지 결과가 서로 다른 토너먼트 슬롯으로 이어집니다. 터키의 경우에는 16강에 두 번 나타나는 상황까지 있었습니다.
다음 그래픽은 대회 시작 전 XGBoost 모델이 예측한 최종 라운드(8강부터 결승까지)를 보여줍니다.

동전 던지기 팀: 미국
이런 모델의 재미는 눈대중과 어긋나는 팀에서 나옵니다. 가장 뚜렷한 예가 미국입니다. 대시보드의 토너먼트 개요를 보면, 미국이 색상으로 바로 눈에 띕니다.
공동 개최국으로 홈 관중 앞에서 치르니, 무난한 출발을 예상할 수 있겠지만 모델은 훨씬 신중합니다. 조가 호주, 파라과이, 터키로 유난히 균형 잡혀 있어, 조별리그 통과 확률을 약 54.6%로 봅니다. 전체 48팀 중 13번째로 낮은 수치입니다(팀의 3분의 2가 통과한다는 점을 기억하세요!).
흥미로운 건 그다음입니다. 간신히 통과한 뒤에는 매 라운드가 거의 동전 던지기입니다. 그런 동전 던지기를 차곡차곡 쌓으면, 전체 우승 확률이 약 2%가 됩니다. 이는 48팀 중 13번째로 높은 수치입니다.
조별 통과 확률은 하위 13위, 우승 확률은 상위 13위인 팀이라면, 바로 완벽한 동전 던지기 팀입니다. 한 번도 확실한 강자도, 한 번도 탈락 확정도 아닌.
마무리
이 프로젝트는 많은 작업이 필요했고, 한 편의 글로 다 담기 어렵습니다. 저장소에는 여기 싣지 못한 내용이 풍부합니다. 전체 후보 모델, 피처 엔지니어링, 모든 것을 돌게 하는 오케스트레이션 등이 그 예입니다.
지금은 모델이 선택을 마쳤고, 심판은 대회입니다. MLOps를 위해 오셨든 축구를 위해 오셨든, 저만큼 즐기시길 바랍니다. 경기 결과가 들어올 때마다 실시간 예측을 따라가며, 예측이 얼마나 잘 맞는지 확인해 보세요.
언급한 개념을 더 자세히 보고 싶다면 MLOps Concepts 과정을 추천합니다.
FIFA 월드컵 2026 우승 예측 FAQ
2026년 FIFA 월드컵 우승 팀은 누구인가요?
대회 시작 직전인 2026년 6월 10일 기준으로, 모델은 스페인과 아르헨티나를 공동 1순위 우승 후보로 제시하며, 각각 약 16%의 우승 확률을 부여합니다. 그 뒤를 프랑스, 잉글랜드, 브라질, 콜롬비아가 잇습니다. 한 팀이 압도적인 것은 아니어서 대회의 개방성을 반영합니다. 이 수치는 실시간으로 변하므로, 대시보드에 항상 최신 수치가 표시됩니다.
머신러닝으로 축구를 얼마나 정확히 예측할 수 있나요?
대표팀 축구는 예측이 어렵습니다. 득점이 적고 경쟁 경기가 적기 때문입니다. 따라서 강력한 모델이어도 우연의 요소가 큽니다. 이 프로젝트에서 상위 다섯 모델의 RPS 차이는 약 0.001 내로 모였습니다. 이는 정확도의 상한이 알고리즘보다 주로 이용 가능한 데이터와 피처에 의해 결정됨을 시사합니다. 예측에 가장 큰 영향을 준 단일 요인은 두 팀 간 Elo 레이팅 격차였습니다.
왜 경기 결과가 아니라 득점 수를 예측하나요?
승/무/패 대신 팀별 득점을 예측하면, 가능한 스코어라인에 대한 전체 확률분포를 얻을 수 있습니다. 이것이 대회 전체를 시뮬레이션할 수 있게 하는 핵심입니다. 그럴듯한 스코어라인을 샘플링할 수 있으면, 조별리그와 토너먼트 대진을 수천 번 플레이해 각 팀의 진출·우승 확률을 읽어낼 수 있습니다.
또한 득점 수는 푸아송 분포를 비교적 잘 따르므로, 이런 방식의 모델링에 적합합니다.
몬테카를로 시뮬레이션이란 무엇이며, 왜 10,000번 실행하나요?
몬테카를로 시뮬레이션은 직접 계산하기 어려운 확률을 추정하기 위해 무작위 과정을 반복 실행하는 방법입니다. 여기서는 각 실행에서 모델이 예측한 분포로부터 모든 경기의 스코어라인을 뽑아 우승까지 플레이합니다. 이를 10,000번 반복하면, 단일 경기 예측이 “스페인이 약 16% 우승한다” 같은 안정적인 비율로 바뀝니다. 한 번의 시뮬레이션은 가능한 결과 중 하나일 뿐이지만, 만 번이면 실제 가능성 분포에 근접합니다.
이와 같은 MLOps 파이프라인을 구축하려면 어떤 도구가 필요한가요?
핵심 요소는 데이터 버전 관리(DVC), 실험 추적(MLflow), 스케줄 기반 실행(Google Cloud Run과 Cloud Scheduler), 결과 제공(Streamlit 대시보드)입니다.
모델링에는 다양한 파이썬 라이브러리를 사용합니다. scikit-learn(리지, 랜덤 포레스트), XGBoost(챔피언), statsmodels와 SciPy(푸아송, 이변량 푸아송, 음이항 회귀 및 SARIMAX), PyMC(베이즈 모델), Keras(LSTM과 CNN), 데이터 처리는 pandas와 NumPy가 담당합니다.
일회성 모델에는 모두가 꼭 필요하진 않지만, 함께 사용하면 파이프라인이 재현 가능해지고 수동 개입 없이 재학습과 갱신을 수행할 수 있습니다.