รูปแบบ SQL ที่ใช้ตรวจจับการฉ้อโกงธุรกรรม
(analytics.fixelsmith.com)- การตรวจจับการฉ้อโกงมักเริ่มจากการจัดการ ตารางและการ join ให้ถูกต้องก่อนแมชชีนเลิร์นนิง และค้นหารูปแบบผิดปกติด้านความถี่ ตำแหน่ง จำนวนเงิน ร้านค้า และช่วงเวลาด้วย SQL
- Velocity ใช้หาช่วงที่ธุรกรรมของผู้ถือบัตรเดียวกันกระจุกตัวในเวลาสั้น ๆ โดยต้องปรับหน้าต่างเวลา ค่าเกณฑ์ และมีไวท์ลิสต์สำหรับ false positive
- Impossible travel ใช้
LAG()และการคำนวณระยะทางเพื่อตรวจจับการเดินทางที่เป็นไปไม่ได้ทางกายภาพ เช่น จ่ายเงินที่ Chicago แล้วอีก 7 นาทีถัดไปจ่ายที่ Los Angeles ซึ่งเป็นสัญญาณแรงของบัตรโคลน - ความผิดปกติของจำนวนเงิน มองหาช่วงราคาอย่าง
$1.00,$99.99,$499.99ที่อาจบ่งชี้การทดสอบบัตรหรือการหลบกฎ แต่ไม่ค่อยเหมาะกับธุรกรรมสวัสดิการ - หากใช้การพุ่งขึ้นของร้านค้า ธุรกรรมนอกช่วงเวลาปกติ และคอลัมน์อนุพันธ์จาก window function ร่วมกัน จะสามารถ ให้คะแนนธุรกรรมจากหลายสัญญาณ และลดรอบการทำซ้ำจากหลายสัปดาห์เหลือไม่กี่ชั่วโมงได้
รูปแบบ SQL สำหรับหาสัญญาณการฉ้อโกงในข้อมูลธุรกรรม
- การตรวจจับการฉ้อโกงมักเริ่มจาก ตารางและการ join ที่ถูกต้อง รวมถึง SQL สำหรับหารูปแบบธุรกรรมที่ผิดปกติ ก่อนจะไปถึงแมชชีนเลิร์นนิงหรือกราฟดาต้าเบส
- ใช้ได้กับข้อมูลที่มีการเคลื่อนย้ายเงินและมีบันทึกล็อก เช่น บัตรเครดิต การเคลมค่ารักษาพยาบาล อีคอมเมิร์ซ POS และโครงการสวัสดิการของรัฐ
- เมื่อเจอชุดข้อมูลใหม่ มักเริ่มสะสมแพตเทิร์นตามลำดับ ความถี่, การเดินทางที่เป็นไปไม่ได้, ความผิดปกติของจำนวนเงิน, การกระจุกตัวที่ร้านค้า, ช่วงเวลาผิดปกติ, และสัญญาณจาก window function
1. Velocity: ธุรกรรมมากผิดปกติในเวลาสั้น ๆ
- เมื่อมีการพยายามรูดใช้บัตรหรือบัญชีที่ถูกขโมยให้หมดอย่างรวดเร็ว จะเกิด รูปแบบที่ธุรกรรมกระจุกตัวในเวลาสั้น ๆ กับผู้ถือบัตรคนเดิม
- คิวรีพื้นฐานจะจัดกลุ่มธุรกรรมย้อนหลัง 30 วันเป็นรายชั่วโมง และหาช่วงที่จำนวนธุรกรรมต่อ
cardholder_idเกินเกณฑ์ - ค่าที่ต้องปรับหลัก ๆ คือ ขนาดหน้าต่างเวลา และ ค่าเกณฑ์จำนวนธุรกรรม
- สามารถรันเวอร์ชัน 1 นาที 5 นาที และ 1 ชั่วโมงแบบขนานเพื่อเปรียบเทียบได้
- กลุ่มที่ทดสอบบัตรอาจอัดธุรกรรมเข้ามาภายในไม่กี่วินาที ส่วนกลุ่มโกงสวัสดิการอาจเคลื่อนไหวตลอดครึ่งวัน จึงมีสเกลต่างกัน
- ผู้ใช้ปกติก็อาจเกินเกณฑ์ได้
- ผู้ดูแลตู้ขายอัตโนมัติ
- คนที่เติมเงินบัตรพรีเพดจำนวนมาก
- หลังจากสำรวจรอบแรกแล้ว จึงควรมี ไวท์ลิสต์ของกลุ่ม false positive เหล่านี้
- วิธี sliding window ใช้
COUNT(*) OVER (...) RANGE BETWEEN INTERVAL '5 minutes' PRECEDING AND CURRENT ROWเพื่อคำนวณจำนวนธุรกรรมใน 5 นาทีล่าสุด QUALIFYใช้ได้ใน Snowflake, BigQuery, Databricks, Teradata- ใน Postgres ต้องห่อทั้งคิวรีด้วย CTE แล้วค่อยกรองด้านนอก
2. Impossible travel: การเดินทางที่เป็นไปไม่ได้ทางกายภาพ
- หากบัตรใบเดียวกันถูกใช้จ่ายที่ Chicago แล้วอีก 7 นาทีถัดมาถูกใช้ที่ Los Angeles มีความเป็นไปได้สูงว่าหนึ่งในสองธุรกรรมนั้นเป็นของปลอม
- แพตเทิร์นนี้เป็นสัญญาณแรงสำหรับการจับ บัตรโคลน เพราะแทบไม่มีเหตุผลปกติที่บัตรใบเดียวจะอยู่คนละที่ห่างไกลกันภายในไม่กี่นาที
- คิวรีจะใช้
LAG()เพื่อดึงเวลาและตำแหน่งของธุรกรรมก่อนหน้า แล้วคำนวณระยะทางและเวลาระหว่างตำแหน่งก่อนหน้ากับตำแหน่งปัจจุบัน haversineเป็นฟังก์ชันสำหรับคำนวณ ระยะทางตามส่วนโค้งใหญ่ของโลก (great-circle distance)- ดาต้าแวร์เฮาส์ส่วนใหญ่มีให้ใช้อยู่แล้ว
- หากไม่มี ก็เป็นฟังก์ชันที่เขียนขึ้นเองได้ไม่ยาก
- ค่าเกณฑ์ตัวอย่างคือ 600mph
- เพราะความเร็วเดินทางของเครื่องบินพาณิชย์อยู่ที่ราว 575mph จึงหมายถึงเป็นความเร็วที่แม้บินก็ยังทำไม่ได้
- หากลดลงเหลือ 100mph จะจับการเคลื่อนที่ภาคพื้นดินที่เร็วได้ด้วย แต่ก็จะเริ่มติดธุรกรรมปกติของผู้โดยสารเครื่องบินจริง หรือพ่อแม่ที่ขับรถพาเด็กไปส่ง
- ยังมีสัญญาณเพิ่มเติมในตระกูลเดียวกันที่ดูได้
- หากมีธุรกรรมในสองเมืองที่ห่างกันมากภายในรัฐเดียวกันใน 5 นาที อาจชี้ถึง ขบวนการโคลนในพื้นที่
- หากมีธุรกรรมจากหลาย ZIP code ภายใน 1 ชั่วโมง อาจชี้ถึง ขบวนการ skimmer ที่เคลื่อนไหวในพื้นที่เดียวกัน
- หากมีธุรกรรมข้ามพรมแดนภายใน 10 นาที อาจเป็นสัญญาณของ ขบวนการระหว่างประเทศ
3. Amount anomalies: ธุรกรรมผิดปกติในช่วงจำนวนเงินบางแบบ
- ในการฉ้อโกงมักมี รูปแบบจำนวนเงิน ที่พบได้บ่อย แต่พบได้น้อยในการใช้งานปกติ
- เงื่อนไขตัวอย่างจะมองหาช่วงจำนวนเงินดังนี้
$1.00,$5.00,$10.00- ตั้งแต่
$99.50ขึ้นไปแต่ต่ำกว่า$100.00 - ตั้งแต่
$499.50ขึ้นไปแต่ต่ำกว่า$500.00
- จำนวนเงินดอลลาร์แบบเลขกลมขนาดเล็กมักเป็นสัญญาณของ การทดสอบบัตร
- เป็นขั้นตอนตรวจสอบว่าหมายเลขที่ได้จากการ dump หมายเลขบัตรยังใช้งานได้จริง ก่อนนำไปขายต่อ
- กรณีที่เจ้าของบัตรจริงจะซื้อสินค้าราคา
$1.00พอดีนั้นพบได้ไม่บ่อย - กาแฟมักเป็น
$4.73ค่าน้ำมันอาจเป็น$52.81มากกว่าจะเป็นเลขกลมเป๊ะ
- จำนวนเงินที่อยู่ต่ำกว่าเกณฑ์เล็กน้อยมีความหมายอีกแบบ
$99.99อาจเป็นการหลบเส้นที่หลายแห่งเริ่มขอตรวจบัตรประชาชนตั้งแต่$100$499.99อาจเป็นการหลบวงเงินถอน ATM รายวัน$500- เป็นสัญญาณว่าผู้ทำธุรกรรมรู้กฎและตั้งใจอยู่ต่ำกว่าเกณฑ์
- ในธุรกรรมสวัสดิการ รูปแบบจำนวนเงินกลม ๆ แทบไม่ช่วยมากนัก
- สวัสดิการไม่ได้ถูกทดสอบบัตรในลักษณะเดียวกัน
- โดยทั่วไปสัญญาณที่สำคัญกว่าคือผู้รับซ้ำซ้อน
4. Suspicious merchants: การกระจุกตัวผิดปกติในระดับร้านค้า
- หากเครื่องอ่านบัตรบางตัว เช่น ที่หัวจ่ายน้ำมัน ติด skimmer ก็อาจนำไปสู่ การฉ้อโกงหลายสิบรายการ ไม่ใช่แค่รายการเดียว
- บัตรทุกใบที่ใช้เครื่องอ่านนั้นในช่วงหลายสัปดาห์อาจถูกเก็บเข้าไปในฐานข้อมูลของใครบางคน
- หากมองจากมุมร้านค้า จะเห็นเป็นจำนวน บัตรที่ไม่เกี่ยวข้องกันเพิ่มขึ้นมากกว่าปกติในช่วงสั้น ๆ และยอดธุรกรรมก็สูงขึ้นด้วย
- ตัวอย่างเกณฑ์แบบง่ายจะจัดกลุ่มย้อนหลัง 7 วันตามร้านค้าและรายชั่วโมง แล้วคำนวณ
- จำนวนบัตรไม่ซ้ำ
- จำนวนธุรกรรมทั้งหมด
- มูลค่าธุรกรรมรวม
- จากนั้นหาช่วงเวลาที่มีบัตรไม่ซ้ำเกิน 20 ใบ และยอดรวมเกิน
$5000
- ค่าเกณฑ์แบบตายตัวมีปัญหาเรื่องการปรับตามขนาด
- Costco อาจเกินเกณฑ์นี้ได้ใน 90 วินาที
- ร้านหนังสือมือสองแทบไม่มีทางเกิน
- วิธีที่ดีกว่าคือเปรียบเทียบแต่ละร้านค้ากับ ค่าพื้นฐานย้อนหลังของร้านนั้นเอง
- จัดกลุ่มธุรกรรมย้อนหลัง 60 วันเป็นรายชั่วโมง
- คำนวณค่าเฉลี่ยจำนวนบัตรไม่ซ้ำจาก 168 hourly bucket ย้อนหลังของแต่ละร้าน
- หาช่วงที่จำนวนบัตรไม่ซ้ำปัจจุบันมากกว่าค่าเฉลี่ยย้อนหลัง 3 เท่า
- 168 hourly bucket คือ ช่วงรายชั่วโมงของ 7 วันที่ผ่านมา
- เพราะฤดูกาลตามวันและสัปดาห์มีความสำคัญ
- แม้แต่ร้านกาแฟเดียวกัน ค่าพื้นฐานของวันอังคารบ่าย 2 โมงกับวันเสาร์ 9 โมงเช้าก็ไม่เหมือนกัน
- จุดเริ่มต้นที่ใช้ได้คือ มากกว่าปกติ 3 เท่า
- หลวมพอที่จะไม่ทำให้การแจ้งเตือนถาโถมเกินไป
- แต่ก็เข้มพอที่จะจับช่วงเวลาที่ผิดปกติจริงได้
5. Off-hours: ธุรกรรมนอกช่วงเวลาการใช้งานปกติของบุคคล
- คนส่วนใหญ่มีรูปแบบการใช้จ่ายประจำของตัวเอง
- หากคนที่ทำงาน 9 โมงถึง 5 โมงเย็นจู่ ๆ เริ่มเติมน้ำมันตอนตี 3 ก็อาจหมายถึงบัตรถูกผู้อื่นนำไปใช้ หรือเจ้าตัวกำลังเดินทาง
- เรื่องว่าอยู่ระหว่างเดินทางหรือไม่สามารถตรวจสอบเพิ่มด้วยสัญญาณอื่นได้
- คิวรีจะคำนวณจำนวนธุรกรรมย้อนหลัง 90 วันแยกตามผู้ถือบัตรและชั่วโมงของวัน แล้วนับเป็น ช่วงเวลาปกติ เฉพาะชั่วโมงที่เคยมีธุรกรรมอย่างน้อย 2 ครั้ง
- จากนั้นเมื่อมีธุรกรรมใหม่ หากเวลาอยู่นอกช่วง
earliest_hourถึงlatest_hourของผู้ถือบัตรคนนั้น ก็จะถูกตรวจจับ - เงื่อนไข “มีอย่างน้อย 2 รายการในชั่วโมงนั้น” ในคิวรีย่อยสำคัญมาก
- ป้องกันไม่ให้การเติมน้ำมันดึก ๆ แบบบังเอิญครั้งเดียวเมื่อ 3 เดือนก่อน ถูกนับรวมเป็นช่วงเวลาปกติ
- ทำให้เกณฑ์อิงกับ พฤติกรรมจริง ไม่ใช่ “เคยเกิดขึ้นครั้งหนึ่ง”
- ข้อเสียคือ ต้องมีข้อมูลย้อนหลัง
- บัญชีใหม่ยังไม่มีค่าพื้นฐาน
- สำหรับบัญชีใหม่อาจใช้รูปแบบช่วงเวลาของผู้ใช้ทั้งระบบ หรือข้ามแพตเทิร์นนี้ไปจนกว่าจะมีข้อมูลสะสมหลายเดือน
6. การผสานสัญญาณด้วย window function
- แพตเทิร์นของ window function ไม่ได้เป็นการฉ้อโกงอีกประเภทหนึ่งโดยตรง แต่เป็นงานเตรียมเพื่อเปลี่ยนทั้งห้าแพตเทิร์นก่อนหน้าให้เป็น สัญญาณที่นำมาผสมกันได้
- สามารถสร้างคอลัมน์อนุพันธ์ระดับธุรกรรมไว้ล่วงหน้าได้ เช่น
- เวลาที่ผ่านไปหลังธุรกรรมก่อนหน้า:
timestamp - LAG(timestamp) - มีการเปลี่ยนร้านค้าหรือไม่: เปรียบเทียบ
merchant_idก่อนหน้ากับmerchant_idปัจจุบัน - ยอดสะสมใน 24 ชั่วโมงล่าสุด:
SUM(amount) OVER (...) - เป็นธุรกรรมลำดับที่เท่าไรของวันนั้น:
ROW_NUMBER()
- เวลาที่ผ่านไปหลังธุรกรรมก่อนหน้า:
- หาก materialize คอลัมน์เหล่านี้ไว้ กฎตรวจจับการฉ้อโกงจะยุบเหลือเพียง filter expression ที่เรียบง่าย
- กลุ่มที่ทดสอบบัตรสามารถหาได้ด้วยเงื่อนไขต่อไปนี้
- เป็นธุรกรรมลำดับที่ 5 ของวันหรือมากกว่า
- ห่างจากธุรกรรมก่อนหน้าน้อยกว่า 60 วินาที
- ร้านค้าแตกต่างจากธุรกรรมก่อนหน้า
- หากนิยามสมมติฐานการฉ้อโกงใหม่ ๆ เป็น SQL filter ได้ แทนที่จะต้องออกเป็น engineering ticket รอบการทำซ้ำจะลดจาก หลายสัปดาห์เหลือไม่กี่ชั่วโมง
- ผลลัพธ์คือจับการฉ้อโกงได้มากขึ้นและเร็วขึ้น
วิธีใช้แพตเทิร์นเหล่านี้ร่วมกัน
- ไม่มีแพตเทิร์นใดเพียงอย่างเดียวที่เพียงพอ
- แต่ละแพตเทิร์นมีข้อจำกัดชัดเจน
- Velocity มี false positive อย่างผู้ดูแลตู้ขายอัตโนมัติ
- การเดินทางที่เป็นไปไม่ได้ทางภูมิศาสตร์จะพลาดการฉ้อโกงที่เกิดภายในเขตมหานครเดียวกัน
- ความผิดปกติของจำนวนเงินมักใช้ได้ดีเฉพาะในบริบทการทดสอบบัตร
- กฎช่วงเวลาผิดปกติต้องอาศัยข้อมูลย้อนหลัง
- ในงานจริง วิธีที่ได้ผลคือรันทุกแพตเทิร์น แล้ว ให้คะแนนธุรกรรมจากหลายสัญญาณ
- ธุรกรรมที่ติด 3 หรือ 4 สัญญาณมักเป็นการฉ้อโกงแทบแน่นอน
- ธุรกรรมที่ติดเพียงสัญญาณเดียวอาจเป็นการใช้งานแปลก ๆ ของเจ้าของบัตรปกติที่กำลังเดินทาง
- หากเพิ่งเริ่มทำระบบตรวจจับการฉ้อโกง ควรเริ่มจาก Velocity
- มันเปิดเผยการฉ้อโกงได้ในปริมาณที่มีประโยชน์
- จับกิจกรรมปกติผิดพลาดค่อนข้างน้อย
- ต้นทุนการรันก็ต่ำ
- หากมีข้อ 1 ถึง 5 แล้ว จุดที่ควรลงทุนต่อคือ คอลัมน์ดิบจาก window function
- สร้างครั้งเดียว นักวิเคราะห์ทั้งทีมใช้ต่อได้
- การเพิ่มแพตเทิร์นฉ้อโกงถัดไปจะไม่กลายเป็นอีกหนึ่งโปรเจกต์แยก
ข้อควรระวัง
-
การจัดการ NULL
- ตารางธุรกรรมจริงมักไม่ได้ใช้
NULLแบบในตำรา SQL เบื้องต้น - ระบบเก่าจำนวนมากใช้ sentinel value เช่น
9999-12-31สำหรับ “ไม่มีวันสิ้นสุด” และ0001-01-01สำหรับ “ไม่มีวันเริ่มต้น” - หากกรองด้วย
IS NULLอาจพลาดแถวเหล่านี้ไปแบบเงียบ ๆ - ควรตรวจสอบธรรมเนียมของแต่ละตารางก่อนเขียน
WHERE
- ตารางธุรกรรมจริงมักไม่ได้ใช้
-
False positive
- ทุกกฎอาจจับเจ้าของบัตรจริงที่มีพฤติกรรมแปลกแต่ถูกกฎหมายได้
- เคสที่ถูกติดธงควรมี การตรวจสอบโดยมนุษย์
- ต้องมีวงจรฟีดแบ็กเพื่อปรับค่าเกณฑ์โดยดูจากสิ่งที่เป็นการฉ้อโกงจริงและไม่ใช่จริง
- หากบล็อกอัตโนมัติด้วยกฎเดียว อาจเสียลูกค้าได้
-
ความเป็นส่วนตัว
- หากข้อมูลมี PII ต้องปฏิบัติตาม นโยบายการใช้ข้อมูล ที่เกี่ยวข้อง
- ควรเริ่มจากข้อมูลที่ทำให้ไม่สามารถระบุตัวตนได้หรือข้อมูลตัวอย่างก่อน และใช้ข้อมูลโปรดักชันเมื่อได้รับอนุมัติแล้วเท่านั้น
-
ต้นทุน
- window function บนพาร์ทิชันขนาดใหญ่ไม่ได้ราคาถูก
- ควรกรองช่วงวันที่ก่อน แล้วค่อยใช้ window function
- หากรัน
LAG()บนธุรกรรม 2 ปีของทั้งชุดข้อมูลก่อน แล้วค่อยใส่WHEREทีหลัง อาจใช้เครดิตของ data warehouse สิ้นเปลืองมาก
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
เกณฑ์ที่ว่าผู้ถือบัตรตัวจริงแทบไม่ค่อยซื้อของราคา $1.00 เป๊ะ ๆ ดูจะขึ้นอยู่กับว่าผู้ขายตั้งราคาอย่างไรไม่ใช่หรือ
เวลาจะทดสอบบัตรเครดิตที่ขโมยมาโดยซื้ออะไรสักอย่างบนเว็บไซต์ ผู้ซื้อก็ไม่ได้กำหนดราคาเองได้ตามใจ
อีกอย่างมันยังดูคิดอยู่บนสมมติฐานแบบสหรัฐฯ มากเกินไป ซึ่งราคาไม่รวมภาษี แต่ในภูมิภาคอื่น ๆ ราคากลม ๆ เป็นเรื่องปกติมาก
เกณฑ์อื่น ๆ ในบทความก็น่าสงสัยว่าจะใช้ได้ดีแค่ไหน เช่น ถ้าตั้งธงคนที่ทำธุรกรรมนอกช่วงเวลาที่ปกติทำเกิน 2 ครั้งในช่วง 90 วันที่ผ่านมา แบบนั้นคงจับคนได้สักครึ่งหนึ่งหรือเปล่า
ไม่ชัดว่านี่เป็นบทความที่เอาความรู้เฉพาะทางซับซ้อนมาทำให้ง่ายเกินไปด้วย SQL query ธรรมดา ๆ หรือเป็นแค่การเดาและแต่งขึ้นทั้งหมด ประโยค “หกแพตเทิร์น SQL ที่ใช้จับธุรกรรมฉ้อโกง” กับ “ไม่มีอะไรในนี้ที่ฉันเคยทำจริงหรือเคยเห็นจริง” มันขัดกันเอง
ปกติคงไม่ไปซื้อน้ำมัน กาแฟ หรือขนมตอนตี 2 แต่ถ้าเกิดทำแบบนั้นนาน ๆ ที ก็น่าจะเป็นเหตุฉุกเฉินส่วนตัว และคงไม่อยากโทรหาธนาคารในจังหวะนั้น
เข้าใจว่าโจรแบบฉวยโอกาสก็อาจออกปฏิบัติการเวลานั้นได้ แต่ ต้นทุนของ false positive ก็มีจริงเหมือนกัน
อีกทั้งยังมีปั๊มน้ำมันที่ให้เลือกยอดตายตัวอย่าง 10, 20 หรือ 50 ยูโรด้วย
ปรากฏว่าบัตรถูกบล็อกเพราะสงสัยว่าเป็นการฉ้อโกง ซึ่งน่าหงุดหงิดมาก ไม่ใช่เรื่องที่อยากจัดการตอนตี 2 ขณะเมา
บางทีอาจพูดได้ว่ามันปกป้องฉันจากตัวเอง แต่ก็ยังน่ารำคาญอยู่ดี
และการรู้จำแพตเทิร์นแบบ heuristic ที่ไม่ได้หวังความแม่นยำเกือบ 100% แบบนี้ ไม่ใช่งานที่ AI ควรจะถนัดพอดีหรือ
เกณฑ์ “ข้ามพรมแดนภายใน 10 นาทีคือองค์กรข้ามชาติ” ใช้ได้กับคนธรรมดาที่อาศัยอยู่ใน พื้นที่ติดชายแดนของยุโรป ด้วยเหมือนกัน
ต่อให้ตัดธุรกรรมแบบไม่ใช้บัตรจริงออกไป ก็ยังดูเหมือนตั้งสมมติฐานผิด ๆ ว่าตำแหน่งร้านค้าทั้งหมดถูกตั้งค่าอย่างแม่นยำ การขายทั้งหมดเกิดในร้านออฟไลน์ ไม่มีการขายเคลื่อนที่ และทุกธุรกรรมถูกประมวลผลแบบออนไลน์
อ่านจนจบแล้วจะเห็นว่ามันเป็นคำแนะนำที่กลวงและขัดแย้งกันเอง ดูแทบจะแน่ใจได้ว่าเป็น บทความที่ LLM สร้าง
บอกว่า “ทีมของคุณ” ไม่ควรพึ่งพาแพตเทิร์นใดแพตเทิร์นหนึ่ง แต่ก็กลับบอกว่าแพตเทิร์นแรกเพียงอย่างเดียวก็เผย “ปริมาณการฉ้อโกงที่มีประโยชน์” ได้
ยังมีประโยคประหลาดอย่าง “นักวิเคราะห์ทุกคนในทีมจะใช้สิ่งเหล่านั้น นั่นคือ window function เมื่อมีมัน และการเพิ่มแพตเทิร์นฉ้อโกงถัดไปจะไม่ใช่โปรเจกต์”
อีกทั้งตัวอย่างแทบทั้งหมดไม่ได้ใช้
IS NULLเลย แต่กลับมีการอภิปรายที่ไม่เกี่ยวกันว่าการกรองIS NULLอาจไม่ถูกนำไปใช้ และตัวอย่างเดียวที่ใช้ก็อยู่คนละบริบทโดยรวมคือ คุณภาพต่ำและยาวเกินไป
Hacker News เรื่องนี้ต้องพูดกันตรง ๆ
“Fixel Smith” คือ ตัวตนที่ AI สร้างขึ้น และบทความนี้แทบไม่เกี่ยวกับการวิเคราะห์การฉ้อโกงเลย ชื่อนี้ถูกใช้เป็นแทบทุกตัวตนที่นึกออกได้ ทั้งนักดนตรี (1) นักเขียนนิยาย (2) นักวิเคราะห์การฉ้อโกง (3) อินฟลูเอนเซอร์ (4)
ได้คะแนนเกิน 220 และมีคอมเมนต์เกิน 70 แต่แทบไม่มีใครสังเกตว่าบทความนี้ปลอมพอตัว และไม่มีใครเห็นว่าผู้เขียนเป็นตัวละครที่ AI สร้าง
https://www.amazon.it/Forged-Soundtrack-Explicit-Fixel-Smith...
https://fixelsmith.com
https://analytics.fixelsmith.com/
https://www.instagram.com/fixeltales/
เลยชวนสงสัยว่าน้ำท่วมจาก AI นี้กำลังเปิดเผยความจริงที่น่าอึดอัดเกี่ยวกับวิจารณญาณของชุมชน หรือเป็นแค่ความล้มเหลวของกลไกป้องกันเดิมที่แก้ไขได้ถ้าปรับให้ถูกจุด
ถ้าสมมติว่าคอมเมนต์ทั้งหมดเขียนด้วยความสุจริตใจ แม้แต่ที่นี่ยังมี ความรู้เท่าทัน AI ต่ำ ก็ถือว่าน่ากังวลพอสมควร
งานนิยายแทบไม่เกี่ยวอะไรกับบทความวิเคราะห์ และบทความวิเคราะห์ก็ดูมี สำนวนแบบ LLM เลยยิ่งน่าสงสัยไปหมด พอนึกว่าหัวข้อของต้นฉบับคือการฉ้อโกงก็ยิ่งประชดดี
พูดตรง ๆ คือปกติฉันแทบไม่ดูแม้แต่ชื่อผู้เขียน และยิ่งไม่ค่อยไปดูส่วนอื่นของเว็บไซต์
จะเป็นข้อมูลแต่งหรือไม่ก็ยังไม่ชัด แต่เราก็วิจารณ์เนื้อหาของบทความได้โดยไม่ต้องเดาว่า LLM เขียนหรือเป็นนิยาย เพราะมีข้อบกพร่องที่เจาะจงกว่านั้นอีกมาก
พวกเรากำลังพัฒนาเฟรมเวิร์กความปลอดภัยโอเพนซอร์ส tirreno
ฉันสงสัยแนวทางที่อธิบายไว้ที่นี่ เช่น impossible travel เป็นเทคนิคที่ใช้จริงและแพร่หลาย แต่เกี่ยวกับพฤติกรรมผู้ใช้ออนไลน์ที่อิงจากที่อยู่ IP
ใน tirreno มี rule แยกสำหรับกรณีที่ชัดเจนว่า IP มาจาก Apple Relay หรือ VPN/Tor และพวกนั้นก็เป็นแฟล็กอีกชุดหนึ่งต่างหาก
ฉันคิดว่าตัวอย่างบางส่วนหรือทั้งหมดน่าจะถูกสร้างโดย LLM เพราะบริบทปนกันมั่ว และในโลกจริงไม่มีใครเก็บตำแหน่ง GPS ของการจ่ายเงินผ่านบัตรในปริมาณมากแบบนั้น
นี่ใกล้เคียงกับ ตรรกะแบบอิงกฎ ที่เข้ารหัสเป็น SQL query โดยไม่มีข้อมูลหลักฐานมารองรับมากกว่า
มี threshold เต็มไปหมด แต่ไม่มีข้อมูลว่าค่า threshold เหล่านั้นมีความหมายจริง
คำยืนยันทำนองว่า “การตรวจจับการฉ้อโกงในข้อมูลธุรกรรมส่วนใหญ่คือ SQL ไม่ใช่ machine learning ไม่ใช่ graph database และไม่ใช่อะไรก็ตามที่ Gartner กำลังปั่นในปีนี้” จะพอฟังขึ้นก็ต่อเมื่อกำลังพูดถึงงานด้าน program integrity ทั้งหมด
ถ้าวิธีที่ง่ายกว่าและหยาบกว่าช่วยแก้ปัญหาในโดเมนได้ มันก็อาจดีกว่า
ลูกค้า fintech มักอยากรู้ว่าธุรกรรมที่กำลังเกิดขึ้นตอนนี้เป็นการฉ้อโกงหรือไม่ และต้องการคำตอบภายในไม่กี่มิลลิวินาทีบนข้อมูลมิติสูง งานนี้มีขนาดและข้อจำกัดแบบเรียลไทม์ที่ relational database มักรองรับได้ยาก จึงมักถูกใช้กับอย่างอื่นแทน เช่น การโหลดข้อมูลย้อนหลัง
นั่นจึงเป็นเหตุผลที่มีทั้งฐานข้อมูล in-memory, stream processing engine และ machine learning เข้ามาเกี่ยวข้อง
ถึงอย่างนั้นบางประเด็นของผู้เขียนก็สมเหตุสมผล โดยเฉพาะปัญหาการรับมือกับการแจ้งเตือนที่มีสัญญาณรบกวนเยอะ ซึ่งเป็นปัญหาทั่วไปที่ไกลเกินกว่าแค่งาน performance engineering เลยทำให้อยากอ่านบทความถัดไป
ฝั่งการป้องกันจะถูกจำกัดด้วยข้อกำหนดด้าน latency ข้อมูลที่มีให้ใช้ และภาพพฤติกรรมของผู้ใช้ที่ไม่สมบูรณ์เสมอ เราใช้ machine learning และกฎเพื่อให้ตัดสินใจได้เร็วและจัดการเคสส่วนใหญ่ แต่ด้วยข้อจำกัดเหล่านั้นจึงไม่อาจหยุดการฉ้อโกงทั้งหมดได้อย่างแม่นยำ
ส่วนการตรวจจับจะจัดการกับผลลัพธ์หลังจากนั้น โดยทั่วไปจะมีทีมนักวิเคราะห์คอยวิเคราะห์ธุรกรรมที่ได้รับอนุมัติแล้วเพื่อหาสัญญาณการฉ้อโกง เรื่องนี้สำคัญมากโดยเฉพาะกับประเภทการฉ้อโกงที่ไม่มีสัญญาณภายนอกอย่าง chargeback หรือคำร้องเรียนจากลูกค้า เช่น platform integrity ก็เป็นตัวอย่างหนึ่ง และระบบต่อต้านการฟอกเงินของ fintech ก็ต้องออกตามหาการฉ้อโกงเช่นกัน
ที่ว่าทั้งสองเสริมกันก็เพราะธุรกรรมที่ตรวจพบภายหลังจะกลายเป็น label สำหรับฝึกและประเมินโมเดลการป้องกันรุ่นถัดไป
เขาบอกว่าถ้ารูดบัตรในชิคาโกแล้วอีก 7 นาทีต่อมารูดอีกครั้งที่ลอสแอนเจลิส อย่างใดอย่างหนึ่งต้องปลอม ฉันเลยสงสัยว่าแล้วในกรณี การช็อปปิงออนไลน์ มันทำงานยังไง
ถ้านั่งบนโซฟาแล้วซื้อของจาก Amazon ระบบจะลงที่อยู่ว่าอยู่ที่ไหน
และยังมีกรณีขอบอย่างคู่สมรสใช้บัญชีออนไลน์ร่วมกัน แล้วอีกคนกำลังเดินทางและซื้อของด้วยข้อมูลบัตรที่บันทึกไว้ด้วย
ร้านค้าและธนาคารแยกความต่างนี้ได้
ประเด็นที่ว่า “วิธีนี้ใช้ไม่ได้จนกว่าจะมีประวัติสะสมพอ และบัญชีใหม่ไม่มี baseline” เป็นองค์ประกอบด้าน ประสบการณ์ลูกค้า ที่คนมองข้ามกันมาก
ถ้าฉันเป็นลูกค้าใหม่หรือมีพฤติกรรมใหม่ แล้วบัตรถูกปฏิเสธ มันจะรู้สึกเหมือนซอฟต์แวร์ทำงานดี
แต่ถ้าฉันมีประวัติที่ผ่านมาแล้วว่าเป็นคนยืนยันธุรกรรมจริง และยังถูกปฏิเสธอีก แบบนั้นจะรู้สึกรำคาญกับอัลกอริทึมที่ทั้งใสซื่อและหวาดระแวง
ธุรกรรมฉ้อโกงสุดท้ายแล้วมักถูกยกเลิกหรือคืนเงิน ทำให้ธนาคารต้องรับภาระขาดทุนเอง ส่วนธุรกรรมที่ถูกปฏิเสธก็แค่ทำให้มีลูกค้าโกรธเพิ่มอีกคนหนึ่ง และลูกค้าก็มักบ่นแล้วก็ลืมไปในไม่ช้า ดังนั้นภาระของต้นทุนที่ถูกผลักออกไปจึงตกอยู่กับลูกค้า
เพราะฉะนั้นธนาคารจึงมีแรงจูงใจให้พลาดไปในทางระวังเกินไว้ก่อน และพร้อมจะปฏิเสธธุรกรรมแม้จะมี false positive ก็ตาม
แก่นของ machine learning ไม่ใช่การเรียนรู้กฎแบบนี้จากข้อมูลหรือ
ฉันคิดว่าแนวทางที่ถูกคือใช้โมเดล machine learning หาแพตเทิร์นที่สัมพันธ์กับการฉ้อโกง แล้วประเมินว่ามีอันไหนที่ฟังขึ้นบ้าง แบบนั้นอาจค้นพบ สมมติฐานใหม่ ได้ด้วย
นักวิเคราะห์ที่เป็นมนุษย์ควรจะอธิบายให้ทีม compliance ฟังได้ด้วย อีเมล 5 นาที ว่าทำไมธุรกรรมหนึ่งจึงถูกปฏิเสธ และถ้าอยากเลี่ยงการตัดสินใจเชิงลบต้องทำอะไรให้ต่างออกไป
เวลาซ่อมปัญหาหนึ่งด้วย machine learning มักจะได้ปัญหาใหม่อีกสองอย่างที่ยังมองไม่ชัดตามมา พอเวลาผ่านไปและสิ่งต่าง ๆ เปลี่ยนไป SQL ก็มักมีเรื่องให้ประหลาดใจน้อยกว่า ทั้งในแง่ regression และผลข้างเคียงที่คาดไม่ถึง