หัวข้อสุดท้ายที่เข้าฟังในงาน Code Mania 1010 :: All about passion
คือ Real-time Bot Detection using Machine Learning จาก Agoda
ส่วนที่น่าสนใจคือ ขั้นตอนของการสร้าง model
เพื่อนำมามาตรวจสอบ ในแต่ละ request ที่เข้ามายังระบบว่า
เป็น Bot ที่เราไม่ต้องการหรือไม่
ตลอดจนการนำไปใช้งาน ซึ่งจะมี feature จำนวนมาก
แน่นอนว่า feature ต่าง ๆ ไม่สามารถเปิดเผยได้
มิเช่นนั้น จะโดนเล่นงานแน่นอน !!
มาเริ่มกันเลย

เริ่มด้วยประเภทของ Bot

ประกอบไปด้วย 2 ประเภทคือ

  1. Good bot คือ bot ที่ดี และเราไว้ใจให้เข้ามา เช่น Google Bot หรือพวก search engine bot นั่นเอง
  2. Unwanted bot คือ bot ที่เราไม่ต้องการ  เข้ามาโดยมีเจตนาไม่ดี ทั้งยิงระบบ ทั้งดึงข้อมูลจากระบบไปใช้งาน โดยที่ bot ประเภทนี้มักชอบทำตัวให้เหมือนกัคนใช้งานทั่วไปอีกด้วย

ดังนั้นเป้าหมายของการตรวจสอบคือ
ทำการตรวจสอบ bot ประเภทที่สองนี่เอง
คำถามคือ เราจะทำการตรวจสอบได้อย่างไร ?

การตรวจสอบ bot แบ่งออกเป็น 2 กลุ่มคือ

  • กลุ่มที่ 1 ตรวจสอบแบบ offline ทำการเก็บข้อมูลไว้ก่อน จากนั้นจึงทำการตรวจสอบย้อนหลัง เพื่อหารูปแบบของ bot
  • กลุ่มที่ 2 ตรวจสอบแบบ online ทำการตรวจสอบในแต่ละ request ที่ส่งเข้ามายังระบบทันที ว่าเป็น bot หรือไม่ ?

เป้าหมายของการตรวจสอบคือ แบบ online นั่นเอง
คำถามคือ ทำอย่างไร ?

ทางผู้พูดบอกว่า เริ่มด้วยการตั้ง policy หรือ pattern ขึ้นมา

ยังไม่ได้ใช้ Machine Learning นะ
ทำการสร้าง policy และ pattern ขึ้นมา
ตามที่ได้วิเคราะห์จากข้อมูลที่เก็บไว้
จะเป็นไปในรูปแบบ static  ยกตัวอย่างเช่น

  • จำนวน request ของแต่ละ session หรือผู้ใช้งานว่า เข้ามาดูโรงแรมเกิน 100 ที่หรือไม่
  • จำนวน request ต่อ IP นั้นเกิน 1,000 หรือไม่ 

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

ดังนั้นจึงจำเป็นต้องมีระบบตรวจสอบที่ dynamic ขึ้น
นั่นจึงเป็นที่มาของการนำเอา Machine Learning เข้ามาใช้งาน

การนำ Machine Learning เข้ามาสร้างระบบตรวจสอบ Bot แบบ online/realtime

โดยจะเริ่มจากศูนย์กันเลยทีเดียว
แต่สิ่งที่ดีคือ ระบบทำการเก็บข้อมูลของแต่ละ request ไว้อยู่แล้ว
ส่วนข่าวร้ายคือ ข้อมูลที่เก็บยากต่อการนำมาใช้งาน
ดังนั้นจึงต้องมีขั้นตอนการทำงาน
และแน่นอนว่า ระบบที่สร้างขึ้นมานั้นจะเป็นแบบ trial and error 

ขั้นตอนการทำงานหรือสร้างระบบด้วย Machine Learning เป็นดังนี้

ไม่ได้มีความแตกต่างจากขั้นตอนปกติ

  1. Data collection คือการจัดเก็บข้อมูล
  2. Feature engineer คือการปรับแต่งข้อมูล ให้ข้อมูลพร้อมและเหมาะสมต่อการนำไปใช้งาน เช่นการเพิ่ม feature ใหม่ ๆ เข้าไป โดยในระบบที่สร้างนั้นมีมากกว่า 300 feature และน่าจะมีเพิ่มไปเรื่อย ๆ แน่นอน
  3. Training model เป็นการสร้าง model ขึ้นมานั้นเอง
  4. Evaluate model ทำการทดสอบและประเมินผลการทำงานของ model ที่สร้างขึ้นมา
  5. Deploy model บน production environment
  6. Monitoring การทำงาน ซึ่งจะมี metric และ dashboard ดู ทั้งการทำงานว่า overfit หรือไม่ รวมทั้ง feedback ต่าง ๆ
  7. Improvement ทำการปรับปรุงทั้งจากตัวระบบเอง และจากคนใช้งานหรือทีมงานที่ดูแล การทำงานอาจจะไม่สามารถตรวจจับ bot ในรูปแบบใหม่ ๆ ได้ แต่มีการแจ้ง ดังนั้นจึงต้องทำการปรับหรือเพิ่ม feature ซึ่งนั่นนำไปสู่การ training model วนไป

หัวใจหลัก ๆ คือ

เรื่องของข้อมูลที่จัดเก็บ ซึ่ง storage ต้อมีขนาดใหญ่ ดังนั้นที่จัดเก็บก็ต้องพร้อม
ที่ Agoda จะใช้ Apache Hadoop
มี Apache Kafka เป็น messaging มาคั่นกลาง
ดังนั้นทุก ๆ ระบบก็ส่งข้อมูลมายัง Apache Kafka
จากนั้นมี process/service ทำการบันทึกลง Apache Hadoop ต่อไป
การใช้งานก็นำเอา Apache Spark มาดึงด้วย SQL script นั่นเอง

ขั้นตอนต่อมาที่ไม่สามารถเปิดเผยได้คือ Feature engineer
เพราะว่ามีการเพิ่ม feature ต่าง ๆ เข้าไป
เพื่อให้ข้อมูลสามารถใช้งานในขั้นตอนการ training model ได้ง่ายขึ้น
โดยข้อมูลที่จัดเก็บมีจำนวนมาก
ดังนั้นการสร้าง feature ใหม่ ๆ จึงเป็นขั้นตอนที่ไม่ง่าย
จึงนำพวก key-value database มาช่วยเก็บข้อมูลในการคำนวณต่าง ๆ
โดยส่วนใหญ่ feature จะมีค่าเป็นตัวเลขทั้งหมด
จะสัมพันธ์กับ algorithm ที่นำมาใช้ในการ train model คือ XGBoost

ส่วนการใช้งานนั้น จะสร้าง RESTFul API ขึ้นมาให้ใช้งาน
โดยแยกตามแนวคิด Microservices
เพื่อแยกเป็น services ที่ไม่ขึ้นอยู่กับระบบอื่น ๆ
ช่วยให้การ trial and error ง่ายและสะดวก
ที่สำคัญระบบนี้ต้องรองรับจำนวนการใช้งานสูง ๆ ได้อีกด้วย

แสดงดังรูป

เป็นอีกระบบหนึ่งที่น่าสนใจ