images
10/11/2020 07:23 am

Gấu Mèo đi làm Data Scientist - Phần 12: Customer Churn Prediction: Never let me go - Part 1

“Thế ai là khách hàng sắp rời bỏ hả Gấu Mèo? Ai đang làm service dự đoán khách hàng rời bỏ hả Gấu Mèo. AI? AI? NGƯỜI ĐÓ LÀ AI?”

Tối thứ 6, trong văn phòng công ty:

 

Vậy nên ai sẽ là người đi tiếp?

Ai - ai - người ấy là ai?

Ai phải nói lời ly biệt?

Ai - ai - người ấy là ai?

Ai được coi là thiên tài?

Ai - ai - người ấy là ai?

Ai sẽ trở thành huyền thoại?

 

Gấu Mèo còn đang luyện flow với mấy câu của 16 Typh, thì nghe tiếng sếp sau lưng :

 

“Thế ai là khách hàng sắp rời bỏ hả Gấu Mèo? Ai đang làm service dự đoán khách hàng rời bỏ hả Gấu Mèo. AI? AI? NGƯỜI ĐÓ LÀ AI?”

 

Chết dở, mải tính chuyện đi thi Rap Việt mùa sau, tí quên mất. Nó vội mở jupyter, code đoạn code, trả lời cho câu hỏi: Ai là khách hàng sắp rời bỏ?

 

Thế khách hàng thế nào là khách hàng rời bỏ?

 

Cái này thì tuỳ biz nhé các bạn. Thứ nhất là loại biz mà khách hàng ký hợp đồng với công ty, kiểu như thuê bao internet, truyền hình cáp… Với loại biz này thì đơn giản là khách hàng chấm dứt hợp đồng, không extend tiếp nghĩa là rời bỏ. Loại biz thứ hai kiểu như tiki, grab… không có hợp đồng nào giữa khách hàng và công ty cả, khách hàng lâu không sử dụng dịch vụ thì xem như rời bỏ. Chính vì vậy, với biz loại 2, việc đánh dấu ai đã rời bỏ sẽ là tương đối, bạn sẽ phải tự định nghĩa bao lâu không sử dụng dịch vụ thì được tính là rời bỏ.

 

Thực ra thì một khi khách hàng đã rời bỏ thì chi phí để họ reactive là rất lớn, bởi vậy khi họ bắt đầu có xác suất rời bỏ cao, mà chúng ta phát hiện được thì tiết kiệm được nhiều chi phí cho công ty. Bên cạnh đó việc phân tích nguyên nhân rời bỏ còn giúp công ty nhận ra các vấn đề của mình để khắc phục. Việc phân tích sẽ dựa vào dữ liệu cũ, của các khách hàng đã rời bỏ.

 

Trở lại với jupyter của Gấu Mèo, đợt này là phân tích việc rời bỏ cho khách hàng của một công ty viễn thông, nó thuộc dạng 1, nên đoạn chuẩn bị data đỡ hơn xíu, ở bước xem hiện tại ai đã rời bỏ rồi. À mà data ở đây nhé các bạn:

https://www.kaggle.com/blastchar/telco-customer-churn

 

Việc dựng model trải qua các bước lớn thế này:

- Exploratory Data Analysis


- Preprocessing for Churn Modeling


- Churn Prediction


- Model Tuning

Bước 1: Exploratory Data Analysis 

 

Trước khi đi vào phân tích thì chúng ra sẽ phải xem qua về data mà chúng ta có. Ở bước này chúng ta sẽ có các bước nhỏ thế này:

 

- Definition of customer churn: Như đã nói ở trên đầu tiên chúng ta phải xác định được đâu là khách hàng đã rời bỏ

 

- Explore customer churn: Sau khi đã xác định được chúng ta sẽ chart ra và xem giữa khách hàng rời bỏ, không rời bỏ khác nhau những gì

 

Cụ thể hơn chúng ta sẽ:

 

- Grouping and summarizing data

 

- Exploring your data using visualization

 

- Summary statistic for both class

 

- Exploring feather distribution

 

Chúng ta có thể đi từng chiều một như Churn by State, Churn by service call.

 

Ở bước này việc phân tích chỉ theo cảm quan dựa trên việc nhìn vào chart, tuy nhiên nó sẽ đưa ra insight cơ bản cho việc tìm hiểu và phân tích nguyên nhân theo kiểu định tính.

 

Bước 2: Preprocessing for Churn Modeling

 

Ở bước này chúng ta sẽ chuẩn bị dữ liệu để đưa vào model. Thường nó sẽ có các bước:

 

- Data preprocess: Quá trình này bao gồm:

 

+ Identifying features to convert: Bạn sẽ cần xem có trường nào cần convert, biến đổi thành trường khác. Việc này cần rất nhiều tới việc am hiểu về biz, từ đó có thể đưa ra các trường nhiều ý nghĩa

 

+ Encoding binary features: Các model thường chỉ xử lý các trường dạng số, nên các trường dạng categorical sẽ phải chuyển thành dạng số

 

+ One hot Encoding: Có đôi lúc dữ liệu dạng categorical chuyển thành số dạng 1,2,3,4 ko hợp lý lắm, thì chúng là phải dùng One hot Encoding. Nó gần giống như pivot table, chuyển mỗi category thành một trường, đánh số 1 ở category mà nó đang thuộc về, số 0 ở các category khác. Để tránh bị loãng Gấu Mèo sẽ giải thích chi tiết trong một bài khác.

 

+ Feature scaling: Về khía cạnh toán học thì khi giá các tính năng có cùng khoảng (từ 0-1) thì việc tối ưu hàm lỗi (bước giúp model learn để đạt được sự chính xác) sẽ nhanh hơn. Việc scaling này có nhiều cách, đơn giản nhất thì cứ lấy các giá trị chia cho số lớn nhất.

 

- Feature Selection and engineering:

 

+ Việc loại bỏ đi các trường không cần thiết sẽ giảm tải cho việc training model, làm phần mềm có thể chạy hơn, nó gọi là Feature Selection (Drop unnecessary features)

 

+ Còn Feature Engineering (Engineering new column) là việc tạo ra các trường mới bằng việc tạo nhận chia… các trường cũ với nhau, giúp model có nhiều thông tin hơn,  giảm được overfitting

Bước 3: Tạo model

Đây là bước tìm ra một hàm gần đúng, mà đầu vào là các thuộc tính của khách hàng, và đầu ra là việc khách hàng có rời bỏ hay không. Nó sẽ có hai phần:


- Make predictions: Chúng ra sẽ dùng scikit cho việc này. 


+ Model Selection: Việc chọn lựa model loại nào để dùng là một quá trình khá đau đầu. Bài toán Churn Prediction là bài toán dạng Classification, chúng ta có thể bắt đầu với Logistic Regression, Decision Tree, nếu bị overfit có thể thử thêm Random Forest. Bạn cũng có thể thử Support Vector Machine, deep learning (Đòi hỏi nhiều tài nguyên để chạy hơn) để dự đoán.


+ Training your model: Đoạn này tí các bạn nhìn code nhé. Nói ra thì hơi dài, với cả nó sẽ giống nhau trong các bài toán khác nữa nên Gấu Mèo sẽ nói riêng.


- Evaluate model: Sau khi đã ra được model thì bạn sẽ phải đánh giá lại model. Phần này thì mình chủ yếu dùng confusion matrix. Còn nếu như bạn muốn tìm hiểu thêm thì mình có viết ở đây nhé: 


Gấu mèo đi làm Data Scientist - Phần 6 - Evaluate Model - Part 1

Gấu mèo đi làm Data Scientist - Phần 6 - Evaluate Model - Part 2 (F1 Score)

Gấu mèo đi làm Data Scientist - Phần 6 - Evaluate Model - Part 3 - Gain and Lift Charts


Sau khi đánh giá được model rồi thì chúng ta có thể chọn ra model cho kết quả tốt nhất. Và nếu như bạn vẫn chưa hài lòng thì có thể làm tiếp là đánh gía model đang bị overfitting hay underfitting. Từ đấy chúng ta sẽ tiếp tục tuning model bẳng cách tìm thêm dữ liệu, thêm trường hoặc đổi thuật toán tìm kiếm.


Có một điều lưu ý là data trong bài toán Customer Churn thường là loại unbalanced. Xử lý thế nào thì bạn xem ở bài: Gấu mèo đi làm Data Scientist - Phần 10: Dealing with unbalanced dataset nhé. 


À mà nãy giờ chưa code, nhưng thôi bài dài quá, Gấu Mèo để ở Part 2 nhé.


P/S: Sau khi đã phát hiện được khách hàng có nguy cơ rời bỏ, một vấn đề quan trọng nữa là xếp priority để xem chăm sóc ai trước, ai thì bỏ qua. Phần này mời bạn tham khảo thêm ở Gấu Mèo đi làm Data Scientist - Phần 11: Marketing - Part 3 - RFM Segmentation.


- Tech Zone -

Thư giãn chút nào!!!

Bài viết liên quan