Chín tab toàn chữ N/A: ngày phòng dữ liệu quyết định không viết gì
**Câu trả lời cốt lõi** Báo cáo phân tích bóng rổ trả về chín hạng mục toàn chữ N/A vì bước bóc tách bài viết nguồn thất bại, không tạo ra điểm thông tin nào. Phòng dữ liệu chặn xuất bản thay vì lấp khoảng trống bằng suy đoán. **Dữ kiện chính** - Chín hạng mục phân tích gồm chiến thuật, chỉ số cầu thủ, quỹ lương, điều lệ và rủi ro đều trả về N/A; danh sách điểm thông tin rỗng hoàn toàn. - Tên bài viết và nguồn bài viết đều rỗng; chỉ nhãn ngành “bóng rổ” sống sót, có thể lấy từ siêu dữ liệu. - Ba nguyên nhân khả dĩ: trang chặn thu thập, tường phí hoặc chặn vùng, lỗi bảng mã ở lớp chuyển ngữ. - Khuyến nghị bổ sung cổng kiểm tra tự động từ chối mọi gói dữ liệu có điểm thông tin rỗng hoặc thiếu tên, thiếu nguồn. - Điều kiện mở khóa: gửi lại tên bài, nguồn và tối thiểu ba điểm thông tin để chạy trọn chín hạng mục trong một lượt. **Nguồn** Báo cáo phân tích chuyên sâu giai đoạn 2, tài liệu nội bộ phòng dữ liệu; bản ghi không kèm ngày phát hành. **Hỏi đáp liên quan** Hỏi: Vì sao không thể dựng báo cáo từ một gói dữ liệu rỗng? Đáp: Vì mọi kết luận chiến thuật, chỉ số hay quỹ lương sẽ do người viết tự tạo ra, không có chuỗi bằng chứng nào chống lưng. Hỏi: Dấu hiệu nào cho thấy lỗi nằm ở bộ bóc tách chứ không ở bài viết gốc? Đáp: Khung dữ liệu còn nguyên nhãn trường và nhãn ngành nhưng toàn bộ giá trị rỗng, nghĩa là lỗi xảy ra sau bước tải trang. Hỏi: Cần làm gì trước khi chạy lại quy trình? Đáp: Thêm cổng kiểm tra tự động loại bỏ gói dữ liệu có danh sách điểm thông tin rỗng, rồi tải lại nguồn gốc kèm siêu dữ liệu đầy đủ." } ```
9 giờ 12 phút sáng thứ Ba, tôi mở bảng tính trước mặt và đếm. Chín tab. Chín tab, và cả chín đều trả về cùng một giá trị: N/A.
Tab chiến thuật: N/A. Tab chỉ số cầu thủ: N/A. Tab quỹ lương: N/A. Tab điều lệ giải: N/A. Tab rủi ro: N/A. Ngay cả dòng “Tên bài viết” — thứ lẽ ra phải có trước cả khi máy kịp đọc nội dung — cũng ghi N/A.
Thứ duy nhất còn sống trong bảng tính ấy là một cái nhãn: bóng rổ. Một cái nhãn ngành, không kèm một con số nào.
Trong mười ba năm làm nghề, tôi đã quen với những buổi sáng bảng tính trả về số xấu. Đội thua, mô hình sai, chỉ số tụt. Nhưng bảng tính trả về số xấu vẫn là bảng tính có số. Còn bảng tính trả về N/A là một kiểu im lặng khác: nó không nói “tôi sai”, nó nói “tôi không có gì để nói”.
Người ta thường tưởng phòng phân tích giỏi là phòng đưa ra được kết luận trong mọi tình huống. Phòng phân tích giỏi là phòng biết chính xác lúc nào mình chưa được phép kết luận.
Câu chuyện bắt đầu từ một quy trình hai bước mà gần như mọi trung tâm dữ liệu thể thao chuyên nghiệp đều dùng. Bước một bóc tách bài viết nguồn thành các điểm thông tin: tên bài, nguồn, loại bài, tóm tắt một câu, lập trường tác giả, mục đích bài viết, danh sách thực thể được nhắc tới. Bước hai lấy chính những điểm đó làm móng để dựng báo cáo chuyên sâu.
Bước một là bước rẻ nhất và cũng bị xem nhẹ nhất. Không ai khen một bộ bóc tách chạy tốt. Chỉ khi nó hỏng, người ta mới nhìn xuống dưới.

Và nó hỏng. Không hỏng theo kiểu đổ sập — không thông báo lỗi đỏ, không cảnh báo, không ai gọi điện. Nó hỏng theo kiểu trả về một khung xương đẹp: đầy đủ tên trường, đầy đủ nhãn, đầy đủ ghi chú hướng dẫn, và không có một giá trị nào bên trong. Một cái khuôn rỗng.
Với người ngoài, đây là một sự cố kỹ thuật nhàm chán. Với người trong nghề, đây là dạng sự cố nguy hiểm nhất trong toàn bộ dây chuyền phân tích — nguy hiểm hơn cả việc máy tính ra số sai. Số sai thì còn có cái để cãi. Khuôn rỗng thì mời gọi người ta lấp đầy.
Đây là phần cần nói kỹ, vì nó là chỗ mà phần lớn phòng dữ liệu thể thao trong nước đang đứng, dù chưa ai gọi tên nó.
Một khung xương có nhãn nhưng rỗng ruột là dấu hiệu của lỗi bóc tách, không phải dấu hiệu của một bài viết không có nội dung. Đây là điểm phân biệt quan trọng nhất trong toàn bộ câu chuyện. Một bài viết thật sự trống sẽ không sinh ra được nhãn ngành. Muốn gán được nhãn “bóng rổ”, hệ thống phải đọc được một cái gì đó — tiêu đề, đường dẫn, chuyên mục, thẻ. Nhãn sống sót nghĩa là có dấu vết văn bản ở đâu đó. Phần thân thì biến mất.
Nguyên nhân đầu tiên nằm ở phía trang nguồn. Báo thể thao lớn hiện nay phần lớn dựng nội dung bằng JavaScript, và một bộ thu thập đơn giản sẽ nhận về trang trắng. Máy không báo lỗi, vì với nó, trang trắng là một câu trả lời hợp lệ.
Nguyên nhân thứ hai nằm ở tầng truy cập: tường phí, hoặc chặn theo vùng. Máy nhận về trang giới thiệu, bóc ra vài nhãn, rồi hết.
Còn một khả năng nữa ở tầng mã hóa. Nếu nguồn gốc là tiếng Trung hoặc tiếng Nhật, một lỗi bảng mã ở lớp giữa có thể nuốt sạch phần thân mà vẫn giữ nguyên si các nhãn tiếng Anh của khung.
Cả ba đường dẫn tới cùng một kết quả: hệ thống không hề biết mình đã thất bại.
Và đây là chỗ tôi muốn dừng lâu hơn, vì nó liên quan trực tiếp tới bóng rổ Việt Nam.
Trong ba mùa giải gần đây, tôi có dịp xem bảng thống kê nội bộ của vài CLB trong hệ thống thi đấu chuyên nghiệp trong nước. Không CLB nào thiếu số. Cái họ thiếu là một cổng kiểm tra dám nói rằng bộ số này không dùng được. Một trận có thể được ghi tay bởi hai người khác nhau, hai người ghi hai con số khác nhau cho cùng một pha bóng, và cả hai bảng đều được đẩy lên hệ thống mà không ai đối chiếu. Sai số không nằm ở mô hình. Sai số nằm ở chỗ không có ai chịu trách nhiệm nói “khoan đã”.
Tôi từng chứng kiến một buổi họp mà chỉ số rebound của một đội được đọc lên là 41, trong khi băng ghi hình cho thấy con số thật là 33. Tám rebote chênh lệch ấy không đến từ gian lận. Nó là kết quả của việc một người trong phòng đã “đoán” phần còn thiếu thay vì để trống. Và vì không ai biết phần nào là đoán, cả bảng số mất giá trị.
Báo cáo N/A kia từ chối làm đúng điều đó. Nó từ chối đoán.
Một bảng toàn chữ N/A, xét về mặt thông tin, có giá trị cao hơn một bảng có số nhưng không rõ nguồn gốc. Câu này nghe ngược, nhưng nó là nền tảng của mọi hệ thống dữ liệu nghiêm túc. Bảng N/A nói với bạn chính xác một điều: đừng ra quyết định dựa trên tôi. Bảng có số mà không rõ nguồn nói một điều nguy hiểm hơn nhiều: cứ dùng tôi đi.
Báo cáo nguồn ghi lại bốn dấu hiệu cảnh báo, và cả bốn nên được dán lên tường mọi phòng phân tích thể thao.
Rủi ro bịa đặt nội dung ở mức cao nhất. Khi đầu vào rỗng, mọi kết luận đưa ra đều là sản phẩm của trí tưởng tượng khoác áo chuyên gia. Nó nguy hiểm gấp nhiều lần một báo cáo trống, vì nó trông đáng tin.
Mất nguồn gốc. Tên bài và nguồn bài đều rỗng. Nghĩa là kể cả sau này lấy lại được nội dung, vẫn không ai chứng minh được nó đến từ đâu. Trong nghề, một con số không có nguồn còn tệ hơn không có con số.
Lỗi dây chuyền âm thầm. Nếu bộ bóc tách hỏng trên cả một nhóm nguồn — báo có tường phí, báo dựng bằng JavaScript, báo tiếng nước ngoài — lỗi sẽ tái diễn mà không ai phát hiện, vì mỗi lần chỉ mất một bài.
Niềm tin giả từ một cái nhãn sống sót. Cái nhãn “bóng rổ” là thứ duy nhất còn lại, và chính vì nó còn lại mà người đọc lướt qua sẽ tưởng báo cáo có nội dung. Đây là bẫy tinh vi nhất trong bốn cái.
Bốn dấu hiệu này vượt ra ngoài phạm vi một hệ thống. Chúng mô tả chính xác cách dữ liệu thể thao hỏng trong im lặng ở mọi cấp độ — từ một bảng ghi tay ở nhà thi đấu đến một mô hình định giá cầu thủ.
Cần nhắc lại một điều tôi vẫn nói với các HLV trẻ: con số không biết nói dối, nhưng nó cũng không biết kể chuyện. Một bảng N/A không kể được câu chuyện nào. Việc của người phân tích không phải kể thay nó, mà là nói rõ: chỗ này trống, và đây là lý do.
Có một chi tiết trong báo cáo nguồn mà tôi thích nhất, vì nó rất người: người viết ghi rằng nếu chỉ được gửi lại ba thứ — tên bài, nguồn, và ít nhất ba điểm thông tin — thì cả chín hạng mục phân tích sẽ chạy được trong một lượt. Ba thứ. Không cần mô hình mới, không cần dữ liệu lớn hơn, không cần thêm máy chủ. Chỉ cần ba trường được điền đúng.
Thực tế, một cổng kiểm tra như vậy chỉ cần vài dòng lệnh chạy trước mọi báo cáo: danh sách điểm thông tin rỗng thì dừng; tên bài hoặc nguồn bài rỗng thì dừng; nhãn ngành không kèm được một đoạn văn bản chống lưng thì hạ mức tin cậy xuống thấp nhất. Mấy dòng ấy không cứu được mô hình nào, nhưng chúng cứu được uy tín của cả một phòng.
Phần khó nhất của nghề này không nằm ở chỗ tính toán. Phần khó nhất nằm ở chỗ bảo đảm cái đầu vào không bị rỗng.
Ai cũng nói dữ liệu quan trọng. Góc nhìn ngược nằm ở chỗ khác: trong ngành thể thao, người nói “tôi không biết” đang bị trả lương thấp hơn người nói “tôi nghĩ là”.
Một buổi họp kỹ thuật diễn ra thế này. HLV hỏi: đối thủ thích ném ba ở cánh nào? Người trả lời “tôi chưa có số, để tôi kiểm lại” tạo ra một khoảng trống trong phòng. Người trả lời “cánh trái, tôi nhớ vậy” lấp đầy khoảng trống đó ngay lập tức, và thường được ghi nhận là người nắm tình hình. Khoảng trống trong phòng họp luôn bị lấp bởi thứ có sẵn, không phải bởi thứ đúng.
Đó là lý do các quy trình phân tích thể thao chuyên nghiệp, dù đầu tư bao nhiêu, vẫn sụp ở đúng một điểm: con người không được thưởng vì đã giữ im lặng.
Báo cáo N/A kia làm ngược lại bản năng của cả một ngành. Nó giữ im lặng, và nó ghi lại lý do giữ im lặng. Xét về kỷ luật nghề, đó là hành động khó hơn nhiều so với một dự đoán táo bạo. Dự đoán táo bạo có 50% đúng. Im lặng đúng lúc thì đúng 100%, nhưng không ai trao cúp cho nó.
Mọi HLV đều nói về cảm giác. Tôi không có cảm giác, tôi có độ lệch chuẩn. Nhưng độ lệch chuẩn của một tập rỗng thì không có giá trị — nó không bằng không, nó đơn giản là không tồn tại. Và đó là toàn bộ vấn đề.
Tôi không ngây thơ tới mức khuyên mọi phòng dữ liệu cứ thế mà dừng. Có những trận không cho phép dừng. Trong những trường hợp đó, việc phải làm là ghi rõ giả định, ghi rõ mức độ tin cậy, và ghi rõ kịch bản mà kết luận sẽ sai. Ba dòng đó rẻ hơn nhiều so với cái giá của một quyết định dựa trên số bịa.
Trước vòng đấu tới, có một việc nhỏ mà bất kỳ ai làm dữ liệu thể thao cũng nên làm: mở bảng tính của mình ra và đếm số ô trống. Đừng lấp chúng. Chỉ cần biết chúng ở đâu.
Cái ô trống mà bạn biết rõ vị trí là một ô trống vô hại. Cái ô trống mà bạn đã lấp bằng trí nhớ thì không còn là ô trống nữa — nó là một con số, và nó sẽ đi vào quyết định của ai đó vào một buổi chiều nào đó, mà không ai nhớ nổi nó đến từ đâu.
Dữ liệu là một tu viện: càng ít tiếng ồn, càng nghe rõ điều gì đó đang cố nói. Nhưng tu viện cũng có những căn phòng trống, và người trông coi giỏi là người biết căn phòng nào trống vì chưa ai tới, căn phòng nào trống vì có người đã dọn sạch.
