การตรวจจับความผิดปกติของอนุกรมเวลาด้วย Python


10

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

คำอธิบายของข้อมูล: เป็นข้อมูลอนุกรมเวลารายเดือนที่เพิ่งเริ่มเก็บในช่วง 2 ปีที่ผ่านมาหรือมากกว่านั้น (เช่นช่วงเวลา 24-36 เท่านั้น) โดยพื้นฐานแล้วมีตัวชี้วัดหลายตัวที่ถูกตรวจสอบเป็นรายเดือนสำหรับลูกค้าหลายราย

time_period    client    metric    score
01-2013        client1   metric1   100
02-2013        client1   metric1   119
01-2013        client2   metric1   50
02-2013        client2   metric2   500
...

นี่คือสิ่งที่ฉันกำลังคิด: ดึงข้อมูลลงใน dataframe (pandas) จากนั้นคำนวณค่าเฉลี่ย 6 เดือนสำหรับลูกค้า / คู่เมตริกแต่ละราย หากค่าของช่วงเวลาปัจจุบันเกินขีด จำกัด บางเกณฑ์ตาม 6 เดือนเฉลี่ยแล้วยกธง ปัญหาดูเหมือนง่ายมาก ฉันแค่ต้องการทำให้แน่ใจว่าฉันกำลังเข้าใกล้

คำแนะนำใด ๆ เกี่ยวกับเนื้อความคิดนี้ออกไปเล็กน้อยจะได้รับการชื่นชมอย่างมาก ฉันรู้ว่าคำถามนั้นเป็นนามธรรมเล็กน้อยและฉันขอโทษสำหรับสิ่งนั้น


ฉันไม่ทราบวิธีการที่หลาม แต่คำถามนี้เต็มไปด้วยความคิดเกี่ยวกับวิธีการทั่วไป: stats.stackexchange.com/questions/26688/…
rapaio

pypi.org/project/anomaly-detectionสิ่งนี้ถูกสร้างขึ้นในไลบรารี่สำหรับการตรวจจับความผิดปกติในไพ ธ อนซึ่งคล้ายกับการตรวจจับความผิดปกติของทวิตเตอร์ เนื่องจากรหัสการตรวจจับความผิดปกติทวิตเตอร์เป็นภาษา R ปัญหาของคุณคือความผิดปกติตามบริบท รุ่น Auto.arima ก็เช่นกัน
saravanan saminathan

คำตอบ:


1

ฉันคิดว่าวิธีการคล้ายกับการควบคุมกระบวนการทางสถิติด้วยแผนภูมิควบคุม ฯลฯ อาจเป็นประโยชน์ที่นี่


ฉันจะอ่านสิ่งนี้ วิธีนี้เหมาะสำหรับอนุกรมเวลาที่มีข้อมูลจำนวนเล็กน้อย (เช่น 24 เดือน) หรือไม่
Eric Miller

อ่านส่วนใหญ่เสร็จแล้ว ตามวิธีนี้ฉันควรคำนวณค่าเบี่ยงเบนมาตรฐานที่ 3 สำหรับอนุกรมเวลาและกราฟเส้นบนขีด จำกัด เหล่านี้ หากค่าเกินขีด จำกัด เหล่านี้ให้ตั้งค่าสถานะ นี่เป็นวิธีที่ฉันได้พิจารณา
Eric Miller

1

มีตัวเลือกมากมายสำหรับการตรวจจับความผิดปกติตั้งแต่การเบี่ยงเบนมาตรฐานโดยใช้ฟังก์ชั่นการเบี่ยงเบนมาตรฐานของ Pandas ไปจนถึงวิธีการแบบเบย์และวิธีการเรียนรู้ของเครื่องหลายอย่างในระหว่างการจัดกลุ่ม: SVM, Gaussian Process

ลองดูบทแนะนำนี้: https://www.datascience.com/blog/python-anomaly-detection

จากมุมมองของ Bayesian ฉันขอแนะนำ Facebook Prophet มันให้ผลลัพธ์ขั้นสูงมากโดยไม่จำเป็นต้องเป็นผู้เชี่ยวชาญด้านอนุกรมเวลา มันมีตัวเลือกสำหรับการทำงานในเดือนวัน ฯลฯ และ "ช่วงเวลาที่ไม่แน่นอน" ช่วยด้วยความผิดปกติ

ในที่สุดฉันขอแนะนำบล็อก Uber นี้เกี่ยวกับการใช้ Neural nets (LSTM) สำหรับการตรวจจับความผิดปกติ แต่ก็มีข้อมูลเชิงลึกเกี่ยวกับสินค้า: https://eng.uber.com/neural-networks/


0

หากคุณยินดีที่จะสมมติว่าชุดข้อมูลของคุณมีการเผยแพร่ตามปกติคุณสามารถประมาณปริมาณของการแจกแจงนี้และดูว่ามันอยู่นอกเช่น 95%, 80%, และอื่น ๆ ฉันไม่คุ้นเคยกับห้องสมุด Python มากนัก แต่ฉันแน่ใจว่ามีฟังก์ชั่นที่สร้างขึ้นมาแล้ว


มีแนวโน้มสูงขึ้นสำหรับลูกค้าส่วนใหญ่ ฉันไม่แน่ใจว่าคุณสามารถโทรหาข้อมูลแบบสุ่มได้
Eric Miller

2
จากนั้นไม่มีในกรณีนี้ ฉันเชื่อว่าวิธีการด้านล่างฉันและคุณจะทำงานได้ดีในสถานการณ์นี้ ฉันทำอะไรทำนองนี้มาก่อน: ใช้ค่าเฉลี่ยเคลื่อนที่เป็นระยะเวลา X กลิ้งลบค่าตัวชี้วัดปัจจุบันจากค่าเฉลี่ยเคลื่อนที่ ค้นหาขอบเขตเบี่ยงเบนมาตรฐาน (หรือใช้ข้อมูลอัตนัยหากคุณรู้ในสถานการณ์นี้) ของสิ่งตกค้างเหล่านี้และสิ่งใดที่อยู่เหนือหรือใต้ขอบเขตเหล่านี้ถือได้ว่าเป็นความผิดปกติ วิธีนี้จะทำงานได้ดีหากลูกค้าเห็นการเพิ่มคะแนน
Kevin Pei
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.