Create Credit Scoring ด้วย Scorecard package บน RStudio (2)
หลังจาก 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 เรียบร้อย พร้อมที่จะใช้ในการสร้างแบบจำลอง