Như một cách để dự đoán tỷ lệ rời bỏ của khách hàng, chúng ta sẽ tìm hiểu về mô hình mạng nơ-ron nhân tạo là gì và các ứng dụng của nó trong các lĩnh vực khác nhau, cũng như cách chúng t
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT
Giảng viên hướng dẫn: Dương Thị Hiền Thanh
Sinh viên thực hiên: Bùi Quang Huy
Mã sinh viên: 1921050292
HÀ NỘI, 2022
Trang 2MỤC LỤC
1 Giữ chân khách hàng 3
1.1.tỷ lệ rời bỏ và dữ chân khách hàng 3
1.2 mạng nơ-ron nhân tạo
2 Dự đoán tỷ lệ dời bỏ của khách hàng với python 6
2.1 phân tích và chuẩn bị dữ liệu 7
2.1.1 Mã hóa mục tiêu 7
2.1.2 Xử lý giá trị bị thiếu trong cột TotalChargres 8
2.1.3 Chuyển đổi các biến liên tục 8
2.1.4 Các biến phân loại mã hóa một nóng 10
2.2 ANN với keras 14
2.3 Đánh giá mô hình 16
3 Dự đoán sự dời bỏ của khách hàng với R 19
3.1 Phân tích dữ liệu 20
3.2 ANN với keras 28
3.3 Đánh giá mô hình 30
4 Tóm tắt 32
Trang 31 Giữ chân khách hàng
Khi khách hàng có nhiều lựa chọn hơn cho nội dung tương tự để tiêu thụ hoặc các sản phẩm và dịch vụ tương tự để mua sắm, nhiều doanh nghiệp đã trở nên khó khăn hơn trong việc giữ chân khách hàng của họ và không để mất họ vào tay các đối thủ cạnh tranh khác Vì chi phí để có được khách hàng mới thường cao hơn so với việc giữ chân và giữ chân khách hàng hiện tại, việc rời bỏ khách hàng đang ngày càng trởthành mối quan tâm hơn bao giờ hết Để giữ chân khách hàng hiện tại và không để mất họ vào tay đối thủ cạnh tranh, các doanh nghiệp không chỉ nên cố gắng hiểu khách hàng của họ cũng như nhu cầu và lợi ích của khách hàng của họ, mà họ còn cóthể xác định khách hàng nào có khả năng rời bỏ cao và làm thế nào để giữ chân những khách hàng này có nguy cơ rời bỏ
Trong chương này, chúng ta sẽ đi sâu hơn vào tỷ lệ rời bỏ của khách hàng và
cách nó gây tổn hại cho các doanh nghiệp, cũng như cách giữ chân khách hàng hiện tại Chúng tôi sẽ thảo luận về một số lý do phổ biến khiến khách hàng rời bỏdoanh nghiệp và xem xét cách khoa học dữ liệu có thể giúp giảm nguy cơ mất
khách hàng Như một cách để dự đoán tỷ lệ rời bỏ của khách hàng, chúng ta sẽ tìm hiểu về mô hình mạng nơ-ron nhân tạo là gì và các ứng dụng của nó trong
các lĩnh vực khác nhau, cũng như cách chúng ta có thể xây dựng một mô hình
bằng Python và R
Trong chương này, chúng tôi sẽ đề cập đến các chủ đề sau:
Tỷ lệ rời bỏ và giữ chân khách hàng
Mạng lưới thần kinh nhân tạo
Dự đoán khách hàng bỏ cuộc với Python
Dự đoán khách hàng bỏ cuộc với R
1.1.Tỷ lệ dời bỏ và dữ chân khách hàng
Khách hàng rời bỏ là khi khách hàng quyết định ngừng sử dụng dịch vụ, nội
dung hoặc sản phẩm từ một công ty Như chúng ta đã thảo luận ngắn gọn trong Chapter 7, Phân tích khám phá cho hành vi của khách hàng, khi chúng ta thảo luận về phân tích khách hàng, việc giữ chân khách hàng hiện tại sẽ ít tốn kém hơn nhiều so với việc có được khách hàng mới và doanh thu từ khách hàng lặp lại thường cao hơn so với hình thức khách hàng mới Trong các ngành công
Trang 4tranh, chi phí thu hút khách hàng mới thậm chí còn cao hơn và việc giữ chân
khách hàng hiện tại trở nên quan trọng hơn đối với các doanh nghiệp đó
Có nhiều lý do đằng sau việc khách hàng rời bỏ một doanh nghiệp Một số lý do phổ biến khiến khách hàng rời bỏ là dịch vụ khách hàng kém, không tìm thấy đủ giá trị trong sản phẩm hoặc dịch vụ, thiếu thông tin liên lạc và thiếu lòng trung thành của khách hàng Bước đầu tiên để giữ chân những khách hàng này là theo dõi tỷ lệ tiêu hao của khách hàng theo thời gian Nếu tỷ lệ tiêu hao thường cao hoặc đang tăng theo thời gian, thì bạn nên dành một số nguồn lực để cải thiện khả năng giữ chân khách hàng
Để cải thiện tỷ lệ giữ chân khách hàng, ưu tiên hàng đầu nên là hiểu khách hàng tốt hơn Bạn có thể khảo sát những khách hàng đã khuấy động để hiểu lý do tại sao họ rời đi Bạn cũng có thể khảo sát khách hàng hiện tại để hiểu nhu cầu của họ là gì và điểm khó khăn của họ là gì Một cách tiếp cận khoa học dữ liệu và phân tích dữ liệu
sẽ là xem xét dữ liệu Ví dụ: bạn có thể xem dữ liệu hoạt động web của khách hàng
và hiểu nơi họ dành nhiều thời gian nhất, liệu có lỗi nào trên các trang mà họ đang xem hay kết quả tìm kiếm của họ không trả về nội dung tốt hay không Bạn cũng có thể xem nhật ký cuộc gọi dịch vụ khách hàng để hiểu thời gian chờ đợi của họ là baolâu, khiếu nại của họ là gì và các vấn đề của họ đã được xử lý như thế nào
Tiến hành phân tích sâu về các điểm dữ liệu này có thể tiết lộ những vấn đề mà một doanh nghiệp đang gặp phải trong việc giữ chân khách hàng hiện tại của mình
Khi phân tích sự thay đổi của khách hàng, bạn cũng có thể sử dụng một số chủ
đề mà chúng ta đã thảo luận trong cuốn sách này Bạn có thể áp dụng những gì chúng tôi đã học được từ C hapter 5, Phân tích sản phẩm và Chương 6, Đề xuất các sản phẩm phù hợp, để hiểu sản phẩm nào phục vụ nhu cầu và sở thích của khách hàng tốt nhất, đồng thời đề xuất các sản phẩm phù hợp để bạn có thể cung cấp nội dung được cá nhân hóa hơn Bạn cũng có thể sử dụng những gì chúng tôi
đã học được từ Cha pter 7, Phân tích khám phá cho hành vi của khách hàng và Chương 10, Phân khúc khách hàng theo hướng dữ liệu, để hiểu rõ hơn về hành vicủa khách hàng và các phân khúc khách hàng khác nhau Một cách khác là xây dựng một mô hình máy học có thể dự đoán khách hàng nào có khả năng rời bỏ
và nhắm mục tiêu và giữ chân những khách hàng cụ thể có nguy cơ rời bỏ cao hơn Trong các phần sau, chúng ta sẽ thảo luận về cách xây dựng mô hình mạng nơ-ron để xác định những khách hàng có nguy cơ rời bỏ cao hơn để giữ chân
khách hàng
1.2.Mạng nơ-ron nhân tạo
Trang 5Mô hình mạng nơ-ron nhân tạo (ANN) là một mô hình học máy được lấy cảm hứng từ cách bộ não con người hoạt động Các ứng dụng thành công gần đây củacác mô hình ANN trong nhận dạng hình ảnh, nhận dạng giọng nói và robot đã chứng minh sức mạnh dự đoán và tính hữu dụng của chúng trong các ngành công nghiệp khác nhau Bạn có thể đã nghe thuật ngữ học sâu Đây là một loại
mô hình ANN trong đó số lượng lớp giữa các lớp đầu vào và đầu ra là lớn Nó được giải thích tốt nhất với sơ đồ sau:
Sơ đồ này cho thấy một trường hợp đơn giản của mô hình ANN với một lớp ẩn Các vòng tròn trong sơ đồ này đại diện cho các tế bào thần kinh hoặc nút nhân tạo, mô hình hóa các tế bào thần kinh đó trong não người Các mũi tên đại diện cho cách tín hiệu được truyền từ tế bào thần kinh này sang tế bào thần kinh khác.Như sơ đồ này cho thấy, một mô hình ANN học bằng cách tìm các mẫu hoặc trọng lượng của tín hiệu từ mỗi tế bào thần kinh đầu vào đến tế bào thần kinh trong lớp tiếp theo, dự đoán tốt nhất đầu ra
Loại cụ thể của mô hình ANN mà chúng tôi sẽ thử nghiệm trong các bài tập lập trình sau đây là mô hình perceptron đa lớp (MLP) Nói một cách đơn giản, mô
Trang 6Bao gồm một lớp cho đầu vào và một lớp khác cho đầu ra, mô hình MLP bao gồm ít nhất ba hoặc nhiều lớp nút Sơ đồ chúng ta vừa xem xét là trường hợp
đơn giản nhất của mô hình MLP, nơi chỉ có một lớp ẩn
Mô hình ANN có thể được sử dụng trong nhiều lĩnh vực tiếp thị Sử dụng các mô hình mạng nơ-ron của BrainMaker, Microsoft đã tăng tỷ lệ phản hồi thư trực tiếp từ 4,9% lên 8,2% Điều này đã giúp Microsoft mang lại cùng một lượng doanh thu với chi phí thấp hơn 35% Tương tự, đối với các vấn đề dự đoán tương tác tiếp thị mà chúng ta đã thảo luận trong Chương 8, Dự đoán khả năng tham gia tiếp thị, chúng ta
có thể đã sử dụng các mô hình mạng nơ-ron, thay vì các mô hình rừng ngẫu nhiên Chúng tôi cũng có thể sử dụng các mô hình mạng nơ-ron cho các vấn đề phân khúc khách hàng mà chúng tôi đã thảo luận trong Chương 10, Phân khúc khách hàng theo hướng dữ liệu Trong các bài tập lập trình sau đây, chúng ta sẽ thảo luận về cách chúng ta có thể sử dụng các mô hình ANN để dự đoán khách hàng nào có khả năng rời bỏ
2.Dự đoán tỷ lệ dời bỏ của khách hàng với python
Trong phần này, chúng ta sẽ thảo luận về cách sử dụng mô hình ANN để dự đoán những khách hàng có nguy cơ rời đi hoặc những khách hàng có khả năng rời đi cao Đến cuối phần này, chúng tôi sẽ xây dựng mô hình dự đoán tỷ lệ rời bỏ của khách hàng bằng cách sử dụng mô hình ANN Chúng tôi sẽ chủ yếu sử dụng các gói
pandas, matplotlib và keras để phân tích, trực quan hóa và xây dựng các mô hình học máy Đối với những độc giả muốn sử dụng R, thay vì Python, cho bài tập này, bạn có thể chuyển sang phần tiếp theo
Đối với bài tập này, chúng tôi sẽ sử dụng một trong những bộ dữ liệu có sẵn công khai từ cộng đồng IBM Watson Analytics, có thể được tìm thấy tại liên kết này: https://www.ibm.com/communities/analytics/watson-analytics-blog/predictive-insi ghts-in-the-telco-customer-churn-data-set/ Bạn có thể theo liên kết này và tải xuống
dữ liệu có sẵn ở định dạng XLSX, có tên là
WA_Fn-UseC_-Telco-Customer-Churn.xlsx Khi bạn đã tải xuống dữ liệu này, bạn có thể tải nó vào Sổ ghi chép Jupyter của mình bằng cách chạy lệnh sau:
import pandas as pd
df = pd.read_excel(' /data/WA_Fn-UseC_-Telco-Customer-Churn.xlsx')
DataFrame, df, được hiển thị trong ảnh chụp màn hình sau:
Trang 7Có 21 biến trong tập dữ liệu này, trong đó mục tiêu của chúng tôi là dự đoán biến mục tiêu, Churn.
2.1.Phân tích và chuẩn bị dữ liệu
Như bạn có thể nhận thấy bằng cách xem dữ liệu, có một số điều chúng ta cần làm trước khi có thể bắt đầu xây dựng các mô hình học máy Trong phần này, chúng ta
sẽ chuyển đổi các biến liên tục có giá trị tiền tệ và mã hóa biến mục tiêu, Churn, cũng như các biến phân loại khác Để làm như vậy, hãy thực hiện các bước sau:
1 Mã hóa biến mục tiêu: Như bạn có thể nhận thấy từ dữ liệu, biến đích, Churn, có hai
giá trị: Có và Không Chúng ta sẽ mã hóa các giá trị này là 1 cho Có và 0 cho Không
Mã để mã hóa biến đích trông giống như sau:
df['Churn'] = df['Churn'].apply(lambda x: 1 if x == 'Yes' else 0)
Để có được tỷ lệ tiêu hao tổng thể, bạn chỉ cần chạy mã sau:
df['Churn'].mean()
Đầu ra của mã này là khoảng 0,27, điều này cho thấy rằng khoảng 27%khách hàng đã khuấy động Tỷ lệ tiêu hao 27% không phải là một con
số nhỏ; thay vào đó, nó đủ cao để một doanh nghiệp lo lắng về việc
khách hàng tổng thể bị tiêu hao và đưa ra giải pháp để giữ chân những
Trang 8luận về cách dự đoán những khách hàng có khả năng rời bỏ dữ liệu này
và sử dụng các dự đoán này để giữ chân khách hàng.
2 Xử lý các giá trị bị thiếu trong cột TotalCharges: Nếu bạn đã xem qua cột
TotalCharges trong tập dữ liệu, bạn có thể nhận thấy rằng có một số bản ghi không có giá trị TotalCharges Vì chỉ có 11 bản ghi bị thiếu giá trị TotalCharges, chúng ta sẽ chỉ cần bỏ qua và thả những bản ghi có giá trị bị thiếu đó Hãy xem đoạn mã sau:
3 Chuyển đổi các biến liên tục: Bước tiếp theo là mở rộng các biến liên tục
Hãy xem các số liệu thống kê tóm tắt sau đây cho các biến liên tục:
Bạn có thể nhận được các số liệu thống kê tóm tắt này bằng cách sử dụng
mã sau:
df[['tenure', 'MonthlyCharges', 'TotalCharges']].describe()
Trang 9Như bạn có thể thấy từ số liệu thống kê tóm tắt, ba nhiệm
kỳ, MonthlyCharges và TotalCharges biến liên tục đều có
các thang đo khác nhau Biến nhiệm kỳ, nằm trong khoảng
từ 1 đến 72, trong khi biến TotalCharges , nằm trong
khoảng từ 18.8 đến 8684.8 Các mô hình ANN thường hoạt
động tốt hơn với các tính năng được thu nhỏ hoặc chuẩn
hóa Hãy xem đoạn mã sau để chuẩn hóa ba tính năng này:
df['tenure'] = (df['tenure'] - df['tenure'].mean())/df['tenure'].std()
Như bạn có thể thấy từ code này, chúng ta áp dụng log-transform trước vàsau đó chuẩn hóa các biến liên tục bằng cách trừ đi giá trị trung bình và chia các giá trị cho độ lệch chuẩn Kết quả trông như sau:
Như bạn thấy từ đầu ra này, tất cả các biến hiện có giá trị trung bình
là 0 và độ lệch sta là 1 Chúng tôi sẽ sử dụng các biến chuẩn hóa này cho việc xây dựng mo trong tương lai
Trang 104 Các biến phân loại mã hóa một nóng: Như bạn có thể thấy từ dữ liệu, có
nhiều biến phân loại Trước tiên chúng ta hãy xem xét số lượng giá trị duy nhất mà mỗi cột có Hãy xem đoạn mã sau:
for col in list(df.columns):
TotalCharges Chúng tôi đã xử lý các biến nhiệm kỳ, MonthlyCharges và
TotalCharges, trong bước trước, vì vậy chúng tôi sẽ tập trung vào các biến đó với
2 đến 4 giá trị duy nhất
Chúng ta hãy xem xét các bản phân phối của một số biến phân loại này Trước tiên, để xem phân phối dữ liệu giữa nam và nữ, bạn có thể sử dụng mã sau để trực quan hóa:
Trang 11kind='bar', color='skyblue', grid=True, figsize=(8,6), title='Gender'
)
plt.show()
Cốt truyện trông giống như sau:
Như bạn có thể thấy từ biểu đồ thanh này, việc phân phối dữ liệu trên các giới tính khác nhau được phân phối gần như bằng nhau Bạn có thể sử dụng cùng một mã để xem phân phối dữ liệu trên các giá trị khác nhau của InternetService và
PaymentMethod Hãy xem các ô sau:
Trang 13Biểu đồ đầu tiên cho thấy sự phân phối dữ liệu trên ba loại khác nhau của biến InternetService và biểu đồ thứ hai cho thấy sự phân phối dữ liệu trên bốn danh mục khác nhau của biến PaymentMethod Như bạn có thể thấy từ các ô này,
chúng ta có thể dễ dàng hình dung và hiểu sự phân phối của các biến phân loại trông như thế nào bằng cách sử dụng các ô thanh Chúng tôi khuyên bạn nên vẽ biểu đồ thanh cho các biến phân loại khác để hiểu rõ hơn về phân phối dữ
liệu.Now, we are going to apply one-hot encoding for these categorical
variables Take a look at the following code:
dummy_cols = []
sample_set = df[['tenure', 'MonthlyCharges', 'TotalCharges',
'Churn']].copy(deep=True) for col in list(df.columns):
if col not in ['tenure', 'MonthlyCharges', 'TotalCharges',
'Churn'] and df[col].nunique() < 5:
dummy_vars = pd.get_dummies(df[col])
dummy_vars.columns = [col+str(x) for x in
dummy_vars.columns] sample_set =
pd.concat([sample_set, dummy_vars], axis=1)
Như bạn có thể thấy từ code này, chúng ta đang sử dụng hàm get_dummies trong góipandas để tạo các biến giả cho mỗi biến categorical Sau đó, chúng tôi nối các biến giả mới được tạo này trở lại biến sample_set, sẽ được sử dụng cho các mô hình đào tạo trong phần sau Kết quả được hiển thị trong kết quả sau:
Khi bạn đã hoàn thành bốn bước này, đã đến lúc bắt đầu xây dựng các mô hình ANN để dự đoán tỷ lệ rời bỏ của khách hàng Chuyển sang phần tiếp theo cho mô hình ANN
Trang 142.2.ANN với Kera
Để xây dựng các mô hình ANN bằng Python, chúng ta sẽ sử dụng gói keras, là một thư viện mạng nơ-ron cấp cao Để biết thêm chi tiết, chúng tôi khuyên bạn nên truy cập tài liệu chính thức của họ tại liên kết sau: http s://keras.io/ Trước khi chúng ta
có thể sử dụng gói này để xây dựng các mô hình ANN, chúng ta cần cài đặt hai gói: tensorflow và keras Gói keras sử dụng tensorflow làm backend để xây dựng các mô hình mạng nơ-ron, vì vậy chúng ta cần cài đặt tensorflow trước Bạn có thể cài đặt hai gói này bằng cách sử dụng các lệnh pip sau trong Terminal của mình:
pip install
tensorflow pip
install keras
Khi bạn đã cài đặt hai gói này, cuối cùng chúng ta cũng có thể bắt đầu xây
dựng các mô hình mạng nơ-ron đầu tiên của mình Trong bài tập này, chúng
ta sẽ xây dựng một mô hình mạng nơ-ron với một lớp ẩn Trước tiên, hãy
xem đoạn mã sau:
from keras.models import
Sequential from keras.layers
mô hình MLP Lớp đầu tiên là một lớp đầu vào, trong đó input_dim chỉ đơn giản là
số lượng các tính năng hoặc cột trong tập mẫu và số lượng đơn vị đầu ra là 16 Chúng ta đang sử dụng chức năng kích hoạt relu cho layer đầu vào này Sau đó, trong lớp ẩn, số lượng đơn vị đầu ra là 8 và chức năng kích hoạt được sử dụng là relu Cuối cùng, lớp đầu ra có một đơn vị đầu ra, đó là xác suất khách hàng rời bỏ vàchúng tôi sử dụng chức năng kích hoạt sigmoid trong lớp này Bạn có thể thử
nghiệm với số lượng đơn vị đầu ra và chức năng kích hoạt khác nhau cho bài tập của
Trang 15Bước cuối cùng để xây dựng một mô hình mạng nơ-ron với gói keras là biên dịch
mô hình này Hãy xem đoạn mã sau:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Ở đây, chúng tôi đang sử dụng trình tối ưu hóa adam, đây là một trong những thuật toán tối ưu hóa phổ biến và được sử dụng thường xuyên nhất Vì biến mụctiêu của chúng ta là nhị phân, chúng ta đang sử dụng binary_crossentropy làm hàm thua lỗ Cuối cùng, mô hình này sẽ sử dụng số liệu chính xác để đánh giá hiệu suất mô hình trong quá trình đào tạo
Trước khi bắt đầu đào tạo mô hình mạng nơ-ron này, chúng ta sẽ cần chia bộ mẫu của mình thành các bộ đào tạo và thử nghiệm Hãy xem đoạn mã sau:
from sklearn.model_selection import
train_test_split target_var = 'Churn'
features = [x for x in list(sample_set.columns) if x != target_var]
X_train, X_test, y_train, y_test =
model.fit(X_train, y_train, epochs=50, batch_size=100)
Ở đây, chúng tôi đang sử dụng 100 mẫu làm batch_size, từ đó mô hình sẽ học cách
dự đoán mỗi lần và 50 mẫu là số lượng kỷ nguyên, là số lượng hoàn thành đi qua toàn bộ bộ đào tạo Khi bạn chạy mã này, bạn sẽ thấy kết quả đầu ra trông giống nhưsau:
Trang 16Như bạn có thể thấy từ đầu ra này, tổn thất thường giảm và độ chính xác (acc) được cải thiện trong mỗi kỷ nguyên Tuy nhiên, tốc độ cải thiện hiệu suất mô hình giảm dần theo thời gian Như bạn có thể thấy từ đầu ra này, có những cải tiến lớn trong các biện pháp đo lường tổn thất và độ chính xác trong vài kỷ nguyên đầu tiên và lượng hiệu suất tăng giảm theo thời gian Bạn có thể theo dõi quá trình này và quyết định dừng lại khi mức tăng hiệu suất là tối thiểu.
2.3.Đánh giá mô hình
Bây giờ chúng ta đã xây dựng mô hình mạng nơ-ron đầu tiên của mình, hãy đánhgiá hiệu suất của nó Chúng ta sẽ xem xét độ chính xác, độ chính xác và khả năng thu hồi tổng thể, cũng như đường cong và diện tích đặc tính vận hành của máy thu (ROC) dưới đường cong (AUC) Trước tiên, hãy xem mã sau để biết độ chính xác, độ chính xác và khả năng nhớ lại của máy tính:
Trang 17from sklearn.metrics import accuracy_score, precision_score, recall_score
in_sample_preds = [round(x[0]) for x in
model.predict(X_train)] out_sample_preds = [round(x[0]) for
print('In-Sample Recall: %0.4f' % recall_score(y_train, in_sample_preds))
print('Out-of-Sample Recall: %0.4f' % recall_score(y_test,
out_sample_preds))
Bạn nên làm quen với mã này, vì chúng tôi đã sử dụng các chỉ số đánh giá tương tự trong Chương 8, Dự đoán khả năng tương tác tiếp thị Đầu ra của mã này trong trường hợp của chúng ta trông giống như sau:
Do một số tính ngẫu nhiên trong mô hình, kết quả của bạn có thể khác với những con số này Như bạn có thể thấy từ đầu ra này, độ chính xác của việc dự đoán liệu khách hàng có rời bỏ hay không trong bộ thử nghiệm là khoảng 0,79, cho thấy mô hình là chính xác khoảng 80% thời gian Độ chính xác ngoài mẫu cho thấy rằng mô hình là chính xác khoảng 66% thời gian mà nó dự đoán rằng khách hàng sẽ rời bỏ,
và việc thu hồi ngoài mẫu cho thấy rằng mô hình nắm bắt khoảng 52% các trường hợp rời bỏ
Tiếp theo, chúng ta có thể tính toán các số AUC, sử dụng mã sau: