Trong thời đại dữ liệu hiện nay, việc hiểu hành vi khách hàng không chỉ là một lợi thế cạnh tranh mà còn là yếu tố sống còn đối với doanh nghiệp. Những câu hỏi như “Khách hàng nào mua hàng nhiều nhất?”, “Họ thường mua vào thời điểm nào?”, “Nhóm khách hàng nào có nguy cơ rời bỏ cao?” có thể được trả lời bằng cách phân tích dữ liệu.
Trong bài viết này, chúng ta sẽ cùng xây dựng một hệ thống phân tích hành vi khách hàng từ dữ liệu bán lẻ. Bạn sẽ học cách xử lý dữ liệu thô, khám phá các mẫu hành vi, và trực quan hóa kết quả để đưa ra insights có giá trị. Bài viết phù hợp cho người mới bắt đầu, với phần giải thích từng bước trước khi đi vào code, giúp bạn không bị “ngợp” khi tiếp cận Data Science thực tế.
Tại sao cần phân tích hành vi khách hàng
Phân tích hành vi khách hàng không còn là một lựa chọn mà đã trở thành yếu tố bắt buộc trong bất kỳ chiến lược kinh doanh hiện đại nào. Trong một thị trường cạnh tranh khốc liệt, nơi người tiêu dùng có vô số lựa chọn chỉ với vài cú nhấp chuột, việc hiểu rõ cách họ tương tác với sản phẩm hoặc dịch vụ giúp doanh nghiệp nắm bắt nhu cầu, sở thích và những rào cản khiến họ rời bỏ. Đây chính là nền tảng để xây dựng trải nghiệm người dùng tốt hơn, tối ưu hóa các chiến dịch marketing và tăng tỷ lệ giữ chân khách hàng.
Khi bạn biết khách hàng thường mua vào thời gian nào, họ quan tâm đến sản phẩm gì và những yếu tố nào khiến họ do dự trước khi hoàn tất giao dịch, bạn có thể cá nhân hóa các đề xuất, cải thiện quy trình bán hàng và thậm chí dự đoán được hành vi trong tương lai. Phân tích này cũng giúp doanh nghiệp phát hiện các nhóm khách hàng khác nhau, từ đó đưa ra các chiến lược riêng phù hợp cho từng nhóm, thay vì áp dụng một cách tiếp cận chung cho tất cả. Nói cách khác, phân tích hành vi khách hàng chính là chìa khóa để biến dữ liệu thành lợi thế cạnh tranh và thúc đẩy tăng trưởng bền vững.
Tập dữ liệu sử dụng
Để minh họa, chúng ta sử dụng tập dữ liệu Online Retail Dataset từ UCI Machine Learning Repository. Đây là tập dữ liệu bán lẻ thực tế từ một cửa hàng trực tuyến tại Vương quốc Anh, gồm hơn 500.000 giao dịch từ năm 2010–2011.
Tải dữ liệu tại đây: Online Retail Dataset – UCI hoặc Kaggle version.
Các cột chính trong dữ liệu:
| Cột | Ý nghĩa |
|---|---|
| InvoiceNo | Mã đơn hàng |
| StockCode | Mã sản phẩm |
| Description | Mô tả sản phẩm |
| Quantity | Số lượng mua |
| InvoiceDate | Ngày giao dịch |
| UnitPrice | Giá mỗi sản phẩm |
| CustomerID | ID khách hàng |
| Country | Quốc gia của khách hàng |
Đọc và làm sạch dữ liệu
Bước đầu tiên là tải tập dữ liệu và xử lý các vấn đề thường gặp như giá trị bị thiếu, dữ liệu trùng lặp hoặc lỗi nhập liệu (ví dụ: số lượng âm, giá âm). Những vấn đề này nếu không được xử lý sẽ ảnh hưởng lớn tới kết quả phân tích.
Chúng ta sẽ dùng thư viện pandas để đọc dữ liệu từ file Excel và thực hiện các thao tác làm sạch cơ bản.
import pandas as pd
# Đọc dữ liệu từ file Excel
data = pd.read_excel('Online Retail.xlsx')
# Hiển thị 5 dòng đầu tiên
print(data.head())
# Kiểm tra thông tin tổng quan
print(data.info())
# Xóa các dòng thiếu CustomerID (không thể phân tích hành vi nếu không biết ai)
data = data.dropna(subset=['CustomerID'])
# Loại bỏ các giao dịch bị hủy (InvoiceNo bắt đầu bằng 'C')
data = data[~data['InvoiceNo'].str.startswith('C')]
# Loại bỏ các hàng có Quantity hoặc UnitPrice <= 0
data = data[(data['Quantity'] > 0) & (data['UnitPrice'] > 0)]
# Xem lại dữ liệu sau khi làm sạch
print(data.shape)
Phân tích hành vi mua hàng cơ bản
Ở bước này, chúng ta muốn trả lời các câu hỏi như:
-
Khách hàng nào mua hàng nhiều nhất?
-
Sản phẩm nào bán chạy nhất?
-
Doanh thu theo tháng thay đổi ra sao?
Điều này giúp hình dung bức tranh tổng thể về hành vi mua hàng.
# Tính tổng doanh thu (Quantity * UnitPrice)
data['TotalPrice'] = data['Quantity'] * data['UnitPrice']
# Doanh thu theo tháng
data['InvoiceMonth'] = data['InvoiceDate'].dt.to_period('M')
monthly_revenue = data.groupby('InvoiceMonth')['TotalPrice'].sum()
# Hiển thị doanh thu theo tháng
print(monthly_revenue)
# Vẽ biểu đồ doanh thu
import matplotlib.pyplot as plt
monthly_revenue.plot(kind='bar', figsize=(12,6))
plt.title('Doanh thu theo tháng')
plt.ylabel('Doanh thu')
plt.show()
# Top 10 sản phẩm bán chạy nhất
top_products = data.groupby('Description')['Quantity'].sum().sort_values(ascending=False).head(10)
print(top_products)
Phân tích hành vi khách hàng (RFM Analysis)
RFM (Recency, Frequency, Monetary) là phương pháp phổ biến để phân tích hành vi khách hàng:
-
Recency: Lần mua hàng gần nhất cách đây bao lâu
-
Frequency: Số lần mua hàng
-
Monetary: Tổng số tiền đã chi tiêu
Dựa trên RFM, bạn có thể phân nhóm khách hàng để cá nhân hóa chiến dịch marketing.
import datetime
# Ngày phân tích (1 ngày sau ngày cuối cùng trong dữ liệu)
snapshot_date = data['InvoiceDate'].max() + datetime.timedelta(days=1)
# Tính RFM cho từng khách hàng
rfm = data.groupby('CustomerID').agg({
'InvoiceDate': lambda x: (snapshot_date - x.max()).days,
'InvoiceNo': 'nunique',
'TotalPrice': 'sum'
})
rfm.rename(columns={
'InvoiceDate': 'Recency',
'InvoiceNo': 'Frequency',
'TotalPrice': 'Monetary'
}, inplace=True)
print(rfm.head())
Phân nhóm khách hàng với KMeans
Sau khi tính RFM, chúng ta có thể sử dụng thuật toán KMeans để phân nhóm khách hàng thành các cluster. Mỗi cluster đại diện cho một nhóm hành vi như “Khách hàng trung thành”, “Nguy cơ rời bỏ”, “Mới mua lần đầu”.
from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # Chuẩn hóa dữ liệu scaler = StandardScaler() rfm_scaled = scaler.fit_transform(rfm) # KMeans với 3 nhóm kmeans = KMeans(n_clusters=3, random_state=42) kmeans.fit(rfm_scaled) rfm['Cluster'] = kmeans.labels_ # Xem phân bố khách hàng theo cluster print(rfm['Cluster'].value_counts())
Kết luận
Hệ thống phân tích hành vi khách hàng này giúp bạn chuyển đổi dữ liệu bán lẻ thành insights giá trị, từ việc hiểu rõ hành vi mua hàng đến phân nhóm khách hàng cho các chiến dịch nhắm mục tiêu. Dù đây chỉ là bước khởi đầu, nhưng nó mở ra nhiều khả năng mở rộng như dự đoán churn, xây dựng recommender system hoặc tối ưu hóa chiến lược marketing.

