Hệ thống phân tích khách hàng RFM
Hệ thống end-to-end: ETL → Data Warehouse → Phân khúc RFM → Dashboard → Gợi ý sản phẩm
rfm_system/
│
├── config.py # Cấu hình trung tâm (paths, tham số RFM, màu sắc)
├── main.py # Entry point – chạy toàn bộ pipeline
├── requirements.txt # Dependencies
├── README.md # Tài liệu hướng dẫn
│
├── data/
│ └── data.csv # File nguồn (CSV hoặc Excel)
│
├── database/
│ └── warehouse.db # SQLite Data Warehouse (tự tạo sau khi chạy main.py)
│
├── etl/ # Pipeline ETL
│ ├── __init__.py
│ ├── extract.py # Đọc CSV / Excel → DataFrame
│ ├── transform.py # Làm sạch + tạo Dim / Fact tables
│ └── load.py # Nạp vào SQLite DWH (upsert)
│
├── analytics/ # Phân tích & Thuật toán
│ ├── __init__.py
│ ├── rfm.py # Tính Recency/Frequency/Monetary + phân khúc 9 nhóm
│ └── recommendation.py # Engine gợi ý sản phẩm theo phân khúc
│
└── dashboard/ # Streamlit Dashboard
├── __init__.py
├── app.py # Trang chủ – KPI tổng quan + navigation
└── pages/
├── __init__.py
├── 1_Business_Overview.py # Doanh thu, xu hướng, top sản phẩm, thị trường
├── 2_RFM_Analysis.py # Phân tích 9 phân khúc, scatter 3D, radar chart
└── 3_Product_Recommendations.py # Gợi ý sản phẩm + action plan marketing
pip install -r requirements.txt
Đặt file nguồn vào thư mục data/. Hỗ trợ:
.csv (UTF-8 hoặc Latin-1)
.xlsx / .xls
Cập nhật đường dẫn trong config.py nếu cần:
SOURCE_FILE = os .path .join (DATA_DIR , "data.csv" )
3. Chạy pipeline ETL + RFM
Pipeline sẽ thực hiện 5 bước:
Extract – Đọc file nguồn
Transform – Làm sạch & xây dựng Dim/Fact
Load – Nạp vào SQLite Data Warehouse
RFM – Tính điểm & phân khúc 9 nhóm
Recommend – Gợi ý sản phẩm cho mỗi nhóm
streamlit run dashboard/app.py
Truy cập: http://localhost:8501
Dimension Tables (Bảng chiều)
Bảng
Mô tả
Cột chính
DimCustomer
Thông tin khách hàng
CustomerKey, CustomerID, Country
DimProduct
Danh mục sản phẩm
ProductKey, StockCode, Description
DimDate
Lịch (calendar table)
DateKey, Year, Month, Quarter, Week
DimGeography
Vùng địa lý
GeoKey, Country
Fact Table (Bảng sự kiện)
Bảng
Mô tả
Metrics
FactSales
Giao dịch bán hàng
Quantity, UnitPrice, TotalAmount
Bảng
Mô tả
CustomerRFM
Điểm R/F/M và phân khúc của mỗi khách hàng
ProductRecommendation
Top sản phẩm gợi ý cho mỗi phân khúc
Chỉ số
Ý nghĩa
Tính toán
R – Recency
Số ngày từ lần mua cuối
Càng nhỏ = điểm càng cao
F – Frequency
Số đơn hàng khác nhau
Càng nhiều = điểm càng cao
M – Monetary
Tổng chi tiêu
Càng cao = điểm càng cao
Mỗi chỉ số được chấm 1–5 điểm theo phân vị (quintile).
Phân khúc
Đặc điểm
Chiến lược
Champions
Mua gần, thường xuyên, chi tiêu cao
Upsell, Ambassador
Loyal Customers
Quay lại đều đặn
Loyalty program
Potential Loyalist
Tiềm năng cao, chưa đều
Nuôi dưỡng, ưu đãi
Recent Customers
Mới mua, chưa có pattern
Onboarding journey
Promising
Quan tâm nhưng chưa mạnh
Kích hoạt, upsell nhẹ
Customers Needing Attention
Đang giảm dần
Giữ chân, coupon
About to Sleep
Sắp ngừng mua
Tái kích hoạt
At Risk
Từng là khách tốt, bây giờ không mua
Win-back campaign
Hibernating
Không hoạt động lâu ngày
Reactivation hoặc cleanup
# config.py
SOURCE_FILE = os .path .join (DATA_DIR , "your_file.xlsx" )
# config.py
DATE_COLUMN = "OrderDate"
CUSTOMER_COL = "CustID"
INVOICE_COL = "OrderNo"
# ...
Điều chỉnh rules phân khúc
# config.py
SEGMENT_RULES = [
("Champions" , 4 , 5 , 3 , 5 , 4 , 5 ), # (segment, R_min, R_max, F_min, F_max, M_min, M_max)
# ...
]
# config.py
TOP_N_RECOMMENDATIONS = 15
Trang
Nội dung
Home
KPI tổng quan, phân bổ phân khúc nhanh
Business Overview
Doanh thu theo tháng, top sản phẩm, top quốc gia, cohort
RFM Analysis
Pie/Treemap, Scatter 3D, Radar chart, drill-down per segment
Product Recommendations
Gợi ý sản phẩm + kế hoạch marketing per segment
Layer
Công nghệ
Ngôn ngữ
Python 3.10+
Data Processing
Pandas, NumPy
Database
SQLite (có thể nâng cấp lên PostgreSQL)
Dashboard
Streamlit
Visualization
Plotly
File I/O
openpyxl (Excel), csv