Bazı sensörlerden gelen verileri okuyan bir arka plan programımız var ve hesapladığı şeyler arasında (sadece durumu rapor etmenin yanı sıra) sensörlerin bir değerden diğerine geçmesi için geçen ortalama süre. Çalışan ortalama 64 veri noktası tutar ve çalışma süresinin oldukça sabit olduğunu varsayar.
Maalesef, aşağıdaki grafikte gösterildiği gibi, girdi verileri en saf değil:
(Her satır, farklı bir veri kümesini temsil eder; x ekseni, belirsiz bir tarihsel zaman ekseninden başka bir şey ifade etmez).
Başa çıkmak için benim açık çözümüm bununla verilerin histogramını oluşturmak ve ardından modu seçmek olacaktır. Bununla birlikte, daha iyi performans sağlayacak veya hareketli bir ortalamaya sahip operasyon için daha uygun başka yöntemler olup olmadığını merak ediyordum. Bazı hızlı Wikipedia aramaları, aykırı değerleri tespit etmek için algoritmaların da uygun olabileceğini öne sürüyor. Arka plan programı C'de yazıldığı için basitlik bir artıdır.
Düzenleme : Wikipedia'yı inceledim ve şu çeşitli teknikleri buldum:
-
Chauvenet kriteri: ortalama ve standart sapmayı kullanarak, belirli bir veri noktasının gerçekleşme olasılığını hesaplayın ve ardından olasılık gerçekten o kadar kötü ise% 50'den azsa onu hariç tutun. Bu, anlık bir ortalamayı düzeltmek için çok uygun gibi görünse de, etkinliğinden pek emin değilim: Görünüşe göre büyük veri kümelerinde veri noktalarını atmak istemiyor.
-
Grubbs testi: Ortalamadan standart sapmaya farkı kullanan ve "aykırı değer yok" hipotezinin reddedildiği zaman için bir ifade içeren başka bir yöntem
-
Cook'un mesafesi: Bir veri noktasının en küçük kareler regresyonu üzerindeki etkisini ölçer; 1'i aşarsa uygulamamız muhtemelen reddeder
-
Kısaltılmış ortalama: Alt ve üst uçları atın ve ardından ortalamayı normal olarak alın
Herhangi bir özel deneyimi olan ve bu istatistiksel teknikler hakkında yorum yapan var mı?
Ayrıca, fiziksel durumla ilgili bazı yorumlar: mekanik bir çamaşır makinesinin tamamlanmasına kadar geçen ortalama süreyi ölçüyoruz, dolayısıyla çalışma süresi oldukça sabit olmalıdır. Gerçekte normal bir dağılıma sahip olup olmadığından emin değilim.
Düzenleme 2 : Başka bir ilginç soru: arka plan programı önyükleme yaparken, olduğu gibi, önceden herhangi bir veriye sahip değil analiz etmek için, gelen verilerle nasıl başa çıkmalı? Basitçe aykırı budama yapmayın mı?
Düzenleme 3 : Bir şey daha var ... Donanım, çalışma zamanları farklı olacak şekilde değişirse, algoritma bu yeni çalışma zamanlarını atmayacak kadar sağlam, bu olduğunda önbelleği temizlemeyi hatırlamalı mıyım?