Categories PHP-MySQL

Xử lý dữ liệu họ tên sai lệch như thế nào trong hệ thống database lớn?

Đối với dữ liệu lớn, thu từ nhiều nguồn, tôi phát hiện ra là việc xử lý đồng bộ định dạng và sửa lỗi cực kỳ quan trọng và có thể tốn thời gian không kém việc phân tích chính thức sau này.

Xử lý dữ liệu sai lệch là điều bắt buộc cần phải làm vì nếu không kết quả phân tích được xem là vô nghĩa vì không thể tin cậy được (ít nhất ở khía cạnh không ước tính được độ sai lệch dữ liệu).

Trước khi xử lý dữ liệu sai lệch chúng ta cần xác định tiêu chuẩn dữ liệu chính xác là gì, ví dụ:

Định dạng dữ liệu tiêu chuẩn không nhất thiết phải giống với định dạng phổ biến hoặc tiêu chuẩn ngoài đời, tuy nhiên thường thì áp dụng định dạng tiêu chuẩn phổ biến hoặc phù hợp với thói quen của nhiều người sẽ giúp bạn thuận lợi hơn.

Điều quan trọng nữa cần lưu ý là định dạng tiêu chuẩn có khả năng cao là một quá trình chỉnh sửa liên tục, chứ không phải bạn nghĩ ra định dạng tiêu chuẩn cứng lúc đầu và không thay đổi.

Lý do bởi vì việc phân tích dữ liệu có khả năng đưa ra nhiều khía cạnh phong phú của dữ liệu và buộc chúng ta cần phải điều chỉnh tiêu chuẩn cho phù hợp.


Xử lý dữ liệu sai lệch thế nào?

Với dữ liệu lớn không bao giờ chúng ta xử lý thủ công được toàn bộ dữ liệu. Bạn cần phải viết các dòng lệch tự động để làm điều này.

Để viết lệnh xử lý tự động tốt chúng ta cần biết mô hình dữ liệu sai lệch, chẳng hạn:

  • Dữ liệu ngày tháng có kiểu dd-mm-yyyy chứ không chỉ dd/mm/yyyy
  • Dữ liệu ngày tháng có kiểu dd/mm/yy chứ không chỉ dd/mm/yyyy
  • Dữ liệu giới tính có các thông tin nhập sai nào ngoài nam hoặc nữ?
  • Dữ liệu họ tên cần thống kê cho người Việt Nam, dạng thuần Việt nhưng có tên nào của người nước ngoài hoặc con lai lẫn vào dữ liệu không?
  • Dữ liệu họ tên có các ký tự không được phép theo quy định về họ tên không?

Biết được mô hình dữ liệu sai lệch, chúng ta sẽ viết mã thực hiện lệnh nhanh hơn và quan trọng nhất là xử lý chính xác được vấn đề mà nếu bạn chỉ ngồi tự nghĩ rất khó để xử lý được đầy đủ các trường hợp sai lệch vốn cực kỳ đa dạng.


Dữ liệu sai lệch: sửa hay không dùng?

Rất nhiều trường hợp dữ liệu sai lệch chúng ta không thể liên hệ được với người nhập liệu để hỏi họ thông tin chính xác. Điều đó có nghĩa là chúng ta sẽ phải tự xử lý dữ liệu sai lệch dựa vào tất cả thông tin hiện có.

Dữ liệu sai lệch có thể chia làm 2 cấp độ:

  • Sai: ví dụ ngày tháng năm sinh chỉ có dữ liệu ngày tháng chứ không có năm. Ví dụ khác một tên ghi Nguyen Đức Anh, chúng ta không có họ Nguyen trong cộng đồng người Việt, mà chỉ có họ Nguyễn;
  • Lệch: đây chỉ là chưa thống nhất định dạng, chẳng hạn như dd-mm-yyyy trong khi định dạng chúng ta muốn là dd/mm/yyyy. Ví dụ khác chẳng hạn UTF-8 mã hóa các từ tiếng Việt có dấu với hai dạng mã khác nhau, một dạng phổ biến hơn dạng còn lại, và để thống kê chính xác chúng ta chuyển nó về cùng một định dạng;

Vậy là với dữ liệu lệch, chưa thống nhất định dạng, chúng ta chắc chắn nên chỉnh nó về dạng thống nhất và điều này chỉ có lợi chứ không có hại gì.

Đối với dữ liệu sai, việc sửa dữ liệu rồi dùng có rủi ro lớn:

  • Có thể việc sửa của bạn là không đúng;
  • Dẫn đến thống kê sai sót;

Rõ ràng an toàn nhất là không dùng dữ liệu sai để đưa vào thống kê. Nhưng điều này có phải lúc nào cũng là lựa chọn tốt nhất?

Tất nhiên là không. Có một số trường hợp chúng ta vẫn khai thác được dữ liệu sai. Ví dụ:

  • Khi tôi thống kê họ tên có 3 cột dữ liệu là họ tên, ngày tháng năm sinh, giới tính. Có một số hàng dữ liệu không ghi rõ giới tính nhưng dữ liệu họ tên và ngày tháng năm sinh vẫn chính xác. Do vậy trong trường hợp thống kê không cần quan tâm đến giới, ví dụ tỷ lệ họ Nguyễn trong cộng đồng chẳng hạn, thì dữ liệu sai (không có thông tin giới tính) ở trên vẫn dùng được. Vì dữ liệu cần dùng thì vẫn chính xác;
  • Khi mà độ tin cậy trong việc xử lý dữ liệu sai có mức độ tin tưởng cao. Ví dụ trường hợp dữ liệu là Nguyen Đức Anh. Thì từ Nguyen là sai vì không có trong danh sách họ tên người Việt, nhưng chúng ta có thể suy đoán với độ tin cậy cao là nó chỉ đến họ Nguyễn, vì thông tin sai của nó khớp nhất với họ này trong tiếng Việt;
  • Một ví dụ khác như tên Trần MinhThi. là tên bị dính chữ thì việc suy đoán cũng có độ tin cậy rất cao tên chính xác là Trần Minh Thi;

Cần kiên quyết loại bỏ dữ liệu sai có độ tin cậy thấp trong việc khôi phục

Người thống kê muốn dữ liệu đa dạng nhất có thể, nên về mặt tâm lý có khuynh hướng cố gắng sử dụng càng nhiều dữ liệu hiện có càng tốt, và có thể dẫn đến việc cố đấm ăn xôi sửa dữ liệu sai có độ tin cậy thấp để đưa vào thống kê.

Có những dữ liệu sai chắc chắn không thể sửa được vì không có căn cứ nào. Chẳng hạn nếu năm sinh của một người bị thiếu, chỉ có dữ liệu ngày tháng thì bạn không thể suy đoán năm sinh của người đó.

Ngay cả trường hợp bạn có một danh sách học sinh cùng lớp, một học sinh nào đó thiếu năm sinh, và bạn đoán là năm sinh của học sinh này cũng giống với học sinh còn lại do học cùng lớp? Trật! Có thể học sinh đó học sớm hoặc muộn một năm thì sao? Dù rủi ro cho việc này không quá lớn.


Dữ liệu có bề ngoài hợp chuẩn nhưng sai logic

Chẳng hạn trong dữ liệu ngày tháng năm sinh lớp 5 có một dữ liệu ghi 07/07/1899

Điều này chắc chắn sai lệch, vì nếu có học sinh này thì người đó đã hơn 120 tuổi rồi!

Nhưng nếu dữ liệu ngày tháng năm sinh của trẻ lớp 5 ghi là 07/07/2005 thì sao (đa số trẻ có năm sinh là 2011). Dữ liệu này là duy nhất trong tập hợp khoảng 10 ngàn trẻ cùng đang học lớp 5. Chúng ta sẽ làm gì với dữ liệu này? Nó rõ ràng đặc biệt, nhưng không sai logic, vì có thể có những trẻ học muộn như vậy. Việc đưa dữ liệu hiếm này vào thống kê trong nhóm dữ liệu lớn sẽ không ảnh hưởng đến kết quả cuối cùng trong hầu hết trường hợp, tuy nhiên việc làm nổi bật nó có khả năng nên cân nhắc trong báo cáo cuối cùng.


Không nên xóa dữ liệu sai lệch khỏi database

Dữ liệu sai sót ngay cả không có khả năng sửa thì bạn cũng không nên xóa khỏi database mà chỉ nên đánh dấu nó để khi thống kê một kiểu dữ liệu nhất định chúng ta không đưa vào tính toán dữ liệu này. Có hai lý chính cho việc này:

  • Như đã nói ở phần trước hàng dữ liệu sai lệch có nhiều cột dữ liệu, một cột sai nhưng các cột khác đúng và ta vẫn sử dụng được dữ liệu ở các cột đúng nếu (các) cột sai không cần đưa vào mô hình phân tích;
  • Các dữ liệu sai là tài liệu tham khảo tốt để chúng ta phân tích mô hình sai dữ liệu và nó có thể giúp phát triển các biện pháp chỉnh sửa, hạn chế nhập liệu sai sau này;
Back to Top