Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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


Cấu trúc dự án

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

Cài đặt và Chạy

1. Cài đặt dependencies

pip install -r requirements.txt

2. Chuẩn bị dữ liệu

Đặ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

python main.py

Pipeline sẽ thực hiện 5 bước:

  1. Extract – Đọc file nguồn
  2. Transform – Làm sạch & xây dựng Dim/Fact
  3. Load – Nạp vào SQLite Data Warehouse
  4. RFM – Tính điểm & phân khúc 9 nhóm
  5. Recommend – Gợi ý sản phẩm cho mỗi nhóm

4. Mở Dashboard

streamlit run dashboard/app.py

Truy cập: http://localhost:8501


Kiến trúc Data Warehouse

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

Analytics Tables

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

Mô hình RFM

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).


9 Phân khúc Khách hàng

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

Tuỳ chỉnh

Thay đổi file nguồn

# config.py
SOURCE_FILE = os.path.join(DATA_DIR, "your_file.xlsx")

Thay đổi cột dữ liệu

# 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)
    # ...
]

Số lượng gợi ý sản phẩm

# config.py
TOP_N_RECOMMENDATIONS = 15

Dashboard Pages

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

Tech Stack

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

About

RFM Customer Segmentation & Product Recommendation System

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages