Nghiên cứu xây dựng công cụ xếp hạng tín dụng tự động trong ngân hàng Nghiên cứu xây dựng công cụ xếp hạng tín dụng tự động trong ngân hàng Nghiên cứu xây dựng công cụ xếp hạng tín dụng tự động trong ngân hàng luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN THỊ THU HIỀN NGHIÊN CỨU XÂY DỰNG CÔNG CỤ XẾP HẠNG TÍ N DỤNG TỰ ĐỘNG TRONG NGÂN HÀ NG LUẬN VĂN THẠC SĨ KỸ THUẬT CÔNG NGHỆ THÔNG TIN Hà Nội – 2017 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN THỊ THU HIỀN NGHIÊN CỨU XÂY DỰNG CÔNG CỤ XẾP HẠNG TÍ N DỤNG TỰ ĐỘNG TRONG NGÂN HÀ NG Chuyên ngành: CÔNG NGHỆ THÔNG TIN LUẬN VĂN THẠC SĨ KỸ THUẬT CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS VŨ VĂN THIỆU Hà Nội - 2017 LỜI CAM ĐOAN Những kiến thức trình bày luận văn tơi tìm hiểu, nghiên cứu trình bày theo kiến thức tổng hợp cá nhân Kết nghiên cứu luận văn chưa công bố cơng trình khác Trong q trình làm luận văn, tơi có tham khảo tài liệu có liên quan ghi rõ nguồn tài liệu tham khảo Tơi xin cam đoan cơng trình nghiên cứu không chép Tơi xin chịu hồn tồn trách nhiệm, sai, tơi xin chịu hình thức kỷ luật theo quy định Hà Nội, ngày 15 tháng năm 2017 Học viên Nguyễn Thị Thu Hiền i LỜI CẢM ƠN Để hoàn thành luận văn này, nhận nhiều động viên, giúp đỡ nhiều cá nhân tập thể Trước tiên, tơi xin bày tỏ lịng biết ơn sâu sắc tới thầy giáo TS Vũ Văn Thiệu - Giảng viên trường Đại học Bách Khoa Hà Nội tận tình hướng dẫn, tạo điều kiện thuận lợi cho tơi nghiên cứu khoa học giúp tơi hồn thành luận văn cách tốt Tơi xin gửi lời cảm ơn tới Thầy cô, anh chị em bạn trường đại học Bách Khoa giúp đỡ tơi suốt q trình học tập nghiên cứu Cuối xin gửi lời cám ơn đến gia đình, bạn bè, người ln bên tơi, động viên khuyến khích tơi trình thực đề tài nghiên cứu Học viên Nguyễn Thị Thu Hiền ii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii DANH MỤC HÌNH ẢNH v DANH MỤC BẢNG BIỂU vi MỞ Đ U CHƢƠNG I KHÁI QUÁT VỀ NGHIỆP VỤ XẾP HẠNG TÍN DỤNG TRONG NGÂN HÀNG 1.1 Thị trường tài .3 1.1.1 Khái niệm 1.1.2 Vai trò thị trường tài kinh tế 1.2 Tín dụng ngân hàng 1.2.1 Khái niệm tín dụng ngân hàng 1.2.2 Đặc điểm hoạt động tín dụng ngân hàng 1.2.3 Quy trình tín dụng ngân hàng 1.2.4 Rủi ro tín dụng 1.3 Nghiệp vụ xếp hạng tín dụng ngân hàng 1.3.1 Tổng quan xếp hạng tín dụng 1.3.2 Thang đo phân loại tín dụng dài hạn 1.3.3 Đối tượng xếp hạng tín dụng 10 1.3.4 Tầm quan trọng xếp hạng tín dụng 10 1.3.5 Mục đích xếp hạng tín dụng 11 1.3.6 Ngun tắc quy trình xếp hạng tín dụng 11 1.3.6.1 Các nguyên tắc xếp hạng tín dụng 11 1.3.6.2 Quy trình xếp hạng tín dụng 12 1.4 Các mô hình xếp hạng tín dụng áp dụng Việt Nam 13 1.4.1 Mơ hình số Z (Z-score) Altman .14 1.4.2 Mơ hình Zeta 17 CHƢƠNG II: CƠ SỞ LÝ THUYẾT CHO BÀI TỐN XẾP HẠNG TÍN DỤNG 19 2.1 Tổng quan khai phá liệu .19 2.1.1 Khái niệm .19 2.1.2 Quá trình khai phá liệu .19 2.1.3 Các dạng liệu khai phá 21 2.1.4 Một số phương pháp luận phân tích dự đoán .21 2.2 Các phương pháp khai phá liệu .22 iii 2.2.1 Phương pháp phân lớp (classification) 22 2.2.2 Phân lớp liệu với định 24 2.2.2.1 Khái niệm 24 2.2.2.2 Giải thuật xây dựng định 25 2.2.2.3 Cắt tỉa định 29 2.2.2.4 Ví dụ thuật toán dựng định C 4.5 .31 2.3 Đánh giá hiệu suất phân lớp 34 2.3.1 Một số thuật ngữ 34 2.3.2 Ma trận nhầm lẫn 35 2.3.3 Kỹ thuật bootstrap 37 2.3.4 So sánh phân lớp đường cong ROC 38 2.4 Phương pháp, kỹ thuật cải thiện độ xác phân lớp 41 2.4.1 Phương pháp quần thể 41 2.4.2 Kỹ thuật Bagging 42 CHƢƠNG III XÂY DỰNG CƠNG CỤ THỰC HIỆN XẾP HẠNG TÍN DỤNG TỰ ĐỘNG CHO NGÂN HÀNG 43 3.1 Giới thiệu toán 43 3.2 Sử dụng Matlab để thực xếp hạng tín dụng tự động 44 3.2.1 Bước 1: nạp liệu xếp hạng có 44 3.2.2 Bước 2: xây dựng phân lớp công cụ Tree Bagger .46 3.2.3 Bước 3: phân lớp liệu 51 3.2.4 Bước 4: kiểm tra lại - đánh giá kết phân lớp 53 3.2.4.1 So sánh xếp hạng dự đoán xếp hạng thực tế 54 3.2.4.2 So sánh xếp hạng thực tế số vụ vỡ nợ năm 57 3.3 Thực xếp hạng tín dụng tự động ngơn ngữ Java .61 3.3.1 Bước 1: tìm hiểu thư viện Java Machine Learning 61 3.3.2 Bước 2: xây dựng định C4.5 .62 3.3.3 Bước 3: xây dựng quần thể định hàm Bagging 62 3.3.4 Bước 4: load liệu 63 3.3.5 Bước 5: thực thi code 63 3.4 Hiển thị kết phân lớp so sánh .64 KẾT LUẬN 66 DANH MỤC TÀI LIỆU THAM KHẢO 67 iv DANH MỤC HÌNH ẢNH Hình 1: Mơ hình thị trường tài Hình 2: Quá trình khai phá liệu 19 Hình 3: Quá trình phân lớp pha 23 Hình 4: Ví dụ mơ hình định điển hình 24 Hình 5: Thuộc tính phân chia giá trị rời rạc 28 Hình 6: Thuộc tính phân chia giá trị liên tục 28 Hình 7: Thuộc tính phân chia giá trị rời rạc định nhị phân 29 Hình 8: Cây trước cắt tỉa 30 Hình 9: Cây sau cắt tỉa 31 Hình 10: Cơ sở liệu giả lập cho ví dụ dựng C 4.5 32 Hình 11: Tính Information Gain thuộc tính MTV_BVTD 33 Hình 12: Mơ hình phân hoạch định C 4.5 34 Hình 13: Biểu đồ đường cong ROC∙ 40 Hình 14: Biểu đồ đường cong ROC gồm mơ hình 40 Hình 15: Mơ hình phương pháp quần thể 41 Hình 16: Sai số phân lớp với kích thước khác 48 Hình 17: Mức độ quan trọng thuộc tính 49 Hình 18: Sai số phân lớp với tập biến độc lập khác 50 Hình 19: So sánh xếp hạng dự đoán thực tế 56 Hình 20: Biểu đồ độ xác tích lũy 59 Hình 21: Biểu đồ độ xác tích lũy xếp hạng thực tế dự đoán 60 Hình 22: Kết phân lớp liệu cho quần thể 25 với kích thước tối thiểu 10 65 v DANH MỤC BẢNG BIỂU Bảng 1: Hệ thống ký hiệu xếp hạng tín dụng Bảng 2: Quyết định cấp tín dụng ngân hàng dựa thứ hạng khách hàng Bảng 3: Biểu diễn ma trận nhầm lẫn 35 Bảng 4: Ví dụ tính tốn ma trận nhầm lẫn 36 Bảng 5: Bảng giá trị tỷ lệ để vẽ đường cong ROC .39 Bảng 6: Dữ liệu đầu vào khách hàng 45 vi MỞ Đ U Ngân hàng xem cầu nối luân chuyển vốn kinh tế, tồn phát triển ngành ngân hàng có ảnh hưởng lớn đến thị trường tài kinh tế đất nước Kinh doanh ngân hàng hoạt động kinh doanh loại hàng hóa đặc biệt – hàng hóa tiền tệ, tiềm n nhiều rủi ro Rủi ro có quan hệ mật thiết với lợi nhuận, nơi có rủi ro cao nơi hứa hẹn có lợi nhuận cao ngược lại Việc nhận biết, quản l đo lường rủi ro khâu quan trọng Trong hoạt động kinh doanh ngân hàng rủi ro tín dụng loại rủi ro phức tạp nhất, có ngh a quan trọng bậc việc định tồn phát triển ngân hàng, việc quản l phịng ngừa khó khăn, rủi ro tín dụng sảy đâu, với khách hàng không phát xử l kịp thời nảy sinh rủi ro khác Hiện nhiều ngân hàng Việt Nam gặp phải khó khăn dư nợ tín dụng tăng, nợ xấu tăng, khách hàng tốt hoạt động cho vay ngân hàng trở nên hiệu quả, họ đánh giá sai khách hàng th m định cấp tín dụng, dẫn đến số ngân hàng có nguy vốn cao, giảm lợi nhuận uy tín, số phải sát nhập, giải thể hay vi phạm pháp luật Hơn để đáp ứng nhu cầu tăng vốn cho việc mở rộng sản xuất kinh doanh, cải tiến trang thiết bị kỹ thuật, nâng cao công nghệ nhu cầu khác phục vụ sản xuất kinh doanh ngân hàng ln phải mở rộng quy mơ hoạt động tín dụng, điều có ngh a rủi ro tín dụng phát sinh nhiều Trong số nguyên nhân chủ quan dẫn đến rủi ro tín dụng với tỉ lệ nợ xấu cao kể phương pháp xếp hạng tín dụng nội chủ yếu dựa vào nhân tố định tính, xếp hạng tín dụng không đánh giá cập nhật thường xuyên, cấu quản trị nội chức kiểm toán nội yếu k m, giá trị tài sản chấp bị phóng đại thiếu quy trình định giá độc lập liên tục, thiếu hệ thống cảnh báo sớm để dấu hiệu nợ có vấn đề Càng phụ thuộc nhiều vào nhân tố định tính quy trình th m định tín dụng có nhiều rủi ro ngân hàng có khả thu hồi nợ Mặt khác, bối cảnh ứng dụng công nghệ thông tin ngày tăng, liệu phát sinh từ hoạt động quản l , kinh doanh ngân hàng lưu lại ngày nhiều, ngân hàng cần phải nhanh chóng đưa định cách xử lý nhiều yếu tố với quy mơ tính phức tạp ngày tăng Để có định xác th m định phê duyệt cấp hồ sơ tín dụng, cán tín dụng cần thường xuyên thực việc phân tích, dự đoán hay phân loại vấn đề cần giải trước định Điều địi hỏi phải có giải pháp thơng minh để tự động hố việc phân tích liệu, với lượng lớn liệu vậy, dẫn đến nhu cầu thực tế cần có phương pháp khai phá liệu thu thập để làm định, điều chắn phương pháp rút trích thông tin đáng giá n chứa tập liệu quan trọng không xác định liệu nằm đâu mà phải trích xuất hiểu biết thực tế khách hàng để đưa định tốt uất phát từ vấn đề gặp phải ngân hàng thương mại trình bày trên, việc xây dựng cơng cụ xếp hạng tín dụng tự động khơng hỗ trợ ngân hàng thương mại có công cụ giúp dễ dàng phân loại, dự đoán rủi ro cho khoản vay để x t duyệt, định cấp hồ sơ tín dụng; mà cịn công cụ tư vấn, thống kê, phân loại nợ trung thực giúp nhà quản trị ngân hàng thương mại có định hướng chiến lược kinh doanh rõ ràng, hạn chế ngăn ngừa nhiều rủi ro, áp dụng phù hợp cho đối tượng khách hàng theo tiêu chí khác Chính lý mà chọn đề tài Nghiên cứu xây dựng cơng cụ xếp hạng tín dụng tự động ngân hàng làm đề tài luận văn Nội dung luận văn gồm phần: Chƣơng I: Khái quát nghiệp vụ xếp hạng tín dụng ngân hàng Chƣơng II: Cơ sở lý thuyết cho toán xếp hạng tín dụng Chƣơng III: Xây dựng cơng cụ thực xếp hạng tín dụng tự động ngân hàng điểm số phân lớp tương ứng với số thông tin khác thông tin tình hình kinh tế để định kết xếp hạng cuối Thứ hai, xếp hạng thực tế đánh giá khách hàng dựa vào mức tín nhiệm họ tốt đến đâu Điều tiến hành phân tích thực trước đây, năm, mà ta biết doanh nghiệp bị vỡ nợ năm File liệu CreditRating_ExPost.dat chứa liệu tiếp nối doanh nghiệp đánh giá phần trước nạp vào mảng exPostData Nó bao gồm xếp hạng thực tế ủy ban tín dụng doanh nghiệp này, ngồi cịn có thêm cờ trạng thái vỡ nợ (default flag) cho biết doanh nghiệp tương ứng có xảy vỡ nợ vòng năm kể từ đánh giá hay khơng Cờ có giá trị doanh nghiệp bị vỡ nợ, doanh nghiệp không bị vỡ nợ exPostData = readtable('CreditRating_ExPost.dat'); Nếu phiên làm việc Matlab, trước đọc liệu từ file CreditRating_ExPost.dat, ta cần nạp lại liệu xếp hạng dự đoán lưu vào mảng predDS lệnh sau : predDS = readtable('PredictedRatings.dat') 3.2.4.1 So sánh xếp hạng dự đ nv ếp hạng thực tế Mục đích cho việc huấn luyện phân lớp tự dộng để đ y nhanh tiến độ làm việc ủy ban tín dụng Xếp hạng dự đốn xác ủy ban phải dành thời gian cho việc đánh giá kết dự đốn nhiêu Có thể hiểu ủy ban muốn kiểm tra thường xuyên mức độ tương đồng xếp hạng dự đoán xếp hạng cuối họ để định xem có nên đưa đề xuất huấn luyện lại phân lớp tự động hay khơng (có thể bổ sung thêm thuộc tính mới) tồn bất cân xứng chúng Công cụ ta dùng để so sánh xếp hạng dự đoán thực tế ma trận nhầm lẫn (được cung cấp công cụ thống kê học máy Matlab) Để tạo ma trận nhầm lẫn ta sử dụng hàm confusionmat với liệu đầu vào xếp hạng thực tế, xếp hạng dự đoán k hiệu xếp hạng có thứ tự sau : 54 C = confusionmat(exPostData.Rating,predDS.PredRating, 'order',{'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'}) C = 203 13 0 0 110 20 0 0 18 154 32 0 0 26 248 48 0 0 39 229 17 0 0 46 44 0 0 43 Các cột i tương ứng với xếp hạng dự đốn, cịn hàng j ma trận C tương ứng với xếp hạng thực tế Giá trị ví trí (i, j) ma trận cho biết có khách hàng nhận thứ hạng thực tế i có thứ hạng dự đốn tương ứng j Ví dụ, vị trí (4,3) tức cột – dịng cho biết có 48 khách hàng xếp hạng BBB ủy ban tín dụng dự đoán xếp hạng A phân lớp tự động Các giá trị ma trận cịn chuyển sang dạng phần trăm lệnh sau: Cperc = diag(sum(C,2))\C Cperc = 0.9398 0.0602 0 0 0.0580 0.7971 0.1449 0 0 0.0882 0.7549 0.1569 0 0 0.0031 0.0805 0.7678 0.1486 0 0 0.1368 0.8035 0.0596 0 0 0.0108 0.4946 0.4731 0.0215 0 0 0.1731 0.8269 Những giá trị nằm đường chéo ma trận cho thấy mức độ đồng xếp hạng dự đoán xếp hạng thực tế Các giá trị cao gần mức độ đồng cao (bằng l tưởng, tức đồng hồn tồn, xếp hạng dự đốn hồn tồn trùng khớp xếp hạng thực tế) Trong trường hợp này, ta thấy bất đồng lớn lớp B có khoảng nửa số khách hàng xếp hạng B ủy ban dự đoán xếp hạng BB phân lớp 55 Ma trận nhầm lẫn sử dụng để so sánh đánh giá nội với đánh giá bên thứ ba Điều thường diễn thực tế Với đánh giá cụ thể, ta sử dụng ph p đo khác đồng xếp hạng dự đốn xếp hạng thực tế, đường cong ROC (Receiver Operating Characteristic) Để vẽ đường cong này, ta sử dụng hàm perfcurve công cụ thống kê học máy Matlab kiểm tra phần diện tích phía đường cong Hàm perfcurve nhận xếp hạng thực tế đối số, chu n mực so sánh, hay tiêu chu n mà ta so sánh Ví dụ điểm số phân lớp lớp BBB xác định trình xếp hạng tự động Bây ta xây dựng đường cong ROC tính diện tích phía lớp BBB [xVal,yVal,~,auc] = perfcurve(exPostData.Rating,predDS.BBB,'BBB'); plot(xVal,yVal); xlabel('Tỷ lệ sai khẳng định '); ylabel('Tỷ lệ khẳng định '); text(0.5,0.25,strcat('AUC=',num2str(auc)),'EdgeColor','k'); title('Đường cong ROC lớp BBB, so sánh xếp hạng dự đoán xếp hạng thực tế'); Hình 19: So sánh xếp hạng dự đoán thực tế 56 Đường cong ROC xây dựng sau: Với khách hàng, phân lớp tự động trả điểm số phân lớp tương ứng với mức xếp hạng tín dụng, trường hợp lớp BBB hiểu điểm số phân lớp cho biết khả khách hàng xếp hạng BBB Để xây dựng đường cong ROC, ta cần thay đổi ngưỡng phân lớp Đó mức điểm số tối thiểu để xếp khách hàng vào nhóm BBB Nói cách khác, ngưỡng phân lớp t ta xếp khách hàng vào nhóm BBB điểm số phân lớp BBB họ lớn ngưỡng t Ví dụ, giả sử cơng ty tên AXZ có điểm số phân lớp BBB 0,87 Nếu xếp hạng thực tế cơng ty AXZ BBB AXZ xếp hạng BBB ngưỡng không vượt 0,87 Đây trường hợp khẳng định làm tăng độ nhạy phân lớp Với ngưỡng lớn 0,87, công ty không xếp hạng BBB trường hợp sai phủ định Bây giả sử xếp hạng thực tế cơng ty XYZ BB không xếp hạng BBB với ngưỡng lớn 0,87 Đây trường hợp phủ định làm tăng độ đặc hiệu phân lớp Tuy nhiên, với ngưỡng khơng q 0,87 trường hợp sai khẳng định (vì cơng ty Z dự đoán xếp hạng BBB xếp hạng thực tế BB) Đường cong ROC xây dựng cách đánh dấu biểu đồ theo tỷ lệ khẳng định (độ nhạy) với sai khẳng định (độ đặc hiệu) ngưỡng biến thiên khoảng từ đến Phần diện tích phía đường cong ROC gọi AUC (Area under the curve) Giá trị AUC gần độ xác phân lớp cao Bộ phân lớp hồn hảo có AUC Trong biểu đồ ta thấy AUC 0,94575 đủ cao, việc có cần phải đề xuất cải thiện thêm phân lớp tự động hay khơng cịn tùy thuộc vào định ủy ban tín dụng 3.2.4.2 So sánh xếp hạng thực tế số vụ vỡ nợ tr ng nă Công cụ thường dùng để đánh giá việc xếp hạng tín dụng khách hàng độ xác tích lũy (Cumulative Accuracy Profile - CAP) ph p đo tỷ lệ xác tương ứng Nguyên lý hoạt động công cụ đo lường mối quan hệ xếp hạng tín dụng số vụ vỡ nợ quan sát năm Nếu theo logic thông thường thứ hạng cao đồng ngh a với việc số vụ vỡ nợ quan sát Nếu tỷ lệ vỡ nợ khách hàng tất thứ hạng hệ thống xếp hạng giống hệ thống phân lớp mập mờ ngh a hệ thống mà khách hàng xếp hạng cách ngẫu nhiên khơng cần dựa vào mức độ tín nhiệm họ Để xây dựng biểu đồ độ xác tích lũy CAP, ta sử dụng hàm perfcurve Tiêu chu n dùng để so sánh cờ trạng thái vỡ nợ nạp từ 57 file liệu tên CreditRating_ExPost.dat Ở ta sử dụng điểm số giả để biểu thị thứ hạng mức tín nhiệm nằm danh sách xếp hạng Điểm số giả cần thỏa mãn điều kiện với thứ hạng cao điểm thấp (ngh a khách hàng có khả vỡ nợ thấp) Điều kiện thứ hai hai khách hàng có thứ hạng ngang có điểm số giả Trong trường hợp ta khơng cần tính tốn xác suất vỡ nợ để xây dựng biểu đồ CAP ta không xác thực xác suất vỡ nợ Với công cụ ta đánh giá xem việc xếp hạng khách hàng dựa mức tín nhiệm họ tốt đến đâu Thông thường, đường CAP hệ thống đánh giá xem xét (CAPđang_xem_x t) vẽ với đường CAP hệ thống đánh giá hoàn hảo (CAPhồn_hảo) Đó hệ thống giả thuyết thứ hạng thấp bao gồm toàn số khách hàng bị vỡ nợ Phần diện tích phía đường cong hồn hảo độ xác tối đa hệ thống đánh giá (AUChoàn_hảo = 1) Theo quy ước, phần diện tích phía đường CAPđang_xem_x t điều chỉnh cách trừ phần diện tích phía đường CAP hệ thống mập mờ (CAPmập_mờ) CAPmập_mờ đường thẳng đơn giản điểm gốc (0, 0) đến điểm có tọa độ (1, 1) với phần diện tích phía AUCmập_mờ = 0,5 Tỷ lệ xác hệ thống đánh giá xác định tỷ lệ AUC điều chỉnh (AUCđã_điều_chỉnh = AUCđang_xem_x t - AUCmập_mờ) so với độ xác tích lũy tối đa AUCmax (AUCmax = AUChồn_hảo AUCmập_mờ) (24) Biểu đồ độ xác tích lũy xây dựng sau : ratingsList = {'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'}; Nratings = length(ratingsList); dummyDelta = 1/(Nratings+1); dummyRank = linspace(dummyDelta,1-dummyDelta,Nratings)'; D = exPostData.Def_tplus1; fracTotDef = sum(D)/length(D); maxAcc = 0.5 - 0.5 * fracTotDef; R = double(ordinal(exPostData.Rating,[],ratingsList)); S = dummyRank(R); [xVal,yVal,~,auc] = perfcurve(D,S,1); accRatio = (auc-0.5)/maxAcc; fprintf('Accuracy ratio for actual ratings: %5.3f\n',accRatio); xPerfect(1) = 0; xPerfect(2) = fracTotDef; xPerfect(3) = 1; yPerfect(1) = 0; yPerfect(2) = 1; yPerfect(3) = 1; xNaive(1) = 0; xNaive(2) = 1; 58 yNaive(1) = 0; yNaive(2) = 1; plot(xPerfect,yPerfect,' k',xVal,yVal,'b',xNaive,yNaive,'.k'); xlabel('Tỷ lệ tất doanh nghiệp'); ylabel('Tỷ lệ doanh nghiệp bị vỡ nợ'); title('Biểu đồ độ xác tích lũy'); legend({'Hồn hảo','Thực tế','Mập mờ'},'Location','SouthEast'); text(xVal(2)+0.01,yVal(2)-0.01,'CCC') text(xVal(3)+0.01,yVal(3)-0.02,'B') text(xVal(4)+0.01,yVal(4)-0.03,'BB') Hình 20: Biểu đồ độ xác tích lũy Mấu chốt việc đọc thông tin biểu đồ CAP điểm gấp khúc đường CAP đánh dấu thứ hạng CCC, B BB Ví dụ, điểm gấp khúc thứ hai tương ứng với thứ hạng B có tọa độ (0.097, 0.714) có ngh a có 9.7% số khách hàng xếp hạng từ B trở xuống họ chiếm 71.4% số khách hàng bị vỡ nợ quan sát Điểm gấp khúc thứ tương ứng với thứ hạng BB có tọa độ (0.315, 0.96) có ngh a có 31,5% khách hàng xếp hạng từ BB trở xuống họ chiếm 96% số khách hàng bị vỡ nợ quan sát 59 Nhìn chung, tỷ lệ xác nên coi ph p đo có tính chất tương đối tuyệt đối Ví dụ, ta vẽ đường CAP xếp hạng dự đoán đường CAP xếp hạng thực tế vào biểu đồ tính tốn tỷ lệ xác chúng so sánh với sau : Rpred = double(ordinal(predDS.PredRating,[],ratingsList)); Spred = dummyRank(Rpred); [xValPred,yValPred,~,aucPred] = perfcurve(D,Spred,1); accRatioPred = (aucPred-0.5)/maxAcc; fprintf('Tỷ lệ xác xếp hạng dự đoán: %5.3f\n',accRatioPred); plot(xPerfect,yPerfect,' k',xVal,yVal,'b',xNaive,yNaive,'.k', xValPred,yValPred,':r'); xlabel('Tỷ lệ tất công ty'); ylabel('Tỷ lệ cơng ty bị vỡ nợ'); title('Độ xác tích lũy'); legend({'Hồn hảo','Thực tế','Mập mờ','Dự đốn'},'Location','SouthEast'); Hình 21: Biểu đồ độ xác tích lũy xếp hạng thực tế dự đoán 60 Sau chạy lệnh để vẽ biểu đồ CAP, tỷ lệ xác xếp hạng dự đoán thực tế đồng thời trả Tỷ lệ xác xếp hạng dự đốn 0.831 thấp xếp hạng thực tế 0.85 đường CAP xếp hạng dự đoán nằm đường CAP xếp hạng thực tế Điều hợp lý xếp hạng thực tế ủy ban tín dụng đưa sau xem x t kết xếp hạng dự đoán cộng thêm thông tin bổ sung để tinh chỉnh đánh giá xếp hạng 3.3 Thực xếp hạng tín dụng tự động ngơn ngữ Java Ở phần tốn viết Matlab, nhiên Matlab phần mềm thông dịch chạy chậm hàm Matlab đóng gói, gọi hàm truyền cho hàm đầu vào phù hợp, can thiệp sâu vào hàm Matlab để tối ưu thuật toán để cải tiến phân lớp được, điều tơi mở rộng tốn code ngơn ngữ Java Q trình xây dựng phần mềm tự động xếp hạng tín dụng cho ngân hàng thực theo bước sau: 3.3.1 Bƣớc 1: tìm hiểu thƣ viện Java Machine Learning Tìm hiểu thư viện Java Machine Learning (javaml-0.1.7) download từ sourceforge.net Thư viện Java Machine Learning bao gồm: - Một tập thuật toán học máy - Giao diện chung cho loại thuật toán - Thư viện dành cho kyz sư phần mềm lập trình viên, khơng có GUI, giao diện rõ ràng - Tham khảo thực thuật tốn mơ tả tài liệu khoa học - Mã nguồn tốt - Đa dạng có tài liệu hướng dẫn cụ thể Trong package net.sf.javaml sẵn có cấu trúc liệu, class xử lý liệu, số class thực thi thuật toán phân loại khác nhau… Tuy nhiên toán sử dụng thư viện không đủ để đáp ứng mục tiêu ban đầu (là sử dụng định) Do việc đọc hiểu thư viện kế thừa lại code, tùy biến theo mục đích tốn cơng việc chủ yếu mà làm xuyên suốt phần lại 61 3.3.2 Bƣớc 2: xây dựng định C4.5 Cây định chọn C4.5 Class: C45DT C45DT implements interface Classifier (thuộc thư viện) Các phương thức thực thi là: buildClassifier (Dataset), classify (Instance), classDistribution (Instance) Trong đó: + buildClassifier (Dataset): phương thức xây dựng định, gọi hàm dựng trực tiếp decisionTreeLearning (List instances, List attributes, List parentInstances) Hàm thực thuật toán dựng định C4.5, trả kiểu Node + classify (Instance): phương thức dùng để phân loại đối tượng có định + classDistribution (Instance): hàm để trống không thực thi Một số hàm sử dụng trình dựng cây: - pluralityValue(List): hàm trả kiểu String, giá trị lớp chiếm đa số tập thể (instances) - unanimousLabel(List)): hàm trả boolean, true instance tập đồng – nhãn lớp, false tập có instance có nhãn lớp khác - bestAttribute(List), List)): trả kiểu Attribute, thuộc tính phân loại tập tốt lúc - gain(List instances, Attribute attribute): trả double, giá trị Information Gain lớn thuộc tính, lựa chọn điểm phân chia giá trị thuộc tính (đối với thuộc tính có giá trị liên tục – numeric) - entropy(List instances): trả entropy tập instances - conditionalEntropy(List instances, Attribute attribute, double split): trả entropy có điều kiện – tức biết thuộc tính phân chia attribute giá trị phân chia split - getClassDistribution(List instances): trả HashMap với key giá trị class, value số lần xuất nhãn tập 3.3.3 Bƣớc 3: xây dựng qu n thể định hàm Bagging Sử dụng kỹ thuật Baggging (Bootstrap Aggregation), thực thi class tên thư viện Java Mechine Learning Bagging lấy đầu vào tập Classifier (ở quần thể c4.5), biến enum – dùng để xác định kiểu Bootstrap, số ngẫu nhiên kiểu long – dùng q trình bootstrap Trong Bagging có 62 phương thức classDistribution (Instance) dùng để trả HashMap chứa key giá trị lớp, value tần số xuất lớp tương ứng xác định classifier Class Bagging kế thừa phương thức classify AbstractClassifier, trả giá trị lớp bầu nhiều quần thể (có value lớn HashMap trả classDistribution) 3.3.4 Bƣớc 4: load liệu Xây dựng phương thức load liệu: Phương thức có dạng load (Reader in, int classIndex, String separator): phương thức trả Dataset danh sách Instance Mỗi instance gồm mảng values[] lưu trữ trường giá trị thuộc tính, trường Object classValue() – nhãn lớp ghi Nếu classIndex=-1 tức tập liệu tập test classValue có giá trị null 3.3.5 Bƣớc 5: thực thi code Load liệu từ tập lịch sử (training set) Dataset historycalData = C45DT.load(new InputStreamReader(new FileInputStream(new File("data/CreditRating_Historical.dat"))), 7, ","); Khai báo quần thể định C4.5 với số quần thể 20, 50, 100 Số quần thể nhiều khả phân lớp xác quần thể cao Kích thước tối thiểu 5, 10 hay 15 Kích thước nhỏ làm lớn khơng xác kích thước lớn – định đơn giản tránh overfitting – khớp liệu int[] treeCount = {25, 50, 100}; int[] leafSize = {5, 10, 15}; C45DT[] c45Forest = new C45DT[treeCount[0]]; for (int i = 0; i < c45Forest.length; i++) { c45Forest[i] = new C45DT(leafSize[1]); } Khởi tạo đối tượng Bagging với quần thể c45Forest, phương pháp Bootstrap NormalBootstrapping, số ngẫu nhiên kiểu long sinh từ đối tượng Random rg Random rg = new Random();Bagging bagger = new Bagging(c45Forest, Sampling.NormalBootstrapping, rg.nextLong()); Tiến hành dựng quần thể định, kỹ thuật Bagging tập historycalData Hàm buildClassifier tiến hành bootstrap dựng lên C4.5 quần thể bagger.buildClassifier(historycalData); 63 Nạp liệu mới, liệu chưa phân loại nhãn lớp nên classIndex có giá trị -1 Dataset newData = C45DT.load(new InputStreamReader(new FileInputStream(new File("data/CreditRating_NewCompanies.dat"))), -1, ","); Nạp liệu kiểm tra exPostData = C45DT.load(new InputStreamReader(new FileInputStream(new File("data/CreditRating_ExPost.dat"))), 1, ","); Đọc kết Matlab MyDataset matlabPredicted = C45DT.load(new InputStreamReader(new FileInputStream(new File("D:\\Credit_Rating\\data\\PredictedRatings.dat"))), 1, ","); Tiến hành phân loại tập liêu đối chiếu, so sánh kết với Matlab //hàm get MalabRatio lấy kết matlab trả double matlabRatio = getMatlabRatio(matlabPredicted, result); int correct = 0, wrong = 0; HashMap result = new HashMap(); for (Instance i:exPostData) { result.put(i.value(0), i.classValue()); } int correct = 0, wrong = 0; for (Instance inst : newData) { Object predictedClassValue = bagger.classify(inst); Object realClassValue = result.get(inst.value(0)); if (predictedClassValue.equals(realClassValue)) correct++; else wrong++; } System.out.println("\nCorrect predictions " + correct); System.out.println("Wrong predictions " + wrong); System.out.println("Matlab correct ratio: "+matlabRatio); System.out.println("Java treebagger correct ratio: "+(correct*1.0/(correct+wrong))); 3.4 Hiển thị kết phân lớp so sánh Sau tiến hành phân loại tập liệu (trong mục 3.3.5) cho quần thể gồm có 25 định, kích thước tối thhiểu chọn 10, ta thu kết phân lớp hình 22: Số dự đốn xếp hạng đúng: 984 Số dự đoán xếp hạng sai: 327 Tỷ lệ thành công Matlab: 0.7864225781845919 Tỷ lệ thành công Java: 0.7505720823798627 64 Hình 22: Kết phân lớp liệu cho quần thể 25 với kích thước tối thiểu 10 Sau nhiều lần thử với kích thước khác với số khác quần thể ta thấy kết độ xác phân lớp Matlab Java chênh lệch không nhiều rơi vào khoảng 3% thu được: Tỷ lệ thành công dùng hàm treebagger Matlab khoảng 78% Tỷ lệ thành công dùng hàm treebagging Java khoảng 75% 65 KẾT LUẬN Kết luận văn xây dựng cơng cụ xếp hạng tín dụng tự động cho ngân hàng Trước tiên, tác giả tìm hiểu trình bày chương lý thuyết thị trường tài chính, tìm hiểu mơ hình quản trị rủi ro, hoạt động kinh doanh ngân hàng, quản trị rủi ro tín dụng, nghiệp vụ tín dụng, quy trình xếp hạng tín dụng khách hàng tác giả thấy thực tế ngân hàng Việt Nam gặp nhiều khó khăn rủi ro việc th m định, cấp tín dụng, quy trình xếp hạng tín dụng khách hàng doanh nghiệp chưa tuân theo nhân tố định lượng, chưa tuân theo chu n chung nhất, việc xếp hạng tín dụng chủ yếu dựa vào nội ngân hàng quan đánh giá tín dụng theo phương pháp chấm điểm tín dụng chủ yếu dựa vào nhân tố định tính, phụ thuộc nhiều vào yếu tố đạo đức người Chính có nhiều ngân hàng gặp phải rủi ro hoạt động tín dụng khơng có nhiều hội tốt để phát triển hệ thống Sau đó, tác giả tìm hiểu k lý thuyết sở liên quan đến toán phân loại mà tác giả trình bày chương 2, tác giả tổng hợp nêu phương pháp phân lớp liệu với định cho toán xếp hạng tín dụng, nghiên cứu tập trung vào việc sử dụng kết hợp kỹ thuật bagging thuật toán định c4.5 để học có giám sát tập liệu khách hàng lịch sử đưa mơ hình phân loại dự đốn rủi ro tín dụng cho khách hàng Cuối cùng, tác giả xây dựng cơng cụ xếp hạng tín dụng tự động dựa Matlab, sau mở rộng xây dựng ngôn ngữ Java Thành công nghiên cứu hỗ trợ đưa hệ thống phân loại khách hàng vay vốn Trong tương lai để cải tiến k thuật, tác giả mong muốn việc nghiên cứu tiếp tục với định hướng: dùng kỹ thuật mạnh đại học máy có tên gọi tiếng anh deep learning Thuật toán tập trung giải vấn đề liên quan đến mạng thần kinh nhân tạo giúp cải tiến phương pháp học nhanh nhằm xây dựng cơng cụ xếp hạng tín dụng tự động tốt 66 DANH MỤC TÀI LIỆU THAM KHẢO [1] Edward I Altman, Predicting Financial Distress of Companies: Revisting the Z-Score and ZETA Models, Newjork University, 2000, July From: http://pages.stern.nyu.edu/~ealtman/Zscores.pdf [2] Altman, E., R Haldeman, and P Narayanan “ZETA Analysis: A New Model to Identify Bankruptcy Risk of Corporations.” Journal of Banking & Finance 1, 1977, No 1(June): 29–54 From: http://people.stern.nyu.edu/ealtman/ZETA-Analysis.pdf [3] N V Tiến, u n tr rủi ro kinh doanh ngân h ng, N B Thống Kê, 2010 [4] L T Dương, Giáo trình nghiệp vụ ngân hàng, năm 2006 [5] Nhiều tác giả, Giáo trình thẩm đ nh tín dụng, NXB kinh tế TP HCM, 2014 [6] Cẩm nang xếp hạng tín dụng, ngân hàng Ngoại Thương [7] Jiawei Han, Micheline Kamber, Data Mining, University of Illinois at UrbanaChampaign, 2006 [8] N N Quang, Học máy, Đại học Bách Khoa Hà Nội, 2016-2017 [9] Kristína M., František B., Peter B., A Bagging Method using Decision Trees in the Role of Base Classifiers, Technical University, Letná, 2006 [10] Trang thông tin: http://crvietnam.com [11] Trang thông tin: https://cic.org.vn [12] Trang thông tin: http://www.mathworks.com [13] Trang thông tin: http://java-ml.sourceforge.net/content/classification-basic 67 ... xếp hạng tín dụng ngân hàng Chƣơng II: Cơ sở lý thuyết cho toán xếp hạng tín dụng Chƣơng III: Xây dựng cơng cụ thực xếp hạng tín dụng tự động ngân hàng CHƢƠNG I KHÁI QUÁT VỀ NGHIỆP VỤ XẾP HẠNG TÍN... niệm tín dụng ngân hàng 1.2.2 Đặc điểm hoạt động tín dụng ngân hàng 1.2.3 Quy trình tín dụng ngân hàng 1.2.4 Rủi ro tín dụng 1.3 Nghiệp vụ xếp hạng tín dụng ngân hàng. .. nên việc xếp hạng xuyên suốt thực đánh giá mức tín nhiệm khách hàng theo thứ hạng tín dụng Mục tiêu luận văn xây dựng công cụ xếp hạng tín dụng tự động cho ngân hàng Bước thứ tơi xây dựng chương