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.

1.0 (Draft) ✓ Đã chốt giải pháp & 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 --> B

1. 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ế:

  1. Ư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.
  2. Ư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.
  3. Ư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á.
  4. Ư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.
  5. Ư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.
  6. Ư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:

  1. 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.
  2. 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).
  3. 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ênTên Bộ LọcCác Cột Dữ Liệu Tham Gia & Điều Kiện Lọc Kỹ Thuật
Ưu tiên 1Chỉ giữ thành phẩm thương mạiGiữ 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 2Loạ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 3Loại bỏ dòng trống, đơn lỗi nhập liệu, tràn 100 triệu & doanh thu âmGiữ 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 4Chỉ tính kho con thương mại khả dụngKhi 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 5Loại bỏ vị trí lưu kho bị khóa & trung chuyểnLoạ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 6Giữ trọn vẹn trục thời gian hợp lệ & bỏ phiếu giao gõ nhầm nămGiữ 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:

STTTên Cột Bị Loại BỏNhóm Nguyên NhânCột Thay Thế (Nếu Có)Giải Thích Lý Do Loại Bỏ
1erp_deleted_line_countKiểm toán dòng xóa & tiền mặtKhô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.
2erp_deleted_qtyKiểm toán dòng xóa & tiền mặtordered_qtySả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.
3erp_deleted_net_revenueKiểm toán dòng xóa & tiền mặtordered_net_revenueGiá 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ế.
4money_adjustment_line_countKiểm toán dòng xóa & tiền mặtKhô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ý.
5money_adjustment_net_revenueKiểm toán dòng xóa & tiền mặtordered_discount_amountSố 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.
6store_version_idMã số tự tăng nội bộstore_key, store_codeMã 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ế).
7product_version_idMã số tự tăng nội bộproduct_codeMã 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ế).
8product_keyMã số tự tăng nội bộproduct_codeMã 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).
9category_idMã số tự tăng nội bộcategory_code, category_nameMã 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ế).
10brand_idMã số tự tăng nội bộbrand_level_1_code, brand_level_2_codeMã 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ế).
11supplier_idMã số tự tăng nội bộsupplier_code, supplier_nameMã số tự tăng nội bộ của nhà cung cấp (đã có mã và tên nhà cung cấp thay thế).
12serving_warehouse_keyMã số tự tăng nội bộserving_warehouse_code, serving_warehouse_nameMã 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ế).
13distributor_idMã số tự tăng nội bộdistributor_code, distributor_nameMã 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ế).
14is_unknown_storeCờ cố định & đếm lỗi kỹ thuậtĐã lọc ở Ưu tiên 2Cờ đá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.
15ordered_qty_carton_dwhCờ cố định & đếm lỗi kỹ thuậtordered_qty_cartonCộ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.
16ordered_unconverted_line_countCờ cố định & đếm lỗi kỹ thuậtKhô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.
17ordered_unconverted_qty_rawCờ cố định & đếm lỗi kỹ thuậtordered_qtySố lượng thô của các dòng đơn đặt bị thiếu hệ số quy đổi đơn vị tính.
18delivery_note_unconverted_line_countCờ cố định & đếm lỗi kỹ thuậtKhông cần thay thếSố dòng phiếu giao hàng bị thiếu hệ số quy đổi đơn vị tính.
19delivery_note_invalid_line_countCờ cố định & đếm lỗi kỹ thuậtdelivery_note_line_countSố dòng phiếu giao hàng đã bị đánh dấu xóa trên phần mềm bán hàng.
20delivery_note_superseded_row_countCờ cố định & đếm lỗi kỹ thuậtKhô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ả:

STTTên Cột Tồn Kho SạchPhân Nhóm Tồn KhoĐơn Vị TínhÝ Nghĩa Sau Khi Đã Làm Sạch Theo Ưu Tiên 4 & 5
1warehouse_lot_available_qtyTồn kho theo lô (5 cột)Đơn vị chínhLượ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ả.
2warehouse_lot_on_hand_qtyTồn kho theo lô (5 cột)Đơn vị chínhLượ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).
3warehouse_lot_reserved_qtyTồn kho theo lô (5 cột)Đơn vị chínhLượ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.
4warehouse_lot_countTồn kho theo lô (5 cột)Số lô hàngSố 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.
5warehouse_lot_earliest_expiry_dateTồn kho theo lô (5 cột)Ngày thángNgà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ụ.
6warehouse_inv02_opening_qtyNhập - Xuất - Tồn chi tiết (13 cột)Đơn vị chínhTồ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ả).
7warehouse_inv02_receipt_qtyNhập - Xuất - Tồn chi tiết (13 cột)Đơn vị chínhLượng hàng nhập vào các kho con thương mại đầu 1 trong ngày.
8warehouse_inv02_issue_qtyNhập - Xuất - Tồn chi tiết (13 cột)Đơn vị chínhLượng hàng xuất ra từ các kho con thương mại đầu 1 trong ngày.
9warehouse_inv02_closing_qtyNhập - Xuất - Tồn chi tiết (13 cột)Đơn vị chínhTồn kho cuối ngày của các kho con thương mại đầu 1.
10warehouse_inv02_opening_package_qtyNhập - Xuất - Tồn chi tiết (13 cột)Kiện / ThùngTồ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.
11warehouse_inv02_receipt_package_qtyNhập - Xuất - Tồn chi tiết (13 cột)Kiện / ThùngLượ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.
12warehouse_inv02_issue_package_qtyNhập - Xuất - Tồn chi tiết (13 cột)Kiện / ThùngLượ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.
13warehouse_inv02_closing_package_qtyNhập - Xuất - Tồn chi tiết (13 cột)Kiện / ThùngTồ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.
14warehouse_inv02_commercial_closing_qtyNhập - Xuất - Tồn chi tiết (13 cột)Đơn vị chínhTồ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.
15warehouse_inv02_commercial_closing_package_qtyNhập - Xuất - Tồn chi tiết (13 cột)Kiện / ThùngTồn kho thương mại thuần túy cuối ngày quy đổi sang số thùng/kiện.
16warehouse_inv02_lot_countNhập - Xuất - Tồn chi tiết (13 cột)Số lô hàngSố lượng mã lô sản xuất khác nhau trong các kho con thương mại đầu 1.
17warehouse_inv02_subinv_countNhập - Xuất - Tồn chi tiết (13 cột)Số kho conSố 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ụ.
18warehouse_inv02_earliest_expiry_dateNhập - Xuất - Tồn chi tiết (13 cột)Ngày thángNgà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:

STTTên Cột Dẫn Xuất MớiNhóm Nghiệp VụKiểu Dữ LiệuCấp Ghi NhậnCông Thức Tính & Ý Nghĩa Nghiệp Vụ
1is_historical_excelLịch thời gian (calendar)Số nguyênNgàyCô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).
2net_commercial_ordered_qty_cartonĐơn đặt hàng (ordered)Số thựcCửa hàng × Sản phẩm × NgàyCô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.
3net_commercial_delivered_qty_cartonĐơn đã giao (delivered)Số thựcCửa hàng × Sản phẩm × NgàyCô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.
4effective_unit_price_per_cartonBảng giá (price)Số thựcCửa hàng × Sản phẩm × NgàyCô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).
5effective_discount_rateBảng giá (price)Số thựcCửa hàng × Sản phẩm × NgàyCô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.
6foc_carton_shareĐơn đặt hàng (ordered)Số thựcCửa hàng × Sản phẩm × NgàyCô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.
7fulfillment_rate_cartonĐơn đã giao (delivered)Số thựcCửa hàng × Sản phẩm × NgàyCô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.