6 Bộ lọc Làm sạch Dữ liệu & Quy tắc Tinh gọn Cột Dự báo
Giải thích dễ hiểu 6 bộ lọc làm sạch dữ liệu theo thứ tự ưu tiên, quy tắc lược bỏ 20 cột thừa, tính lại 18 cột tồn kho sạch và bổ sung 7 cột mới cho mô hình dự báo.
Mục tiêu của bài viết: Bảng dữ liệu gốc trích xuất từ Kho dữ liệu lưu giữ toàn bộ lịch sử giao dịch và sổ sách kế toán nên chứa cả vật phẩm quảng cáo, đơn hàng nháp đã xóa và hàng hỏng chờ hủy. Bài viết này giải thích bằng ngôn ngữ thông thường 6 bước lọc làm sạch dữ liệu theo đúng thứ tự ưu tiên, trước khi đi sâu vào giải thích từng cột dữ liệu bị loại bỏ hoặc bổ sung thêm.
flowchart TD
subgraph DWH["1. Bảng dữ liệu gốc từ Kho dữ liệu"]
A[("354 cột | 4.014.145 dòng\n(30.170 Cửa hàng × 1.091 Mã hàng hóa & vật tư)")]
end
subgraph Filters["2. Sáu bộ lọc làm sạch theo thứ tự ưu tiên"]
F1["Ưu tiên 1: Chỉ giữ hàng hóa kinh doanh chính\n(Loại bỏ vật phẩm quảng cáo, bao bì, nguyên liệu, tủ đông)"]
F2["Ưu tiên 2: Loại bỏ cửa hàng không xác định, kho thử nghiệm & kênh nội bộ\n(Bỏ giao dịch vãng lai UNKNOWN, kho TEST và kênh thanh lý Khách hàng GT Nội bộ)"]
F3["Ưu tiên 3: Loại bỏ dòng trống, đơn lỗi nhập liệu, tràn 100 triệu & doanh thu âm\n(Bỏ dòng xóa đơn, đơn gõ nhầm >5.000 thùng, dòng tràn 99.999.999,99đ, đơn 0đ và đơn âm)"]
F4["Ưu tiên 4: Chỉ tính tồn kho tại kho hàng bán được\n(Chỉ cộng kho thành phẩm, bỏ kho hàng hỏng và kho thiết bị)"]
F5["Ưu tiên 5: Loại bỏ vị trí hàng bị khóa hoặc trung chuyển\n(Bỏ khu vực chờ xử lý, chờ trả nhà máy và sàn bốc xếp tạm)"]
F6["Ưu tiên 6: Giữ trọn vẹn chuỗi thời gian hợp lệ\n(Bảo toàn lịch sử từ 01/2021 đến lịch tương lai hợp lệ, bỏ phiếu giao gõ nhầm năm)"]
F1 --> F2 --> F3 --> F4 --> F5 --> F6
end
subgraph ColumnReconciliation["3. Tinh gọn và chuẩn hóa các cột dữ liệu"]
DROP["Loại bỏ 20 cột không phục vụ dự báo\n(5 cột kiểm toán dòng xóa/tiền mặt + 15 cột mã nội bộ & đếm lỗi)"]
RECALC["Tính lại sạch 18 cột tồn kho\n(Chỉ cộng lượng hàng tại kho thương mại và vị trí xuất bán được)"]
ADD["Bổ sung 7 cột tính toán mới\n(Sản lượng bán thuần, đơn giá thực thu, tỷ lệ chiết khấu...)"]
ARITH["Cân đối số lượng cột:\n354 cột gốc - 20 cột bỏ + 7 cột mới = 341 cột sạch"]
end
subgraph ML["4. Bảng dữ liệu sạch phục vụ phân tích & dự báo"]
B[("341 cột | 3.923.972 dòng\n(28.887 Cửa hàng × 702 Mặt hàng thương mại)")]
end
A --> F1
F6 --> DROP & RECALC & ADD
DROP & RECALC & ADD --> ARITH --> B1. Sáu Bộ Lọc Làm Sạch Dữ Liệu Theo Thứ Tự Ưu Tiên
Khi chuyển dữ liệu từ bảng gốc sang bảng sạch phục vụ phân tích và dự báo nhu cầu, hệ thống áp dụng 6 bộ lọc tuần tự theo đúng thứ tự ưu tiên từ 1 đến 6. Mỗi bộ lọc giải quyết một nguyên nhân gây sai lệch số liệu trong thực tế:
Ưu tiên 1 — Chỉ giữ lại hàng hóa kinh doanh chính (kem, sữa và thực phẩm đông lạnh)
- Quy tắc lọc: Chỉ giữ lại các mặt hàng thành phẩm thương mại có mã sản phẩm bắt đầu bằng hai chữ số 11. Loại bỏ hoàn toàn các nhóm mã bắt đầu bằng 19, 20, 21 (nguyên vật liệu, hương liệu chế biến), 30 (bao bì, vỏ thùng), 50, 51 (vật phẩm quảng cáo tiếp thị như dù che, áo mưa, móc khóa, bình nước), 60 (công cụ dụng cụ) và các mã 71, SD, UN (dòng hạch toán chiết khấu kỹ thuật, thiết bị tủ đông, mã tạm).
- Lý do thực tế:
- Mô hình dự báo nhu cầu thị trường chỉ dự báo sức mua đối với hàng hóa thương mại bán cho người tiêu dùng, không dự báo nhu cầu cấp phát vật tư nội bộ.
- Trên hệ thống gốc, nhiều vật phẩm quà tặng quảng cáo (như móc khóa, tờ rơi, bình nước) được khai báo hệ số quy đổi mặc định bằng 1. Nếu không lọc bỏ ngay từ bước đầu tiên, mỗi chiếc móc khóa xuất tặng sẽ bị cộng nhầm thành 1 thùng hàng, làm sai lệch hoàn toàn tổng sản lượng thùng.
- Hậu quả nếu không lọc:
- Làm lẫn lộn 56.926 dòng giao dịch vật tư và quà tặng quảng cáo vào dữ liệu bán hàng.
- Khiến mô hình học nhầm các đợt xuất vật phẩm quảng cáo thành nhu cầu mua hàng thực tế của thị trường.
Ưu tiên 2 — Loại bỏ các giao dịch không rõ cửa hàng mua, kho thử nghiệm và kênh thanh lý nội bộ
- Quy tắc lọc: Chỉ giữ lại các giao dịch của những cửa hàng thương mại có thông tin định danh hợp lệ và phát sinh tại các kho vận hành thật; loại bỏ toàn bộ các dòng giao dịch bị gắn vào nhóm cửa hàng “Không xác định”, các dòng giao dịch thuộc kho thử nghiệm nội bộ và các giao dịch xuất thanh lý cho nhân viên/văn phòng thuộc kênh “Khách hàng GT Nội bộ”.
- Lý do thực tế:
- Trong quá trình đồng bộ dữ liệu, một số đơn hàng khách lẻ vãng lai hoặc bút toán điều chỉnh nội bộ chưa kịp gắn mã khách hàng sẽ được gom tạm vào một mã cửa hàng “Không xác định”. Điểm bán tạm này không có địa chỉ tỉnh/thành phố, không thuộc kênh bán hàng hay chuỗi siêu thị nào, và cũng không có tuyến nhân viên bán hàng phụ trách.
- Các dòng phát sinh tại kho thử nghiệm chỉ phục vụ kiểm thử phần mềm nội bộ, còn các giao dịch thuộc kênh “Khách hàng GT Nội bộ” (xuất cho cá nhân nhân viên hoặc văn phòng công ty với đơn giá thanh lý chỉ từ 9.259 – 55.555 đồng/thùng, bằng 3% – 16% giá niêm yết) không phản ánh sức mua thực tế ngoài thị trường.
- Hậu quả nếu không lọc:
- Đưa 251 dòng giao dịch không rõ danh tính, 60 dòng giao dịch kho thử nghiệm (124,9 thùng) và 24.527 dòng thanh lý nội bộ (39.767,7 thùng) vào dữ liệu, làm méo biến giá thực thu và sai lệch việc phân nhóm thói quen mua hàng của điểm bán.
Ưu tiên 3 — Loại bỏ các dòng trống chỉ điều chỉnh sổ sách, đơn lỗi nhập liệu đột biến, dòng tràn doanh thu 100 triệu và dòng thương mại không có doanh thu
- Quy tắc lọc:
- Chỉ giữ lại những ngày giao dịch mà cửa hàng và sản phẩm đó thực sự có ít nhất một dòng đặt hàng hợp lệ, hoặc một dòng trả hàng, hoặc một dòng phiếu giao hàng thực tế.
- Loại bỏ các dòng đơn lỗi nhập liệu đột biến vượt quá 5.000 thùng trên một cửa hàng và một mặt hàng trong một ngày trên Kho dữ liệu.
- Loại bỏ các dòng bị lỗi 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) trên Kho dữ liệu.
- Loại bỏ các dòng có sản lượng đặt hàng thương mại dương nhưng doanh thu thuần bằng 0 hoặc bị âm, cũng như các dòng có sản lượng đặt hàng bị âm trong lịch sử.
- Lý do thực tế:
- Bảng dữ liệu gốc lưu giữ cả những dòng đơn hàng đã bị kế toán xóa bỏ và các dòng điều chỉnh tiền chiết khấu hoặc bù trừ công nợ ghi theo đơn vị tiền đồng (VND) không kèm theo hàng hóa vật lý.
- Ngoài ra, dữ liệu giao dịch thô còn xuất hiện các đơn lỗi nhập liệu điển hình như 2 đơn tại chuỗi Satrafoods gõ nhầm lên tới 58.181,5 thùng và 58.181,0 thùng kem trong một ngày, 2 đơn tại Co.opMart SCA Goldsilk gõ nhầm 23.000 thùng và 18.900 thùng nhưng doanh thu bằng 0 đồng, 48 dòng bị tràn kiểu số 99.999.999,99 đồng/dòng (bao gồm cả đơn Satrafoods Dương Đình Hội 2 gõ nhầm 23.000 cái kem và các đơn lẻ vài thùng tại AEON, Lotte, Pharmacity, GS25 treo ở trạng thái chờ duyệt không giao hàng), cùng các dòng chiết khấu vượt tiền hàng hoặc ghi âm sản lượng.
- Hậu quả nếu không lọc:
- Tồn tại 9.972 dòng giao dịch trống, 4 dòng đơn lỗi nhập liệu cực đoan (158.262,5 thùng), 48 dòng lỗi tràn doanh thu 100 triệu đồng/dòng (6.542,5 thùng, 6,40 tỷ đồng doanh thu ảo), 495 dòng đơn thương mại có doanh thu bằng 0 hoặc âm (45.558,0 thùng) và 470 dòng sản lượng đặt hàng âm (-487,6 thùng).
- Các gai đột biến hàng chục nghìn thùng và đơn giá ảo hàng chục triệu đồng/thùng làm biến dạng hoàn toàn đường trung bình, trung vị và biểu đồ theo ngày, khiến mô hình học sai quy luật tiêu thụ và độ co giãn giá.
- Quy tắc lọc:
Ưu tiên 4 — Chỉ tính tồn kho tại các kho hàng thương mại đủ điều kiện xuất bán
- Quy tắc lọc: Khi cộng tổng các chỉ số tồn kho tại kho phục vụ, hệ thống chỉ lấy số liệu của các kho con (kho phụ) có mã bắt đầu bằng chữ số 1; loại bỏ hoàn toàn các kho con bắt đầu bằng chữ số 2, 3 và 4.
- Lý do thực tế:
- Theo quy định quản lý kho của công ty, chỉ các kho con bắt đầu bằng số 1 mới là kho lưu trữ thành phẩm thương mại đạt chuẩn xuất bán cho khách hàng.
- Các kho con bắt đầu bằng số 2, 3, 4 là kho quản lý tài sản cố định, kho tủ đông, kho chứa hàng hư hỏng/kem chảy chờ tiêu hủy hoặc kho hàng mẫu thử nghiệm.
- Hậu quả nếu không lọc:
- Số liệu tồn kho bị cộng dồn cả hàng hỏng chờ hủy và thiết bị vật tư, dẫn đến báo cáo tồn kho ảo (trên sổ báo còn hàng nhưng thực tế kho bán hàng đã hết sạch), làm sai lệch việc nhận diện những ngày đứt hàng.
Ưu tiên 5 — Loại bỏ các vị trí lưu kho đang bị khóa chờ xử lý hoặc đang trung chuyển tạm
- Quy tắc lọc:
- Trên toàn bộ các chỉ số tồn kho sạch, loại bỏ tất cả các vị trí lưu kho thuộc khu vực Chờ xử lý hoặc Chờ xuất trả nhà cung cấp.
- Riêng với hai chỉ số tồn kho cuối ngày thương mại thuần túy, loại bỏ thêm các vị trí sàn trung chuyển tạm thời, kho ảo hạch toán và vị trí vật tư.
- Lý do thực tế:
- Hàng nằm ở khu vực Chờ xử lý hoặc Chờ xuất trả là hàng đang bị niêm phong để kiểm tra chất lượng hoặc chuẩn bị trả về nhà máy, tuyệt đối không được xuất bán cho cửa hàng.
- Hàng nằm ở sàn trung chuyển hoặc kho ảo là lượng hàng đang trong quá trình bốc xếp qua lại giữa các khâu, không phải lượng hàng sẵn sàng để nhận đơn mới.
- Hậu quả nếu không lọc:
- Tính trùng lượng hàng đang luân chuyển nội bộ và tính nhầm hàng đang bị khóa chất lượng vào lượng hàng có thể bán.
- Quy tắc lọc:
Ưu tiên 6 — Giữ trọn vẹn chuỗi thời gian liên tục từ năm 2021 đến lịch kế hoạch tương lai và loại bỏ phiếu giao gõ nhầm năm
- Quy tắc lọc: Giữ nguyên toàn bộ các kỳ thời gian hợp lệ trong bảng dữ liệu — từ lịch sử dài hạn tháng 01/2021 cho tới các ngày kế hoạch tương lai thực tế (như tháng 10/2026), không đặt điều kiện chặn trần ngày hiện tại; đồng thời loại bỏ các dòng phát sinh ở các năm tương lai xa (từ tháng 11/2026 đến năm 2030) nếu chỉ có phiếu giao hàng gõ nhầm năm mà không có đơn đặt hàng.
- Lý do thực tế:
- Chuỗi lịch sử nhiều năm liên tục giúp mô hình nhận diện chính xác quy luật mùa vụ nắng nóng, mùa mưa và chu kỳ lễ Tết Nguyên Đán, trong khi dữ liệu kế hoạch kỳ tới cung cấp thông tin chương trình khuyến mãi và dự báo thời tiết.
- Tuy nhiên, trên hệ thống gốc có 265 dòng kéo dài từ tháng 11/2026 đến tháng 08/2030 hoàn toàn không có đơn đặt hàng hay doanh thu, chỉ phát sinh do nhân viên gõ nhầm năm trên chứng từ phiếu giao hàng nên cần được loại bỏ.
- Hậu quả nếu cắt bỏ ngày hoặc giữ dòng gõ nhầm năm:
- Nếu cắt bỏ lịch sử trước tháng 04/2025 sẽ mất khả năng học chu kỳ mùa vụ theo năm; ngược lại nếu không lọc bỏ 265 dòng phiếu giao gõ nhầm năm (đến tận năm 2030) sẽ làm kéo giãn sai lệch trục thời gian của bảng dữ liệu sạch.
2. Nguyên Lý Tinh Gọn Và Chuẩn Hóa Cột Dữ Liệu (Từ 354 Về 341 Cột)
Sau khi đi qua 6 bộ lọc làm sạch dòng và tồn kho ở trên, hệ thống tiếp tục rà soát lại danh sách 354 cột gốc để chuẩn bị bảng dữ liệu gọn sạch nhất (gồm 341 cột) phục vụ phân tích và huấn luyện mô hình dự báo theo 3 bước:
- Lược bỏ 20 cột thừa không phục vụ dự báo: Bao gồm 5 cột chỉ dùng để kiểm toán các dòng đơn đã xóa và bút toán điều chỉnh tiền mặt, 8 cột mã số tự tăng nội bộ của cơ sở dữ liệu (vì đã có các cột mã chuẩn và tên chuẩn tương ứng), cùng 7 cột cờ cố định hoặc đếm lỗi kỹ thuật trong quá trình đồng bộ dữ liệu.
- Tính toán lại sạch 18 cột tồn kho: Giữ nguyên tên của 18 cột tồn kho nhưng thay thế toàn bộ con số bên trong bằng số liệu tồn kho đã lọc sạch (chỉ tính kho thương mại đầu 1 và bỏ các vị trí chờ xử lý/chờ trả theo đúng Ưu tiên 4 và Ưu tiên 5).
- Bổ sung thêm 7 cột chỉ số mới: Tính sẵn các chỉ số quan trọng nhất cho phân tích và dự báo — như sản lượng đặt hàng thương mại thuần quy thùng, sản lượng giao thuần đã trừ trả hàng, đơn giá thực thu bình quân mỗi thùng, tỷ lệ chiết khấu thực tế, tỷ trọng hàng tặng và tỷ lệ giao đủ đơn hàng.
Công thức cân đối số lượng cột: 354 (Cột gốc) - 20 (Cột lược bỏ) + 7 (Cột bổ sung mới) = 341 (Cột dữ liệu sạch)
3. Phân Tích Sâu: Giải Thích Chi Tiết Các Cột Lọc, Loại Bỏ & Bổ Sung
Phần dưới đây cung cấp tên cột kỹ thuật chính xác tương ứng với từng bộ lọc, từng cột bị loại bỏ, từng cột tồn kho tính lại và từng cột mới được bổ sung:
3.1. Bảng Đối Chiếu Điều Kiện Lọc Kỹ Thuật Của 6 Bộ Lọc Ưu Tiên
Khi kiểm tra trực tiếp trên tệp dữ liệu (panel_full_dwh_daily.parquet → panel_ml_processed.parquet), 6 bộ lọc ở Mục 1 tác động lên các cột cụ thể sau:
| Thứ Tự Ưu Tiên | Tên Bộ Lọc | Các Cột Dữ Liệu Tham Gia & Điều Kiện Lọc Kỹ Thuật |
|---|---|---|
| Ưu tiên 1 | Chỉ giữ thành phẩm thương mại | Giữ product_code_prefix == '11'; loại bỏ các mã có product_code_prefix thuộc nhóm '19', '20', '21', '30', '50', '51', '60', '71', 'SD', 'UN' (vật phẩm quảng cáo tiếp thị, bao bì, tủ đông, bút toán kỹ thuật). |
| Ưu tiên 2 | Loại bỏ cửa hàng không xác định, kho thử nghiệm & kênh nội bộ | Giữ is_unknown_store == 0 (bỏ is_unknown_store == 1 / mã UNKNOWN, 251 dòng), loại bỏ kho thử nghiệm serving_warehouse_type_code == 'TEST' (60 dòng) và loại bỏ kênh thanh lý nội bộ channel_level_2_name == 'Khách hàng GT Nội bộ' (24.527 dòng); đồng thời chuẩn hóa mã quản lý vùng rsm_code bị thiếu số 0 ('300002' $\to$ '3000002'). |
| Ưu tiên 3 | Loại bỏ dòng trống, đơn lỗi nhập liệu, tràn 100 triệu & doanh thu âm | Giữ các dòng thỏa mãn (ordered_line_count > 0) OR (returned_line_count > 0) OR (delivery_note_line_count > 0) (bỏ các dòng chỉ có erp_deleted_line_count > 0 hoặc money_adjustment_line_count > 0); đồng thời loại bỏ đơn lỗi nhập liệu cực đoan trên DWH (ym >= 202504 AND ordered_paid_qty_carton > 5000, 4 dòng của Satrafoods & Co.opMart SCA Goldsilk), dòng lỗi tràn doanh thu 99.999.999,99 đồng/dòng trên DWH (ym >= 202504 AND ordered_net_revenue >= 99999999 ANDordered_net_revenue % 99999999.99 ≈ 0, 48 dòng), dòng thương mại có doanh thu $\le 0$ (ordered_paid_qty_carton > 0 AND ordered_net_revenue <= 0, 495 dòng) và dòng sản lượng đặt âm (ordered_qty_carton < 0 OR ordered_paid_qty_carton < 0, 470 dòng). |
| Ưu tiên 4 | Chỉ tính kho con thương mại khả dụng | Khi tổng hợp tồn kho, chỉ giữ các bản ghi có mã kho con sub_inventory_code bắt đầu bằng '1'; loại bỏ hoàn toàn các kho con bắt đầu bằng '2', '3', '4'. |
| Ưu tiên 5 | Loại bỏ vị trí lưu kho bị khóa & trung chuyển | Loại bỏ các vị trí lưu kho locator có chứa chuỗi 'CXL' (Chờ xử lý) hoặc 'CXK' (Chờ xuất trả). Với cột tồn thương mại cuối ngày, loại bỏ thêm '1_STG', '%STG%', '%LOGIC%' và '%_VT%'. |
| Ưu tiên 6 | Giữ trọn vẹn trục thời gian hợp lệ & bỏ phiếu giao gõ nhầm năm | Giữ nguyên toàn bộ các kỳ ym và date_key từ 202101 đến các ngày tương lai hợp lệ (202610), không đặt điều kiện chặn trần ngày hiện tại; nhưng loại bỏ 265 dòng tương lai xa (202611 đến 203008) có ym > 202610 AND ordered_line_count == 0 (chỉ có phiếu giao hàng gõ nhầm năm). |
3.2. Danh Sách Chi Tiết 20 Cột Bị Loại Bỏ Khỏi Bảng Dữ Liệu Sạch
Bảng dưới đây liệt kê đầy đủ 20 cột bị loại bỏ khi chuyển sang tệp panel_ml_processed.parquet, chia theo 3 nhóm nguyên nhân:
| STT | Tên Cột Bị Loại Bỏ | Nhóm Nguyên Nhân | Cột Thay Thế (Nếu Có) | Giải Thích Lý Do Loại Bỏ |
|---|---|---|---|---|
| 1 | erp_deleted_line_count | Kiểm toán dòng xóa & tiền mặt | Không cần thay thế | Số dòng đơn hàng đã bị xóa trên hệ thống kế toán — chỉ dùng để kiểm toán dữ liệu nguồn, không phải nhu cầu mua hàng. |
| 2 | erp_deleted_qty | Kiểm toán dòng xóa & tiền mặt | ordered_qty | Sản lượng của các dòng đơn đã bị xóa bỏ — giữ lại sẽ gây nhầm lẫn với sản lượng giao dịch thật. |
| 3 | erp_deleted_net_revenue | Kiểm toán dòng xóa & tiền mặt | ordered_net_revenue | Giá trị thành tiền của các dòng đơn đã bị xóa — đơn đã hủy bỏ nên không phát sinh doanh thu thực tế. |
| 4 | money_adjustment_line_count | Kiểm toán dòng xóa & tiền mặt | Không cần thay thế | Số dòng bút toán điều chỉnh chiết khấu hoặc công nợ ghi theo đơn vị tiền đồng (VND) — không có hàng hóa vật lý. |
| 5 | money_adjustment_net_revenue | Kiểm toán dòng xóa & tiền mặt | ordered_discount_amount | Số tiền điều chỉnh trên các dòng bút toán tiền tệ (VND) — không gắn với số lượng thùng hàng nên làm nhiễu quan hệ giữa giá và sản lượng. |
| 6 | store_version_id | Mã số tự tăng nội bộ | store_key, store_code | Mã số phiên bản lịch sử tự tăng của hồ sơ cửa hàng trong cơ sở dữ liệu (đã có mã cửa hàng ổn định thay thế). |
| 7 | product_version_id | Mã số tự tăng nội bộ | product_code | Mã số phiên bản lịch sử tự tăng của hồ sơ sản phẩm (đã có mã sản phẩm chuẩn thay thế). |
| 8 | product_key | Mã số tự tăng nội bộ | product_code | Mã số nội bộ của sản phẩm trong bảng danh mục (trùng lắp ý nghĩa định danh với mã sản phẩm chuẩn). |
| 9 | category_id | Mã số tự tăng nội bộ | category_code, category_name | Mã số tự tăng nội bộ của ngành hàng (đã có mã ngành hàng và tên ngành hàng 3 cấp thay thế). |
| 10 | brand_id | Mã số tự tăng nội bộ | brand_level_1_code, brand_level_2_code | Mã số tự tăng nội bộ của thương hiệu (đã có mã và tên thương hiệu 2 cấp thay thế). |
| 11 | supplier_id | Mã số tự tăng nội bộ | supplier_code, supplier_name | Mã số tự tăng nội bộ của nhà cung cấp (đã có mã và tên nhà cung cấp thay thế). |
| 12 | serving_warehouse_key | Mã số tự tăng nội bộ | serving_warehouse_code, serving_warehouse_name | Mã số nội bộ của kho phục vụ dùng để nối bảng trong lúc xử lý (đã có mã kho và tên kho thay thế). |
| 13 | distributor_id | Mã số tự tăng nội bộ | distributor_code, distributor_name | Mã số tự tăng nội bộ của nhà phân phối (đã có mã và tên nhà phân phối thay thế). |
| 14 | is_unknown_store | Cờ cố định & đếm lỗi kỹ thuật | Đã lọc ở Ưu tiên 2 | Cờ đánh dấu cửa hàng không xác định — sau khi lọc ở Ưu tiên 2, toàn bộ các dòng còn lại đều bằng 0 nên cột này không còn thông tin. |
| 15 | ordered_qty_carton_dwh | Cờ cố định & đếm lỗi kỹ thuật | ordered_qty_carton | Cột số lượng thùng tính theo công thức cũ bị sai đơn vị của kho dữ liệu — loại bỏ để tránh dùng nhầm thay cho cột số thùng chuẩn. |
| 16 | ordered_unconverted_line_count | Cờ cố định & đếm lỗi kỹ thuật | Không cần thay thế | Số dòng đơn đặt bị thiếu hệ số quy đổi đơn vị tính trong quá trình đồng bộ kỹ thuật. |
| 17 | ordered_unconverted_qty_raw | Cờ cố định & đếm lỗi kỹ thuật | ordered_qty | Số lượng thô của các dòng đơn đặt bị thiếu hệ số quy đổi đơn vị tính. |
| 18 | delivery_note_unconverted_line_count | Cờ cố định & đếm lỗi kỹ thuật | Không cần thay thế | Số dòng phiếu giao hàng bị thiếu hệ số quy đổi đơn vị tính. |
| 19 | delivery_note_invalid_line_count | Cờ cố định & đếm lỗi kỹ thuật | delivery_note_line_count | Số dòng phiếu giao hàng đã bị đánh dấu xóa trên phần mềm bán hàng. |
| 20 | delivery_note_superseded_row_count | Cờ cố định & đếm lỗi kỹ thuật | Không cần thay thế | Số bản ghi lịch sử trạng thái cũ của phiếu giao hàng đã bị thay thế bởi trạng thái mới hơn. |
Danh sách 11 tên cột chặn dự phòng và 15 cột chờ bổ sung từ Kho dữ liệu: Ngoài 20 cột thực tế bị cắt bỏ ở trên, chương trình làm sạch dữ liệu còn khai báo sẵn danh sách chặn dự phòng cho 11 tên cột khóa nội bộ và bộ đếm lỗi quy đổi ở các khâu đã giao, đang xử lý, hủy và trả hàng (gồm
account_channel_id,site_domain_id,weather_location_id,delivered_unconverted_line_count,delivered_unconverted_qty_raw,processing_unconverted_line_count,processing_unconverted_qty_raw,cancelled_unconverted_line_count,cancelled_unconverted_qty_raw,returned_unconverted_line_count,returned_unconverted_qty_raw). Ngược lại, 15 cột thuộc tính sản phẩm, tủ đông và khuyến mãi hiện đang rỗng 100% trên Kho dữ liệu (freezer_qty,pack_size,product_mt_price_excl_vat,product_mt_price_incl_vat,promo_max_discount_amount,promo_max_discount_pct,promo_max_get_qty,promo_max_list_price,promo_min_buy_qty,promo_min_price_after_promo,promo_mt_wide_max_discount_pct,promo_store_list_max_discount_pct,sub_brand,unit_per_pack,volume) vẫn được giữ nguyên trong cấu trúc 341 cột để tự động tiếp nhận dữ liệu ngay khi Kho dữ liệu hoàn tất đồng bộ các trường này.
3.3. Danh Sách 18 Cột Tồn Kho Được Tính Lại Sạch
Toàn bộ 18 cột tồn kho dưới đây vẫn giữ nguyên tên cột nhưng đã được tính toán lại từ đầu sau khi chỉ giữ kho con thương mại (bắt đầu bằng số 1) và loại bỏ các vị trí hàng chờ xử lý / chờ xuất trả:
| STT | Tên Cột Tồn Kho Sạch | Phân Nhóm Tồn Kho | Đơn Vị Tính | Ý Nghĩa Sau Khi Đã Làm Sạch Theo Ưu Tiên 4 & 5 |
|---|---|---|---|---|
| 1 | warehouse_lot_available_qty | Tồn kho theo lô (5 cột) | Đơn vị chính | Lượng tồn kho khả dụng (sẵn sàng đặt đơn mới) tại các kho con thương mại đầu 1, đã loại trừ vị trí chờ xử lý và chờ trả. |
| 2 | warehouse_lot_on_hand_qty | Tồn kho theo lô (5 cột) | Đơn vị chính | Lượng tồn kho vật lý thực tế đang nằm tại các kho con thương mại đầu 1 (không tính kho hàng hỏng và kho tủ đông). |
| 3 | warehouse_lot_reserved_qty | Tồn kho theo lô (5 cột) | Đơn vị chính | Lượng hàng tại kho thương mại đầu 1 đã được khóa giữ chỗ cho các đơn hàng chờ giao. |
| 4 | warehouse_lot_count | Tồn kho theo lô (5 cột) | Số lô hàng | Số lượng mã lô sản xuất hợp lệ đang còn tồn tại các kho con thương mại đầu 1. |
| 5 | warehouse_lot_earliest_expiry_date | Tồn kho theo lô (5 cột) | Ngày tháng | Ngày hết hạn sử dụng gần nhất trong số các lô hàng thương mại hợp lệ tại kho phục vụ. |
| 6 | warehouse_inv02_opening_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Đơn vị chính | Tồn kho đầu ngày của các kho con thương mại đầu 1 (đã loại vị trí chờ xử lý và chờ trả). |
| 7 | warehouse_inv02_receipt_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Đơn vị chính | Lượng hàng nhập vào các kho con thương mại đầu 1 trong ngày. |
| 8 | warehouse_inv02_issue_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Đơn vị chính | Lượng hàng xuất ra từ các kho con thương mại đầu 1 trong ngày. |
| 9 | warehouse_inv02_closing_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Đơn vị chính | Tồn kho cuối ngày của các kho con thương mại đầu 1. |
| 10 | warehouse_inv02_opening_package_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Kiện / Thùng | Tồn kho đầu ngày của các kho con thương mại đầu 1 quy đổi sang số thùng/kiện. |
| 11 | warehouse_inv02_receipt_package_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Kiện / Thùng | Lượng hàng nhập trong ngày vào kho con thương mại đầu 1 quy đổi sang số thùng/kiện. |
| 12 | warehouse_inv02_issue_package_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Kiện / Thùng | Lượng hàng xuất trong ngày từ kho con thương mại đầu 1 quy đổi sang số thùng/kiện. |
| 13 | warehouse_inv02_closing_package_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Kiện / Thùng | Tồn kho cuối ngày của các kho con thương mại đầu 1 quy đổi sang số thùng/kiện. |
| 14 | warehouse_inv02_commercial_closing_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Đơn vị chính | Tồn kho thương mại thuần túy cuối ngày (đã loại trừ thêm sàn trung chuyển tạm, kho ảo và vị trí vật tư) — dùng để xác định ngày kho đứt hàng. |
| 15 | warehouse_inv02_commercial_closing_package_qty | Nhập - Xuất - Tồn chi tiết (13 cột) | Kiện / Thùng | Tồn kho thương mại thuần túy cuối ngày quy đổi sang số thùng/kiện. |
| 16 | warehouse_inv02_lot_count | Nhập - Xuất - Tồn chi tiết (13 cột) | Số lô hàng | Số lượng mã lô sản xuất khác nhau trong các kho con thương mại đầu 1. |
| 17 | warehouse_inv02_subinv_count | Nhập - Xuất - Tồn chi tiết (13 cột) | Số kho con | Số lượng kho con thương mại đầu 1 đang thực tế lưu giữ mặt hàng này tại kho phục vụ. |
| 18 | warehouse_inv02_earliest_expiry_date | Nhập - Xuất - Tồn chi tiết (13 cột) | Ngày tháng | Ngày hết hạn sử dụng sớm nhất trong các lô hàng thương mại còn tồn dương cuối ngày. |
3.4. Danh Sách 7 Cột Mới Được Bổ Sung Cho Mô Hình Dự Báo
Bảng dưới đây giải thích chi tiết 7 cột dẫn xuất mới được tính toán thêm trong tệp panel_ml_processed.parquet:
| STT | Tên Cột Dẫn Xuất Mới | Nhóm Nghiệp Vụ | Kiểu Dữ Liệu | Cấp Ghi Nhận | Công Thức Tính & Ý Nghĩa Nghiệp Vụ |
|---|---|---|---|---|---|
| 1 | is_historical_excel | Lịch thời gian (calendar) | Số nguyên | Ngày | Công thức: Bằng 1 nếu kỳ tháng ym < 202504 (dữ liệu lịch sử tổng hợp tháng giai đoạn 01/2021–03/2025); bằng 0 nếu ym >= 202504 (dữ liệu giao dịch chi tiết từng ngày từ Kho dữ liệu). |
| 2 | net_commercial_ordered_qty_carton | Đơn đặt hàng (ordered) | Số thực | Cửa hàng × Sản phẩm × Ngày | Công thức: Bằng đúng ordered_paid_qty_carton. Đây là sản lượng đặt hàng thương mại thuần quy thùng (chỉ tính hàng bán có thu tiền, đã loại bỏ hàng tặng khuyến mãi và đơn biếu tặng) — con số chuẩn dùng để dự báo nhu cầu thị trường. |
| 3 | net_commercial_delivered_qty_carton | Đơn đã giao (delivered) | Số thực | Cửa hàng × Sản phẩm × Ngày | Công thức: Bằng delivered_paid_qty_carton trừ đi lượng hàng thương mại khách trả lại (returned_qty_carton - returned_free_qty_carton - returned_foc_qty_carton). Phản ánh sản lượng hàng thương mại thực tiêu thụ thành công. |
| 4 | effective_unit_price_per_carton | Bảng giá (price) | Số thực | Cửa hàng × Sản phẩm × Ngày | Công thức: Bằng ordered_net_revenue / ordered_paid_qty_carton. Phản ánh đơn giá thực thu bình quân trên 1 thùng hàng thương mại (trước thuế GTGT, đã trừ chiết khấu). |
| 5 | effective_discount_rate | Bảng giá (price) | Số thực | Cửa hàng × Sản phẩm × Ngày | Công thức: Bằng ordered_discount_amount / ordered_amount_before_discount (giới hạn trong khoảng từ 0.0 đến 1.0). Cho biết tỷ lệ phần trăm chiết khấu thực tế trên đơn đặt hàng. |
| 6 | foc_carton_share | Đơn đặt hàng (ordered) | Số thực | Cửa hàng × Sản phẩm × Ngày | Công thức: Bằng ordered_foc_qty_carton / ordered_qty_carton. Phản ánh tỷ trọng thùng hàng tặng khuyến mãi trong tổng số thùng đặt hàng. |
| 7 | fulfillment_rate_carton | Đơn đã giao (delivered) | Số thực | Cửa hàng × Sản phẩm × Ngày | Công thức: Bằng delivered_qty_carton / ordered_qty_carton. Cho biết tỷ lệ giao hàng thành công theo thùng so với số lượng khách đã đặt. |