Dự đoán khách hàng rời bỏ trong ngành viễn thông — phần 2

Pencil Analytics
8 min readNov 8, 2018

--

Trong phần 1 chúng ta đã cùng đi qua một dự án phân tích đơn giản từ đầu tới cuối.

Nhớ lại rằng chúng ta sử dụng lightgbm cho bài toán phân loại vì các feature được sắp xếp dưới dạng tabular data. Tuy nhiên, cách xử lý như vậy khiến cho mô hình coi các features với các chuỗi thời gian liên tiếp giống như các biến độc lập.

Ở bài này chúng ta hãy cùng sử dụng RNN để xem phương pháp này có hiệu quả hơn hay không. Vì dữ liệu bây giờ là sequence của nhiều biến, nên chúng ta cũng sẽ thử tìm các giải pháp khác thay vì các thư viện có sẵn để diễn giải mô hình.

Transfer learning

Theo blog dlapplications, Transfer Learning trong Deep Learning là một kỹ thuật mà trong đó:

  • Một pretrained model đã được train trên source tasks cụ thể nào đó, khi đó một phần hay toàn bộ pretrained model có thể được tái sử dụng phụ thuộc vào nhiệm vụ của mỗi layer trong model đó.
  • Một model mới sử dụng một phần hay toàn bộ pretrained model để học một target tasks và tùy vào nhiệm vụ của mỗi layer mà model mới có thể thêm các layer khác dựa trên pretrained model sẵn có.

Transfer learning đã chứng minh được hiểu qua ở trong computer vision và NLP. Trong bài này chúng ta sẽ cùng thử xem nó có hiệu quả với dữ liệu dạng bảng hay không. :D

Nhớ lại rằng với dữ liệu của nhà mạng chúng ta đang sử dụng có số liệu của 25 features về chuỗi hành vi trong 6 tháng. Vì vậy, chúng ta có thể chia quá trình training ra thành 2 bước.

  • Bước 1 tạm gọi là "behavior model" với mục tiêu dự đoán giá trị của 25 features bên trên tại tháng gần nhất. Điều này cũng tương tự như dự đoán hành vi của khách hàng khi đã biết dữ liệu trong quá khứ của họ.
  • Bước 2 là bước dự đoán khách hàng rời bỏ. Lúc này phần head đã dùng để dự đoán bên trên sẽ bị cắt bỏ, pre-trained weight sẽ được sử dụng lại cho RNN model, phần head mới sẽ được sử dụng để dự đoán khách hàng rời bỏ.

Với RNN model, tôi sử dụng AWD-LSTM vì nó có khả năng regulization tốt. 2 head dùng để dự đoán 2 task bên trên đơn thuần là FCN chứ không có gì đặc biệt.

Attention is all you need

Tôi sử dụng thêm attention để tăng độ chính xác của mô hình cũng như có thể làm cơ sở để diễn giải mô hình sau này. Như trên chúng ta có một attention layer cho feature, và một cho chuỗi thời gian của mỗi features.

Kết quả mô hình

Mô hình có độ chính xác khá cao là một điều tốt để chúng ta tiến hành các bước diễn giải mô hình tiếp theo.

Partial dependence

Tôi sử dụng Partial dependence để khảo sát sự thay đổi của các feature qua từng tháng. Thuật toán khá đơn giản, tại từng tháng của từng feature, với mỗi giá trị từ thấp tới cao, tôi áp dụng với tất cả các bản ghi sau đó lấy trung bình kết quả dự đoán để biết tác động của giá trị này đối với kết quả.

Lưu ý rẳng thuật toán đơn giản không có nghĩa là cần ít thời gian để tính toán. Vì vậy chúng ta không thể lựa chọn quá nhiều giá trị từ thấp tới cao.

Ở đây màu xanh đậm thể hiện giá trị đoán gần 1 hơn - tức là khách hàng rời bỏ, màu vàng thể hiện khách hàng có xu hướng tiếp tục sử dụng dich vụ.

Chúng ta có thể thấy được xu hướng chung của các biến ví dụ như với số lần sử dụng dịch vụ A.

Nhìn chung ở các tháng gần thời với tháng t và có số lần sử dụng dịch vụ khá lớn thì khách hàng có xu hướng rời bỏ. Điều này khá giống với những gì chúng ta đã thấy ở phần 1.

Đối với một số biến khác, việc phí sử dụng dịch vụ thấp ở tất cả các tháng là dấu hiệu cho việc khách hàng rời bỏ.

Shap value

Chúng ta đã có thể hiểu được về tổng thể các biến tác động tới kết quả dự đoán của mô hình như thế nào. Tuy nhiên đó chỉ là tổng thể vì chúng ta lấy trung bình tất cả các dự đoán. Tiếp theo hãy cùng xây dựng thuật toán để xem trong một trường hợp cụ thể, từng biến sẽ tác động tiêu cực hay tích cực tới kết quả dự đoán.

Tôi sử dụng SHAP value để làm điều này. Tuy nhiên việc tính toán chính xác SHAP value cần rất nhiều thời gian, vì vậy tôi sử dụng một thuật toán gần đúng được mô tả tại bài báo:

Để ý ở đây thay vì phải dùng tất cả tổ hợp của các biến, thuật toán này chỉ cần hoán vị ngẫu nhiên trong vị trí của các biến.

Attention

Nhớ lại rằng chúng ta có sử dụng attention trong mô hình của mình, hãy cùng xem chúng giúp được gì trong việc diễn giải kết quả của mô hình. Ở đây tôi kết hợp giá trị attention và giá trị của biến để xem được những mẫu hình nào được mô hình chú ý. Kết hợp với shap values, chúng ta sẽ có được cái nhìn hoàn chỉnh của việc các biến đang tác động tới mô hình như thế nào, và các mẫu hình nào gây ra kết quả đó.

Ở đây tôi chỉ tập trung vào các bản ghi được mô hình dự đoán là sẽ rời bỏ bởi đó là điều chúng ta đang quan tâm.

Ngoài cùng bên trái là shap values, lưu ý rằng màu xanh thể hiện giá trị dương - giá trị khiến giá trị dự đoán gần 1 hơn. Trong khí đó màu đỏ thể hiện giá trị âm - giá trị khiến giá trị dự đoán gần 0 hơn. Ngoài cùng bên phải là giá trị của attention ứng với 6 tháng của 25 biến. Giá trị xanh càng đậm chứng tỏ tại thời điểm đó có giá trị càng lớn. Chính giữa là đồ thị map giữa giá trị attention và chuỗi thời gian của từng biến.

Với 3 đồ thị trên chúng ta có thể thấy được cách mô hình đưa ra dự đoán đối với một khách hàng sắp rời bỏ. Ví dụ như trên đó là vì sự giảm đột ngột của số lần sử dụng dịch vụ A (có phí và miễn phí), sự suy giảm cách đây 2 tháng của phí C hoặc sự tăng lên trong thời lượng sử dụng dịch vụ A cách đây 3 tháng.

Hãy cùng thử nhìn thêm một bản ghi khác của khách hàng sẽ rời bỏ khác.

Bạn có nhìn được điều gì từ bản ghi này?

Trả lời các câu hỏi của doanh nghiệp

Q: Liệu chúng ta có thể dự đoán được khách hàng sắp rời bỏ?

A: Có. Tất nhiên là kèm theo một độ tin cậy của dự đoán nữa.

Q: Liệu chúng ta có thể biết được đối với những dự đoán này, biến số nào ảnh hưởng nhất, mẫu hình nào được chú ý đối với từng khách hàng?

A: Có, với đồ thị như chúng ta đã nhìn ở trên.

Q: Liệu chúng ta có thể làm gì để giữ chân khách hàng?

A: Đây là câu hỏi nên được đặt ra trước khi thực hiện mô hình như đã được đề cập ở bài này.

Q: Nếu chúng ta thực hiện việc gì đó (ví dụ như giảm phí cho dịch vụ A) thì có giúp giữ chân khách hàng không?

A: Rất tiếc chúng ta không thể trả lời câu hỏi này với những dữ liệu hiện tại. Cách tốt nhất để biết đó là thực hiện ngẫu nhiên các giải pháp rồi ghi nhận lại dữ liệu. Sau đó mô hình sẽ cho chúng ta biết câu trả lời.

Q: Đợi đã, ý anh là với tất cả những gì anh đã xây dựng, anh không thể trả lời được hết các câu hỏi của tôi sao?

A: Đúng vậy, nếu không có dữ liệu đúng thì chúng ta sẽ không trả lời được câu hỏi. Một mô hình mạnh như RNN cũng sẽ chỉ trả lời được một số câu hỏi chứ không phải là cây đũa thần giải quyết tất cả các vấn đề của tổ chức.

Chi tiết notebook các bạn có thể xem tại đây. Trong notebook có một số hàm tôi đã viết sẵn, nó là một phần của thư viện tôi đang xây dựng ở đây.

--

--

Responses (3)