Giới thiệu dự án

Trong bối cảnh chuyển đổi số và bùng nổ thương mại đa kênh (Omnichannel Retail), dữ liệu đóng vai trò là tài sản chiến lược tối quan trọng giúp các doanh nghiệp tối ưu hóa chuỗi cung ứng, nâng cao trải nghiệm khách hàng và tối đa hóa lợi nhuận. Theo thống kê từ Gartner và McKinsey, hơn 75% doanh nghiệp bán lẻ quy mô lớn gặp thất bại hoặc chậm trễ trong việc khai thác giá trị dữ liệu do sự tắc nghẽn (bottleneck) tại các kiến trúc dữ liệu tập trung truyền thống (Centralized Data Warehouse / Data Lake). Đội ngũ kỹ thuật dữ liệu trung tâm thường xuyên quá tải, dẫn đến độ trễ xử lý dữ liệu kéo dài và thiếu sự thấu hiểu sâu sát về mặt nghiệp vụ (domain context) của từng phòng ban.

Kiến trúc Data Mesh (Lưới dữ liệu), được khởi xướng bởi Zhamak Dehghani vào năm 2019, ra đời nhằm giải quyết triệt để rào cản trên thông qua tư duy phân quyền dữ liệu theo hướng miền (Domain-Driven Design - DDD), xem dữ liệu như một sản phẩm (Data as a Product), thiết lập nền tảng tự phục vụ (Self-serve Data Platform) và quản trị phân tán (Federated Computational Governance). Đề tài khóa luận tốt nghiệp kỹ sư ngành Kỹ thuật Dữ liệu: "Xây dựng Data Mesh cho chuỗi bán lẻ phục vụ hỗ trợ ra quyết định" (thực hiện bởi sinh viên Nguyễn Văn Hiền, Huỳnh Gia Huy dưới sự hướng dẫn của ThS. Nguyễn Văn Thành tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh) đã hiện thực hóa mô hình tiên tiến này trên nền tảng đám mây Microsoft Azure.

+-----------------------------------------------------------------------------+
|                            FEDERATED GOVERNANCE                             |
|       (Microsoft Entra ID / Azure RBAC / Policy & Security Standards)        |
+-----------------------------------------------------------------------------+
               |                                             |
               v                                             v
+-----------------------------+               +-------------------------------+
|         SALE DOMAIN         |               |         STORE DOMAIN          |
|  (Azure Synapse: SaleDev)   |               |   (Azure Synapse: StoreDev)   |
|                             |               |                               |
| +-------------------------+ |  Data Sharing | +---------------------------+ |
| | ADLS Gen2: Bronze->Gold | |<------------->| |  ADLS Gen2: Bronze->Gold  | |
| +-------------------------+ | (Cross-Domain)| +---------------------------+ |
+-----------------------------+               +-------------------------------+
               \                                             /
                \---------------------+---------------------/
                                      |
                                      v
                      +-------------------------------+
                      |      SELF-SERVE CONSUMPTION   |
                      |   - Power BI Dashboards       |
                      |   - PostgreSQL Database       |
                      |   - Streamlit ML Decision App |
                      +-------------------------------+

Mục tiêu của dự án:

  1. Nghiên cứu và chuẩn hóa kiến trúc Data Mesh: Phân tích toàn diện 4 trụ cột của Data Mesh và đối sánh với Data Warehouse, Data Lake, Data Lakehouse.
  2. Thiết kế và phân rã miền dữ liệu bán lẻ (Domain Decomposition): Phân chia hệ thống chuỗi bán lẻ 45 cửa hàng thành 2 domain độc lập: Sale Domain (quản lý doanh số hàng tuần, phòng ban) và Store Domain (quản lý đặc trưng vùng, nhiệt độ, giá nhiên liệu, CPI, tỷ lệ thất nghiệp, khuyến mãi MarkDown).
  3. Hiện thực hóa Data Pipeline theo mô hình Medallion trên Azure: Xây dựng luồng xử lý tự động qua các tầng Bronze (Raw Data) $\rightarrow$ Silver (Cleaned/Transformed Data) $\rightarrow$ Gold (Analytics-Ready Parquet Data) bằng Azure Synapse Analytics và Azure Data Lake Storage Gen2 (ADLS Gen2).
  4. Phân tích khám phá và trực quan hóa dữ liệu (EDA & BI): Tích hợp Power BI và Synapse Notebooks để phân tích đa chiều tác động của các yếu tố kinh tế vĩ mô và ngày lễ đặc biệt (Super Bowl, Labor Day, Thanksgiving, Christmas) đến doanh thu.
  5. Xây dựng hệ thống học máy (Machine Learning) hỗ trợ ra quyết định: Huấn luyện mô hình xử lý dữ liệu khuyết thiếu (imputation) cho MarkDown/CPI và dự báo doanh số bán hàng hàng tuần (Weekly_Sales), đóng gói giao diện web tương tác thời gian thực bằng Streamlit.

Phạm vi và giới hạn dự án:

  • Phạm vi dữ liệu: Bộ dữ liệu lịch sử bán lẻ gồm 45 cửa hàng đa khu vực, 81 phòng ban từ năm 2010 đến 2012 với 421.570 bản ghi giao dịch, tích hợp dữ liệu kinh tế vĩ mô và 5 kênh khuyến mãi (MarkDown1 đến MarkDown5).
  • Giới hạn kỹ thuật: Triển khai trên môi trường điện toán đám mây Microsoft Azure (gói Azure for Students); tập trung vào xử lý theo lô (Batch Processing) định dạng Apache Parquet; giao tiếp giữa các miền thông qua lớp lưu trữ bảo mật phân quyền RBAC.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi tiếp cận Data Mesh, các doanh nghiệp bán lẻ phụ thuộc chủ yếu vào các mô hình lưu trữ truyền thống với nhiều hạn chế kỹ thuật:

Tiêu chí so sánh Data Warehouse Data Lake Data Mesh (Đề tài đề xuất)
Kiến trúc dữ liệu Tập trung (Centralized Monolith), Schema-on-Write Tập trung (Centralized Storage), Schema-on-Read Phân tán hướng miền (Domain-Oriented Decentralized)
Quyền sở hữu (Ownership) Đội Data Engineering trung tâm sở hữu toàn bộ Đội Data Platform / Data Lake Admin quản lý Đội ngũ nghiệp vụ từng Domain sở hữu dữ liệu như sản phẩm
Mô hình phục vụ Báo cáo cố định, khó mở rộng bảng Dữ liệu thô phân tán, dễ biến thành Data Swamp Self-serve Data Infrastructure Platform
Độ trễ tích hợp Cao (Tốn hàng tuần đến hàng tháng để thay đổi ETL) Trung bình (cần Data Engineer xử lý lại từ Raw) Thấp (Domain Team tự công bố và cam kết SLA/Contract)
Khả năng mở rộng Kém khi quy mô phòng ban và loại dữ liệu tăng vọt Khó quản trị chất lượng và phân quyền chi tiết Vượt trội, thêm Domain mới không ảnh hưởng hệ thống cũ
Định dạng dữ liệu Bảng quan hệ có cấu trúc (RDBMS / Synapse SQL) Mọi định dạng (CSV, JSON, Audio, Image) Đa dạng, chuẩn hóa qua Parquet/Delta, quản trị metadata

Phân tích yêu cầu hệ thống theo mô hình MoSCoW:

  • Must have (Bắt buộc có):
    • Phân tách độc lập không gian lưu trữ và tài nguyên tính toán giữa Sale Domain và Store Domain trên ADLS Gen2.
    • Phân quyền kiểm soát truy cập dựa trên vai trò (Azure RBAC) kết hợp Microsoft Entra ID.
    • Xây dựng pipeline xử lý dữ liệu qua 3 tầng Bronze - Silver - Gold.
    • Huấn luyện mô hình hồi quy (Regression) dự báo Weekly_Sales với sai số MAPE < 10%.
  • Should have (Nên có):
    • Dashboard trực quan hóa tương tác trên Power BI kết nối trực tiếp đến Gold Layer.
    • Thuật toán Machine Learning tự động điền giá trị thiếu (Missing Value Imputation) cho các đợt khuyến mãi.
  • Could have (Có thể có): Giao diện Streamlit cho phép người dùng thay đổi giả định về CPI, tỷ lệ thất nghiệp, mức giảm giá để mô phỏng doanh thu tức thì.
  • Won't have (Chưa thực hiện đợt này): Luồng xử lý dữ liệu thời gian thực (Real-time Streaming) qua Apache Kafka/Azure Event Hubs.

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng hoàn chỉnh trên hệ sinh thái Microsoft Azure, bao gồm 4 thành phần kỹ thuật cốt lõi:

+---------------------------------------------------------------------------------------+
|                                MICROSOFT AZURE CLOUD                                  |
|                                                                                       |
|  +---------------------------------------------------------------------------------+  |
|  |                 FEDERATED GOVERNANCE & ACCESS MANAGEMENT (IAM)                  |  |
|  |       Azure Active Directory (Entra ID) | Azure Role-Based Access Control       |  |
|  +---------------------------------------------------------------------------------+  |
|                                                                                       |
|  +-----------------------------------+     +---------------------------------------+  |
|  |        SALE DOMAIN WORKSPACE      |     |        STORE DOMAIN WORKSPACE         |  |
|  |  (Synapse Analytics: SaleDev)     |     |  (Synapse Analytics: StoreDev)        |  |
|  |                                   |     |                                       |  |
|  |  +-----------------------------+  |     |  +---------------------------------+  |  |
|  |  |      ADLS Gen2 Container    |  |     |  |       ADLS Gen2 Container       |  |  |
|  |  |  - Bronze: raw_sales.csv    |  |     |  |  - Bronze: raw_stores/features.csv |  |
|  |  |  - Silver: sales_clean.pqt  |  |     |  |  - Silver: features_clean.pqt   |  |  |
|  |  |  - Gold: sale_data_gold.pqt |  |     |  |  - Gold: store_feature_gold.pqt |  |  |
|  |  +-----------------------------+  |     |  +---------------------------------+  |  |
|  +-----------------------------------+     +---------------------------------------+  |
|                     \                                     /                           |
|                      \-------------------+---------------/                            |
|                                          |                                            |
|                                          v                                            |
|  +---------------------------------------------------------------------------------+  |
|  |                           DATA PRODUCT SERVING LAYER                            |  |
|  |  - Azure Synapse Serverless SQL Pool (Cross-Domain Joins)                       |  |
|  |  - Data Merging & Feature Engineering Pipeline (PySpark 3.4)                    |  |
|  +---------------------------------------------------------------------------------+  |
+------------------------------------------+--------------------------------------------+
                                           |
                                           v
+---------------------------------------------------------------------------------------+
|                                APPLICATION & DECISION SUPPORT                         |
|  +-----------------------+ +-------------------------+ +----------------------------+ |
|  |  Power BI Dashboards  | |  PostgreSQL Data Store  | |  Streamlit Application     | |
|  |  (Executive Insights) | |  (Relational Database)  | |  (Port 8501 - ML Forecast) | |
|  +-----------------------+ +-------------------------+ +----------------------------+ |
+---------------------------------------------------------------------------------------+

Chi tiết công nghệ và phiên bản (Technology Stack):

  • Cloud Infrastructure: Microsoft Azure Resource Groups, Azure Subscription.
  • Storage Layer: Azure Data Lake Storage Gen2 (Hierarchical Namespace enabled, Blob Storage backend).
  • Processing Engine: Azure Synapse Analytics Workspace (Spark 3.4 Pool, Serverless SQL Pool).
  • Security & IAM: Microsoft Entra ID (Azure AD), Azure RBAC (Built-in roles: Owner, Contributor, Reader, Storage Blob Data Contributor).
  • Programming & Frameworks: Python 3.10, PySpark, Pandas 2.1, NumPy 1.26, Scikit-learn 1.3, Matplotlib, Seaborn.
  • Database & Serving: PostgreSQL 15, Apache Parquet (snappy compression).
  • Application & Presentation: Streamlit 1.28.0, Microsoft Power BI Desktop 2024.

Mô hình dữ liệu và phân rã Domain:

  1. Store Domain (storedata): Chịu trách nhiệm quản lý thông tin tĩnh của cửa hàng (Stores: Store, Type, Size) và dữ liệu ngoại cảnh theo tuần (Features: Temperature, Fuel_Price, MarkDown1-5, CPI, Unemployment, IsHoliday).
  2. Sale Domain (saledata): Chịu trách nhiệm quản lý thông tin hiệu suất giao dịch bán lẻ (Sales: Store, Dept, Date, Weekly_Sales, IsHoliday).

Thiết kế phân quyền bảo mật (Azure RBAC & IAM):

  • Domain Owners & Engineers: Được gán quyền Storage Blob Data ContributorSynapse Administrator giới hạn trong Resource Group và Container của từng domain tương ứng.
  • Cross-Domain Consumers: Được cấp quyền Storage Blob Data Reader chỉ trên thư mục Gold/ của domain khác, ngăn chặn việc truy cập dữ liệu thô (Bronze) hoặc can thiệp vào logic chuyển đổi nội bộ.

Methodology

Dự án áp dụng phương pháp luận Agile DataOps kết hợp quy trình phân rã miền hướng đối tượng (Domain-Driven Design), chia làm 5 giai đoạn phát triển chính với các mốc kiểm soát chất lượng rõ ràng:

[Phase 1: Thu thập & Đánh giá] 
       |---> Nghiên cứu lý thuyết Data Mesh & Khảo sát dữ liệu 45 cửa hàng
[Phase 2: Thiết kế Hạ tầng Đám mây]
       |---> Cấu hình Entra ID, Azure Storage Account, Azure Synapse Workspaces
[Phase 3: Xây dựng Medallion Pipelines]
       |---> Viết PySpark ETL: Bronze -> Silver -> Gold cho Sale & Store Domains
[Phase 4: Tích hợp & Xây dựng Mô hình ML]
       |---> Khắc phục dữ liệu thiếu, Huấn luyện mô hình hồi quy, Cross-domain merge
[Phase 5: Đóng gói & Triển khai Ra quyết định]
       |---> Xây dựng Dashboard Power BI, Triển khai App Streamlit, Đánh giá SLA

Ma trận quản trị rủi ro (Risk Assessment & Mitigation):

  • Rủi ro rò rỉ dữ liệu chéo domain: Áp dụng Azure RBAC ở mức container và đường dẫn thư mục ADLS Gen2; ghi nhật ký kiểm toán (Audit Logs) qua Azure Monitor.
  • Rủi ro sai lệch định dạng schema khi chia sẻ: Áp dụng chuẩn nén Apache Parquet với schema cố định cho tầng Gold; xác thực kiểu dữ liệu nghiêm ngặt trước khi xuất bản data product.
  • Rủi ro dữ liệu khuyết thiếu lớn ở cột MarkDown: Xây dựng module học máy phụ trợ (ml_regression) để dự báo và nội suy dữ liệu MarkDown dựa trên các biến tương quan (Store Type, Size, Temperature, CPI).

Implementation và kết quả

Development process

Quá trình triển khai kỹ thuật được thực hiện thông qua hệ thống script PySpark trên Synapse Notebook và Python backend.

1. Xây dựng Data Pipeline Medallion cho Domain Sales & Stores:

Dữ liệu thô từ định dạng CSV được nạp vào tầng Bronze, sau đó được làm sạch kiểu dữ liệu, chuẩn hóa ngày tháng và lưu dưới dạng Parquet ở tầng Silver, cuối cùng tổng hợp thành Data Product tại tầng Gold.

# ==============================================================================
# PySpark Pipeline: Chuyển đổi dữ liệu Sale Domain từ Bronze sang Gold
# Workspace: Azure Synapse Analytics (SaleDev)
# ==============================================================================
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, to_date, year, month, weekofyear, when

spark = SparkSession.builder.appName("SaleDomainPipeline").getOrCreate()

# 1. Đọc dữ liệu thô từ Bronze Layer (ADLS Gen2)
bronze_sales_path = "abfss://saledata@salesadlsgen2.dfs.core.windows.net/bronze/sales.csv"
df_sales_raw = spark.read.format("csv") \
    .option("header", "true") \
    .option("inferSchema", "true") \
    .load(bronze_sales_path)

# 2. Xử lý chuẩn hóa tại Silver Layer
# Chuyển đổi cột Date từ chuỗi sang kiểu DateType và chuẩn hóa biến IsHoliday
df_sales_silver = df_sales_raw \
    .withColumn("Date", to_date(col("Date"), "yyyy-MM-dd")) \
    .withColumn("IsHoliday", col("IsHoliday").cast("boolean")) \
    .withColumn("Weekly_Sales", col("Weekly_Sales").cast("double")) \
    .filter(col("Weekly_Sales") >= 0) # Loại bỏ các giá trị trả hàng dị biệt

silver_sales_path = "abfss://saledata@salesadlsgen2.dfs.core.windows.net/silver/sales_cleaned.parquet"
df_sales_silver.write.mode("overwrite").parquet(silver_sales_path)

# 3. Tạo Data Product sẵn sàng phân tích tại Gold Layer
df_sales_gold = df_sales_silver \
    .withColumn("Year", year(col("Date"))) \
    .withColumn("Month", month(col("Date"))) \
    .withColumn("Week", weekofyear(col("Date")))

gold_sales_path = "abfss://saledata@salesadlsgen2.dfs.core.windows.net/gold/sale_data_gold.parquet"
df_sales_gold.write.mode("overwrite").parquet(gold_sales_path)
print("Sale Domain Gold Data Product xuất bản thành công!")

2. Kỹ thuật nội suy dữ liệu khuyết thiếu (ml_regression for MarkDown/CPI):

Các cột MarkDown1 đến MarkDown5 có tỷ lệ khuyết thiếu lên đến 60% trong giai đoạn trước tháng 11/2011. Đề tài áp dụng thuật toán hồi quy Random Forest để dự đoán và bù đắp dữ liệu thiếu:

# ==============================================================================
# Machine Learning: Imputation cho các giá trị MarkDown bị khuyết
# ==============================================================================
from sklearn.ensemble import RandomForestRegressor
import numpy as np
import pandas as pd

def ml_regression_imputation(df, target_col, feature_cols):
    """
    Sử dụng Random Forest Regressor để dự đoán và điền dữ liệu khuyết thiếu.
    """
    df_train = df[df[target_col].notnull()]
    df_missing = df[df[target_col].isnull()]
    
    if df_missing.empty:
        return df
    
    X_train = df_train[feature_cols]
    y_train = df_train[target_col]
    X_missing = df_missing[feature_cols]
    
    # Khởi tạo và huấn luyện mô hình
    rf_model = RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)
    rf_model.fit(X_train, y_train)
    
    # Dự đoán giá trị còn thiếu
    predicted_values = rf_model.predict(X_missing)
    df.loc[df[target_col].isnull(), target_col] = predicted_values
    
    return df

3. Xây dựng mô hình Machine Learning dự báo doanh thu và ứng dụng Streamlit:

Mô hình Random Forest Regression và XGBoost được xây dựng trên tập dữ liệu hợp nhất đa miền (Cross-domain Gold Layer: df_sales + df_stores + df_features) để dự báo Weekly_Sales.

# ==============================================================================
# Giao diện tương tác hỗ trợ ra quyết định kinh doanh qua Streamlit
# File: app.py (Chạy trên cổng localhost:8501)
# ==============================================================================
import streamlit as st
import pandas as pd
import joblib

st.set_page_config(page_title="Retail Decision Support - Data Mesh", layout="wide")
st.title("Hệ Thống Hỗ Trợ Ra Quyết Định Chuỗi Bán Lẻ (Data Mesh Architecture)")

# Load Model đã huấn luyện từ Gold Data
@st.cache_resource
def load_model():
    return joblib.load("model/rf_sales_forecaster.pkl")

model = load_model()

# Sidebar: Nhập thông số kinh doanh & giả định thị trường
st.sidebar.header("Thông số đầu vào kịch bản")
store_id = st.sidebar.number_input("Mã cửa hàng (1 - 45)", min_value=1, max_value=45, value=1)
dept_id = st.sidebar.number_input("Mã phòng ban (1 - 99)", min_value=1, max_value=99, value=1)
is_holiday = st.sidebar.selectbox("Tuần lễ đặc biệt?", [False, True])
temperature = st.sidebar.slider("Nhiệt độ môi trường (°F)", 0.0, 100.0, 65.0)
fuel_price = st.sidebar.slider("Giá nhiên liệu ($/gallon)", 2.0, 5.0, 3.5)
cpi = st.sidebar.number_input("Chỉ số CPI dự kiến", min_value=100.0, max_value=250.0, value=211.0)
unemployment = st.sidebar.slider("Tỷ lệ thất nghiệp (%)", 2.0, 15.0, 7.5)
markdown1 = st.sidebar.number_input("Ngân sách khuyến mãi MarkDown 1 ($)", value=5000.0)

# Thực hiện dự báo
input_data = pd.DataFrame([[store_id, dept_id, is_holiday, temperature, fuel_price, 
                           markdown1, 0.0, 0.0, 0.0, 0.0, cpi, unemployment]],
                          columns=['Store', 'Dept', 'IsHoliday', 'Temperature', 'Fuel_Price',
                                  'MarkDown1', 'MarkDown2', 'MarkDown3', 'MarkDown4', 'MarkDown5', 'CPI', 'Unemployment'])

if st.button("Chạy mô phỏng dự báo doanh thu"):
    predicted_sales = model.predict(input_data)[0]
    st.success(f"Dự báo doanh thu hàng tuần (`Weekly_Sales`): **${predicted_sales:,.2f} USD**")
    
    # Khuyến nghị chiến lược
    if is_holiday and predicted_sales > 25000:
        st.info("Khuyến nghị: Tăng lượng tồn kho 20% và bố trí thêm 15% nhân sự ca trực cho tuần lễ này.")

Testing và validation

Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt về cả hiệu năng truyền tải dữ liệu phân tán và độ chính xác của mô hình phân tích:

[Kiểm thử Tích hợp & Quản trị]
  |---> Xác thực RBAC: User SaleDomain KHÔNG THỂ xóa sửa StoreDomain ADLS Container (Pass 100%)
  |---> Thời gian trích xuất & xử lý ETL: Giảm từ 48 phút (CSV đơn lẻ) xuống 8.5 phút (Parquet tối ưu)

[Kiểm thử Hiệu năng Mô hình Dự báo ML]
  +-----------------------+------------+------------+------------+
  | Mô hình kiểm thử      | MAE ($)    | RMSE ($)   | R-Squared  |
  +-----------------------+------------+------------+------------+
  | Linear Regression     | 14,250.3   | 21,430.8   | 0.582      |
  | Decision Tree         | 3,820.5    | 7,410.2    | 0.891      |
  | Random Forest (Chọn)  | 1,480.2    | 3,210.6    | 0.964      |
  | XGBoost Regressor     | 1,620.8    | 3,450.1    | 0.957      |
  +-----------------------+------------+------------+------------+

Kết quả đạt được

  1. Hiệu suất xử lý và tối ưu hóa lưu trữ:
    • Định dạng Parquet tại Gold Layer giúp giảm 68.4% dung lượng lưu trữ so với định dạng CSV thô ban đầu, đồng thời tốc độ truy vấn qua Synapse Serverless SQL tăng 4.2 lần.
    • Phân rã dữ liệu thành 2 miền độc lập giúp loại bỏ 100% tình trạng tắc nghẽn công việc giữa nhóm phân tích doanh số và nhóm quản lý chuỗi cung ứng/cửa hàng.
  2. Hỗ trợ ra quyết định kinh doanh:
    • Ứng dụng Streamlit hiển thị trực quan kịch bản doanh thu tức thì tại localhost:8501, hỗ trợ cấp quản lý mô phỏng tác động khi giá xăng biến động từ $2.5 đến $4.5/gallon hoặc điều chỉnh ngân sách khuyến mãi MarkDown trước các dịp lễ lớn.
    • Báo cáo Power BI cung cấp cái nhìn toàn cảnh về tỷ trọng đóng góp doanh thu theo từng phân loại cửa hàng (Type A: 48.2%, Type B: 38.6%, Type C: 13.2%).

Đổi mới và đóng góp

  1. Đổi mới kiến trúc dữ liệu cho ngành bán lẻ: Tiên phong áp dụng mô hình Data Mesh thay thế kiến trúc Data Warehouse truyền thống trong đề tài tốt nghiệp kỹ sư dữ liệu, chứng minh tính khả thi của việc phân tán quyền sở hữu dữ liệu trên Microsoft Azure.
  2. Quy trình xử lý dữ liệu thiếu bằng Machine Learning chuyên sâu: Thay vì loại bỏ bản ghi hoặc điền giá trị trung bình đơn giản, đề tài xây dựng module hồi quy đa biến ml_regression để tái tạo dữ liệu khuyến mãi (MarkDown), nâng cao độ tin cậy của toàn bộ tập dữ liệu lịch sử thêm 24.5%.
  3. Cơ chế chia sẻ Data Product chuẩn hóa và an toàn: Thiết lập mô hình chia sẻ dữ liệu liên miền (Cross-domain sharing) thông qua giao thức phân quyền hạt mịn (Granular Azure RBAC) trên ADLS Gen2, giúp bảo mật dữ liệu tuyệt đối mà không cần sao chép dữ liệu (Zero-copy architecture).

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Use Cases):

  • Tối ưu hóa ngân sách khuyến mãi dịp lễ: Giám đốc kinh doanh sử dụng ứng dụng để mô phỏng mức độ nhạy cảm của doanh số đối với các gói giảm giá MarkDown1-5 trước tuần lễ Thanksgiving và Giáng sinh, từ đó phân bổ ngân sách tiếp thị chính xác cho từng phòng ban.
  • Hoạch định tồn kho theo biến động kinh tế vĩ mô: Trưởng phòng chuỗi cung ứng theo dõi chỉ số CPI và tỷ lệ thất nghiệp của từng vùng để điều chỉnh lượng hàng nhập kho tại 45 cửa hàng tương ứng, giảm thiểu chi phí lưu kho 12-18%.
+-----------------------------------------------------------------------------------+
|                        LỘ TRÌNH TRIỂN KHAI DOANH NGHIỆP                           |
|                                                                                   |
|  [Tháng 1-2]                      [Tháng 3-4]                 [Tháng 5-6]         |
|  Thiết lập Azure Landing Zone  -> Xây dựng Data Product    -> Tích hợp Power BI & |
|  & Quản trị Entra ID / RBAC       cho Sale & Store Domains    Mô hình ML Streamlit|
|                                                                                   |
|  [Tháng 7-8]                      [Tháng 9-10]                [Tháng 11-12]       |
|  Mở rộng thêm Marketing Domain -> Tích hợp Real-time Stream -> Đánh giá ROI &     |
|  và Customer 360 Domain           qua Azure Event Hubs        Tối ưu hóa Chi phí  |
+-----------------------------------------------------------------------------------+

Hạn chế và hướng phát triển

Hạn chế kỹ thuật:

  • Tài nguyên đám mây thử nghiệm: Sử dụng gói tài khoản học sinh (Azure for Students) nên tài nguyên tính toán Spark Pool và giới hạn băng thông lưu trữ còn hạn chế.
  • Mô hình xử lý Batch: Chưa tích hợp công nghệ xử lý luồng thời gian thực (Real-time Streaming) để ghi nhận giao dịch tại máy POS theo từng giây.

Hướng phát triển:

  • Tích hợp Real-time Data Streaming: Triển khai Apache Kafka hoặc Azure Event Hubs kết hợp Spark Structured Streaming để cập nhật liên tục doanh số thời gian thực.
  • Tự động hóa Data Contract & Data Observability: Tích hợp các công cụ kiểm soát hợp đồng dữ liệu (Data Contracts) và giám sát chất lượng dữ liệu tự động (như Monte Carlo hoặc Great Expectations) trên toàn bộ mạng lưới Data Mesh.
  • Mở rộng miền dữ liệu: Bổ sung thêm Marketing Domain, Customer Relationship Management (CRM) DomainLogistics Domain.

Đối tượng hưởng lợi

  • Sinh viên & Học viên ngành Dữ liệu: Tài liệu tham khảo thực chiến toàn diện từ lý thuyết Data Mesh đến cách thiết lập hạ tầng Azure, viết PySpark và tích hợp Machine Learning.
  • Kỹ sư Dữ liệu (Data Engineers) & Kiến trúc sư Giải pháp: Nắm bắt quy trình phân rã domain, cấu hình Azure RBAC trên ADLS Gen2 và thiết kế pipeline Medallion chuẩn doanh nghiệp.
  • Doanh nghiệp Bán lẻ & Quản lý Kinh doanh: Có được mô hình kiến trúc mẫu giúp xóa bỏ nút thắt cổ chai dữ liệu, rút ngắn thời gian ra mắt các báo cáo phân tích từ hàng tuần xuống hàng giờ.
  • Nhà nghiên cứu khoa học: Cung cấp thực nghiệm định lượng về hiệu quả xử lý dữ liệu phân tán và kỹ thuật nội suy dữ liệu kinh tế vĩ mô.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống này là gì?

Cần một tài khoản Microsoft Azure (hỗ trợ Azure Synapse Analytics, ADLS Gen2, Microsoft Entra ID), môi trường Python 3.10+ cài đặt các thư viện pyspark, streamlit, scikit-learn, pandas, joblib và cơ sở dữ liệu PostgreSQL 15.

2. Data Mesh có làm tăng chi phí lưu trữ đám mây do phân tán dữ liệu không?

Không. Nhờ ứng dụng định dạng Apache Parquet với chuẩn nén Snappy tại tầng Gold và cơ chế chia sẻ đọc trực tiếp (Cross-domain read via RBAC), hệ thống tránh việc nhân bản dữ liệu (Zero-copy), giúp giảm tới 68.4% chi phí lưu trữ so với lưu trữ CSV/RDBMS truyền thống.

3. Làm thế nào để giải quyết xung đột khi các Domain có định dạng dữ liệu khác nhau?

Các Domain phải tuân thủ nguyên tắc Federated Computational Governance, công bố Data Contract với schema định sẵn tại Gold Layer. Mọi thay đổi về cấu trúc bảng phải được phiên bản hóa (Schema Versioning) trước khi phát hành cho các bên tiêu thụ.

4. Hệ thống này cần bảo trì và vận hành như thế nào?

Nhóm nền tảng dữ liệu (Data Platform Team) chỉ cần bảo trì hạ tầng dùng chung (Synapse, mạng ảo, IAM). Từng Domain Team sẽ tự chịu trách nhiệm vận hành pipeline và chất lượng Data Product của riêng mình, giúp giảm 60% áp lực bảo trì cho đội ngũ IT trung tâm.

5. Thời gian hoàn vốn (ROI) và giá trị kinh tế mang lại là bao lâu?

Với quy mô chuỗi 45-100 cửa hàng, việc loại bỏ nút thắt cổ chai dữ liệu và tối ưu hóa dự báo khuyến mãi/tồn kho giúp doanh nghiệp tiết kiệm 15-20% chi phí vận hành chuỗi cung ứng, mang lại điểm hòa vốn ROI ước tính trong vòng 6 đến 9 tháng sau khi vận hành chính thức.


Kết luận

Đồ án tốt nghiệp "Xây dựng Data Mesh cho chuỗi bán lẻ phục vụ hỗ trợ ra quyết định" đã giải quyết thành công bài toán tắc nghẽn dữ liệu của các kiến trúc nguyên khối truyền thống. Thông qua việc phân chia ranh giới miền rõ ràng (Sale Domain và Store Domain), xây dựng pipeline Medallion tối ưu trên Microsoft Azure và đóng gói ứng dụng hỗ trợ ra quyết định Streamlit kết hợp Power BI, đề tài đã chứng minh tính ưu việt vượt trội của Data Mesh cả về mặt kỹ thuật lẫn giá trị thực tiễn kinh doanh. Đây là nền tảng vững chắc và mô hình tham chiếu có giá trị cao cho các doanh nghiệp bán lẻ trên hành trình chuyển đổi số và khai phóng tiềm năng của dữ liệu lớn.