Fraud Detection : EP 3 Modeling ล้มเร็ว เรียนเร็ว Fail Fast, Learn Faster

Phiratath Nopratanawong
SiamFriends
Published in
2 min readOct 25, 2019

หลังจากเราเตรียมข้อมูลแล้ว ขั้นต่อไปคือการทำ model มาลองรับข้อมูลเหล่านั้น

ในส่วนของ Modeling ใน kaggle นั้นแทบจะแตกต่างจากโลกจริงอยู่พอสมควรเนื่องจากตัวชี้วัดเดียวของ kaggle คือความแม่นยำของ Model ทำให้การทำ Model เราจะสนใจอยู่แค่อย่างเดียวคือ Validate score และ Test score ใน Leaderboard ส่วนนี้ผมจะพูดถึง กลยุทธ์ในการทำ Model ที่ดีซึ่งมีหลัก ๆ คือ

  1. Training เร็วไม่ควรเกิน 5–10 นาที
  2. มี Validate set ที่สอดคล้องกับ Test set
  3. เลือก Model ที่ตัวเองเข้าใจ

Fast Training

ยิ่งเราสามารถทดลอง Feature กับ Model ได้มากเท่าไหร่ก็ยิ่งทำให้เรามีโอกาสที่จะเจอ Feature ดี ๆ มากเท่านั้น ทำให้เวลาที่ใช้ในการ Training Model ต้องเร็วที่สุดเท่าที่เป็นไปได้ แต่เรื่องนี้ไม่ได้หมายความว่าคุณจะต้องมีคอมแรง ๆ

ผู้เข้าแข่งขันหลายคนเลือกที่จะทำการ Under-Sampling หรือ การลดจำนวน Data ลงซึ่งเป็นหนึ่งในวิธีการรับมือ Imbalanced data เช่น ในการแข่งขันนี้มีรายการที่เป็น Fraud เพียงสองหมื่นกว่ารายการ จากห้าแสนรายการ ทำให้เราอาจจะลดจำนวนรายการปกติลงให้เหลือแค่หนึ่งแสนจุดก็ได้ เพียงแค่นี้ก็ลดเวลาในการ Training model ได้เยอะมากแล้ว

ตัวอย่างการรับมือ Imbalanced Data

Validate set

ในส่วนนี้ผมขอแนะนำว่าให้ทำความเข้าใจ Data ให้ดีก่อนเช่นถ้า ข้อมูลเราเป็น Time-series ก็ควรจะแบ่ง validate set เป็นเวลาล่าสุดออกมา หรือ ถ้ามีข้อมูลที่เป็น categorical ที่มี distribution ของ target ต่างกันมากก็ควรจะสุ่มมาให้เท่า ๆ กันจากแต่ละ categorical ซึ่งในการแข่งนี้ผมได้แบ่ง validate set ออกเป็นสองส่วนคือส่วนที่ใช้ในการทำ Feature Engineering เป็น 30% สุดท้ายของ data แต่ในส่วนของการ train model แบบเต็มเพื่อใช้ในการส่งจะเป็น GroupKfold แยกตามเดือน ซึ่ง validate set ทั้งสองมีความสอดคล้องกับ test set ใน leaderboard ซึ่งคือ เมื่อเราได้ validate score เพิ่มขึ้น 0.05 แล้ว test score ใน leaderboard ก็เพิ่มขึ้น 0.05 ด้วยเช่นกัน เมื่อเราได้ validate set ที่สอดคล้องกับ test set แล้ว ก็จะทำให้เราสามารถทำ feature ออกมาได้เรื่อย ๆ โดยมั่นใจได้ว่า feature ที่เราสร้างจะไม่ทำให้ model เรา over fit

https://www.kaggle.com/kyakovlev/ieee-lgbm-with-groupkfold-cv ตัวอย่างการทำ validation set

Model Selection

ส่วน Model ที่เลือกใช้นั้นเป็น Tree based model 2 ประเภทคือ LightGBM และ Catboost ซึ่งก็เป็น GBDT ( Gradient boosted decision tree) ทั้งคู่โดยทั้งสองมีจุดเด่นที่ต่างกันคือ

  1. LightGBM จะมีจุดเด่นที่ความเร็วในการ Train ซึ่งจะเร็วกว่า XGboost อย่างมากแต่ให้ผลลัพท์ใกล้เคลียงกัน
  2. Catboost (category & boost) เป็น Model น้องใหม่ที่จะใช้ประโยชน์จาก categorical data ทำให้เหมาะกับการแข่งที่มี categorical data เช่นประเภทบัตร,สินค้า,ธนาคาร เป็นต้น

โดยสรุปแล้ว ขั้นตอนในการทำ model ของเราจะควบคู่ไปกับการทำ Feature จะเป็น Loop วนไปเรื่อย ๆ แต่เราจะเรียนรู้ควบคู่ไปกับ model คือ เมื่อเราสร้าง feature ขึ้นมาใหม่ แล้วมันทำให้ model ทำงานได้ดี เราก็จะรู้ได้ว่าสมมุติฐานเราถูกต้องหรือเราอาจจะรู้ว่าควรจะพุ่งเป้าไปที่ feature ตัวไหน

ในระหว่างการแข่งนี้ผมได้พบว่า Columns C นั้นมีความสำคัญในการทำนาย fraud จึงพุ่งเป้าไปที่ Feature ตัวนี้เป็นหลัก ซึ่งกว่าจะเจอพวกผมก็เสียเวลาไปกับ columns อื่น ๆ นานมาก เพิ่งมาเจอก็ช่วงท้าย ๆ ของการแข่งขันแล้ว

นอกจากนี้ยังมีอีกเทคนิคที่อยากพูดถึง ซึ่งคือการ Blending

Blending เราจะทำการ Ensemble model ของเราเข้ากับ model อื่น ๆ หรือแม้แต่เอาผลลัพท์จากคนอื่นที่แชร์ใน notebook มาก็ยังได้ ( ผมได้หยิบเอา Model neural network ของคนอื่นมาใช้) ส่วน model ผมใช้ Catboost และ LightGBM ในการ Ensemble ผลลัพท์คือทำให้ score ของผมเพิ่มขึ้นอย่างมากจาก 0.9400-0.9500 ไปเป็น 0.9536 ด้วยการ Blending แบบ weighted average แต่ข้อควรระวังคือยิ่ง blending มี score ที่ดีมากเท่าไหร่จะยิ่ง over-fitting กับ public leader-board ได้ง่ายขึ้นเท่านั้นจึงเป็นอีกสาเหตุที่ทำให้อันดับเปลี่ยนแปลงอย่างมาก

ตัวอย่างการ blending

ใน EP ต่อไปผมจะมาสรุปบทเรียนที่ได้จากการแข่งขันครั้งนี้นะครับ

--

--