Bỏ qua tới nội dung chính
Quay lại tin tức

Ai sẽ vô địch World Cup 2026?

Towards Data Science· Ari Joury, PhD· 6/6/2026general

Xây dựng dự báo từ Elo, Poisson và 10.000 mô phỏng Bài viết Ai sẽ vô địch World Cup bóng đá 2026? xuất hiện lần đầu trên Towards Data Science.

Khoa học dữ liệu Ai sẽ vô địch World Cup 2026? Xây dựng dự báo từ Elo, Poisson và 10.000 mô phỏng Ari Joury, Tiến sĩ Ngày 6/6/2026 8 phút đọc Chia sẻ World Cup 2026 khởi tranh vào ngày 11/6 với 48 đội, 104 trận đấu và vô số dự đoán. Tôi muốn có một dự báo mà tôi thực sự có thể bảo vệ. Không chỉ là một mô hình học máy (machine learning) thú vị với kết quả tốt, mà là một mô hình trong đó mọi con số đều bắt nguồn từ một giả định rõ ràng mà tôi có thể tranh luận. Bài viết này xây dựng dự báo đó từ đầu. Nó được thiết kế đơn giản một cách có chủ ý: đánh giá mọi đội, chuyển đổi từng cặp đấu thành phân phối bàn thắng và mô phỏng toàn bộ giải đấu hàng chục nghìn lần. Điều này nghe có vẻ rất đặc thù bóng đá, nhưng hầu hết mọi thứ trong bài viết này, từ phương pháp luận đến cách chúng ta diễn giải kết quả, đều mang tính phổ quát đối với khoa học dữ liệu. Thay thế "đội" bằng nhân viên bán hàng, ngày giao hàng, tải máy chủ hoặc nhóm khách hàng rời bỏ và ba bước tương tự sẽ cung cấp cho bạn một dự báo có thể bảo vệ thay vì một ước tính điểm. Kỹ năng thực sự có thể chuyển giao ở đây là xây dựng một quy trình mà mọi con số đều bắt nguồn từ một giả định bạn có thể tranh luận, thay vì một mô hình học máy hộp đen che giấu khỏi bạn. Trong trường hợp bóng đá của chúng ta, điều này có nghĩa là: Không có dữ liệu theo dõi, không có học sâu (deep learning), không có gì mà bạn không thể xây dựng lại trong một buổi chiều. Nhưng đừng ngừng đọc ở đây! Vấn đề không phải là sự tinh vi. Đó là việc có một quy trình minh bạch buộc bạn phải đối mặt với những lựa chọn mô hình hóa mà các hộp đen che giấu. Chúng ta sẽ xây dựng mô hình của mình theo ba bước và xem xét các giả định ở mỗi bước. Bước 1: Đánh giá mọi đội bằng Elo Bạn không thể dự đoán một trận đấu mà không có con số về mức độ tốt của mỗi bên. Lựa chọn sẵn có rõ ràng nhất cho các đội tuyển quốc gia là hệ số Elo bóng đá thế giới, một sự điều chỉnh của hệ thống cờ vua của Arpad Elo. Elo là một phương trình tự điều chỉnh duy nhất. Mỗi đội mang một hệ số R. Trước một trận đấu, điểm số dự kiến của đội A so với đội B (trên thang điểm 0-1, trong đó 1 là thắng) là một hàm logistic của sự khác biệt về hệ số: E_A = 1 / (1 + 10^(-(R_A - R_B) / 400)) Sau trận đấu, bạn điều chỉnh hệ số về những gì thực sự xảy ra: R_A' = R_A + K * (S_A - E_A), trong đó S_A là kết quả thực tế (1 thắng, 0,5 hòa, 0 thua) và K kiểm soát tốc độ thay đổi của hệ số. Biến thể bóng đá bổ sung hai điểm quan trọng: K thay đổi theo tỷ số thắng (thắng 4-0 thay đổi hệ số nhiều hơn thắng 1-0) và nó ưu tiên các trận đấu cạnh tranh hơn các trận giao hữu. Hằng số 400 là một lựa chọn tỷ lệ - nó là thứ làm cho khoảng cách 400 điểm tương ứng với tỷ lệ thắng khoảng 10:1 (E ≈ 0,91). Đối với mô hình, chúng ta chỉ cần các hệ số hiện tại, được lưu trữ dưới dạng từ điển. Tôi đang sử dụng ảnh chụp nhanh trước giải đấu từ đầu tháng 6/2026, lấy từ một bộ dữ liệu Kaggle có thể tái sử dụng miễn phí tổng hợp các hệ số này: # Hệ số Elo bóng đá thế giới, ảnh chụp nhanh trước giải đấu (đầu tháng 6/2026). # Nguồn: "2026 FIFA World Cup — Historical Elo Ratings" (Kaggle, CC BY-SA 4.0), # tổng hợp dữ liệu từ World Football Elo Ratings (eloratings.net). ELO = { "Spain": 2155, "Argentina": 2113, "France": 2062, "England": 2020, "Brazil": 1988, "Portugal": 1984, "Colombia": 1977, "Netherlands": 1944, "Germany": 1925, # ... tất cả 48 đội đủ điều kiện } Kiểm tra giả định: Elo nén mọi thứ — phong độ, chất lượng đội hình, sự mệt mỏi — vào một con số và giả định sức mạnh của một đội tương đối ổn định trong thời gian ngắn. Đây là một sự đơn giản hóa mạnh mẽ, nhưng nó là một sự đơn giản hóa trung thực, có thể kiểm toán được, và Elo khó có thể bị đánh bại như một tính năng đơn lẻ. Bước 2: Chuyển khoảng cách xếp hạng thành phân phối bàn thắng Sự khác biệt về xếp hạng mang lại cho chúng ta xác suất thắng, nhưng để mô phỏng một giải đấu, chúng ta muốn có tỷ số trận đấu — chúng thúc đẩy hiệu số bàn thắng bại, các tiêu chí phụ của bảng đấu và tính chất của giải đấu. Cách tiếp cận tiêu chuẩn trong phân tích bóng đá là mô hình hóa số bàn thắng của mỗi đội như một quá trình Poisson. Phân phối Poisson cho biết xác suất quan sát k sự kiện khi các sự kiện xảy ra độc lập với tốc độ trung bình không đổi λ: P(k bàn thắng) = λ^k * e^(-λ) / k! Số bàn thắng phù hợp với điều này một cách thực nghiệm: chúng rời rạc, tương đối hiếm và gần như không có bộ nhớ trong một trận đấu. Nếu chúng ta coi số bàn thắng của hai đội là các biến Poisson độc lập với giá trị trung bình λ_home và λ_away, thì phân phối tỷ số đầy đủ chỉ là tích ngoài của hai hàm khối xác suất (pmf) của chúng, và chúng ta có thể đọc xác suất thắng/hòa/thua bằng cách cộng các ô thích hợp: from scipy.stats import poisson import numpy as np def match_probs(lam_home, lam_away, max_goals=10): h = poisson.pmf(np.arange(max_goals + 1), lam_home) a = poisson.pmf(np.arange(max_goals + 1), lam_away) grid = np.outer(h, a) # grid[i, j] = P(home i, away j) p_home = np.tril(grid, -1).sum() # home goals > away goals p_draw = np.trace(grid) p_away = np.triu(grid, 1).sum() return p_home, p_draw, p_away Kiểm tra giả định: giả định độc lập là thuận tiện nhưng không hoàn hảo — tỷ số thực tế cho thấy sự tương quan và sự dư thừa của các trận hòa ít bàn thắng (0–0, 1–1). Cách khắc phục tiêu chuẩn là điều chỉnh Dixon–Coles, bổ sung một số hạng hiệu chỉnh tỷ số thấp và một trọng số suy giảm theo thời gian cho các trận đấu lịch sử. Chúng tôi bỏ qua điều này ở đây để rõ ràng; đây là một nâng cấp tự nhiên và chính xác là loại cải tiến mà chương Poisson trong cuốn sách sắp tới của tôi sẽ trình bày. Bước 3: Kết nối xếp hạng với bàn thắng Chúng ta cần λ_home và λ_away là một hàm của khoảng cách Elo. Một phần kiến thức phổ biến vững chắc trong mô hình hóa bóng đá là lợi thế Elo ~400 điểm tương đương với khoảng một bàn thắng vượt trội. Vì vậy, chúng ta chia một mức cơ sở ~2,7 tổng số bàn thắng (mức trung bình quốc tế điển hình) giữa các đội theo sự khác biệt về xếp hạng của họ: GOALS_BASE = 2.7 GOALS_PER_400_ELO = 1.0 def lambdas(elo_a, elo_b): diff = (elo_a - elo_b) / 400.0 * GOALS_PER_400_ELO la = max(0.15, GOALS_BASE / 2 + diff / 2) lb = max(0.15, GOALS_BASE / 2 - diff / 2) return la, lb Mức sàn 0,15 đảm bảo rằng ngay cả một đội yếu hơn nhiều cũng không bị gán một tỷ lệ ghi bàn âm phi vật lý. Một phiên bản có nguyên tắc hơn.

Nguồn tin: Towards Data Science — Tác giả: Ari Joury, PhD. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.