Dự đoán khả năng chậm trả nợ dựa trên hành vi tiêu dùng thẻ tín dụng

Pencil Analytics
5 min readSep 4, 2018

--

Nguồn: napalete

Dự đoán khả năng chậm trả nợ dựa theo hành vi giao dịch của khách hàng không phải là một bài toán mới trong ngân hàng. Tuy nhiên, bài toán này thường được giải quyết thông qua manual feature engineering, các feature đôi khi là aggregate feature chứ không phải là các feature nguyên bản về hành vi của khác hàng.

Chúng ta sẽ thử tự động hóa quá trình trên thông qua việc sử dụng RNN và attention. Attention mechanism thường được sử dụng trong bài toán machine translation, nhưng ở đây chúng ta sẽ áp dụng vào chuỗi hành vi về chi tiêu thẻ tín dụng để xem có gì bất thường với các khách hàng chậm trả nợ.

Nguồn: leverege

Bộ dữ liệu sử dụng trong bài này là credit_card_balance của cuộc thi Home Credit Default Risk bao gồm hành vi chi tiêu thẻ tín dụng của khách hàng qua từng tháng.

Architecture

Input vào mô hình là các bản ghi về lịch sử của thẻ tín dụng. Do số lượng tháng có dữ liệu lịch sử không giống nhau, ở đây tôi sử dụng pad_packed_sequence để pytorch không tính toán backprop với các bản ghi đã được được zero padded.

cc_inp, pad_inp = self.pad_from_inp(x_in)

RNN layer là LSTM, thêm vào đó là dropout để tránh overfit.

outp = self.rnn(cc_inp)

Tiếp theo chúng ta có 2 attention layer. Một cái để hiểu xem mô hình sẽ tập trung vào tháng nào trong chuỗi thời gian sử dụng thẻ của khách hàng. Cái còn lại để xem mô hình tập trung vào giá trị nào trong từng tháng.

att_rnn_out, at_rnn_m = self.att_RNN(outp)
att_inp_out, at_inp_out_m = self.att_ip(outp, pad_inp)

Với output của RNN layer nhận được, chúng ta lấy output của RNN cell cuối cùng; avg pool và max pool. Tất cả chúng được nối với output của 2 attention layer đã tính toán ở trên.

avgpool, mxpool = self.pool(outp, len(x_in), False), self.pool(outp, len(x_in), True)x = self.concat_lyrs(torch.cat([outp[:,-1,:], avgpool, mxpool, att_rnn_out, att_inp_out], 1))

Tiếp theo chúng được đưa vào feedforward net, tại đây mỗi linear block đều bao gồm activation function: Relu, batchnorm layer và dropout layer. Với linear layer cuối cùng, tôi sẽ không sử dụng sigmoid functoin mà sẽ tính toán nó ở loss function.

for lyer in self.lns: x = lyer(x)

Loss function

Sử dụng binary cross entropy with logits, trọng số đánh nặng hơn cho các khoản chậm trả (TARGET = 1). Ở đây tôi tính tổng loss của các bản ghi của từng batch chứ không tính trung bình cộng của chúng.

Hình ảnh hóa attention layer

Hãy cùng xem mô hình tập trung vào các đặc điểm nào của các khách hàng chậm trả nợ. Đầu tiên chúng ta có giá trị attention cho từng bản ghi của khác hàng. Giá trị càng cao cho thấy mô hình chú ý càng nhiều. Như đồ thị bên dưới thì không có nhiều khác biệt lắm giữa các thời điểm.

Tiếp theo chúng ta xem mô hình tập trung vào giá trị nào của từng thời điểm với heatmap bên dưới. Ở đồ thị này, trục tung là các trường thông tin, trục hoành là chuỗi thời gian. Màu càng xanh thẫm thì mô hình càng chú ý nhiều.

AMT_PAYMENT_CURRENT

Mô hình chú ý vào các khoản chi trả nhiều và biến động bất thường cách đây 80 tháng.

AMT_CREDIT_LIMIT_ACTUAL

Việc giảm hạn mức đột ngột của thẻ tín dụng cũng có thể là một dấu hiệu đáng ngờ.

CNT_DRAWINGS_ATM_CURRENT

Các khoản rút ATM liên tục của khách hàng. Tuy nhiên cá nhân tôi không thấy dấu hiệu này có vấn đề gì lắm.

Một trường hợp khác.

AMT_INST_MIN_REGULARITY

Biến động về số tiền vay ít nhất trong các tháng của thẻ tín dụng. Mô hình tập trung vào đúng thời điểm giá trị này giảm đột ngột.

AMT_RECEIVABLE_PRINCIPAL

Suy giảm bất thường trong số tiền phải thu gốc.

Áp dụng kĩ thuật tương tự như trên, các bạn có thể tìm thấy nhiều đặc điểm thú vị hơn trong hành vi của khách hàng.

Notebook chi tiết có tại đây.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response