Bộ dữ liệu này được dùng để xây dựng ra một mô hình dự báo khách hàng có xảy ra nợ quá hạn trên 90 ngày trong 2 năm tới hay không... RevolvingUtilizationOfUnsecuredLines Thuộc tính này đ
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA TOÁN – CƠ – TIN HỌC
-*** -
Môn học: Phát triển phần mềm nâng cao cho tính toán khoa học
Giảng viên: Vũ Tiến Dũng
Thành viên: Ngô Văn Khôi – Trưởng nhóm
Nguyễn Trường Sơn
Nguyễn Thị Hường
Hà Nội, tháng 07 năm 2021
Trang 2MỤC LỤC
1 Giới thiệu 3
2 Khám phá dữ liệu 4
2.1 Khám phá các thuộc tính của bộ dữ liệu 4
2.2 Phân tích dữ liệu 11
2.2.1 Giải quyết các missing value 11
2.2.2 Xác định các đặc điểm thống kê của dữ liệu 12
2.2.3 Phân tích tương quan giữa các biến độc lập 13
2.2.4 Giải quyết giá trị bất thường (outlier) 13
3 Xây dựng mô hình 20
3.1 Xây dựng baseline model 20
3.2 Tối ưu mô hình GradientBoosting và đánh giá kết quả 20
4 Xây dựng demo webapp 22
5 Kết luận 22
Trang 31 Giới thiệu
Ngân hàng là một tổ chức tài chính và trung gian tài chính chấp nhận tiền gửi và định kênh những tiền gửi đó vào các hoạt động cho vay trực tiếp hoặc gián tiếp thông qua các thị trường vốn Ngân hàng là kết nối giữa khách hàng có thâm hụt vốn và khách hàng có thặng dư vốn Hầu hết các Ngân hàng hoạt động theo một hệ thống được gọi là hoạt động ngân hàng dự trữ phân đoạn mà họ chỉ nắm giữ một dự trữ nhỏ các khoản tiền gửi và cho vay phần còn lại để kiếm lời Do vậy, cho vay là một nghiệp vụ cơ bản của Ngân hàng nhưng đồng thời hoạt động này cũng tiềm ẩn nhiều rủi ro, đặc biệt là rủi ro tín dụng Rủi ro tín dụng trong hoạt động ngân hàng là tổn thất có khả năng xảy ra đối với nợ của tổ chức tín dụng, chi nhánh ngân hàng nước ngoài do khách hàng không thực hiện hoặc không có khả năng thực hiện một phần hoặc toàn bộ nghĩa vụ của mình theo cam kết Theo đó, một tiêu chí để đánh giá khả năng trả nợ của khách hàng là chỉ tiêu nợ quá hạn, được cụ thể hóa như sau:
- Nợ nhóm 1 (nợ đủ tiêu chuẩn): Nợ quá hạn dưới 10 ngày
- Nợ nhóm 2 (nợ cần chú ý): Nợ quá hạn từ 10 ngày đến 90 ngày
- Nợ nhóm 3 (nợ dưới tiêu chuẩn): Nợ quá hạn từ 91 ngày đến 180 ngày
- Nợ nhóm 4 (nợ nghi ngờ): Nợ quá hạn từ 181 ngày đến 360 ngày
- Nợ nhóm 5 (nợ có khả năng mất vốn): Nợ quá hạn trên 360 ngày
Trong đó, nợ xấu là nợ thuộc các nhóm 3, 4 và 5
Từ những tiêu chí phân loại cơ bản như trên, việc phân tích và dự đoán một khách hàng có xảy ra nợ quá hạn trong tương lai hay không trước khi ra quyết định cho vay hay
dự báo một khách hàng hiện hữu trong tương lai có phát sinh nợ quá hạn hay không là một vấn đề cần thiết và cấp thiết đối với mỗi Ngân hàng Hoạt động này góp phần giúp Ngân hàng hoạt động hiệu quả, bên cạnh đó còn đảm bảo cho mạch tài chính trên thị trường được thông suốt, liền mạch Từ đây, nhóm em quyết định thực hiện đề tài cuối kỳ liên quan đến rủi ro tín dụng dựa trên bộ dữ liệu được lấy từ một cuộc thi trên Kaggle mang tên “Give me some credit” Bộ dữ liệu này được dùng để xây dựng ra một mô hình dự báo khách hàng có xảy ra nợ quá hạn trên 90 ngày trong 2 năm tới hay không
Trang 42 Khám phá dữ liệu
2.1 Khám phá các thuộc tính của bộ dữ liệu
Bộ dữ liệu này có 11 thuộc tính như sau:
2.2.1 SeriousDlqin2yrs
Thuộc tính này để chỉ khách hàng có bị lần nào quá hạn trả nợ hàng tháng nhiều hơn
90 ngày trong 2 năm tới không Giá trị của thuộc tính là Y (Yes - 1) hoặc N (No - 0)
Đây là thuộc tính chúng ta sẽ dự đoán ở bộ dữ liệu test (Biến phụ thuộc)
Trang 5Từ kết quả phân tích cho thấy có đến 93.316% dữ liệu có biến đầu ra được dán nhãn
0, trong khi chỉ có 6.684% được dán nhãn 1 Đây là hiện tượng mất cân bằng dữ liệu xảy
ra rất thường xuyên trong machine learning
2.2.2 RevolvingUtilizationOfUnsecuredLines
Thuộc tính này để chỉ hạn mức tín dụng của khách hàng không tính các khoản vay nợ hiện tại và bất động sản hay thuộc tính này là tỷ lệ hạn mức còn lại được dùng/hạn mức tối
đa có thể sử dụng trừ các khoản vay và BĐS
Ví dụ như mình có 1 thẻ tín dụng và hạn mức của nó là 1,000 đô Trong tài khoản ngân hàng cá nhân của mình cũng đang có 1,000 đô Số dư thẻ tín dụng là 500 đô Vậy số
dư tối đa mình có thể có thông qua thẻ tín dụng và tài khoản ngân hàng cá nhân là 1000 đô + 1000 đô = 2000 đô, mình đã sử dụng 500 đô từ hạn mức tín dụng cho nên tổng số dư là
500 đô + 1000 đô = 1500 đô Giá trị RevolvingUtilizationOfUnsecuredLines ở đây là 1500/2000 = 0.75
Hạn mức tín dụng của khách hàng không tính các khoản vay nợ hiện tại và bất động sản càng cao thì khả năng xảy ra nợ quá hạn trên 90 ngày càng cao
Trang 62.2.3 Age
Thuộc tính này là để chỉ tuổi của khách hàng
Độ tuổi càng trẻ thì khả năng xảy ra nợ quá hạn trên 90 ngày càng cao, các khoản vay tập trung ở độ tuổi trung niên và đến tầm từ 75 tuổi trở đi thì khả năng xảy ra nợ quá hạn trên 90 ngày ít hơn
2.2.4 NumberOfTime30-59DaysPastDueNotWorse
Thuộc tính này biểu thị số lần khách hàng chậm thanh toán các khoản trả hàng tháng
từ 30-59 ngày
Trang 7Số lần xảy ra nợ quá hạn từ 30 – 59 ngày cao thì khả năng xảy ra nợ quá hạn trên 90 ngày cao Khả năng không xảy ra nợ quá hạn trên 90 ngày liên quan đến thuộc tính này chỉ
là 1 dao động rất nhỏ xung quanh giá trị 0
2.2.5 DebtRatio
Thuộc tính này biểu thị tỷ lệ nợ
Ví dụ khoản nợ hàng tháng của một khách hàng là 200 đô, và chi tiêu hàng tháng là
500 đô, thu nhập hàng tháng là 1000 đô, thì tỉ lệ nợ là (200 + 500)/1000 = 0.7
Tỷ lệ nợ thấp hơn thì khả năng xảy ra vấn đề về tài chính thấp hơn
2.2.6 MonthlyIncome
Thuộc tính này biểu thị thu nhập hàng tháng
Trang 8Ở mức thu nhập thấp hơn thì khả năng xảy ra vấn đề về tài chính cao hơn nhưng mối quan hệ này không quá rõ ràng
2.2.7 NumberOfOpenCreditLinesAndLoans
Thuộc tính này biểu thị số khoản vay và/hoặc số thẻ tín dụng của khách hàng
Cùng số thẻ tín dụng hoặc khoản vay thì khả năng xảy ra vấn đề về tài chính thấp hơn nhưng mối quan hệ này không quá rõ ràng
2.2.8 NumberOfTimes90DaysLate
Thuộc tính này biểu thị số lần khách hàng chậm thanh toán các khoản trả hàng tháng lớn hơn 90 ngày
Trang 9Số lần xảy ra nợ quá hạn trên 90 ngày cao thì khả năng xảy ra nợ quá hạn trên 90 ngày cao Khả năng không xảy ra nợ quá hạn trên 90 ngày liên quan đến thuộc tính này chỉ là 1 dao động rất nhỏ xung quanh giá trị 0
2.2.9 NumberRealEstateLoansOrLines
Thuộc tính này biểu thị số khoản vay của khách hàng liên quan đến bất động sản
Số khoản vay của khách hàng liên quan đến bất động sản càng ít thì khả năng xảy ra
nợ quá hạn trên 90 ngày càng thấp
2.2.10 NumberOfTime60-89DaysPastDueNotWorse
Thuộc tính này biểu thị số lần khách hàng chậm thanh toán các khoản trả hàng tháng
từ 60 - 89 ngày
Trang 10Số lần xảy ra nợ quá hạn từ 60 – 89 ngày cao thì khả năng xảy ra nợ quá hạn trên 90 ngày cao Khả năng không xảy ra nợ quá hạn trên 90 ngày liên quan đến thuộc tính này chỉ
là 1 dao động rất nhỏ xung quanh giá trị 0
2.2.11 NumberOfDependents
Thuộc tính này biểu thị số người phụ thuộc trong gia đình
Số người phụ thuộc trong gia đình càng ít thì khả năng xảy ra nợ quá hạn trên 90 ngày càng thấp
Trang 112.2 Phân tích dữ liệu
2.2.1 Giải quyết các missing value
Bộ dữ liệu này cho thấy có 2 thuộc tính có missing value là MonthlyIncome và NumberOfDependents Để giải quyết giá trị thiếu này, t thay thế bằng giá trị median của chúng
Trang 122.2.2 Xác định các đặc điểm thống kê của dữ liệu
Mô tả đặc điểm thống kê ban đầu của dữ liệu thể hiện ở bảng sau:
Độ tuổi trung bình của khách hàng là tuổi trung niên (40 – ngoài 50 tuổi), có giá trị oulier (0 tuổi) Về tình trạng nợ quá hạn cho thấy giá trị trung bình số lần nợ quá hạn của khách hàng trên 30/60/90 ngày khá thấp (0.1 – 0.25), độ lệch chuẩn đều dưới 1 Tỷ lệ nợ
có trung vị tại 0.3665 Thu nhập trung bình rơi vào khoảng hơn $6000/tháng (khá gần mức thu nhập trung bình của nước Mỹ năm 2019 – 2020), tuy nhiên dải thu nhập dao động khá lớn
Trang 132.2.3 Phân tích tương quan giữa các biến độc lập
Kết quả phân tích tương quan trên cho thấy những người có nợ quá hạn trên 30 ngày thì có xu hướng nợ quá hạn trên 60 ngày và trên 90 ngày
2.2.4 Giải quyết giá trị bất thường (outlier)
2.2.4.1 Các phương pháp để tìm outlier
Dùng 4 phương pháp để tìm outlier như sau:
trên 97.5% thì được coi là outlier
độ lệch tuyệt đối (MAD) Nếu z-score có hiệu chỉnh nằm dưới 3.5 hoặc nằm trên 3.5 thì được coi là outlier
(3) STD-based Outliers: Tính thông qua giá trị z = với 𝜇 là giá trị trung bình,
𝜎 là độ lệch chuẩn Nếu dữ liệu nằm dưới z hoặc trên z thì được coi là outlier
Trang 14(4) Majority vote based Outliers: Nếu có 2/3 phương pháp trên cho ra dữ liệu là outlier thì điểm dữ liệu đó được coi là outlier
2.2.4.2 Các phương pháp để giải quyết outlier
Dùng 3 phương pháp để giải quyết outlier như sau:
2.2.4.3 Áp dụng vào bộ dữ liệu hiện tại
Các điểm màu đỏ đại diện cho các potential outlier
Hạn mức tín dụng nằm trong khoảng từ 0 – 1 nhưng có rất nhiều potential outlier nằm ra ngoài giới hạn đấy và có những điểm outlier lên đến khoảng 3000
Để giải quyết các outlier của thuộc tính này ta dùng phương pháp cận trên là 1 và thu được kết quả như sau:
Trang 152.2.4.3.2 Giải quyết outlier của cột Age
Phương pháp Percentile-based outliers cho ra nhiều potential outlier nhưng trừ 0 tuổi không thể gửi tiền ngân hàng thì mọi độ tuổi đều có thể có tiền gửi ngân hàng
Để giải quyết các outlier này, ta thay thế tất cả các outlier bằng cận dưới là 21 và thu được kết quả như sau:
Trang 162.2.4.3.3 Giải quyết outlier của cột NumberOfTime30-59DaysPastDueNotWorse
Sau khi tham chiếu đồ thị cùng với đối chiếu kết quả cho thấy giá trị 96 và 98 là các outlier
Để giải quyết các outlier này, ta thay thế các outlier bằng median của chính cột thuộc tính này nếu điểm dữ liệu đó lớn hơn 95 và thu được kết quả như sau:
Trang 172.2.4.3.4 Giải quyết outlier của cột DebtRatio
Phương pháp MAD-based Outliers phát hiện ra nhiều potential outlier nhất nên ta sẽ cân nhắc các outlier từ phương pháp này
Để giải quyết các outlier này, ta thay thế các outlier bằng cận dưới của phương pháp MAD-based Outliers và kết quả thu được như sau:
Trang 182.2.4.3.5 Giải quyết outlier của cột MonthlyIncome
Đối với thuộc tính này, ta lựa chọn phương pháp Majority vote based outliers
Để giải quyết các outlier này, ta thay thế các outlier bằng cận dưới của phương pháp Majority vote based outlier và thu được kết quả như sau:
Trang 192.2.4.3.6 Giải quyết outlier của cột NumberOfTimes90DaysLate
Đối với thuộc tính này, ta ngay lập tức có thể nhìn thấy 96 và 98 là các outliers Và
để giải quyết các outlier này, ta thay thế bằng median của chính cột đó nếu x lớn hơn 95 và thu được kết quả như sau:
Đối với thuộc tính này, ta ngay lập tức có thể nhìn thấy 96 và 98 là các outliers Và
để giải quyết các outlier này, ta thay thế bằng median của chính cột đó nếu x lớn hơn 95 và thu được kết quả như sau:
Trang 203 Xây dựng mô hình
3.1 Xây dựng baseline model
Bài phân tích xây dựng 5 mô hình theo các phương pháp: K-nearest neighbors (KNN), Logistic Regression, Random Forest, AdaBoost và GradientBoosting
Đánh giá hiệu quả các mô hình dựa trên phương pháp Cross-validation với tiêu chí đánh giá là giá trị AUC của từng mô hình
Kết quả sau khi chạy model như bảng bên dưới đây:
Theo đó, phương pháp cho kết quả tốt nhất là GradientBoosting với AUC = 0.8630
Trong phần tiếp theo, nhóm sẽ thực hiện tối ưu mô hình này để dự đoán khả năng trả nợ của khách hàng
3.2 Tối ưu mô hình GradientBoosting và đánh giá kết quả
Nhóm sử dụng phương pháp GridSearchCV trong thư viện sklearn để tối ưu các tham số cho mô hình, kết quả thu được như sau:
Trang 21Nhóm lựa chọn điểm tối ưu cho bài toán là 0.0667, tức là nếu xắc suất để khách hàng
có rủi ro trả nợ quá hạn lớn hơn 90 ngày là 6,67% thì được dán nhãn là 1, ngược lại thì dán nhãn là 0 và quyết định cho khách hàng vay Theo đó, kết quả dự đoán với tập dữ liệu test được tóm tắt bằng confusion matrix và classification report như sau
Confusion matrix
Trang 22Classification report
Dựa vào ma trận trên ta thấy mô hình dự đoán chính xác 111,538 khách hàng không
bị quá hạn trả nợ hơn 90 ngày và 7,910 khách hàng bị quá hạn trả nợ hơn 90 ngày Tỷ lệ dự báo chính xác accuracy = (TP+TN)/ (TP+FP+TN+FN) = 80%
4 Xây dựng demo webapp
Nhóm sử dụng thư viện Pickle để lưu lại và tái sử dụng mô hình Nhóm đã xây dựng
1 website để hiển thị kết quả dự báo khả năng trả nợ quá hạn trên 90 ngày của khách hang Cán bộ ngân hang có thể nhập các thông số của khách hàng và website sẽ đưa ra kết quả
dự báo về khả năng trả nợ của khách hàng
Website được xây dựng giao diện bằng thư viện streamlit có giao diện như bên dưới đây
5 Kết luận
Bài toán đánh giá rủi ro trả nợ quá hạn của khách hàng là một trong những bài toán rất phổ biến và có tính thực tiễn, quan trọng trong ngành ngân hàng Cũng chính vì lý do này, nhóm nghiên cứu đã quyết định lựa chọn đề tài cuối kỳ liên quan đến rủi ro tín dụng dựa trên bộ dữ liệu được lấy từ một cuộc thi trên Kaggle mang tên “Give me some credit” Thông qua bài nghiên cứu, các thành viên trong nhóm đã có cơ hội nghiên cứu và thực
Trang 23hành tất cả các giai đoạn của một dự án về phân tích dữ liệu bao gồm: thu thập dữ liệu, tìm hiểu dữ liệu, làm sạch dữ liệu, xây dựng mô hình, tối ưu và đánh giá mô hình, kiểm thử,
… Các kiến thức đã được học trong bộ môn đều được áp dụng xuyên suốt quá trình thực hiện dự án Nhóm cũng đã xây dựng một website để người dùng có thể thực hành dự báo kết quả dựa trên những dự liệu đầu vào Sau cùng, mặc dù đây là một bài toán thực tế, tuy nhiên vì lý bảo mật dữ liệu nên các số liệu thực tế của ngành ngân hàng rất khó tiếp cận,
do vậy, khi áp dụng những ngiên cứu trong dự án này vào thực tế chắc chắn sẽ còn những điểm cần nghiên cứu cũng như xử lý thêm để tối ưu và phù hợp với thực tiễn
TÀI LIỆU THAM KHẢO
[1] Gurarie, E (n.d.) GLM: Logistic Regression and Model Selection Retrieved from University of Maryland
[2] Generalized Linear Models With Examples in R-Springer - Peter K Dunn · Gordon K Smyth [3] https://docs.python.org/3/library/re.html
[3] https://www.kaggle.com/c/GiveMeSomeCredit/discussion
[4] approach-4899757d0bcb
https://medium.com/@MLJARofficial/give-me-some-credit-machine-learning-[6] Mô hình hồi quy và Khám phá Khoa học - GS Nguyễn Văn Tuấn
[7] Jason Brownlee-Machine Learning Mastery with Python 2016
[8] Christopher M Bisho- Pattern Recognition and Machine Learning