สรุป
- Feature Crossing เป็นหนึ่งในเทคนิคของ Feature Engineering
- Feature Crossing สามารถจับความสัมพันธ์ระหว่าง categorical feature ได้
- Feature Crossing ช่วยให้โมเดล เทรน เร็วขึ้น และ ช่วยให้โมเดล predict แม่นขึ้นด้วย
- Feature Crossing อาจจะทำให้ประสิทธิภาพโมเดล แย่ลง
- Feature Crossing อาจเป็นสาเหตุของ sparsity
1. Feature Crossing อย่างย่อ
จากภาพที่ 1 ถ้าเราใช้เส้นตรงในการแบ่งกลุ่มสีส้มกับสีฟ้า มันคงทำได้ยากมากใช่ไหมครับ
วิธีที่เราจะทำให้โมเดลเราดีขึ้น ง่าย ๆ เลยก็คือ
- เพิ่มความซับซ้อนของโมเดล
- เพิ่ม feature เข้าไป
ถ้าหากเราเอา x1
กับ x2
มา cross กัน เราจะสามารถแบ่งกลุ่มสีส้มกับกลุ่มสีฟ้าได้โดยง่าย การนำสอง feature มา คูณกันแบบนี้ เราเรียกว่า Feature Crossing และเป็นเทคนิคในการทำ feature engineering ครับ
เรามาดูตัวอย่างเพิ่มเติมกันดีกว่าครับ
2. ตัวอย่าง: ทำนายราคา Taxi
ในตัวอย่างนี้ เราต้องการทำนายราคาของการใช้ Taxi ใน เมือง New York จากข้อมูล ที่เรามี
ลองพิจารณา pickup_datetime
ดูไหมครับ
เราสามารถเอาข้อมูล datetime มาแยกออกเป็น Day of Week และ Hour of Day แล้วนำมา Cross กัน เราก็จะได้ข้อมูลที่น่าสนใจ
การเอา feature สองตัวนี้ (Day of Week และ Hour of Day) มา cross กัน เราก็จได้ one-hot encoded vector ที่มีขนาด 168 มิติ (24 ชั่วโมง x 7 วัน)
ในขณะที่สอง feature นี้ มันมีข้อมูลในตัวของมันเองอยู่แล้ว การนำมา cross กัน ทำให้ โมเดล สามารถจับความสัมพันธ์ ของชั่วโมงเร่งด่วน ในช่วงสุดสัปดาห์ได้ ซึ่งก็จะส่งผลให้เราสามารถทำนายราคา ได้แม่นยำมากขึ้น
3. ข้อดี/ข้อเสีย ของ Feature Crossing
ข้อดี
- ทำโมเดลทำนายผลลัพธ์ได้ง่ายขึ้น เช่น ถ้าเราเอา feature ตำแหน่งงาน กับ บริษัท มา cross กัน ทำให้เราสามารถจับความสัมพันธ์ ที่อาจมีผลในการทำนาย รายได้ เฉพาะบุคคลได้ดีขึ้น
- โมเดล เทรนเร็วขึ้น
- การทำ Feature Crossing สามารถอธิบายได้
ข้อเสีย
- อาจทำให้ประสิทธิภาพของโมเดลแย่ลง เพราะ feature ที่เราใส่เข้าไปอาจจะซ้ำซ้อน หรือ เป็นการเพิ่ม noise
- อาจเป็นสาเหตุของ sparsity อย่างเช่นตัวอย่างการทำนายราคา taxi ที่เราใส่ feature ขนาด 168 มิติ เข้ามาในโมเดล
4. ข้อควรระวัง
4.1 Feature ที่เป็นตัวเลข (numerical features)
ทำการ Bucketize หรือแปลงให้อยู่ในรูปของ categorical features ก่อนที่จะทำ feature cross
4.2 ปัญหา High cardinality (ตัวแปรมีความหลากหลายมาก ๆ)
ทำการ Embedded ให้เป็น embedding vector เพื่อลดขนาดมิติของข้อมูล
5. ทำยังไง
5.1 ทำเองแบบดิบ ๆ
วิธีการก็คือเอา feature มาแปลงให้อยู่ในรูป one-hot encoded แล้ว ต่อกัน ดังตัวอย่างข้างล่าง
5.2 BigQueryML
ถ้าใช้ Google Cloud อยู่แล้ว มีข้อมูลใน BigQuery อยู่แล้ว ก็ลองใช้ BigQueryML function ในการทำ feature crossing ได้ครับ
ML.FEATURE_CROSS
5.3 Tensorflow
ถ้าใช้ tensorflow อยู่แล้ว ก็ มี function ให้เรียกใช้นะครับ
tf.feature_column.crossed_col()