Quy tắc Làm sạch & Xử lý Bẫy Dữ liệu DWH

Sáu quy tắc làm sạch bắt buộc khi chuẩn hóa dữ liệu từ DWH sang Parquet: lọc thành phẩm thương mại, loại dòng chiết khấu tiền tệ, tách hàng tặng FOC và làm sạch tồn kho.

1.0 (Draft) ✓ Đã chốt giải pháp & mô hình dự báo

Tại sao Cần Bộ Quy tắc Làm sạch Dữ liệu Chuẩn?

Quá trình đối soát dữ liệu thực tế trên Kho dữ liệu (DWH) cho thấy các bảng giao dịch gốc lưu giữ đầy đủ cả bút toán kế toán, vật phẩm trưng bày, hàng khuyến mãi và các kho tạm chờ hủy. Nếu đưa nguyên trạng dữ liệu thô vào mô hình dự báo mà không qua bộ lọc chuẩn, kết quả dự báo sẽ bị sai lệch nghiêm trọng.

Toàn bộ 6 quy tắc làm sạch dưới đây đã được tích hợp tự động vào bước tạo tệp Parquet chuẩn hóa, đảm bảo mọi người dùng và mọi mô hình đều làm việc trên cùng một nền dữ liệu sạch.


Sáu Quy tắc Làm sạch Bắt buộc

Chỉ Giữ Thành phẩm Thương mại

Danh mục hàng hóa trong hệ thống ERP/DWH bao gồm cả hàng hóa bán thương mại lẫn vật tư quảng cáo, quà tặng và mã hạch toán chiết khấu. Nhiều vật phẩm quà tặng (như móc khóa, bình nước, áo mưa) có hệ số quy đổi bằng 1, nên nếu không lọc bỏ thì mỗi cái quà tặng sẽ bị cộng nhầm thành một thùng hàng.

Nhóm Mã Sản PhẩmBản chất Nghiệp vụQuy tắc Xử lý trong Dữ liệu Dự báo
Nhóm mã bắt đầu bằng 11Thành phẩm thương mại (Kem, sữa, thực phẩm lạnh kinh doanh chính)Giữ lại 100%
Nhóm mã 19, 20, 21, 30, 50, 51, 60Vật phẩm quảng cáo (POSM), bao bì, quà tặng phi thực phẩmLoại bỏ hoàn toàn
Nhóm mã 71Dòng bút toán hạch toán chiết khấu kỹ thuậtLoại bỏ hoàn toàn
Nhóm mã SD, UNThiết bị tủ đông, mã sản phẩm tạm không xác địnhLoại bỏ hoàn toàn

Loại bỏ Dòng Bút toán Tiền tệ Thuần, Đơn Lỗi Nhập liệu, Tràn Doanh thu 100 Triệu, Kênh Thanh lý Nội bộ & Tách riêng Hàng Trả

  • Dòng chiết khấu ghi theo đơn vị tiền tệ (VND): Trong dữ liệu đơn hàng gốc, có một tỷ lệ nhỏ (~0,12%) dòng bút toán điều chỉnh tiền chiết khấu sử dụng đơn vị tính là đồng tiền (VND) và ghi số tiền trực tiếp vào cột số lượng. Hệ thống bắt buộc loại bỏ hoàn toàn các dòng đơn vị tiền tệ này trước khi tính sản lượng thùng.
  • Đơn lỗi nhập liệu cực đoan, tràn doanh thu 99.999.999,99 đồng, doanh thu $\le 0$, kênh thanh lý nội bộ và phiếu giao gõ nhầm năm: Bước làm sạch tự động loại bỏ 25.849 dòng bất thường trong tập thương mại (đưa bảng dữ liệu từ 3.949.821 về 3.923.972 dòng sạch), bao gồm:
    • 4 dòng đơn lỗi nhập liệu vượt quá 5.000 thùng/cửa hàng/SKU/ngày trên DWH (Satrafoods Lê Trọng Tấn 58.181,5 thùng, Satrafoods Trần Văn Mười 58.181,0 thùng, Co.opMart SCA Goldsilk 23.000 và 18.900 thùng).
    • 48 dòng bị tràn/gán cứng doanh thu thuần ở mức trần 99.999.999,99 đồng/dòng (làm tròn 100.000.000 đồng/dòng, hoặc bội số 199.999.999,98 / 1.199.999.999,88 đồng khi gộp nhiều dòng, tổng cộng 6.542,5 thùng và 6,40 tỷ đồng doanh thu ảo — bao gồm đơn Satrafoods Dương Đình Hội 2 gõ nhầm 23.000 cái kem, 3 dòng Bách Phúc Phương và các đơn lẻ tại AEON, Lotte, Pharmacity, GS25, SURIO, Labcos bị treo APPROVED không giao).
    • 24.527 dòng giao dịch thuộc kênh Khách hàng GT Nội bộ (39.767,7 thùng) — bản chất là xuất thanh lý/nội bộ cho nhân viên và văn phòng với đơn giá cực thấp (9.259 – 55.555 đồng/thùng, chỉ bằng 3% – 16% giá niêm yết), không phải nhu cầu thị trường.
    • 495 dòng đơn thương mại có sản lượng đặt dương nhưng doanh thu thuần $\le 0$ (45.558,0 thùng) và 470 dòng sản lượng đặt hàng bị âm (-487,6 thùng).
    • 265 dòng ngày tương lai xa (2026-11 đến 2030-08) chỉ phát sinh từ phiếu giao hàng gõ nhầm năm mà không có đơn đặt hàng (ordered_line_count == 0), cùng 60 dòng thuộc kho thử nghiệm nội bộ (TEST).
    • Chuẩn hóa mã quản lý vùng rsm_code bị thiếu số 0 ('300002' $\to$ '3000002').
  • Đơn hàng trả lại (Return): Toàn bộ các phiếu trả hàng được tách sang chỉ tiêu hàng trả riêng biệt, tuyệt đối không cộng gộp vào sản lượng nhu cầu đặt hàng.
  • Lưu ý về Đứt gãy Cấu trúc (Structural Breaks) giữa Lịch sử Excel (202101–202503) và DWH (202504+):
    • Loại kho NPP (serving_warehouse_type_code == 'NPP'): Giai đoạn Excel gần như không tách mã kho NPP, nhưng từ 2025-04 trên DWH ghi nhận đầy đủ (25.000 – 49.307,9 thùng/tháng).
    • Kho trung chuyển (DC) của Bách Hóa Xanh (2000970-00178): Điểm bán Kho DC mini đông mát Trần Đại Nghĩa (Kho Tạm) nhận hàng tập trung cho chuỗi BHX (2.106 – 3.838 thùng/SKU/tháng), cần lưu ý khi phân tích ở cấp cửa hàng lẻ.
    • Nhãn hàng của nhà cung cấp WAL (Wall’s) và phân cấp nhân sự (ASM/SUP/RSM): Cột brand_level_1_name hiện để NULL đối với mã nhà cung cấp WAL, và các cột nhân sự bán hàng chỉ có dữ liệu từ kỳ DWH (202504+).

Phân tách Minh bạch Hàng Thương mại Có Tính tiền và Hàng Tặng (FOC)

Trong thực tế bán hàng, hàng tặng khuyến mãi có thể xuất hiện dưới hai hình thức: đơn hàng tặng 100% không thu tiền hoặc dòng hàng tặng kèm nằm chung trong một đơn hàng thương mại. Do đó, hệ thống tách bạch hai chỉ tiêu:

  • Tổng sản lượng đặt (gồm cả hàng tặng): Dùng cho bài toán tính tải trọng kho vận và điều phối giao hàng.
  • Sản lượng đặt thương mại thuần (chỉ tính hàng có doanh thu): Đã bóc tách riêng phần hàng tặng kèm để đánh giá đúng sức mua thực chất của thị trường.

Làm sạch Tồn kho Thương mại Khả dụng

Khi tổng hợp số liệu tồn kho cuối ngày để tính tỷ lệ đứt hàng (Stockout Rate) và cân đối cung ứng:

  • Chỉ giữ các kho con (Subinventory) hàng thương mại (bắt đầu bằng ký tự số 1): Loại bỏ hoàn toàn các kho con bắt đầu bằng số 2, 3, 4 (vốn là kho quản lý tài sản, tủ đông, hàng hư hỏng chờ hủy hoặc kho thiết bị).
  • Loại bỏ các vị trí lưu kho (Locator) chờ xử lý: Không tính vào tồn kho khả dụng các lô hàng đang nằm tại vị trí Chờ xử lý (CXL) hoặc Chờ xuất trả nhà cung cấp (CXK).

Bảo toàn Đầy đủ Điểm bán trên Cây Kênh Phân phối

Cây phân cấp kênh bán hàng gồm 3 bậc (Kênh cấp 1 $\to$ Kênh cấp 2 $\to$ Kênh chi tiết). Một số điểm bán trên thực tế được gắn trực tiếp vào nút Kênh cấp 1 hoặc Kênh cấp 2 mà không đi qua cấp con thấp hơn. Bộ quy tắc chuẩn hóa tự động điền mã kênh cấp tương ứng cho các điểm bán này để đảm bảo 100% cửa hàng đều được phân loại đầy đủ khi lên báo cáo theo kênh.

Hợp nhất Phiên bản Lịch sử & Nối Mã Sản phẩm Kế thừa

  • Quản lý thay đổi thông tin cửa hàng/sản phẩm theo thời gian: Khi một cửa hàng đổi tên hoặc cập nhật thông tin hành chính, hệ thống kho dữ liệu sinh thêm bản ghi lịch sử mới nhưng vẫn giữ nguyên mã định danh tự nhiên của cửa hàng/sản phẩm đó để chuỗi sản lượng không bị chia cắt.
  • Nối mã sản phẩm kế thừa về 473 SKU gốc: Các mặt hàng thay đổi mã quản lý qua các năm (nhưng bản chất vẫn là cùng một sản phẩm thương mại) được tự động nối tiếp lịch sử về 473 mã sản phẩm gốc (Root SKU), giúp mô hình nhìn thấy trọn vẹn chu kỳ mùa vụ liên tục hơn 69 tháng.