OK, bắt đầu thôi! Hôm nay tôi sẽ chia sẻ về cái trận Bayern vs Plzen mà tôi đã “thực chiến” gần đây. Anh em nào hay táy máy code chắc chắn sẽ thấy quen quen.
Thực ra thì cái này không hẳn là một project to tát gì, chỉ là một cái thử nghiệm nhỏ để tôi vọc vạch một vài thứ mới thôi. Ban đầu, tôi định làm một cái gì đó liên quan đến phân tích dữ liệu bóng đá, mà cụ thể là data của trận Bayern gặp Plzen ấy. Nghe thì có vẻ hoành tráng, nhưng thực tế là tôi chỉ muốn xem có thể “moi” được gì từ đống dữ liệu khô khan đó thôi.
Đầu tiên là phải kiếm data đã. Tôi lượn lờ trên mấy trang thống kê bóng đá, tìm được một vài trang có API hoặc cho phép crawl dữ liệu. Sau một hồi vật lộn với HTML, CSS các kiểu, tôi cũng “vớt” được một mớ thông tin về trận đấu: đội hình ra sân, số liệu thống kê (kiểm soát bóng, số cú sút, phạt góc…), diễn biến trận đấu (ghi bàn, thay người…).
Tiếp theo, tôi dùng Python (cái này thì quen quá rồi) để xử lý cái đống data “thượng vàng hạ cám” đó. Pandas là chân ái, giúp tôi biến đống dữ liệu lộn xộn thành một cái bảng gọn gàng. Tôi bắt đầu lọc dữ liệu, tính toán các chỉ số cơ bản: tỷ lệ kiểm soát bóng, số cú sút trúng đích, hiệu suất chuyển hóa cơ hội thành bàn thắng… Nói chung là mấy cái mà mấy ông bình luận viên hay nói trên TV ấy.
Sau khi có được các con số, tôi bắt đầu “nghịch” với việc trực quan hóa dữ liệu. Matplotlib và Seaborn là hai thư viện mà tôi hay dùng nhất. Tôi vẽ biểu đồ cột so sánh số cú sút của hai đội, biểu đồ tròn thể hiện tỷ lệ kiểm soát bóng, biểu đồ đường biểu diễn diễn biến bàn thắng theo thời gian… Nhìn chung là cố gắng biến những con số khô khan thành những hình ảnh dễ nhìn, dễ hiểu.
Đến đây thì tôi bắt đầu thấy hơi chán rồi. Mấy cái biểu đồ này thì ai cũng làm được. Tôi muốn làm một cái gì đó “cao siêu” hơn. Thế là tôi nảy ra ý định thử dùng machine learning để dự đoán kết quả trận đấu. Nghe thì ghê gớm, nhưng thực ra tôi chỉ định dùng một vài thuật toán đơn giản thôi.
Tôi chọn một vài thuật toán phân loại phổ biến như Logistic Regression, Support Vector Machine (SVM), Random Forest… rồi “nhét” dữ liệu vào để huấn luyện. Để đánh giá hiệu quả của mô hình, tôi chia dữ liệu thành hai phần: một phần để huấn luyện, một phần để kiểm tra. Sau một vài vòng thử nghiệm, tôi nhận ra là kết quả dự đoán không được tốt lắm. Chắc là do dữ liệu đầu vào chưa đủ “xịn” hoặc do tôi chưa biết cách “vọc” các thuật toán cho nó tối ưu.
Thôi thì, coi như là một bài học vậy. Dù sao thì tôi cũng đã học được một vài thứ mới. Quan trọng là tôi đã có một buổi “táy máy” vui vẻ với code, được thử nghiệm những ý tưởng mới. Cái quan trọng nhất là mình đã làm, đã thử, chứ không phải là kết quả cuối cùng.
- Bước 1: Tìm và thu thập dữ liệu trận đấu (Bayern vs Plzen).
- Bước 2: Xử lý và làm sạch dữ liệu bằng Python và Pandas.
- Bước 3: Trực quan hóa dữ liệu bằng Matplotlib và Seaborn.
- Bước 4: Thử nghiệm với các thuật toán machine learning để dự đoán kết quả trận đấu.
Nói chung là vậy đó. Anh em nào có hứng thú thì cứ thử “chiến” xem sao. Biết đâu lại tìm ra được điều gì thú vị hơn tôi thì sao?