Áp dụng Deep Learning để dự báo kết quả tiếp cận thành công một campaign quảng cáo
Bài viết này mình thử dùng thuật toán Artificial Neural Network (ANN) để xử lí một tệp dữ liệu marketing đơn giản, mục đích thử phân loại xem hành vi Yes/No của người dùng trong dataset có những yếu tố nào ảnh hưởng, cũng như thử build một mô hình dự báo bằng Deep Learning. Mô hình cho ra kết quả với độ chính xác accuracy (test data) = 90.8% - Final loss (Test data): 0.2293
Quan sát kết quả EDA label tổng quát trong data này:
- Nhận thấy có tỉ lệ thành công tốt đặc biệt với poutcome = success(yếu tố này cho biết là campaign trước thành công là dấu hiệu cho tỉ lệ thành công lần này cũng cao)
- Người thất nghiệp và đã nghỉ hưu lại có tỉ lệ tiếp cận thành công cao hơn các job khác
- Người không vay nợ lại có tỉ lệ tiếp cận thành công tốt hơn người có vay nợ.
- Người tốt nghiệp đại học có tỉ lệ tiếp cận thành công hơn những người mới có bằng primary hay secondary
- Người độc thân có tỉ lệ tiếp cận thành công hơn người đã có gia đình
- Người không có nhà có tỉ lệ tiếp cận thành công hơn người có nhà
- Tiếp cận bằng thiết bị di động có tỉ lệ tiếp cận thành công hơn người dùng các phương tiện khác
Đây là bộ dữ liệu marketing ngân hàng trong Kho dữ liệu Machine Learning của UCI (https://archive.ics.uci.edu/ml/index.php). Trong dữ liệu có các sub dữ liệu là: nhân khẩu học, thông tin vay nợ và thông tin chăm sóc khách hàng (CRM) theo thời gian. Tổng cộng 17 đặc tính và 45000 kết quả ghi nhận.
Noted: Kiến thức người viết hạn hẹp, cũng như mô hình này mắc một problem là chưa xử lí dữ liệu unbalance tỉ lệ 8:1 nên mình chọn ngưỡng baseline là 88.88%, do đó chỉ mang tính chất tham khảo học thuật là chính. Trong bài mình cũng không reScale lại data trong quá trình tiền xử lí dữ liệu.
kết nối bạn bè và trao đổi học tập:
- Linkedin: http://bit.ly/3aYazxr
- Facebook: http://bit.ly/2u9pvIl
- Githut: http://bit.ly/3b1qBXd
Quan sát qua bảng dữ liệu
Nguồn data chính xác: http://archive.ics.uci.edu/ml/datasets/bank+marketing
Mục tiêu: phân loại Yes/No (feature 'y' trong dataset) những người có thực hiện ý đồ của campaign marketing (ví dụ mua hàng, vay tiền, sử dụng coupon)
Đây là bộ dữ liệu marketing ngân hàng trong Kho dữ liệu Machine Learning của UCI (https://archive.ics.uci.edu/ml/index.php). Bộ dữ liệu cung cấp thông tin về một chiến dịch tiếp thị của một tổ chức tài chính. Nhiệm vụ phân tích trong vấn đề này là để tìm cách tìm kiếm các chiến lược trong tương lai nhằm cải thiện các chiến dịch tiếp thị trong tương lai cho ngân hàng.
Các yếu tố (Feature) trong dữ liệu bao gồm:
- age: tuổi của người tiếp cận
- job: nghề nghiệp bao gồm admin, blue-collar, entrepreneur, housemaid, management, retired, self-employed, services, student, technician, unemployed
- marital: tình trạng hôn nhân bao gồm: married, single, divorced
- education: trình độ học vấn hiện tại bao gồm primary,secondary,tertiary (đại học)
- balance: Số tiền trên tài khoản giao dịch bao gồm tất cả các giao dịch đầy đủ và hoàn chỉnh cũng như các hoạt động phi thương mại như nạp và rút tiền.
- housing: có nhà hay chưa
- loan: có vay hay không
- day: ngày campaign tiếp cận gần nhất (ngày mấy của tháng, số kéo dài từ 1 đến 31 ngày)
- month: tháng campaign tiếp cận gần nhất của năm (phân loại: 'jan', 'feb', ' mar ', ...,' nov ',' dec ')
- contact: loại phương tiện liên lạc (phân loại: 'di động', 'điện thoại')
- duration: thời lượng liên lạc cuối cùng, tính bằng giây.
- campaign: số thứ tự chiến dịch
- pday: số ngày trôi qua sau khi khách hàng được liên hệ lần cuối từ chiến dịch trước đó
- previous: số lượng liên hệ được thực hiện trước chiến dịch này và cho khách hàng này
- poutcome: kết quả của chiến dịch tiếp thị trước đó (phân loại: 'thất bại', 'không tồn tại', 'thành công')
eda = pd.read_csv(r"https://raw.githubusercontent.com/cafechungkhoan/chu_gia/master/bank%20marketing.csv",delimiter=';')
eda = pd.DataFrame(eda)
eda
Xử lí tiền dữ liệu
Mình xử lí bằng cách Drop các feature thiếu trên 30% dữ liệu, còn lại loại bỏ các hàng chứa dữ liệu thiếu dropna()
Mình trực quan dữ liệu thiếu bằng 'Missing Value Heatmaps'. Nếu chưa biết dạng chart bên dưới có thể đọc thêm về (Missing Value Heatmaps). Nó cho biết dữ liệu thiếu nằm tại vị trí nào của dataset https://dev.to/tomoyukiaota/visualizing-the-patterns-of-missing-value-occurrence-with-python-46dj
target = 'y'
Giai đoạn exploratory data analysis (EDA) đầu vào
Đây là loại dữ liệu không cân bằng. Tuy nhiên, dữ liệu không cân bằng trong marketing là chuyện thường thấy, như số lượng click / không click trong một lượng tiếp cận, số lượng churn / not churn,... Problem về dữ liệu không cân bằng mình tìm hiểu nhiều, nhưng vẫn chưa có một phương pháp thỏa đáng xử lí. Hơn nữa cũng chưa thấy có report nào nói về tỉ lệ không cân bằng là bao nhiêu (trường hợp trong bài viết này là 8:1)
EDA sơ bộ những ý tưởng của mình trả lời những câu hỏi sau:
- Có sự khác biệt nào giữa người mua / không mua dựa vào tuổi hay không?
- Có sự khác biệt nào giữa người mua / không mua dựa vào yếu tố nghề nghiệp không?
- Có sự khác biệt nào giữa người mua / không mua dựa vào yếu tố học vấn không?
- Có tính chất gì lạ trong dữ liệu không?
Quan sát trước về các ditribution Numeric Feature
import hieu_viet_code_ne
eda = pd.read_csv(r"https://raw.githubusercontent.com/cafechungkhoan/chu_gia/master/bank%20marketing.csv",delimiter=';')
yes = eda[eda.y=='yes']
no = eda[eda.y=='no']
plt.figure(figsize=(12,8))
sns.set_style("darkgrid")
plt.title("Quan sát phân phối xác suất giữa Yes và No của Feature age, không thấy sự khác biệt đáng kể",{'fontsize': 15})
a = sns.kdeplot(data=yes['age'], label="yes", shade=True)
b = sns.kdeplot(data=no['age'],label="no" ,shade=True)
PCA & EDA tổng quát các label Feature