Loan Prediction : Machine Learning กับการอนุมัติสินเชื่อ

Alex
8 min readNov 21, 2021

--

ที่มา: https://www.homeloan.in.th/images/banner-homeloan.jpg

บทความนี้เป็นส่วนของหนึ่งของโครงงานวิชา Data Science for Business จากนักศึกษาคณะเทคโนโลยีสารสนเทศ สาขาวิทยาการข้อมูลและการวิเคราะห์เชิงธุรกิจสถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง

สินเชื่อส่วนบุคคล หรือที่เรียกกันว่า “เงินกู้ธนาคาร” คือการกู้เงินสดเป็นก้อน เพื่อที่จะนำไปใช้ประโยชน์ตามที่ผู้กู้ต้องการ โดยทางธนาคารสินเชื่อส่วนบุคคล หรือสถาบันเงินกู้ธนาคาร จะเป็นผู้ออกเงินกู้ให้ จากนั้นมีการคิดดอกเบี้ยตามระยะเวลาที่ผ่อนคืน โดยวงเงินสินเชื่อที่จะอนุมัติให้นั้น โดยทั่วไปจะมีอัตราสูงสุดอยู่ที่ประมาณ 5 เท่าของรายได้ต่อเดือนของคุณ หรือตามมูลค่าของสินทรัพย์ที่นำมาค้ำประกันเอาไว้สำหรับสินเชื่อเงินก้อนครับ

อ้างอิงข้อมูลจาก CondoNewb

ข้อดีของสินเชื่อส่วนบุคคล

สินเชื่อส่วนบุคคลมีระยะเวลาในการผ่อนชำระค่อนข้างยาวนานมากครับ โดยอาจจะผ่อนได้มากถึง 60 เดือน เรียกได้ว่าผ่อนชำระได้แบบสบาย ๆ ยาว ๆ ไปเลย เนื่องจากยอดชำระแต่ละเดือนนั้นค่อนข้างไม่สูงมาก คุณยังสามารถลดดอกเบี้ยได้ถ้าคุณสามารถชำระได้มากกว่ายอดชำระขั้นต่ำในแต่ละเดือน เพราะทั่วไปแล้วสินเชื่อส่วนบุคคลจะเป็นดอกเบี้ยแบบลดต้นลดดอก นั่นคือ “เงินต้นน้อยลงเท่าไหร่ ดอกเบี้ยก็จะน้อยลงตามไปด้วย”

ข้อเสียของสินเชื่อส่วนบุคคล

แน่นอนครับว่าอะไรที่มันมีข้อดีย่อมมีข้อเสียด้วยบ้าง เช่นเดียวกันกับสินเชื่อส่วนบุคคล คืออัตราดอกเบี้ยของสินเชื่อส่วนบุคคลค่อนข้างสูงมากๆ ประมาณ 28% ต่อปี ถือว่าสูงที่สุดในหมู่สินเชื่อทุกประเภทที่มี และเนื่องด้วยการที่คิดคำนวณดอกเบี้ยเป็นรายวัน เพราะฉะนั้นถ้าเราเลือกผ่อนชำระนานเท่าใด จำนวนดอกเบี้ยที่จะต้องจ่ายก็จะมากขึ้นไปเท่านั้นครับ

อ้างอิงข้อมูลจาก MoneyGuru

แหล่งข้อมูล

สำหรับแหล่งข้อมูลที่เราได้เป็นข้อมูลที่มีการรวบรวมมาจากเว็บไซต์ LendingClub โดยแพลตฟอร์มนี้จะเป็นแพลตฟอร์มที่ทำเกี่ยวกับระบบการกู้สินเชื่อแบบ Peer-to-Peer สำหรับคนในสหรัฐอเมริกา ซึ่งอ้างอิงข้อมูลจาก

ขอบคุณแหล่งข้อมูลดีๆ จาก Kaggle.com | ที่ทำให้เรา 2 คนได้มีวันนี้

LendingClub คืออะไร ?

แพลตฟอร์ม Peer-to-Peer Lending ที่ใหญ่ที่สุดโลกจากประเทศอเมริกา สินเชื่อของทาง Lending Club ครอบคลุมสินเชื่อหลากหลายประเภท เช่น สินเชื่อส่วนบุคคล สินเชื่อบ้าน สินเชื่อ รถยนต์ เป็นต้น และสามารถทำได้ทั้งกู้เดี่ยวและกู้ร่วมอีกด้วย

การวิเคราะห์การปล่อยสินเชื่อ 💡

เราจะนำ Machine Learning มาใช้ในการวิเคราะห์โดยจะเป็นการวิเคราะห์แบบ Supervised Learning หรือการให้หุ่นยนต์เรียนรู้จากตัวอย่าง มีการสอนให้มีการแยกแยะสินเชื่อน่าที่สนใจในการปล่อย โดยเทคนิคที่เราจะนำมาใช้ในการทำคือการ Binary Classification และใช้ Classfier Model สำหรับการให้ AI เรียนรู้และตัดสินใจ โดยข้อมูลก่อนทำการ Clean ของเราจะมีทั้งสิ้น 39,717 แถว 111 คอลัมน์ ซึ่งเป็นข้อมูลของสมาชิก Lending Club จำนวน 39,717 คน

โดย Attribute ที่เราจะนำมาวิเคราะห์ในการปล่อยสินเชื่อมีดังนี้

  1. member_id : รหัสประจำตัวสมาชิก
  2. loan_amnt : วงเงินที่สามารถกู้ได้
  3. funded_amnt : จำนวนเงินที่ผู้กู้ได้รับ
  4. term : ระยะเวลาของสัญญา
  5. int_rate : อัตราดอกเบี้ยเงินกู้
  6. installment : ค่างวดรายเดือนที่ผู้กู้จะต้องจ่าย
  7. grade : ระดับของผู้ใช้ที่มีการจัดโดย Lending Club มี 7 ระดับ ตั้งแต่ A ไปถึง G
  8. sub_grade : ระดับย่อยของ grade มี 5 ระดับ เช่น เกรด A จะมีแยกย่อยไป A1 ถึง A5
  9. emp_length : ระยะเวลาการทำงานของผู้กู้
  10. home_ownership : สถานะการเป็นเจ้าของบ้าน
  11. annual_inc : รายได้ประจำปีที่ผู้กู้ได้ให้ข้อมูลไว้ระหว่างการลงทะเบียน
  12. verification_status : บ่งบอกว่ารายได้ของผู้กู้ได้รับการตรวจสอบโดย Lending Club แล้วหรือไม่
  13. issue_d : เดือนที่ผู้กู้ได้รับเงิน
  14. loan_status : สถานะปัจจุบันของการกู้สินเชื่อมี จ่ายเต็มจำนวน (Fully Paid) หนี้เสีย (Charged off) ปกติ (Current)
  15. zip_code : รหัสไปรษณีย์
  16. addr_state : พื้นที่รัฐของผู้กู้สินเชื่อ
  17. dti : อัตราส่วนระหว่างหนี้สินกับรายได้ โดยคำนวณจาก ใช้ข้อมูลการชําระหนี้รายเดือนรวมของผู้กู้ในภาระหนี้รวมไม่รวมการจํานองและเงินกู้ LC ที่ร้องขอ หารด้วยรายได้รายเดือนที่ผู้กู้
  18. delinq_2yrs : คอลัมน์ที่บ่งบอกว่าในช่วง 2 ปีที่ผ่านมา ผู้กู้ได้มีการค้างชำระเกิน 30 วัน จำนวนกี่ครั้ง
  19. earliest_cr_line : เดือนที่ผู้กู้ได้เปิดรายการเครดิตครั้งแรก
  20. inq_last_6mths : การตรวจสอบสถานะสินเชื่อของผู้กู้ในช่วง 6 เดือนที่ผ่านมา
  21. open_acc : จำนวนรายการเครดิตที่ผู้กู้เคยเปิดไว้ทั้งหมด
  22. pub_rec : ประวัติเสียเกี่ยวกับผู้กู้ เช่น เครดิตจารผู้กู้รายอื่นไม่ดี (มี/ไม่มี)
  23. revol_bal : รวมจำนวนเครดิตหมุนเวียน
  24. revol_util : จำนวนเครดิตที่ผู้กู้ใช้เทียบกับเครดิตหมุนเวียนที่มีอยู่ทั้งหมด
  25. total_acc : จำนวนวงเงินสินเชื่อทั้งหมดที่อยู่ในไฟล์เครดิตของผู้กู้
  26. out_prncp : เงินต้นคงเหลือสำหรับจำนวนเงินที่ได้รับทุนทั้งหมด
  27. out_prncp_inv : เงินต้นคงเหลือสำหรับส่วนของจำนวนเงินที่ผู้ลงทุนลงทุนทั้งหมด
  28. total_pymnt : ยอดที่ผู้กู้ชำระทั้งหมด
  29. total_rec_prncp : เงินต้นที่ผู้ให้กู้ได้รับคืนจนถึงปัจจุบัน
  30. total_rec_int : ดอกเบี้ยที่ผู้ให้กู้ได้รับจนถึงปัจจุบัน
  31. total_rec_late_fee : ค่าธรรมเนียมล่าช้าที่ผู้ให้กู้ได้รับจนถึงปัจจุบัน (ค่าธรรมเนียมล่าช้า คือ ค่าปรับที่สำหรับการจ่ายค่างวดเกินกำหนดกับผู้กู้ หรือองค์กรที่ไม่ทำการชำระบิลภายในวันครบกำหนด)
  32. last_pymnt_amnt : จำนวนเงินที่ผู้กู้ได้ชำระครั้งล่าสุด
  33. chargeoff_within_12_mths : ผู้กู้มีการขายชำระกี่ครั้ง ภายใน 12 เดือน
  34. pub_rec_bankruptcies : ประวัติการล้มละลายของผู้กู้

จะจัดการกับข้อมูลอย่างไร ?

เราจะใช้ Model ในการทำ Classification โดยจะให้ X เป็นตัวแปรทั้งหมด-ข้างต้นทีไม่ใช่ Loan_status โดย Target หรือ y ของเราจะให้เป็นตัวแปร Loan_status เพื่อให้ผลลัพธ์แบ่งกลุ่มกันว่าข้อมูลผู้กูในแต่ละคนอยู่ในกลุ่ม Fully-Paid (ชำระเต็ม/ปิดหนี้แล้ว) หรือ Charged-off (ผิดสัญญาชำระหนี้)

Model ที่เลือกใช้

Random Forest

Logistic Regression

XGBoost

Decision Trees

Neural Network

เป้าหมาย 🎯

  • เพื่อใช้ในการประกอบการตัดสินใจในการปล่อยสินเชื่อในมุมมองของธนาคารหรือผู้ปล่อยกู้รายย่อย
  • เพื่อศึกษาว่าลูกค้าใดเป็นลูกค้าชั้นดี ที่ควรปล่อยสินเชื่อต่อไปในอนาคต

ประโยชน์ 👍

  • ลดความเสี่ยงในการปล่อยสินเชื่อของธนาคารหรือผู้ปล่อยกู้รายย่อย
  • เป็นการนำ Machine Learning มาประยุกต์ช่วยในการตัดสินใจปล่อยสินเชื่อ

Machine Learning Pipeline

Install Library

Data Collection

Cleansing & Transformation

Feature Selection

Prediction Model

Evaluate Model

#Install Library 🛠️

#Data Collection 🗂️

เราได้นำข้อมูลของ Kaggle | Lending (Loan) Club dataset มาใช้ในการทำ Project ครั้งนี้

ลักษณะการใช้งานของตัว KaggleApi() นั้นจะเป็นการตรวจสอบไฟล์ json ใน directory เดียวกัน ที่ตัวไฟล์ .json จะทำการเก็บ username และ key ของผู้ใช้เพื่อทำการ authenticate ให้สามารถดึงข้อมูลจาก Api มาใช้งานได้ ดังนั้นเราจะทำการสร้างตัวไฟล์ .json ที่เก็บ username กับ key ก่อน

จากนั้นก็เรียกใช้งาน KaggleApi() เพื่อทำการดึงข้อมูลดังนี้

ดึง API Kaggle
function สำหรับอ่านข้อมูลที่ได้จากการดึง api Kaggle

#Cleansing & Transformation 📋

เราได้จัดการกับ Row และ Columns ของข้อมูลที่เป็น Missing Value (Null) แล้ว Drop คอลลัมป์ที่มีค่าเหมือนกันทั้งคอลลัมป์ออกไป

ทำการ Drop Columns ที่ไม่เกี่ยวข้อง หรือไม่จำเป็นสำหรับการสร้างโมเดล อย่าง url, title, emp_title, purpose

และทำการ drop เนื่องจาก loan status ที่เป็น target ของเรานั้นจะไม่ใช้ในส่วนของ Current (สถานะที่ยังมีหนี้คงเหลืออยู่) ซึ่งเราสนใจแค่การทำนาย target ที่แสดงว่าลูกค้าจะมีสถานะเป็นหนี้เสีย (Charged Off) หรือ จ่ายครบจำนวน (Fully Paid)

Tranform ข้อมูลวันที่ใน column ที่อยู่ในรูป MMM-YY (เช่น Dec-11) ให้อยู่ในรูป YYYY-MM-DD

Tranform Target ที่เราต้องการทำนาย คือ column ‘loan_status’ โดยสนใจแค่ ผู้กู้ที่ปิดหนี้เรียบร้อยแล้ว(Fully Paid) และ ผู้กู้ที่ผิดชำระหนี้หรือหนี้เสีย (Charged Off) โดยให้อยู่ในรูปของ Binary

จัดการข้อมูลที่อยู่ในรูปแบบของเปอร์เซ็นต์ อย่างเช่น 99.99% ให้อยู่ในรูปทศนิยม 99.99

กำหนดหมวดหมู่ให้ verification_status โดยรวม Source Verified เข้ากับกลุ่ม Verified

กำหนด Type ของข้อมูลใน column: grade, sub_grade, verification_status, term, emp_length, home_ownership ให้อยู่เป็นข้อมูลประเภท Category

#Feature Engineering (Feature Selection) ✅

ในส่วนของการทำ Feauture Selection โดยเราจะใช้วิธี Pearson Correlation

Plot heatmap

ทำการกำหนดให้แสดงฟีเจอร์ที่มีค่า Correlation > 0.2 แล้วเก็บเข้าลิสต์ เพื่อนำฟีเจอร์ไปสร้างโมเดล

จำนวนคอลัมน์หลังจากทำ Feature Selection

#Separate Data into Features (X) and Target (y)🧑🏼‍💻

ในส่วนนี้เราจะทำการแบ่งข้อมูลเป็น 2 ชุดเพื่อนำไปเปรียบเทียบ โดยจะมีข้อมูลที่ไม่ได้ทำกระบวนการ Feature Selection กับข้อมูลที่ทำกระบวนการ Feature Selection

drop ตัวแปรที่ไม่ส่งผลต่อการทำนายจำพวก วันที่, เขตพื้นที่

แบ่งข้อมูลสำหรับการเปรียบเทียบกระบวนการ Feature Selection เป็น 2 ชุดโดยจะ Split Data โดยให้ test size = 0.2 หรือแบ่งเป็น train 80% test 20% นั่นเอง

แบ่งเป็น Train จำนวน 30264 rows (ข้อมูลที่ไม่ได้ทำ Feature Selection)

และ Test จำนวน 7566 rows (ข้อมูลที่ทำ Feature Selection)

#Tuning a parameter

ในส่วนนี้จะเป็นฟังก์ชันสำหรับการOptimize Model ให้มีประสิทธิภาพมากที่สุด ด้วยการ Tune โมเดล โดยเราจะใช้ RandomizedSearchCV โดยจะมีการกำหนด parameter ดังนี้

#Predictive Model🔮

function สำหรับพล็อต ROC Curve

  1. Random Forest Classification Model

Random forest เป็นโมเดล ที่มีหลักการคือการเทรนโมเดลที่เหมือนกันหลายๆ ครั้ง บนข้อมูลชุดเดียวกัน โดยแต่ละครั้งจะเลือกส่วนของข้อมูลไม่เหมือนกัน แล้วเอาการตัดสินใจของโมเดลเหล่านั้นมาโหวตกันว่า Class ไหนถูกเลือกมากที่สุด ขอบคุณข้อมูลจาก guopai

function สำหรับการสร้าง Random Forest Classification Model

  • ทดลองด้วยข้อมูลที่ไม่ได้ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

  • ทดลองด้วยข้อมูลที่ผ่านการ Feature Selection

ประสิทธิภาพโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

2. Logistic Regression Model

Logistic Regression เป็นเทคนิคทางสถิติภายใต้การดูแลเพื่อค้นหาความน่าจะเป็นของตัวแปรตาม (y) ข้อมูลจาก ICHI.PRO

function สำหรับการสร้าง Logistic Regression Model

  • ทดลองด้วยข้อมูลที่ไม่ได้ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

  • ทดลองด้วยข้อมูลที่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

3. XGBoost Classifier Model

XGBoost เป็น ensemble learning method ซึ่งเป็นการเรียนรู้แบบ multiple-learners หรือก็คือการเรียนรู้แบบมีผู้เรียนหลายๆคน ช่วยๆกันเรียน ข้อมูลจาก Nut Chukamphaeng

function สำหรับการสร้าง XGBoost Classifier Model

  • ทดลองด้วยข้อมูลที่ไม่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

  • ทดลองกับข้อมูลที่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

4. Decision Trees Model

หลักการพยากรณ์ด้วย Decision tree นั้นเข้าใจง่ายมาก ให้นึกว่า Decision tree คือต้นไม้กลับหัว โดยบนสุดคือราก และส่วนล่างลงมาที่ไม่สามารถแตกไปไหนได้แล้วก็คือใบ เราจะเริ่มด้วยการพิจารณาเริ่มแรกบนจุดเริ่มต้นที่เรียกว่า Root node ถ้าข้อมูลที่พบเป็นไปตามเงื่อนไขนั้น การตัดสินใจก็จะวิ่งไปทางซ้ายของ Root node ไปที่จุดที่เรียกว่า Child node ซึ่งถ้าข้อมูลที่มาตามเส้นทางนี้ตรงตามเงื่อนไขของ Child node นี้ ก็จะถือว่าสิ้นสุด เราเรียกว่า Node สิ้นสุดว่า Leaf node ข้อมูลจาก guopai

function สำหรับการสร้าง Decision Model

  • ทดลองกับข้อมูลที่ไม่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

  • ทดลองกับข้อมูลที่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

5. Neural Network Classification Model

Neural Network หรือ Artificial Neural Network คือ โครงข่ายประสาทเทียม เป็นสาขาหนึ่งของปัญญาประดิษฐ์ Artificial Intelligence (AI) เป็นแนวคิดที่ออกแบบระบบโครงข่ายคอมพิวเตอร์ ให้เลียนแบบการทำงานของสมองมนุษย์ ข้อมูลจาก Bua labs

function สำหรับการทำ Neural Network

  • ทดลองกับข้อมูลที่ไม่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลักจากการทำ Cross-Validate

  • ทดลองกับข้อมูลที่ผ่านการ Feature Selection

ประสิทธิภาพของโมเดล

ประสิทธิภาพของโมเดลหลังจากการทำ Cross-Validate

#Evaluate Model 🆚

กราฟแท่งแสดงการเปรียบเทียบความแม่นยำการทำนายของแต่ละโมเดล

กราฟแท่งแสดงการเปรียบเทียบ Cross Validate การทำนายของแต่ละโมเดล

  • ROC Curve ของข้อมูลที่ผ่านการ Feature Selection
  • ROC Curve ของข้อมูลที่ผ่านการ Feature Selection

Model API

โดย Model ที่เราเลือกที่จะ Deploy นั้นคือ Random Forest Classifier Model ที่มีค่าความแม่นยำมากที่สุด

โดยสามารถ predict ผลลัพธ์ได้ด้วยการกรอกข้อมูลให้ตรงกับตัวแปรต่างๆ แล้วจะแสดงผลลัพธ์ออกมา

สรุปผลลัพธ์ที่ได้

จากกระบวนการทั้งหมดนั้นจะเห็นได้ว่าแต่ละโมเดลนั้นมีประสิทธิภาพในการทำนายที่อยู่ในระดับสูงใกล้เคียงกัน ซึ่งถึงแม้ว่าการทำ Feature Selection จะได้ประสิทธิภาพไม่ดีเท่าข้อมูลที่ไม่ได้ทำ Feature Selection แต่กระบวนการนี้ก็ช่วยให้ตัวโมเดลนั้นทำงานได้ไวขึ้นด้วย Parameter ที่น้อยกว่าโดยที่ยังมีประสิทธิภาพสูงอยู่ ซึ่งโมเดลที่เราได้มานั้นสามารถที่จะนำไปใช้ในการทำนายลักษณะของผู้กู้และสามารถประกอบการตัดสินใจต่อได้ในอนาคต

Member of อ่อม

--

--

Alex
Alex

No responses yet