Trong nhiều trường hợp, dữ liệu thô ban đầu không trực tiếp chứa các biến số cần thiết cho phân tích kinh tế hoặc xây dựng mô hình dự báo. Kỹ nghệ đặc trưng (Feature Engineering) là quá trình tinh lọc, biến đổi và tạo ra các biến mới (feature) từ dữ liệu hiện có nhằm giúp thuật toán Học máy "học" tốt hơn và sát với thực tế kinh doanh hơn. Đây là bước mang tính quyết định, đòi hỏi nhà phân tích phải kết hợp nhuần nhuyễn giữa kỹ năng lập trình và tri thức ngành (Domain Knowledge).
Trong môi trường thực tế, dữ liệu thường tồn tại ở định dạng văn bản lộn xộn hoặc chuỗi thời gian khó xử lý. Pandas cung cấp các công cụ sắc bén để giải quyết vấn đề này:
Xử lý văn bản (Text): Dữ liệu chữ thường chứa khoảng trắng thừa hoặc sai lệch chữ hoa/thường. Các hàm như str.strip() (xóa khoảng trắng), str.lower() (chữ thường) giúp chuẩn hóa danh mục sản phẩm hoặc tên khách hàng.
Xử lý thời gian (Datetime): Một cột thời gian (ví dụ: 2026-05-25) chứa rất nhiều thông tin ẩn. Bằng cách dùng hàm pd.to_datetime(), ta ép kiểu dữ liệu chuỗi thành thời gian chuẩn, từ đó dễ dàng bóc tách các thuộc tính như Năm (dt.year), Tháng (dt.month), hoặc Thứ trong tuần (dt.day_name()) để phục vụ phân tích tính mùa vụ.
Biến đổi toán học: Tạo cột phái sinh bằng các phép toán cơ bản. Ví dụ điển hình nhất trong bán lẻ là tính Doanh thu bằng cách nhân Số lượng (Quantity) với Đơn giá (UnitPrice).
Rời rạc hóa (Binning): Chuyển một biến số liên tục thành các phân khúc (categories) để dễ quản lý. Hàm pd.cut() cho phép phân nhóm khách hàng theo khoảng giá trị cố định (ví dụ: Nhóm chi tiêu "Thấp", "Trung bình", "Cao"), giúp mô hình dễ dàng nắm bắt các quy luật phi tuyến.
Để đo lường giá trị khách hàng trong cơ sở dữ liệu tiếp thị, Mô hình RFM là một khung lý thuyết kinh điển. Khung này đánh giá khách hàng qua 3 góc độ:
Recency (R): Số ngày kể từ lần mua cuối cùng - đo lường độ "tươi mới" của mối quan hệ.
Frequency (F): Tần suất mua sắm (số lượng hóa đơn) - đo lường mức độ gắn kết bền vững.
Monetary (M): Tổng giá trị chi tiêu - đo lường mức độ đóng góp tài chính.
Dưới đây là mã Python mô phỏng một trích đoạn dữ liệu bán lẻ và thực thi quá trình Feature Engineering để tính toán bộ chỉ số RFM. Bạn có thể sao chép, dán vào Google Colab và chạy ngay lập tức:
import pandas as pd
import numpy as np
# 1. TẠO TẬP DỮ LIỆU GIAO DỊCH MÔ PHỎNG (ONLINE RETAIL)
data = {
'InvoiceNo': ['536365', '536365', '536366', '536367', '536368', '536369'],
'CustomerID': ['C101', 'C101', 'C102', 'C101', 'C103', 'C102'],
'InvoiceDate': ['2023-11-20', '2023-11-20', '2023-10-15', '2023-12-01', '2022-05-10', '2023-12-05'],
'Quantity': [1, 2, 1, 3, 1, 2],
'UnitPrice': [2.5, 5.0, 1.5, 3.0, 100.0, 2.0]
}
df = pd.DataFrame(data)
# 2. FEATURE ENGINEERING: TẠO BIẾN THỜI GIAN VÀ TOÁN HỌC
# Ép kiểu Datetime
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])
# Tạo biến Doanh thu thực tế của từng dòng
df['Revenue'] = df['Quantity'] * df['UnitPrice']
# 3. THIẾT LẬP NGÀY CHỐT SỔ (SNAPSHOT DATE)
# Lấy ngày giao dịch gần nhất hệ thống + 1 ngày để đảm bảo Recency luôn > 0
snapshot_date = df['InvoiceDate'].max() + pd.Timedelta(days=1)
# 4. TÁI CẤU TRÚC DỮ LIỆU: TÍNH TOÁN RFM BẰNG GROUPBY
rfm = df.groupby('CustomerID').agg(
Recency=('InvoiceDate', lambda x: (snapshot_date - x.max()).days),
Frequency=('InvoiceNo', 'nunique'),
Monetary=('Revenue', 'sum')
).reset_index()
print("--- MA TRẬN HỒ SƠ KHÁCH HÀNG (RFM) ---")
print(rfm)
Phân tích kết quả đầu ra: Thay vì nhìn vào 6 dòng giao dịch rời rạc, hệ thống đã nén dữ liệu thành 3 hồ sơ khách hàng độc lập. Khách hàng C101 mua sắm 2 lần (Frequency=2), chi tiêu 40 (Monetary) và lần cuối mua cách đây 5 ngày (Recency=5). Việc tính snapshot_date cộng thêm 1 ngày là thủ thuật cực kỳ quan trọng để đảm bảo giá trị Recency không bao giờ bằng 0, giúp tránh lỗi toán học khi áp dụng chuẩn hóa Logarit ở các bước Học máy tiếp theo.
Bước chuyển đổi sang ma trận RFM mang lại giá trị chiến lược to lớn, giúp doanh nghiệp dịch chuyển từ việc đếm "doanh thu kế toán" sang quản lý Giá trị vòng đời khách hàng (CLV). Dữ liệu thô đã phơi bày hai chân dung hoàn toàn tương phản:
Khách hàng có Recency nhỏ, Frequency và Monetary cao (như C101 hoặc C102 trong thực tế) chính là nhóm Khách hàng VIP (Champions) mang lại lợi nhuận cốt lõi. Với nhóm này, việc tung ra các khuyến mãi giảm giá đại trà là lãng phí ngân sách; thay vào đó, chiến lược tối ưu là cung cấp các đặc quyền dịch vụ ưu tiên.
Ngược lại, khách hàng có Monetary từng rất cao nhưng Recency lại rất lớn (mua từ quá lâu) đang phát ra tín hiệu cảnh báo về Rủi ro rời bỏ (High Churn Risk). Việc nhận diện biến số này thông qua Feature Engineering cho phép ban lãnh đạo lập tức kích hoạt các chiến dịch "tái tương tác" (Re-activation) để cứu vãn nguồn doanh thu trước khi họ rơi vào tay đối thủ cạnh tranh.