Fraud Detection : EP 0 ทำความเข้าใจ Data และ โจทย์
การแข่งขัน Data-Science
บน Platforms ที่ Data Scientist ทั่วมุมโลกมารวมตัวกัน !
สวัสดีครับ เชื่อว่าผู้อ่านหลายๆท่านที่เข้ามาอ่าน น่าจะคุ้นเคยกับคำว่า Data Science มาไม่มากก็น้อย และน่าจะเคยได้ยินเกี่ยวกับเว็บไซด์ kaggle มาบ้างนะครับ
สำหรับคนที่ไม่ทราบ kaggle คือเว็บไซด์ที่มีไว้ให้เหล่า Data Scientist ทั่วโลกมาลองวิชากัน โดยใน kaggle ก็จะมีหน่วยงานหรือนักวิจัยต่างๆเข้ามาตั้งโจทย์ ปัญหา พร้อมแจกจ่าย Dataset ให้คนทั่วไปมาทำโมเดลเพื่อตอบโจทย์เหล่านั้นนั่นเอง โจทย์ก็มีความหลากหลายมากครับ เช่น
- ทำนายว่าใครจะรอดหรือไม่รอดจากเรือ Titanic
- ทำนายว่าใครจะเบี้ยวสินเชื่อบ้าน
- สร้างโมเดลเพื่ออ่านอักษรญี่ปุ่นโบราณ
เมื่อเดือนกันยายนที่ผ่านมาก็ได้มีโจทย์แข่งขันชิงรางวัลเข้ามาใน kaggle และเนื่องจากว่าโจทย์นั้นเป็นเรื่องที่ผมและเพื่อนที่ทำงานกำลังสนใจกันอยู่พอดี เลยตัดสินใจลงแข่ง และสุดท้ายก็สามารถคว้ารางวัลเหรียญเงินมาได้
ซึ่งโจทย์ที่ว่าก็คือ IEEE-CIS Fraud Detection นั่นเองครับ
วันนี้ผมจึงมาแชร์ประสบการณ์การแข่ง Fraud Detection ใน kaggle ว่ามีขั้นตอนในการทำอย่างไรบ้างและเทคนิคต่าง ๆ ที่เชื่อว่าน่าจะเป็นประโยชน์กับผู้อ่านทุกท่านนะครับ โดยบทความนี้จะแบ่งเป็นหลาย EP ตามนี้ครับผม
มาเริ่มด้วยการทำความเข้าใจโจทย์และข้อมูลกัน !
ก่อนอื่น สำหรับคนที่เคยมีประสบการณ์ทำงานเกี่ยวกับ Data Science มาก่อนจะเข้าใจเป็นอย่างดีว่าเวลาส่วนใหญ่นั้นจะเสียไปกับการทำความเข้าใจ Data และการเตรียมข้อมูลเข้าโมเดล ซึ่งในการแข่งนี้ก็ไม่ต่างกัน
การทำโมเดลจริงๆแล้วจะใช้เวลาแค่ 10% จากเวลาทั้งหมด
ในการแข่งขันครั้งนี้เราจะได้รับ Data มาชุดหนึ่งซึ่งคือรายละเอียดการทำ Transaction ของลูกค้าบัตรเครดิต โดยหลัก ๆ เราจะรู้ว่า Transaction นี้เกิดขึ้นเมื่อไหร่ ยอดเท่าไหร่ ใช้บัตรประเภทอะไร ซื้อสินค้าประเภทไหนแต่จะไม่บอกว่าลูกค้าคนไหนเป็นคนซื้อ อาจเพราะเพื่อไม่ต้องการเปิดเผยข้อมูลส่วนตัวของลูกค้า และยังมีข้อมูล feature บางอย่างที่ผู้จัดแข่งได้สร้างขึ้นมาให้แล้ว เช่น ลูกค้าคนนี้ใช้เงินไปแล้วเท่าไหร่ โอนไปแล้วกี่ครั้งในช่วงเวลาหนึ่ง
Feature คือคุณสมบัติของข้อมูลราย item (ซึ่งในที่นี้คือ transaction) ที่จะถูกป้อนให้โมเดล Machine Learning ไปเรียนรู้
นอกจาก feature แล้วยังมี label ระบุมาด้วยว่า Transaction ไหนเป็น fraud หรือไม่
ทางพวกผมเลยตัดสินใจที่จะใช้โมเดลประเภท Supervise Learning เข้ามาทำโจทย์นี้ครับ
Fraud ในที่นี้จะรวมหลายกรณีมาก ทั้งที่มาจากผู้ถือบัตรเองและคนที่ไม่ใช่เจ้าของบัตร และโจทย์ไม่บอกว่าเป็น Fraud แบบไหน
โดยหากเรานำ Data เหล่านี้มาพล๊อตเพื่อวิเคราะห์เบื้องต้น ก็เพียงพอระดับหนึ่งที่จะให้เราตั้งสมมุติฐาน เพื่อไปใช้ในการทำ Feature Engineering เพิ่มเติมได้เช่น
- ยอดที่เป็น Fraud จะมียอดมากกว่าหรือน้อยกว่าที่ไม่ใช่ Fraud
- ยอดการใช้งานของลูกค้าคนนี้จะถี่มากขึ้นหลังเกิดการ Fraud
ซึ่งการตั้งสมมุติฐานเหล่านี้จะเป็นเบาะแสที่ช่วยให้เราเข้าใจ Fraud มากขึ้น การทำกระบวนการนี้เราเรียกกันว่า Exploratory Data Analysis (EDA) ส่วนมากใน kaggle จะมีคนทำไว้แล้วให้เรา Search หาด้วยคำว่า EDA ได้เลย ซึ่งผมแนะนำให้อ่าน Notebook ของคนอื่นเยอะ ๆ และอ่าน discussion ด้วยเพื่อที่เราจะได้เบาะแสสำคัญในการทำ Feature Engineering
ผมจะยกตัวอย่างที่น่าสนใจการจากทำ EDA ของ Notebook ข้างต้นให้คราว ๆ
จะเห็นว่ายอดที่เป็น Fruad นั้นมีน้อยมาก ๆ แค่ 3.5 % เท่านั้น ทำให้โจทย์เป็น Imbalanced Data ซึ่งต้องใช้วิธีการรับมือที่พิเศษกว่า Data ประเภทอื่น
ต่อมาจะเป็นการกระจายตัวของ Fraud ในสินค้าแต่ละประเภท
จะเห็นว่าสินค้าประเภท C มีสัดส่วน Fraud สูงที่สุดกว่า 12% ส่วนจากรูปการกระจายตัวของยอดเงินจะเห็นว่าถ้าเป็น Fraud จะมียอดเงินที่สูงกว่าในระดับนึงโดยดู boxenplot (ความสูงของ box แทนจำนวน sample ที่กระจายตัวอยู่ในช่วงนั้นทำให้เราเห็นการกระจายตัวของข้อมูล)
ต่อมาจะเป็นยอดการใช้งานสะสมในหนึ่งช่วงเวลาของลูกค้าคนหนึ่ง
ถ้าไม่นับค่า 0 แล้วจะเห็นว่ายิ่งมีการใช้งานที่มากขึ้นจะยิ่งทำให้โอกาสเกิด Fraud มากขึ้นไปด้วย ซึ่งเราคงเดาได้ไม่ยากว่าถ้าสมมุติเราทำบัตร Credit หายแล้วโจรเก็บไปได้ก็คงต้องรีบเอาใช้งานถี่ ๆ แน่ ๆ ซึ่งก็เป็นเช่นนั้นในตัวอย่างด้านล่าง
สาเหตุที่ Fraud จะมียอดซ้ำ ๆ กันมีคนตั้งสมมุติฐานไว้ว่า โจรต้องการเงินสดแต่ไม่สามารถกดเงินสดออกมาจากบัตร Credit ได้จึงทำการสั่งพวกสินค้าที่เปลี่ยนเป็นเงินสดได้ง่าย ๆ เช่นพวก อุปกรณ์คอมพิวเตอร์ ที่ขายได้ง่าย ส่วนที่ยอดราคาต่ำ ๆ เพราะว่า กลัวจะโดนจับได้ด้วยระบบแจ้งเตือนของบริษัท credit card
เท่านี้เราก็น่าจะเห็นภาพคราว ๆ แล้วว่า Data ของเราหน้าตาเป็นยังไงและพฤติกรรมของ Fraud ต่างจาก Transaction ทั่วไปยังไง ตรงนี้จะเป็นพื้นฐานสำคัญที่เราจะนำไปใช้ในขั้นตอนต่อไปคือการทำ Feature Engineering
Reference: https://www.kaggle.com/roydatascience/light-gbm-with-complete-eda