Bộ dữ liệu 2 thống kê thứ hang của các đội tuyên bóng đá nam quốc gia trên toàn thế giới và được cập nhật gần như theo từng ngày từ tháng 12 năm
1992 đến tháng 4 năm 2021. Bộ dữ liệu gồm các feature như sau:
Tên features Ý nghĩa
15
1d Id của quốc gia
country_ full Tên đầy đủ của quốc gia
country_abrv Tên viết tat (gồm 3 chữ cái) của quốc gia
Rank Thứ hạng của quốc gia
Total_points Diém hiện tại của quốc gia (dùng dé xét thứ hang) Previous_points Điểm ở lần cập nhật trước của quốc gia
Rank_change Su thay đổi xếp hạng so với lần cập nhật gần nhất Confederation Hiệp hội bóng đá của quốc gia
Rank_ date Ngày cập nhật
Bảng 3.3. Mô tả các features trong bộ dữ liệu 2
Chúng tôi sử dụng các phương pháp thống kê mô tả nhằm hiểu rõ bộ dữ liệu hơn và thu được kết quả như sau:
Rank Total_points | Previous_point | Rank_change
Mode 29 0 0 0
Mean 101.82 404.99 403.6 2.93
Median 101 318 316 1
Quantile Q1=5I Q1=67 Q1=65 Q1=0
Q2=101 | Q2=318 Q2=316 Q2=1 Q3=152 | Q3=595 Q3=594 Q3=3 Max 211 2172 2187 205
Min 1 0 0 0
Range 210 2172 2187 205
IQR 101 528 529 3
Variance 3462.82 | 148090.21 148213.53 24.57
Standard 58.84 384.82 384.98 4.95
Deviation
Skewness | 0.02 1.15 1.16 6.69
Kurtosis -1.17 0.9 0.9 140.29
16
Bảng 3.4. Kết quả các thang đo của bộ dữ liệu 2 3.1.3. Dataset 3: Dữ liệu tỉ lệ cược của nha cái từ năm 2005 đến 2015
Bộ dữ liệu 3 tổng hợp tỉ lệ cược của 32 nhà cái của 479440 trận đấu bóng
đá cả quốc tế và các trận dau giữa các câu lạc bộ từ tháng 1 năm 2005 đến tháng
7 năm 2015. Bộ dữ liệu 3 gồm các features sau:
Tên feature Ý nghĩa
Match_id Id cua tran đâu
League Tên giải đấu
Match_ date Ngày thi dau
Home_team Tên đội nhà
Home_ score Số lần ghi bàn của đội nhà, không kê penalty
Away_ team Tên đội khách
Away_score Số lần ghi ban của đội khách, không kê penalty
Avg_odds_home_win Tỉ lệ cược trung bình khi đội nhà thăng
avg_odds_ draw Tỉ lệ cược trung bình khi hai đội hòa
avg_odds_away_ win Tỉ lệ cược trung bình khi đội khách thăng
max_odds_home_win Ti lệ cược tôi đa khi đội nhà thăng
max_odds_ draw Tỉ lệ cược tối đa khi hai đội hòa
max_odds_away_win Ti lệ cược tôi đa khi khách nhà thang
top_bookie_home_win Tên nha cai có tỉ lệ cược cao nhất khi đội nha thang
top_bookie_draw Tên nhà cái có tỉ lệ cược cao nhât khi hai đội hoa
top_bookie_away_win Tên nha cái có tỉ lệ cược cao nhất khi đội khách
thắng
n_odds_home_win Sô lượng nhà cái nhận cược đội nhà thăng
n_odds_ draw Sô lượng nhà cái nhận cược hai đội hòa
n_odds_away_win Số lượng nhà cái nhận cược đội khách thăng
Bảng 3.5. Mô tả các features trong bộ dữ liệu 3
17
Dé hiểu rõ hơn về bộ dữ liệu trên, chúng tôi sử dụng các phương pháp thống kê mô tả cho 3 features là avg_odds_home_win, avg_odds_draw va avg_odds_away_win , kết quả thu được được trình bày trong bảng sau:
avg_odds_home_win | avg_odds_draw | avg_odds_away_win Mode 2 3.2 2.5
Mean 2.52 3.66 3.97
Median 2.0836 3.3609 3.2
Quantile Q1=1.65 Ql= 3.2 Ql= 2.41
Q2= 2.08 Q2= 3.36 Q2= 3.2 Q3= 2.64 Q3= 3.73 Q3=4.6 Max 151 51 103.02
Min 1.01 1.01 1.01
Range 149.99 49.99 102.01
IQR 0.98 0.53 2.18
Variance 3.78 1.14 7.76
Standard 1.94 1.06 2.78
Deviation
Skewness 7.98 5.91 4.39
Kurtosis 172.21 75.83 48.67
Bang 3.6. Kết quả các thang đo của bộ dir liệu 3 3.2. Tiền xử lí dir liệu (Data Preprocessing) với các bộ dữ liệu có sẵn
3.2.1. Xử lí tính không nhất quán của dữ liệu (data inconsistency):
Ba bộ dữ liệu không nhất quán với nhau ở các thuộc tính có liên quan đến tên quốc gia. Bản thân một số bộ dữ liệu như bộ đữ liệu 1 chang hạn, cũng không nhất quán với chính nó ở các thuộc tính trên. Qua tìm hiểu, chúng tôi nhận thấy rằng có hai nguyên nhân chính:
18
-Một là một quốc gia có thể có nhiều tên. Ví dụ như “Myanmar” là tên gọi chính thức theo Liên Hợp Quốc của Miến Điện (theo như cách gọi của Việt Nam) nhưng một số quốc gia phương tây như Mỹ, Úc, Anh lại sử dụng tên gọi
“Burma”.
-Hai là các bộ dữ liệu có thể lưu thông tin về tên quốc gia không đây đủ.
Ví dụ như các tên gọi “China” và “PR China” chỉ cùng một nước Trung Quôc
hay như “Congo” và “DR Congo” đều là tên gọi của Congo.
Một trong những cách đơn giản và hiệu quả nhất dé xử lí tính không nhất quán của các dữ liệu về tên quốc gia là sử dụng bộ công cụ tích hợp sẵn của
Google Doc. Sau khi tải các bộ dữ liệu lên, Google Doc sẽ tự động gợi ý sửa
chữa tính không nhất quán của dữ liệu như hình minh họa dưới đây:
Tất cả các.. ~
DU LIEU KHÔNG NHẬT QUAN
Isle of Man ⁄Z
Áp dụng cho mọi ô bên dưới
⁄).X
B1972 Isle of Man
B3134 Isle of Man
B20141 Ellan Vannin
v
DU LIEU KHONG NHẤT QUAN
DR Congo ⁄
Ap dụng cho mọi 6 bên dưới
w_. xX
C273 DRCongo
C274 DRCongo
C278 Congo
Hình 3.1. Google Doc gợi ý sửa chữa tính không nhất quán
19
Ngoài các dữ liệu về tên quốc gia, ở bộ đữ liệu 1, thuộc tính ngày thi đấu (Date) cũng xuất hiện tình trang không nhất quán dữ liệu giữa các trận dau từ trước năm 1990 và các trận đấu từ năm 1990 trở về sau. Các trận đấu trước năm
1990 được phân tách giữa ngày tháng năm bằng dấu gạch nối ( - ) trong khi các trận đầu từ năm 1990 trở về sau thì sử dụng dấu xuyét ( /).
Tuy nhiên do phạm vi khóa luận này chỉ sử dụng dữ liệu từ năm 2005 trở
về sau nên không cần quan tâm đến tính không nhất quán trong định dạng ngày tháng này. Một số thuộc tính của các mô hình dự đoán có sử dụng dữ liệu từ trước năm 2005 (nhưng vẫn sau năm 1990). Điều này sẽ được giải thích chỉ tiết hơn ở các phần sau.
3.2.2. Xử lí dữ liệu bị mất (missing data)
Cả bộ dữ liệu 1 và bộ đữ liệu 2 đều không có dữ liệu bị mất (missing data).
Bộ dữ liệu 3 có dữ liệu bị mất ở các thuộc tính sau: avg_odds_home_ win,
avg_odds_away_ win, max_odds_home_ win, max_odds_away_win,
top_bookie_home_win va top_bookie_away_win,
Qua tim hiéu, chúng tôi nhận thấy nguyên nhân chính khiến dữ liệu bi mat
ở các thuộc tính trên là do một số trận đấu không có nhà cái đứng ra nhận cược bàn thăng hoặc bàn thua cho một đội (thường là do một đội quá mạnh so với
đội còn lại).
Do lượng dé liệu bị mat tương đối ít nên chúng tôi sẽ xử lí bằng cách chọn phần dữ liệu không chứa missing data.
3.2.3. Lựa chon dữ liệu (data selection)
Như đã dé cập trong phan phạm vi dữ liệu, trong bài khóa luận này chúng tôi sẽ chọn phần dữ liệu từ năm 2005 trở về sau (một số thuộc tính có sử dụng
dữ liệu từ năm 1990 trở về sau) ngoại trừ những dòng dữ liệu bị mất như đã nói
ở phân trước.
20
3.3. Thêm các thuộc tính
3.3.1. Dùng thư viện OpenpyxI để tạo ra các thuộc tính từ bộ dữ liệu 1
Sau đây, chúng tôi sẽ dùng thư viện Openpyxl của ngôn ngữ lập trình
Python dé tạo ra các thuộc tính mới từ bộ dữ liệu 1 và sử dụng chúng dé huấn luyện các mô hình dự đoán. Sẽ có 7 thuộc tính được tạo ra nằm trong 3 nhóm:
- _ Nhóm head-to-head: Dựa vào lịch sử đối đầu trực tiếp của 2 đội. Một số
đội luôn thua hoặc rất hiếm khi thăng khi đối đầu với một số đội nhất định bat ké đội đó hiện đang mạnh ra sao. Vì vậy chúng tôi tin rằng lịch
sử đối đầu trực tiếp của hai đội sẽ tạo nên những thuộc tính hữu dụng cho mô hình dự đoán. Dĩ nhiên là dé xác định các thuộc tính này có ích
hay không thì phải sử dụng các phương pháp EDA và feature selection.
Điều này sẽ được chúng tôi trình bày ở các phần sau.
- Nhóm form: “Phong độ” thi đấu hiện tại của 2 đội, được xác định dựa
vào kết quả thi đấu 10 trận gận nhất của từng đội. Để xác định một đội mạnh hay yếu thì không thé chỉ nhìn mãi vào quá khứ. Đó là lý do chúng
tôi sử dụng các thuộc tính thuộc nhóm form. Một đội có “phong độ” hiện
tại tốt thường sẽ có cơ hội thắng cao hơn trong các trận đấu kế tiếp. Và đương nhiên, dé xác định các thuộc tính này có hữu dụng không thì phải
sử dụng đến các phương pháp mà chúng tôi sẽ trình bày ở các phần sau.
- - Nhóm home: Dựa vào việc xác định đội 1 có phải là đội nhà không. Đội
nhà sẽ có những lợi thế như được sử dụng các sân vận động quen thuộc
và số lượng cô động viên thường cũng nhiều hơn do thi đấu trên chính đất nước của mình. Vì vậy chúng tôi sẽ thêm thuộc tính đội nhà vào mô hình dự đoán. Chúng tôi sẽ đánh giá thuộc tính này ở các phần sau.
Đầu tiên chúng tôi sẽ xây dựng 2 thuộc tính thuộc nhóm head-to-head là h2h win diff và h2h draw. Ý nghĩa của 2 thuộc tính trên được trình bày trong
bảng dưới đây:
21
Tên thuộc tính | Tên đầy đủ | Ý nghĩa Ví dụ
h2h_ win diff | Head-to- Chênh lệch về số | Đội A và B từng đối đầu
head win | trận thang của 2 | với nhau 11 lần, difference | đội trong lịch sử | A thắng 7,
đối đầu B thắng 2, 2 trận hòa.
h2h_win_diff=7-2=5
h2h_draw Head-to- Số trận hòa của 2 | Đội A va B từng đối đầu
head draw đội trong lịch sử | với nhau 11 lần,
đối đầu A thắng 7,
B thắng 2, 2 trận hòa.
h2h_ draw =2
Bảng 3.7. Mô tả các thuộc tính của nhóm head-to-head
Đề sử dụng thư viện openpyx! đầu tiên ta import thư viện trên và gán các tệp tin (file) dữ liệu vào các biến dé dé dàng truy xuất dit liệu.
Sau đó, chúng tôi sẽ lập trình chương trình để tạo ra thuộc tính
h2h_win_ diff. Giải thuật của thuật toán này được giải thích như sau:
- Tao vòng lặp for dé lặp qua các trận đấu đã được chọn (từ năm 2005-2021).
- Gan địa chỉ các features vào các biến.
- Với mỗi dòng dữ liệu của trận dau ở vòng lặp đầu tiên, lặp qua danh sách
các trận đấu từ năm 1990 để tìm các trận đối đầu trực tiếp và diễn ra trước trận đấu.
- Khi tìm được trận đấu thì xác định đội nào thắng dé điều chỉnh kết quả.
- Ghi kết quả vào biến.
Đoạn code của giải thuật trên được trình bày trong phần phụ lục.
Sau đó, chúng tôi sẽ lập trình chương trình dé tạo ra thuộc tính h2h_ draw.
Giải thuật của thuật toán này được giải thích như sau:
- Tao vòng lặp for dé lặp qua các trận đấu đã được chọn (từ năm 2005-2021).
- Gan địa chỉ các features vào các biên.
22
- _ Với mỗi dòng dữ liệu của trận đấu ở vòng lặp đầu tiên, lặp qua danh sách
các trận đấu từ năm 1990 để tìm các trận đối đầu trực tiếp và diễn ra trước trận đấu.
- _ Khi tìm được trận đấu thi xác định kết quả có hòa hay không.
- _ Ghi kết quả số trận hòa vào biến.
Đoạn code của giải thuật trên được trình bày trong phần phụ lục.
Sau khi đã tao ra 2 thuộc tính h2h_win_ diff và h2h_ draw, chúng tôi ghi kết quả vào file có đuôi (.xlsx) bằng đoạn code như hình trong phần phụ lục. Lưu
ý rằng dé có thé sử dụng dữ liệu dé dự đoán thì trước hết cần chuyền file sang
định dạng (.csv).
Tiếp đến, chúng tôi sẽ tạo ra 4 thuộc tính thuộc nhóm form là
form_ diff_ goal, form_diff_goaled, form_ diff_ win và form_diff_draw. Y nghia
của các thuộc tinh này được trình bay trong bang dưới đây:
Tên thuộc tính | Tên day đủ | Ý nghĩa Ví dụ
form_diff_goal Form Chệnh lệch số Trong 10 trận gần nhất,
difference | ban thắng (số | đội A đá bóng vào khung
in goal lần đá bóng vào | thành 8 lần, đội B 10 lần.
khung thành) | form_diff_goal=
ghi được trong | 8-10=-2
10 trận gần nhất
form_diff_goaled | Form Chệnh lệch số Trong 10 trận gần nhất,
difference |bàn thua (số | đội A nhận 8 qua bóng
in goal | bong bi đối thủ | vào khung thành, đội B
received đá vào khung | nhận 6 quả.
thành) phải | form_ diff_ goaled=
nhận trong 10 | 8-6=2
trận gần nhất
23
form_ diff_ win Form
difference
in win
Chệnh lệch số trận thắng trong
10 trận gần nhất
Trong 10 trận gần nhật, đội A thắng 6 trận, đội B thắng 9 trận.
form_diff_win=6-9=
-3 form_diff_draw Form
difference
in draw
Chénh lệch số
trận hòa trong
10 trận gần nhất
Trong 10 trận gần nhất,
đội A hòa 2 trận, đội B hoa | trận.
form_diff_draw=
2-1=1
Bang 3.8. Mô ta các thuộc tinh của nhóm form
Tương tự như quá trình tạo ra 2 thuộc tính trước, đầu tiên chúng tôi Import
thư viện Openpyxl va gan file dữ liệu cùng worksheet của nó vào các biên đê tiện sử dụng.
Sau đó, chúng tôi sẽ lập trình chương trình để tạo ra thuộc tính
form_diff_goal. Giải thuật của thuật toán này được giải thích như sau:
Tạo vòng lặp for dé lặp qua các tran dau trong bộ dữ liệu.
- Tao các biên sô ban thăng đội 1, đội 2, sô trận đã đêm của đội 1, đội 2 (vì
chỉ lấy 10 trận).
- Với mỗi trận đấu trong bộ dữ liệu, lặp và cập nhật giá trị đến khi cả 2 đội
đủ 10 trận gần nhất.
- _ Ghi kết quả cho từng dong dữ liệu.
Đoạn code của giải thuật trên được trình bày trong phần phụ lục.
Tiếp theo, chúng tôi tạo ra thuộc tính form_diff_goaled. Giải thuật của
thuật toán này được giải thích như sau:
- Tao vòng lặp for dé lặp qua các trận đấu trong bộ dữ liệu.
24
- Tao các biến số bàn thua đội 1, đội 2, số trận đã đếm của đội 1, đội 2 (vì
chỉ lấy 10 trận).
- V6i mỗi trận đấu trong bộ dữ liệu, lặp và cập nhật giá tri đến khi cả 2 đội
đủ 10 trận gần nhất.
- _ Ghi kết quả cho từng dong dữ liệu.
Đoạn code của giải thuật trên được trình bày trong phần phụ lục.
Trước khi đi tiếp đến việc tạo ra 2 thuộc tính form diff win và form_diff draw. Chúng tôi xin làm rõ khái niệm bàn thắng (như trong form_diff_goal) và trận thắng (như trong form_diff_win). Một bàn thắng xảy
ra khi một đội (bat kế đội nào) đá bóng vào lưới đối phương và được trọng tài công nhận. Một trận thắng xảy ra khi một đội có số bàn thắng hợp lệ nhiều hơn đối phương trong cùng một trận đấu.
Sau khi đã làm rõ hai khái niệm trên, chúng tôi sẽ tiếp tục với việc tạo ra
thuộc tính form_diff_ win. Giải thuật của thuật toán nay được giải thích như
Sau:
- Lap qua danh sách các trận đấu trong bộ dữ liệu
- Tao các biến số trận thắng đội 1, đội 2, số trận đã đếm của đội 1, đội 2 (vì
chỉ lấy 10 trận).
- Với mỗi trận đấu trong bộ dữ liệu, lặp và cập nhật giá tri đến khi cả 2 đội
đủ 10 trận gần nhất.
- Ghi kết quả cho từng dòng dữ liệu.
Đoạn code của giải thuật trên được trình bày trong phần phụ lục.
Tiếp theo, chúng tôi sé tạo ra thuộc tính form_diff_draw. Giải thuật của
thuật toán này được giải thích như sau:
- _ Lặp qua danh sách các trận dau trong bộ dữ liệu
- Tạo các biên sô trận hòa đội 1, đội 2, sô trận đã đêm của đội 1, đội 2 (vi
chỉ lấy 10 trận).
25
- Với mỗi trận đấu trong bộ dữ liệu, lặp và cập nhật giá tri đến khi cả 2 đội
đủ 10 trận gần nhất.
- Ghi kết quả cho từng dòng dữ liệu.
Đoạn code của giải thuật trên được trình bày trong phần phụ lục.
Sau khi đã tạo ra 4 thuộc tính form diff goal, form_diff_goaled,
form_diff_win và form_ diff_ draw, chúng tôi ghi kết quả vao file có đuôi (.xÌsx) . Lưu ý rang dé có thé sử dụng dữ liệu dé dự đoán thì trước hết cần chuyên file
sang định dạng (.csv).
Nhóm thuộc tính cuối cùng được tạo ra bằng bộ dir liệu 1 là nhóm home, nhóm này chỉ bao gồm một thuộc tính duy nhất: is_home_team. Do nhóm này chỉ gồm 1 thuộc tính và ý nghĩa của thuộc tính này khá tường minh nên chúng tôi sẽ trình bày trực tiếp thay vì dùng bảng.
Thuộc tính is home_team xác định một đội có phải là đội nhà hay không
bằng cách so sánh các thuộc tính home_ team, away_ team va country của bộ dữ liệu 1. Thuộc tính này chỉ có thé có một trong ba giá trị với ý nghĩa như sau:
-1 : đội 2 là đội nhà
0 : không có đội nào là đội nhà (thi đấu ở sân trung lập)
1: đội 1 là đội nhà
Khác với các thuộc tính trên, để tạo ra thuộc tính này chúng tôi đơn giản chỉ dùng các lệnh IF trong chương trình excel để so sánh các thuộc tính
home_team và away_ team vói thuộc tính country của bộ dữ liệu 1.
Đến đây, chúng tôi đã sử dụng thư viện Openpyxl để tạo ra 7 thuộc tính nằm trong 3 nhóm. Việc thuộc tính nào hữu dụng và được lựa chọn sẽ được bàn
luận ở các phân sau.
Ngoài việc sử dụng thư viện Openpyxl để tạo ra các thuộc tính như trên, chúng tôi còn dựa vào bộ dit liệu 1 để tạo thêm một thuộc tính khác dé tiện cho
26
việc kiêm chứng dự đoán của các mô hình là thuộc tinh result — kêt quả trận dau.
Thuộc tinh result được tạo ra dựa vào 2 thuộc tính của bộ dữ liệu I là
home_score và away_ score. Nếu đội nhà (đội 1) có nhiều bàn thang hon thi result=win. Nguoc lai, nếu đội khách (đội 2) có nhiều bàn thắng hơn thì result=lose. Nếu 2 đội có số bàn thắng như nhau thì result=draw
Tiếp theo, chúng tôi sẽ thêm thuộc tính về độ chênh lệch trong thứ hạng
FIFA giữa 2 đội dựa vào bộ dữ liệu 2.
3.3.2. Thêm thuộc tính về chênh lệch trong xếp hạng FIFA của 2 đội bằng
bộ dữ liệu 2
Ngoài các thuộc tính về lịch sử đối đầu trực tiếp, phong độ hiện tại hay lợi thế đội nhà, có một thuộc tính tưởng chừng như đơn giản nhưng cũng có thể rất hữu dụng. Đó chính là sự chênh lệch trong xếp hạng FIFA của 2 đội hay
rank_diff. ý nghĩa của thuộc tính nay được trình bày dưới bang sau:
Tên thuộc tính | Tên đầy đủ Ý nghĩa Ví dụ
rank_ dIff Rank difference | Chênh lệch xếp Đội A hạng 100,
hạng fifa giữa 2 | đội B hạng 50 đội rank_ diff=100-
50=50
Bảng 3.9. Mô tả thuộc tính rank_diff
Qua hơn 117 hoạt động của mình, FIFA đã hoàn thiện hệ thống đánh giá
và xếp hạng các đội bóng. Xếp hạng FIFA có thé là một thuộc tính tiềm năng
đê huân luyện các mô hình dự đoán.
Hệ thống xếp hạng FIFA xếp các đội bóng theo thứ tự từ trên xuống dưới dựa vào điểm hiện tại của đội bóng đó. Điểm của một đội bóng được tính toán dựa vào tổng điểm các trận đấu trong vòng 4 năm gần nhất và điểm của mỗi
trận được tính theo công thức sau:
27