สร้าง Label mapให้ผลลัพธ์ที่ได้จาก Proc rank อ่านง่ายขึ้น
ช่วงนี้กลับมาเขียน SAS อีกรอบหลังจากที่ไม่ได้เขียนนานมาก ที่กลับมาเขียนก็เพราะว่าทำโปรเจคนั่นแหละ ซึ่งโปรเจคที่กำลัง On อยู่ตอนนี้คือทำ Scoring model ให้กับลูกค้าที่นึงอยู่ เอาจริง ๆ นะ ถ้าไม่มีโปรเจค ก็ไม่รู้จะเขียน SAS ไปทำไมเหมือนกัน
พอพูดถึง Scoring model พระเอกของงานก็ต้องเป็นการสร้างตัวแปร และการแปลงค่าตัวแปร เพื่อการวิเคราะห์ผล ซึ่งวันนี้ไม่ลงรายละเอียดของ Model development ละกัน เพราะว่ามีตอนที่พูดถึงรายละเอียดเอาไว้แล้ว ใน Blog ของผมเองนี่แหละ ถ้าสนใจลองคลิกอ่านดูได้ครับ
เข้าเรื่องเลยดีกว่า… เมื่อกี้ผมพูดถึงการสร้างตัวแปร การแปลงค่า การวิเคราะห์ผล 3 เรื่อพวกนี้มันมีความเกี่ยวข้องกันหมดเลย ขอเล่าให้ฟังแบบนี้ว่า การสร้างตัวแปร ไม่ว่าจะเป็น Scoring รูปแบบใด ผลลัพธ์ที่ออกมาต้องมีการนำมาทำเป็น Binning, Grouping หรือ Ranking เพื่อที่เราสามารถนำไปคำนวณค่า WOE หรือ IV ต่อไปได้ตามลำดับ
วันนี้ไม่พูดถึง WOE และ IV
วันนี้พูดถึงแค่การจัด Binning อย่างเดียว ซึ่งมันก็คือทำ Variable จากที่มันมีค่าอยู่เดียว ๆ ทำให้มันเป็นกลุ่มซะ จับค่าที่ใกล้ ๆ กันเอามาอยู่ในกลุ่มเดียวกัน แล้วให้กลุ่มนี้มีค่าเป็น Range แทน ใน Python มี Function ในตัว Pandas ที่ชื่อว่า pandas.qcut()
เอาไว้ทำเรื่องแบบนี้ ซึ่งคำสั่งก็สามารถทำได้ทั้ง Percentile, Decile หรือ Quartile โดยจะ Return ค่าออกมาเป็น Label map บอกเลยว่าตัวแปรนี้อยู่ใน Range ไหน
ใช่ครับใน SAS ก็ต้องมีคำสั่งนี้เหมือนกัน โดย SAS จะใช้ชื่อว่า proc rank
ซึ่งก็สามารถจัดเป็น Percentile, Decile หรือ Quartile ได้เหมือนกันเลย เดี๋ยวมาดูตัวอย่างกันให้เห็นภาพกว่าเดิม ผม Random ตัวเลขขึ้นมาซัก 100 ตัว แล้ว Import เข้าไปใน SAS จากนั้นใช้ proc rank
ทำ Decile ขึ้นมา
สังเกตดูจากค่า rank_var
ที่ออกมามันเป็นตัวเลข 0–9 (10 กลุ่ม) ซึ่งมันเป็น Decile แหละ ไม่ได้ผิดอะไร แต่ความยากมันอยู่ที่ เวลาที่เราอยากรู้ว่ากลุ่มที่ 3 เนี่ย มันมีค่าตั้งแต่เท่าไหร่ถึงเท่าไหร่ ตรงนี้ proc rank
ไม่ได้สามารถบอกเราได้ มันไม่ได้ Return ค่ากลับมาเป็น Label map เหมือน pandas.qcut()
Assign label map for proc rank result
วิธีการหาค่า Label map ให้กับผลลัพธ์จาก proc rank
ออกมาต้องใช้อีกคำสั่งนึงใน SAS ครับ มีชื่อว่า proc means
โดยที่มันสามารถสูงสุดและต่ำสุดของ Rank นั้น ๆ ได้
พอได้ออกมาแบบนี้ เราก็สามารถออกแบบ Dataset ของเราได้เลยว่าจะให้มันเป็นแบบไหน (สั่งให้ output
ไปอยู่ที่ temp2
) จะเอา Rank label ไป Map กลับเข้าไปใน Dataset ใหญ่ หรือไว้ดูค่า WOE แบบง่าย ๆ ก็ได้เช่นกัน ซึ่งวันนี้ผมก็จะสร้าง Label map ให้มันเป็นช่วง [… — …)
ให้มันดูง่าย ๆ ละกัน
data temp2;
set temp2;
keep rank_var min max;
run;
เราสุดท้ายเราก็ได้ Table ที่มี Label เอาไว้ดูแล้วครับ