Dataset 2: Bảng xếp hang FIFA theo ngày từ 1992 đến 2021

Một phần của tài liệu Khóa luận tốt nghiệp Công nghệ thông tin: Xây dựng một mô hình dự đoán kết quả thi đấu bóng đá (Trang 26 - 96)

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

Một phần của tài liệu Khóa luận tốt nghiệp Công nghệ thông tin: Xây dựng một mô hình dự đoán kết quả thi đấu bóng đá (Trang 26 - 96)

Tải bản đầy đủ (PDF)

(96 trang)