หัวข้อสุดท้ายที่เข้าฟังในงาน Code Mania 1010 :: All about passion
คือ Real-time Bot Detection using Machine Learning จาก Agoda
ส่วนที่น่าสนใจคือ ขั้นตอนของการสร้าง model
เพื่อนำมามาตรวจสอบ ในแต่ละ request ที่เข้ามายังระบบว่า
เป็น Bot ที่เราไม่ต้องการหรือไม่
ตลอดจนการนำไปใช้งาน ซึ่งจะมี feature จำนวนมาก
แน่นอนว่า feature ต่าง ๆ ไม่สามารถเปิดเผยได้
มิเช่นนั้น จะโดนเล่นงานแน่นอน !!
มาเริ่มกันเลย
เริ่มด้วยประเภทของ Bot
ประกอบไปด้วย 2 ประเภทคือ
- Good bot คือ bot ที่ดี และเราไว้ใจให้เข้ามา เช่น Google Bot หรือพวก search engine bot นั่นเอง
- 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 เป็นดังนี้
ไม่ได้มีความแตกต่างจากขั้นตอนปกติ
- Data collection คือการจัดเก็บข้อมูล
- Feature engineer คือการปรับแต่งข้อมูล ให้ข้อมูลพร้อมและเหมาะสมต่อการนำไปใช้งาน เช่นการเพิ่ม feature ใหม่ ๆ เข้าไป โดยในระบบที่สร้างนั้นมีมากกว่า 300 feature และน่าจะมีเพิ่มไปเรื่อย ๆ แน่นอน
- Training model เป็นการสร้าง model ขึ้นมานั้นเอง
- Evaluate model ทำการทดสอบและประเมินผลการทำงานของ model ที่สร้างขึ้นมา
- Deploy model บน production environment
- Monitoring การทำงาน ซึ่งจะมี metric และ dashboard ดู ทั้งการทำงานว่า overfit หรือไม่ รวมทั้ง feedback ต่าง ๆ
- 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 ง่ายและสะดวก
ที่สำคัญระบบนี้ต้องรองรับจำนวนการใช้งานสูง ๆ ได้อีกด้วย
แสดงดังรูป
เป็นอีกระบบหนึ่งที่น่าสนใจ