TechJam 2019 by KBTG Deep Data, First Round Summary EP 1: Feature Engineering
สวัสดีครับ ณ ตอนนี้ก็ผ่านไปแล้วนะครับสำหรับการแข่งขัน TechJam 2019 by KBTG ในรอบแรก (First Round) ทางทีมงานขอแสดงความยินดีกับทีมที่ผ่านเข้ารอบทุกทีมครับ
ในวันนี้ ทีมงานของเราอยากจะมาแชร์ไอเดียต่างๆ ทั้งจากผู้เข้าแข่งขัน และจากทีมงาน โดยโจทย์ในรอบแรกกัน
Problem Description
ขออธิบายโจทย์คร่าวๆ สำหรับผู้ที่ไม่ได้เข้าแข่งขันในครั้งนี้นะครับ สำหรับโจทย์ในรอบแรกที่ผ่านมานั้น เป็นการ Predict รายได้ของลูกค้าธนาคาร โดยทางทีมงานให้ข้อมูลมาดังนี้
1. ข้อมูลทั่วไปเกี่ยวกับลูกค้า (เพศ อายุ อาชีพ)
+----+-------+--------+--------+-----+
| id | cc_no | gender | ocp_cd | age |
+----+-------+--------+--------+-----+
| 1 | 1 | 2 | 9 | 5 |
| 1 | 98397 | 2 | 9 | 5 |
| 2 | 2 | 2 | 3 | 4 |
| 2 | 9740 | 2 | 3 | 4 |
| 3 | 3 | 2 | 1 | 3 |
| 4 | 4 | 2 | 3 | 5 |
+----+-------+--------+--------+-----+
2. ข้อมูลการใช้งานแอพพลิเคชั่น K PLUS โดยมีการให้ข้อมูลเป็น Aggregated Statistics รายสัปดาห์
+-------+------------+--------------+------------+
| id | sunday | kp_txn_count | kp_txn_amt |
+-------+------------+--------------+------------+
| 14802 | 2018-01-14 | 2 | 2400 |
| 14802 | 2018-04-01 | 9 | 33900 |
| 14802 | 2018-05-27 | 7 | 6100 |
| 14802 | 2018-01-28 | 3 | 8500 |
| 14802 | 2018-03-25 | 2 | 4000 |
| 14802 | 2018-05-06 | 12 | 35300 |
+-------+------------+--------------+------------+
3. ข้อมูลการใช้งานบัตรเครดิตกสิกรไทยของลูกค้า
+-------+------------+------------+
| cc_no | pos_dt | cc_txn_amt |
+-------+------------+------------+
| 37069 | 2018-05-10 | 5000 |
| 37069 | 2018-06-04 | 12000 |
| 37069 | 2018-04-03 | 5000 |
| 37069 | 2018-04-22 | 1600 |
| 37069 | 2018-01-21 | 5000 |
| 37201 | 2018-04-13 | 400 |
+-------+------------+------------+
สำหรับโจทย์ในรอบนี้ ทีมงานขอหยิบยกเรื่องที่น่าสนใจแบ่งออกเป็น 3 เรื่อง คือ
- Feature Engineering
- Label Transformation
- Models & Parameters Tuning
Part 1: Feature Engineering
ในส่วนนี้จะเป็นการรวบรวมไอเดียที่น่าสนใจต่างๆ ทั้งจากทีมงานและผู้เข้าแข่งกันแต่ละกลุ่ม โดยขอแบ่งตามประเภทข้อมูลดังนี้
1. ข้อมูล Categorical ทั่วไป
เนื่องจากข้อมูล Categorical ทั้งหมดที่โจทย์ให้มานั้นมีค่อนข้างน้อย และ Encode มาแล้ว จึงสามารถใช้ในการ Train ได้เลย แต่ทั้งนี้ก็มีไอเดียที่น่าสนใจมานำเสนอซึ่งคือ การทำ Target Encoding & Frequency Encoding
Target Encoding คือ การนำค่าเฉลี่ยของคำตอบของกลุ่มข้อมูลที่อยู่ใน Category กลุ่มหนึ่งๆ เข้าไปในโมเดล เพื่อเป็นการ Guide โมเดลคร่าวๆ เกี่ยวกับลักษณะของข้อมูลในส่วนของการทำ Frequency encoding เป็นการทำความถี่ของกลุ่มนั้นๆ ต่อข้อมูลทั้งหมดใส่เป็น feature เพิ่มเติมลงไป
การทำ Target Encoding และ Frequency Encoding นั้นควรใช้ด้วยความระมัดระวัง เนื่องจากการทำ Feature ด้วยวิธีนี้ มีโอกาสที่จะทำให้ข้อมูลของ Validation Set Leak เข้า Training Set ทำให้ Model Overfit ได้จึงแนะนำให้สร้าง Feature ดังกล่าวแยกระหว่าง Training Set และ Validation Set ทุกครั้ง
นอกจากนี้ เรายังสามารถสร้าง Feature เพิ่มเติมจากข้อมูลที่มีได้ เช่น
- มีการใช้งานบัตรเครดิต/K PLUS ในระยะเวลาที่โจทย์ให้หรือไม่
- มีบัตรเครดิตกี่ใบ
- การใส่ Value Average ของ Age แต่ละถัง
2. Feature จากข้อมูล Transaction ต่างๆ
จากข้อมูลที่โจทย์ให้มา จะพบว่าตาราง Transaction ทั้งสองอย่างที่โจทย์ให้มานั้น มี Frequency ที่แตกต่างกัน โดยข้อมูล Transaction บัตรเครดิตจะมีข้อมูลเป็นราย Transaction แต่ข้อมูล K PLUS นั้นมีการ Aggregate มาเป็นรายสัปดาห์แล้ว ที่ทำให้ใช้งานได้ยากขึ้น เนื่องจากข้อมูลที่ให้มีวันที่มาเกี่ยวข้อง ตัวเลือกในการ Aggregate Data เพื่อใส่ไปเป็น Feature นั้นมีหลากหลายมาก โดยสามารถเลือกเป็น Combination ของ Aggregation Level/Method ได้คร่าวๆ ดังนี้
Aggregation Level Choice:
- Total
- Daily (Not recommended) / Weekly / Monthly
- Day-of-the-week / Weekend / Weekday
- Holiday / Payroll interval (ช่วงเงินเดือนเพิ่งออกหรือไม่)
Aggregation Method Choice:
- Count / Sum
- Mean / Variance / Median
- Min / Max
- Percentile
Notes:
- Aggregation Level บางวิธีไม่สามารถใช้กับ K PLUS Transaction ที่ให้มาได้ เนื่องจากข้อมูลไม่ละเอียดพอ
- เรามี Transaction จาก 2 sources เราจึงสามารถรวมตัวเลขให้โมเดลได้
ข้อควรระวังของการทำโจทย์ Feature Engineering ในลักษณะนี้ คือ ในบางครั้งเรา คิดมากเกินไปโดยการใส่ Feature เข้าไปในปริมาณมากๆ จะทำให้กระบวนการ Train Model ยากและนานขึ้น
สำหรับประเด็นที่ทางทีมงานมองว่าสำคัญที่สุดสำหรับโจทย์นี้ และมองว่าเป็นจุดตัดที่ทำให้ผู้เข้าแข่งขันบางกลุ่มได้คะแนนดีขึ้นมา คือวิธีที่ผู้เข้าแข่งแต่ละกลุ่มจัดการกับ Label ก่อนนำเข้าโมเดลซึ่งจะกล่าวในหัวข้อถัดไปครับ