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

Mô hình phát hiện ngã của tôi đạt 94% và nó đã nói dối tôi.

Towards Data Science· Ramandeep Singh· 7/8/2026general

Một lựa chọn đánh giá duy nhất đã làm tăng kết quả của tôi thêm 25 điểm như thế nào, và việc xây dựng lại một cách trung thực đã dạy tôi điều gì về các hệ thống học máy (ML) mà mọi người có thể tin cậy. Bài viết Mô hình phát hiện ngã của tôi đạt 94% và nó đã lừa dối tôi xuất hiện đầu tiên trên Towards Data Science.

Học máy Mô hình phát hiện ngã của tôi đạt 94% và nó đã nói dối tôi Một lựa chọn đánh giá duy nhất đã làm tăng kết quả của tôi thêm 25 điểm như thế nào, và việc xây dựng lại một cách trung thực đã dạy tôi điều gì về các hệ thống học máy mà mọi người có thể phụ thuộc vào Ramandeep Singh Ngày 7/8/2026 10 phút đọc Mô hình phát hiện ngã của tôi đạt độ chính xác 94,3%. Tôi đã xem lại kết quả đầu cuối và ma trận nhầm lẫn nhiều lần. Chúng luôn khớp nhau. Con số này được đưa vào tệp README và sơ yếu lý lịch của tôi. Nó cũng sai. Không phải do lỗi làm tròn. Con số trung thực là 69%. Không ai phát hiện ra điều này giúp tôi. Nó chỉ được đưa ra ánh sáng vì tôi quyết định xây dựng các công cụ có thể xác minh kết quả của chính mình. Việc sửa lỗi đã dạy tôi nhiều điều về học máy trong sản xuất hơn là việc xây dựng hệ thống ban đầu. Rất nhiều bài viết giải thích về rò rỉ dữ liệu một cách trừu tượng. Bài viết này nói về việc nó trông như thế nào từ bên trong, với các con số trước và sau. Nếu bạn đánh giá các mô hình trên dữ liệu tuần tự thuộc bất kỳ loại nào (video, âm thanh, cảm biến đeo được, chuỗi thời gian), có khả năng cao là lỗi tương tự đang tồn tại trong quy trình của bạn ngay bây giờ. Hệ thống Dự án là một thiết bị phát hiện ngã thời gian thực để giám sát hỗ trợ. Một webcam chạy qua MediaPipe Pose để lấy các điểm mốc xương. Từ các điểm mốc, tôi tính toán một vài đặc điểm cơ sinh học đơn giản: góc thân, chiều cao hông và vai được chuẩn hóa, và hình dạng của hộp giới hạn. Một Random Forest phân loại từng khung hình, và một cửa sổ làm mịn trên vài dự đoán gần nhất quyết định có nên báo động hay không. Tất cả đều chạy trên CPU trong thời gian thực. Không có video nào rời khỏi thiết bị. Thứ duy nhất rời đi là các phép toán về xương. Tôi đã huấn luyện nó trên tập dữ liệu phát hiện ngã Le2i (Charfi et al., 2013), chứa các cú ngã được dàn dựng và các hoạt động hàng ngày được ghi lại trong các phòng giống như ở nhà. Tôi đã trích xuất các đặc điểm trên mỗi khung hình, gán nhãn trên mỗi khung hình, chạy một train_test_split tiêu chuẩn và đạt độ chính xác 94,3%. Theo như tôi biết, dự án đã hoàn thành. Sự rò rỉ Đây là dòng đã nói dối tôi: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y) Vấn đề là việc phân chia này là ngẫu nhiên trên các khung hình riêng lẻ, và các khung hình từ cùng một video không độc lập. Hai khung hình được chụp cách nhau 80 mili giây trông gần như giống hệt nhau: cùng một người, cùng một tư thế, cùng một ánh sáng, gần như cùng một vectơ đặc điểm. Khi bạn xáo trộn tất cả các khung hình lại với nhau và giữ lại 20% để kiểm tra, gần như mọi khung hình kiểm tra đều có một bản sao gần giống trong tập huấn luyện. Vì vậy, thử nghiệm không đo lường liệu mô hình có khái quát hóa được cho những người và căn phòng mà nó chưa từng thấy hay không. Nó đo lường liệu mô hình có thể ghi nhớ hay không, và một Random Forest có thể ghi nhớ gần như mọi thứ. Đây là rò rỉ dữ liệu ở dạng thông thường nhất của nó: các mẫu không độc lập, vì vậy việc phân chia ngẫu nhiên cung cấp cho tập kiểm tra các câu trả lời trước. Cách khắc phục rất đơn giản: phân chia theo yếu tố làm cho các mẫu của bạn phụ thuộc. Đối với video, điều đó có nghĩa là phân chia theo video. Tôi đã chạy lại các đặc điểm tương tự và mô hình tương tự với GroupKFold, nhóm theo video, để không có bản ghi nào có thể xuất hiện ở cả hai phía của một fold. Mô hình và các đặc điểm giống hệt nhau theo hai giao thức đánh giá. Sự khác biệt duy nhất là những gì việc phân chia tôn trọng. (Hình ảnh của tác giả) Điểm nhóm trở lại ở mức 69,1%. Một fold, cùng một mã được phân chia một cách trung thực, đạt 31%. Điều gây khó chịu không phải là mức giảm 25 điểm. Đó là 94,3% đã được cảm nhận hoàn toàn xứng đáng: một con số tốt bên cạnh một quy trình hợp lý, và không ai nghĩ đến việc xem xét kỹ lưỡng. Tôi cũng vậy. Các nhãn Sau khi kiểm tra lại việc phân chia, tôi bắt đầu kiểm tra mọi thứ khác. Các nhãn hóa ra còn tệ hơn. Các nhãn huấn luyện của tôi đến từ tên thư mục. Nếu một video nằm trong thư mục falls/, mọi khung hình của nó đều được gắn nhãn fall. Nhưng một cú ngã được dàn dựng chỉ kéo dài từ một đến hai giây, và phần còn lại của clip là hoạt động bình thường: đi bộ, ngồi xuống, đứng lên. Bộ dữ liệu thực sự cung cấp các chú thích cấp khung hình đánh dấu chính xác thời điểm bắt đầu và kết thúc của mỗi cú ngã, vì vậy tôi đã đối chiếu các nhãn của mình với chúng. Kết quả thật đáng xấu hổ. Trong 76% các khung hình mang nhãn fall, người đó chỉ đi bộ bình thường. Chỉ 6% ghi lại một cú ngã thực sự, và 18% còn lại cho thấy ai đó đã nằm trên sàn sau đó. Một video dài 78 giây đã đóng góp 44% tổng số lớp dương tính, và 1,5 giây trong số đó là một cú ngã. Một cuộc kiểm tra nhãn của bộ dữ liệu huấn luyện ban đầu: hầu như không có gì được gắn nhãn “fall” là một cú ngã. (Hình ảnh của tác giả) Các nhãn của tôi đã thay đổi nhiệm vụ mà tôi không hề hay biết. Mô hình đã giải quyết vấn đề dễ dàng hơn mà chúng mô tả, chứ không phải vấn đề tôi muốn đặt ra. Đó chính xác là loại thất bại mà sự rò rỉ che giấu. Một đánh giá rò rỉ không thể cho bạn biết rằng các nhãn của bạn sai, bởi vì nó chỉ đo lường khả năng ghi nhớ, và một mô hình có thể ghi nhớ các nhãn sai dễ dàng như các nhãn đúng. Nếu các nhãn của bạn đến từ tên thư mục, đường dẫn tệp hoặc bất kỳ phím tắt tương tự nào, chúng đáng bị nghi ngờ như việc phân chia của bạn. Vì vậy, tôi đã xây dựng lại bộ dữ liệu huấn luyện, bắt đầu từ dữ liệu gốc lần này. Một khung hình hiện được tính là dương tính nếu nó nằm trong cửa sổ ngã được chú thích hoặc trong hai giây nằm sau đó. Mọi thứ trước khi ngã là âm tính. Các khung hình mơ hồ muộn sau một cú ngã, nơi người đó có thể vẫn đang nằm hoặc có thể đang đứng dậy và không có dữ liệu gốc nào cả, tôi đã loại trừ hoàn toàn thay vì đoán. Tôi cũng đã sử dụng toàn bộ bộ dữ liệu lần này: 186 trong số 190 video của nó, thay vì 28 video ban đầu của tôi. Điều đó có nghĩa là phải thực hiện công việc mà quy trình đầu tiên đã bỏ qua. Hai trong số các cảnh không có tệp chú thích nào cả, vì vậy tôi đã xem tất cả 59 video đó từng khung hình và tự chú thích thủ công 29 cửa sổ ngã. Xung quanh các ranh giới ước tính của mình, tôi đã loại trừ một vùng đệm an toàn, để sự không chính xác của riêng tôi không thể làm ô nhiễm lớp âm tính. Một tệp chú thích bị lỗi định dạng, với cửa sổ ngã của nó bị chôn vùi ở giữa tệp giữa

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