Create Credit Scoring ด้วย Scorecard package บน RStudio (2)

punjapol binnagan
3 min readFeb 9, 2020

--

หลังจาก clean data เรียบร้อยแล้ว ขั้นตอนต่อไปคือ การแบ่งข้อมูลออกเป็น 2 ชุด โดยที่ชุดหนึ่งใช้สำหรับสร้างแบบจำลอง (training set) ขณะที่อีกชุดใช้เพื่อทดสอบว่าแบบจำลองมีความแม่นยำในการทำนายมากน้อยแค่ไหน (test set)

scorecard package มี function ชื่อ split_df() ช่วยให้การแบ่งข้อมูลของเราง่ายขึ้น

split_df(dt, y = NULL, ratio = c(0.7,0.3), seed = 618, no-dfs = 2, name_dfs=c(“train”,”test”))

dt คือ ชื่อของข้อมูลที่เราใช้

y คือ ชื่อของตัวแปรตามหรือตัวแปรที่เราสนใจ เช่น loan_status

ratio คือ กำหนดว่าจากข้อมูลทั้งหมดหลังจาก cleaning เราต้องการให้กี่ % อยู่ใน training set และ กี่% อยู่ใน test set โดยหากเราไม่กำหนดเป็นอย่างอื่น คำสั่งนี้จะแบ่ง 70% และ 30%

seed คือ การกำหนดค่าเริ่มต้นในการเลือกแบบสุ่ม เพื่อให้ทุกครั้งที่เรารันคำสั่งได้ผลเหมือนเดิม เราสามารถกำหนดค่าเป็นตัวเลขเท่าไหร่ก็ได้

no_dfs คือ หลังจาก split แล้ว ได้ข้อมูลกี่ ชุด ในที่นี่เราต้องการแบ่งเป็น 2 ชุด เพราะฉะนั้น defaults คือ 2

และ name_dfs คือ ชื่อของข้อมูลที่ถูกแบ่ง เราสามารถกำหนดเป็นอย่างอื่นได้

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

dt_list = split_df(loan, “loan_status”)

จากคำสั่งนี้คือเราแบ่งตามตัวแปร y ที่ชื่อ loan_status จากนั้นเราก็ assign ตัวแปร x อื่นๆ ตาม loan_status โดยใช้คำสั่ง lapply ข้างล่างนี้

label_list = lapply(dt_list, function(x) x$loan_status)

หลังจากนั้น เราจะใช้เทคนิค weight of evidence (woe) ในการ exploration และ screening ตัวแปรที่เราจะใช้ในการสร้างแบบจำลองเพื่อทำนายโอกาสที่จะผิดนัดชำระหนี้ ด้วย logistic regression

คร่าวๆ คือ WOE บอกความสามารถของตัวแปรอิสระ (x) แต่ละตัวในการทำนายตัวแปรตาม หรือ (y) พูดง่ายๆ คือ หากใช้ตัวแปรอิสระตัวนี้แล้วจะสามารถแยกลูกหนี้ดีกับลูกหนี้เสียได้สัดส่วนเท่าไหร่ นั่นเอง

WOE = ln(% of non-events/% of events)

ขั้นตอนการคำนวณ WOE กรณี continuous variable

1 แบ่งข้อมูลออกเป็น 10 ส่วน (หรืออาจจะน้อยกว่า ขึ้นอยู่กับ distribution ของข้อมูล)

2 คำนวณ จำนวนของเหตุการณ์ที่เราสนใจ (non-events) และเหตุการณ์ที่เราไม่สนใจ (events) ในแต่ละกลุ่ม

3 คำนวณ % ของ non-events และ ของ events ของแต่ละกลุ่ม กล่าวคือ กลุ่มที่ 1 (จำนวนเหตุการณ์ non-events ในกลุ่มที่ 1)/จำนวนเตุการณ์ non-events ทั้งหมด เช่นเดียวกันกับ events คือ (จำนวนเหตุการณ์ events ในกลุ่มที่ 1)/จำนวนเตุการณ์ events ทั้งหมด ทำแบบนี้จนครบทุกกลุ่ม

4 แทนค่าสูตร

สำหรับ categorical หรือ factor variable ก็ใช้ขั้นตอนเดียวกัน แต่แค่ข้ามขั้นตอนแรก

อย่างไรก็ตาม scorecard package มีคำสั่งที่ใช้สำหรับคำนวณ WOE ง่ายๆ

woebin(dt, y, x = NULL, method = “tree”)

method เป็นการระบุว่า เราต้องการใช้เทคนิคอะไรในการทำ screening โดยมีทั้งหมด 4 ทางเลือก คือ “tree” หรือ “chimerge” แทน tree-like segmentation หรือ chi-square merge ตามลำดับ 2 เทคนิคนี้ ใช้เพื่อหา optimal binning โดยใช้ได้ทั้งกับ continuous และ categorical variables ขณะที่ ‘width’ หรือ ‘freq’ ใช้เพื่อหา equal binning และใช้ได้กับ continuous variable เท่านั้น โดย default คือ “tree”

bins = woebin(dt_list$train, “loan_status”)

สังเกต argument แรกของ command นี้ คือ training set

ข้อสังเกต อีกข้อหนึ่งคือ ตัวแปรแต่ละตัวจะถูกแบ่งกลุ่มไม่เท่ากัน เช่น อายุ ถูกแบ่งเป็น 3 กลุ่ม ขณะที่ รายได้ถูกแบ่งเป็น 4 กลุ่ม

dt_woe_list = lapply(dt_list, function(x) woebin_ply(x, bins))

ใช้คำสั่ง woebin_ply เพื่อเปลี่ยนค่าเดิมของตัวแปรอิสระไปเป็นค่า woe จากที่คำนวณโดยคำสั่ง woebin ในขั้นตอนที่ 6 ทั้งนี้เพื่อความสะดวกในการเปลี่ยนค่า ใช้คำสั่ง lapply เพื่อบอกว่าให้ทำซ้ำกับตัวแปร x ทุกตัว

ผลลัพธ์ที่ได้จากขั้นตอนนี้คือ ข้อมูลทั้งใน training set และ test set ถูกเปลี่ยนให้อยู่ในรูปของ woe เรียบร้อย พร้อมที่จะใช้ในการสร้างแบบจำลอง

--

--