เกริ่นนำ
ในสองบทความที่แล้ว Anomaly Part 1 และ Anomaly Part 2 คือวิธีการวิเคราะห์จากตัวแปรเดี่ยว (Univariate) ในบทความนี้ขอกล่าวถึง Anomaly Detection ที่มีมากกว่า 1 ตัวแปร (Multivariate) โดยใช้ Technique Unsupervised Learning ที่เรียกว่า DB-Scan และในท้ายบทความจะอธิบายถึงการประยุกตร์ใช้งานและตัวอย่าง Code ครับ
Unsupervised Learning
คือการเรียนรู้จากข้อมูลโดยไม่จำเป็นต้องกำหนด Label หรือ Marker ว่านี้คืออะไร ซึ่งต่างจาก Supervised Learning จะมีการ Mark ว่านี้คืออะไรก่อนแล้วจึงเริ่มให้ Machine เรียนรู้

Unsupervised Learning
จุดเด่นของ Unsupervised Learning คือเราสามารถจำแนก Type ของกลุ่มข้อมูลได้ด้วย Characteristic ของแต่ละกลุ่มซึ่งแตกต่างกันเช่น กลุ่มคนที่ชอบอ่านหนังสือแนวจิตวิทยาและกลุ่มคนที่ชอบอ่านหนังสือการ์ตูนย่อมมี Characteracteristic ไม่เหมือนกัน โดยแยกจากค่าอะไรบางอย่างซึ่งอาจจะมี 1 ค่าหรืออาจจะมีมากกว่า 1 ค่าเป็นต้น
DBScan
เป็น Unsupervised Learning ประเภทหนึ่งมีความสามารถในการจัดกลุ่มโดยหาความใกล้เคียงกับเพื่อนบ้าน มีแนวคิดที่ว่ากลุ่มเดียวกันย่อมเอื้อมกันถึงเช่นเราเชื่อว่าในรัศมี 10 กิโลเมตรจากตัวเราจะมีคนไทยอยู่และเมื่อพบคนไทยแล้ว ให้ทำการหาต่อ ในรัศมี 10 กิโลเมตรของคนนั้นก็จะมีคนไทยเช่นกัน เมื่อทำเช่นนี้ไปเรื่อยๆเราจะได้กลุ่มคนไทยที่อยู่ในประเทศไทยทั้งหมด

Cr:https://en.wikipedia.org/wiki/DBSCAN
ซึ่งมองไปก็คล้ายกับเพลงสามัคคีชุมนุมของบ้านเราครับ กล่าวคือ เรากางแขนหากเพื่อนอยู่ใกล้เราก็ถือว่าอยู่กลุ่มเดียวกันหากเกินสุดแขนแล้วยังไม่พบใครก็ให้จบ Cluster และนับเป็นกลุ่มใหม่

Cr:Twitter
DBScan Parameter
สำหรับ parameter ของ DBScan เราสนใจ 2 ค่าคือ
1 ระยะห่างระหว่างเพื่อนบ้านที่อยู่ในกลุ่มเดียวกับเราในที่นี้เราเรียกว่าเอปไซลอน (ε EPS)
2 คือจำนวนสมาชิกของเพื่อนบ้านอย่างต่ำในกลุ่มเดียวกับเรา
ตัวอย่างเราต้องการแยกกลุ่มที่อยู่อาศัยในจังหวัดเชียงราย
- eps = 100m
- min_samples กำหนดจำนวนสมาชิกของกลุ่มอย่างต่ำ 10 หลัง
ตรงนี้มีความหมายว่าในกลุ่ม Cluster 1 Cluster นั้นจะมี บ้านห่างกันไม่เกิน 100m และมีจำนวนสมาชิกไม่ต่ำกว่า 10 หลัง ถ้าเกิน 100m ให้นับกลุ่ม Cluster ใหม่ และถ้าจำนวนน้อยกว่า 10 หลังให้มองว่ารวมตัวไม่ครบองค์ประชุม ไม่สามารถสร้างเป็น Cluster ได้

Cr:https://www.home.co.th/review/detail/80383
การประยุกตร์ใช้ DBScan กับ Anomaly
ดังที่กล่าวใน Part 1 แล้วว่า Anomaly มี Characteristic คือ Data มีจำนวนน้อยมากๆ ฉะนั้นการใช้ DBScan เราจะทำการหาจำนวนกลุ่มทั้งหมดที่มีว่ามีกี่กลุ่ม แต่สิ่งที่สำคัญยิ่งกว่านั้นคือแต่ละกลุ่มมีจำนวนมากน้อยเท่าไหร่ ซึ่งถ้าน้อยมากๆ เราจะ Assume ว่ากลุ่มนั้นคือ Anomaly
ตัวอย่าง Data จากเว็บไซต์ ODDS เป็นการหา Outlier จาก SMTP traffic log สามารถ Download ได้จาก http://odds.cs.stonybrook.edu/smtp-kddcup99-dataset/

ตัวอย่าง Dataset SMTP traffic log จาก ODDS
เมื่อเรา นำ Data มา Visualize เป็น 3D จะพบว่ามีกลุ่มที่อยู่ห่างจากเพื่อนบ้านและเราใช้ DB-Scan โดยกำหนดค่า eps=0.7 และ min_samples = 2 จะพบว่า สามารถแยกกลุ่ม ที่ห่างจากเพื่อนบ้านออกได้ดังรูปด้านล่าง

รูปการนำ Data มา plot ใน 3D โดยยังไม่ได้ใช้ DBScan

DBScan with EPS=0.7
เราพบว่าสมาชิกที่ไม่สามารถจัดเป็นกลุ่มหรือแยกออกเป็นเอกเทศนั้นมีอยู่ 6 จุดดังรูปด้านบน ทั้งนี้มีตัวอย่าง Colab สามารถดูได้จาก Link นี้ครับ https://colab.research.google.com/drive/1BKz3P7MtGGY3I0lsCaFfD_U2gTECrqGL#scrollTo=lQfQ3L-RkgCm
DBScan กับ Anomaly บน Time Series
ตัวอย่างถัดไปเป็นการนำ Data ที่เป็น Time Series มา Plot ด้วย Scatter Diagram และใช้ DBScan หา Anomaly ในที่นี้เราใช้ Data CPU จาก ODDS เช่นเดิมครับ โดยมี Assumtion คือทุกๆวันจะมีพฤติกรรมการใช้งานเช่นเดิม ฉะนั้น เมื่อเวลา สามทุ่ม CPU จะ Peak แสดงว่าทุกๆวัน CPU จะ Peak เมื่อเวลาสามทุ่มเป็นปรกติ รูปถัดไปเป็นการนำ Data ซึ่งเป็น Time series ของวันที่ 4 และวันที่ 5 มาเทียบกันจะเห็นว่ามีจุดที่ทับกันพอดีมีความหมายว่าเวลาเดียวกันทำงานเช่นเดียวกันค่าจึงไม่ต่างกันมากนั่นเอง

Time series ของ CPU เทียบกันระหว่าง Data วันที่ 4 และวันที่ 5
เราจะนำ Data ของ วันนี้และเมื่อวานมาเทียบกันโดยให้ Data วันนี้คือแกน X และเมื่อวานเป็นแกน Y
ใช้ DBScan โดยกำหนดให้ค่า EPS = 0.05 min_samples = 2 เพื่อ Detect Anomaly และหาจุดที่แตกต่างจากกลุ่มอื่น

ผลการใช้ DBScan โดยกำหนดค่า EPS = 0.05 และ min_samples = 2
พบจุดที่เป็น Anomaly 7 จุด เมื่อนำจุดแต่ละจุดมา Plot กลับเป็น Time series จะเห็นจุดที่เกิด Anomaly ดังรูปด้านล่าง

การแสดงผล Anomaly ในมุมมองของ Time series
ทั้งนี้มีตัวอย่าง Colab สามารถดูได้จาก Link นี้ครับ
https://colab.research.google.com/drive/192umgmzZBHjZumvhZhbj_R50tMqApLAf
Conclusion
DBScan เป็น Unsupervised ประเภทหนึ่งที่นิยมใช้สำหรับ Detect Anomaly โดยแยกกลุ่มใหญ่และกลุ่มเล็ก โดยเราจะสนใจที่กลุ่มเล็กซึ่งมีแนวโน้มว่ากลุ่มที่มีสมาชิกน้อยนั้นคือกลุ่มที่ผิดปรกติ (Anomaly) แนวทางนี้ใช้ Apply กับ Data ที่มีตัวแปรมากกว่า 1 ตัวแปรขึ้นไปค่าที่เราต้องสนใจหรือต้องปรับจูนคือค่า eps และ min_samples แต่ละค่าขึ้นอยู่ประประเภทของข้อมูลและความเหมาะสม
Reference