Botnoi Voice

Jan 9, 2022

Label

UX/UI

Fraud/Anomaly detection การตรวจจับการโกงกับสิ่งผิดปกติ

Fraud/Anomaly detection การตรวจจับการโกงกับสิ่งผิดปกติ

เรื่อง fraud กับ anomaly ใช้ลดความเสียหาย ช่วยชีวิต นำสู่การค้นพบ อย่างมหาศาลและเป็นหัวข้อที่ data scientist ควรจะต้องรู้และทำได้ครับ

What? : Fraud กับ Anomaly คืออะไร

Fraud คือ การฉ้อโกง เช่น

  • การแฮคบัตรเครดิตแล้วเอาไปใช้

  • การฮั้วการจัดซื้อจัดจ้าง

  • การโกงการนับคะแนนเลือกตั้ง

  • การโกงข้อสอบ

  • การโกงภาษี

Anomaly คือ ความผิดปกติ ความประหลาด เช่น

  • ความผิดปกติของสินค้า อาจจะเป็นตำหนิ

  • ความผิดปกติของเซลล์

  • ความผิดปกติของข้อมูล

  • การค้นพบของดวงดาว สัญญาณแปลกปลอมจากนอกโลก

  • การค้นพบของแหล่งแร่ แหล่งน้ำมัน ในท้องทะเลกว้างใหญ่

  • เราสามารถใช้ในการ clean data ข้อมูลที่อาจจะผิดพลาดจากกระบวนการเก็บ

Why? : ทำไมต้องทำ Fraud/Anomaly detection
  • ถ้าเราสามารถมี AI ที่ตรวจจับ fraud ก็จะลดความเสียหายได้อย่างมหาศาล มีข้อมูลว่าปี 2020 ที่อเมริกามีรายการการทำ fraud ทั้งหมด 1.3 ล้านครั้ง https://www.fool.com/the-ascent/research/identity-theft-credit-card-fraud-statistics/ นี่นับเฉพาะรายการที่มีการแจ้งนะครับ หากรวมรายการที่ไม่มีการแจ้งก็น่าจะเป็นร้อยเท่าพันเท่า (ส่วนที่ไทยไม่แน่ใจว่าที่ไทยจะเป็นยังไงนะครับ)

  • ถ้ามีการแจ้งรายงาน ก็คงไม่ได้เสียหายน้อย ๆ น่าจะเป็นหลักหมื่นขึ้นไป เพราะงั้นความเสียหายก็เป็น หมื่นล้าน แสนล้าน อาจจะมากกว่านั้น ไหนจะต้องเสียงบประมาณในกระบวนการตรวจสอบ สอบสวน หาหลักฐาน อีกเยอะแยะ

  • ในส่วนการตรวจจับ Anomaly มันอาจจะไม่ใช่แค่ตัวเลขทางการเงิน มันอาจจะหมายถึงชีวิตก็ไปได้ เราอาจจะสามารถตรวจจับความผิดปกติของชีพจรหัวใจ นำสู่การรักษาเนิ่น ๆ ลดการเสียชีวิต เนิ่น ๆ หรืออาจจะการตรวจจับความผิดปกติของเครื่องจักร หรือรายการสินค้าที่มีตำหนิ ก็ลดความเสียหายทางเศรษฐกิจได้เช่นกัน สุดท้ายก็นำมาใช้ในการค้นหา discovery

จะเห็นได้ว่าการตรวจจับ fraud และ anomaly มีความสำคัญแค่ไหน และสามารถนำมาประยุกต์ใช้ได้หลาย ๆ อย่าง

How? : หลักการการทำ Fraud detection
  • เราต้องเข้าใจก่อนว่า nature หรือธรรมชาติของทั้ง fraud และ anomaly ก็คือ ใน data ส่วนมาก จะเจอเคสที่เป็น fraud หรือ anomaly น้อยมาก ในการใช้บัตรเครดิตแสนครั้งอาจจะพบเจอ fraud ซะ 1 ครั้ง ในการตรวจโรค ตรวจความผิดปกติของร่างกาย หรือการค้นหาแหล่งน้ำมัน หรือข้อมูล ก็เจอน้อยมาก ๆ เช่นกัน

  • ในเมื่อข้อมูลส่วนมากปกติ สิ่งที่เราจะทำก็คือ 1. สร้าง model หรือแบบจำลองของข้อมูลที่ปกติ และ 2. วัดความต่างของแต่ละข้อมูลเทียบกับ model

ยกตัวอย่าง

สมมติว่า มีการเก็บข้อมูลของอายุ

จากตารางทุกคนจะสามารถหา anomaly ได้มั้ยครับ แน่นอนทุกคนก็จะบอกว่าแค่ดูจากข้อมูลอายุ 201 คือ anomaly ก็ใครล่ะจะอายุถึงสองร้อย ทุกคนทราบดี เพราะเรามีการเรียนรู้มาก่อน เรารู้ว่าคนมีอายุไม่ถึง 200

แต่ถ้าไม่ได้บอกว่า นี่คือข้อมูลของอายุล่ะ

ผมก็ยังเชื่อว่าทุกคนก็ตอบได้อยู่ดีว่าคือ 210 แล้วทำไมทุกคนถึงรู้ ก็เพราะว่าเมื่อดู data เมื่อเทียบกับตัวอื่น ๆ ค่ามันสูงกว่าเพื่อน โอเค แต่เราก็คงตาลายน่าดูถ้ามีข้อมูลเป็นหมื่น ๆ แสน ๆ ล้าน ๆ สิ่งที่เราจะทำก็คือ

  1. สร้าง model มาจากข้อมูลทั้งหมด สำหรับตัวอย่างนี้ผมจะเลือก model ที่ง่ายที่สุดนั่นคือ ค่าเฉลี่ย ก็แล้วกัน เมื่อเราเอาข้อมูลทั้งหมดมาหาค่าเฉลี่ย แน่นอนว่าถ้า fraud หรือ anomaly มันเกิดขึ้นน้อยดังนั้น ก็จะไม่ส่งผลต่อค่าเฉลี่ยนัก ถึงแม้ว่าจะมีข้อมูลอายุ 210 ก็ตาม แต่ว่าค่าเฉลี่ยของข้อมูลอายุ ก็คงจะอยู่ในช่วงใกล้ ๆ กับข้อมูลจริง เรื่องอื่น ๆ ก็เช่นกัน เช่นคะแนนสอบของนักเรียนในห้อง ถึงแม้ว่าจะมีคนโกงข้อสอบแล้วได้ 100 คะแนนเต็ม แต่มันก็ไม่ได้ส่งผลต่อค่า mean ในห้องเท่าไหร่ ในตัวอย่างนี้ ค่า mean ของอายุคือ 60 ปี

  2. จากนั้นเราก็จะเอาทุกข้อมูล มาหาความต่างกับค่า mean แล้วจะพบเจอว่า สำหรับข้อมูลที่ปกตินั้นค่าความต่างจากค่า mean มันน้อยมาก ในขณะที่ค่าของอายุที่สูงเกินไป มันก็จะห่างจากค่า mean มาก จากนั้นเราก็มาใส่เงื่อนไขว่า ถ้าข้อมูลอายุไหน ห่างจากค่า mean เกินกี่ % ก็ให้แจ้งว่ามีความผิดปกติ ในตัวอย่างนี้ผมใส่ไปว่า ถ้าห่างจากค่า mean เกิน 50 ให้บอกว่าเป็น fraud

  • ตัวอย่างที่ยกมา คือการตรวจจับแบบที่ง่ายที่สุดคือการใช้ค่ากลางค่าเดียว ลองคิดดูว่าในห้องเรียนเราอาจจะมีกลุ่มนักเรียนเก่ง กับนักเรียนไม่เก่ง เราอาจจะต้องแยกทั้งสองกลุ่มออกแล้วหาค่า mean ของแต่ละกลุ่ม จากนั้นดูว่าข้อมูลไม่ได้ใกล้ หรือห่างจากค่า mean ของกลุ่มใด กลุ่มหนึ่ง เกินกี่ % ก็ถือว่า fraud

ยกตัวอย่างที่ซับซ้อนขึ้น

  • ผมจะให้ข้อมูลตัวอย่างอีกชุด นั่นคือ ส่วนสูงกับน้ำหนัก

จากข้อมูลหากเราใช้วิธีการหาค่า mean ของแต่ละ feature เช่นเราดูแต่ height เราก็จะบอกว่า 91 กับ 102 ผิดปกติ เพราะค่าเฉลี่ยของ height น่าจะอยู่ที่ประมาณ 160 ซึ่ง 91 กับ 102 ดูห่างไกลจากค่าเฉลี่ย ถ้าเราดูแต่ weight เราก็จะบอกว่า 14 ผิดปกติ ในทำนองเดียวกัน

แต่ถ้าเราดูทั้งสองตัวแปรควบคู่กัน เราก็จะบอกว่า ส่วนสูง 102 กับน้ำหนัก 14 ก็ไม่น่าจะผิดปกติ ก็สูง 102 ซม. น่าจะเป็นเด็กอายุสัก 2–3 ขวบ ที่มีน้ำหนัก 14 กิโล แล้วเราก็จะบอกว่า 91 กับ 91 น่าสงสัย สูงแค่ 91 ซม. ทำไมหนักตั้ง 91 กิโล เมื่อเรามาพลอตกราฟ เป็น scatter plot ก็จะได้กราฟหน้าตาแบบนี้

จะมี 2 จุดที่น่าสงสัย อยู่ข้างล่าง แต่จุดขวาล่าง น่าสงสัยมากกว่าครับตามที่บอก

ทีนี้เราจะ model ยังไง เรารู้อยู่ว่า ส่วนสูงกับน้ำหนักมันมีความสัมพันธ์กันอยู่ ถ้าสูงมากก็หนักมาก ดังนั้นเราลองสร้าง model ความสัมพันธ์ของข้อมูลส่วนสูงกับน้ำหนักดู โดยเราจะใช้ linear regression สร้างเส้นตรงวิ่งผ่าน data

ก็จะได้ model แบบนี้

เส้นสีแดงคือ model ความสัมพันธ์ของข้อมูลส่วนสูงกับน้ำหนักที่เราสร้างขึ้นมาจากข้อมูลสีฟ้าทั้งหมด เมื่อสร้างเสร็จแล้ว วิธีใช้งานคือ เราจะป้อนข้อมูลน้ำหนักเข้าไป แล้วก็ไปดูว่าข้อมูลน้ำหนักจะไปตัดกับเส้นตรงที่ส่วนสูงเท่าไหร่ และนั่นก็จะเป็นผลจากการทำนายของ model

ขั้นตอนถัดไปคือ มาหาว่าจุดแต่ละจุด มันใกล้เคียงกับ model มากน้อยเพียงใด เหมือนที่บอกครับ ว่า model นี้สร้างจากข้อมูลทั้งหมด ที่ส่วนมากไม่ได้เป็น anomaly หรือ fraud จะเห็นได้ว่า จุดขวาล่างไม่ค่อยจะมีผลต่อ model ที่เป็นความสัมพันธ์ระหว่างส่วนสูงกับน้ำหนัก เราจะใช้ model นี้ทำนายค่าส่วนสูงใหม่ จากน้ำหนักเดิม จากนั้นคำนวนความแตกต่างระหว่าง ค่าใหม่กับค่าเดิม จะได้เป็นตารางนี้ครับ ในทีนี้ผมกำหนดว่า ถ้าความต่างเกิน 40 ผมจะถือว่าเป็น anomaly

อีกวิธีที่ทำได้ก็คือ การจัดกลุ่มของข้อมูลก่อน

บางครั้งข้อมูลก็มีการแบ่งออกเป็นกลุ่ม ๆ เช่น การใช้บัตรเครดิตเดือนละแสนของคนรวยก็เป็นเรื่องปกติ แต่ถ้าสำหรับคนที่เงินเดือน 2 หมื่น มาใช้บัตรเป็นแสนก็คงจะผิดปกติ การสร้างแค่ 1 model หรือ 1 ตัวแทนของข้อมูล อาจจะไม่เพียงพอ ดังนั้นเราอาจจะแบ่งข้อมูลออกเป็นกลุ่ม ๆ ก่อน แล้วค่อยสร้าง model ย่อย ๆ ในการตรวจจับ fraud หรือ anomaly

ผมจะต่อยอดข้อมูลเดิมก็แล้วกันสร้าง ข้อมูลส่วนสูงกับน้ำหนักของเด็กเพิ่มเติม แบบนี้

จาก scatter plot จะเห็นชัดเจนว่าข้อมูล มีอยู่ 2 กลุ่มใหญ่ กลุ่มผู้ใหญ่กะเด็กเล็ก ผมใช้ k-means ในการจัดกลุ่ม เลือกจำนวนกลุ่มเป็น 2

จากนั้นก็จะวัด ความห่างของข้อมูลเมื่อเทียบกับกลุ่มที่ตัวเองอยู่ แล้วเลือกว่าถ้าค่าความห่างเกิน 40 ก็จะถือว่าเป็น anomaly ก็จะเจอเหมือนกันว่า (91, 91) เป็น anomaly ซึ่งก็อาจจะแม่นขึ้นกว่าการใช้ model ค่าเฉลี่ยรวมของข้อมูลเพียงค่าเดียว

สรุป

ในตัวอย่างทั้ง 3 แบบ มีวิธีการตรวจจับ fraud กับ anomaly ที่แตกต่างกัน ไม่ว่าจะเป็น การใช้ค่าเฉลี่ยเป็น model การใช้เส้นตรง linear regression เป็น model หรือจะใช้ความห่างระหว่าง centroid ของ kmeans แล้วก็อันที่จริงแล้ว ยังมี model อื่น ๆ เทคนิคอื่น ๆ อีกมากมาย อาจจะมีการทำ PCA เพื่อหา sub-space หรือขั้นสุดกว่านั้นคือการใช้ auto-encoder ในการสร้าง model deep-learning

แต่ทุก ๆ วิธีนั้น ล้วนใช้ nature หรือธรรมชาติของข้อมูล ว่าข้อมูลส่วนมากจะคล้ายกัน สำหรับ fraud กับ anomaly เกิดขึ้นไม่บ่อย จึงสร้าง model รวมจากทุก ๆ data แล้ววัดว่าแต่ละข้อมูลห่างจาก model เท่าไหร่ โดยที่ fraud กับ anomaly จะห่างจาก model มากกว่า data ที่ปกติ

สุดท้ายเรื่อง fraud กับ anomaly ใช้ลดความเสียหาย ช่วยชีวิต นำสู่การค้นพบ อย่างมหาศาลและเป็นหัวข้อที่ data scientist ควรจะต้องรู้และทำได้ครับ

โค้ด colab อยู่ในลิงค์นี้ครับ -> คลิก

กลับ

Collaborate to Innovate

Together, We Build the Future.

Collaborate to Innovate

Together, We Build the Future.