Tải bản đầy đủ (.pdf) (23 trang)

môn học phát triển phần mềm nâng cao cho tính toán khoa học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.38 MB, 23 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b> ĐẠ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 </b>

<small> ---***--- </small>

<b>Môn học: Phát triển phần mềm nâng cao cho tính tốn khoa học </b>

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

<i><small>Hà Nội, tháng 07 năm 2021 </small></i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<i><small>2.2.1. Giải quyết các missing value ... 11 </small></i>

<i><small>2.2.2. Xác định các đặc điểm thống kê của dữ liệu ... 12 </small></i>

<i><small>2.2.3. Phân tích tương quan giữa các biến độc lập ... 13 </small></i>

<i><small>2.2.4. Giải quyết giá trị bất thường (outlier) ... 13 </small></i>

<b><small>3. Xây dựng mơ hình ... 20 </small></b>

<b><small>3.1 Xây dựng baseline model ... 20 </small></b>

<b><small>3.2 Tối ưu mơ hình GradientBoosting và đánh giá kết quả ... 20 </small></b>

<b><small>4. Xây dựng demo webapp ... 22 </small></b>

<b><small>5. Kết luận ... 22 </small></b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>1. Giới thiệu </b>

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 tồ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ự đố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ợ q 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.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>2. Khám phá dữ liệu </b>

<i><b>2.1. Khám phá các thuộc tính của bộ dữ liệu </b></i>

Bộ dữ liệu này có 11 thuộc tính như sau:

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Từ 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.

<i>2.2.2. RevolvingUtilizationOfUnsecuredLines </i>

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.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<i>2.2.3. Age </i>

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.

<i>2.2.4. NumberOfTime30-59DaysPastDueNotWorse </i>

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.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Số 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.

<i>2.2.5. DebtRatio </i>

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.

<i>2.2.6. MonthlyIncome </i>

Thuộc tính này biểu thị thu nhập hàng tháng

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="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 q rõ ràng.

<i>2.2.7. NumberOfOpenCreditLinesAndLoans </i>

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.

<i>2.2.8. NumberOfTimes90DaysLate </i>

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.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Số 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.

<i>2.2.9. NumberRealEstateLoansOrLines </i>

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.

<i>2.2.10. NumberOfTime60-89DaysPastDueNotWorse </i>

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.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Số 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.

<i>2.2.11. NumberOfDependents </i>

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ợ q hạn trên 90 ngày càng thấp.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<i><b>2.2. Phân tích dữ liệu </b></i>

<i>2.2.1. Giải quyết các missing value </i>

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.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<i>2.2.2. Xác định các đặc điểm thống kê của dữ liệu </i>

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 – ngồ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.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<i>2.2.3. Phân tích tương quan giữa các biến độc lập </i>

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ợ q hạn trên 60 ngày và trên 90 ngày.

<i>2.2.4. Giải quyết giá trị bất thường (outlier) </i>

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 = <sup> </sup><sub></sub> 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.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="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 ngồ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:

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<small>2.2.4.3.2. Giải quyết outlier của cột Age </small>

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:

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<small>2.2.4.3.3. </small> 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:

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<small>2.2.4.3.4. Giải quyết outlier của cột DebtRatio </small>

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:

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

2.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:

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

2.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:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b>3. Xây dựng mơ hình 3.1 Xây dựng baseline model </b>

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:

<b> Theo đó, phương pháp cho kết quả tốt nhất là GradientBoosting với AUC = 0.8630. </b>

Trong phần tiếp theo, nhóm sẽ thực hiện tối ưu mơ hình này để dự đốn khả năng trả nợ của khách hàng.

<b>3.2 Tối ưu mơ hình GradientBoosting và đánh giá kết quả </b>

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:

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

 'loss' = 'exponential' 'max_depth': 4 'n_estimators': 100

Chạy lại mơ hình <b>GradientBoosting </b>với tham số trên, thu được kết quả AUC = 0.8643, trực quan hóa bằng đường cong ROC như bên dưới.

Nhó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ự đốn với tập dữ liệu test được tóm tắt bằng confusion matrix và classification report như sau

<i>Confusion matrix </i>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<i>Classification report</i>

Dựa vào ma trận trên ta thấy mơ hình dự đố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%.

<b>4. Xây dựng demo webapp </b>

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.

<b>5. Kết luận </b>

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

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

hà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 xun suốt q 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.

<b>TÀI LIỆU THAM KHẢO </b>

[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]

[3]

[4] approach-4899757d0bcb

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

</div>

×