AlertScore_Reklam_Sesli.mp4
Zaman serisi anomali tespit algoritmaları için karşılaştırma ve güvenilirlik platformu.
Üç algoritmayı (Rolling Z-Score, Isolation Forest, PyTorch Autoencoder) gerçek NAB (Numenta Anomaly Benchmark) verisi üzerinde, aynı veri bölmesi, aynı eşik kuralı ve aynı metriklerle karşılaştırır. Ayrıca gürültü, veri kayması, tespit gecikmesi ve eşik duyarlılığı deneyleriyle algoritmaların hangi koşulda ne kadar güvenilir olduğunu ölçer.
Yeni bir algoritma icat edildiği iddiası yoktur. Amaç, mevcut yöntemleri adil ve açık metodolojiyle ölçmektir.
-
Python 3.11 veya 3.12 kurun (python.org, kurulumda Add Python to PATH işaretli olsun).
-
setup.batdosyasına çift tıklayın (sanal ortam, paketler ve testler). -
run_app.batile web arayüzünü başlatın (tarayıcıda açılır). -
İsteğe bağlı:
run_experiments.battüm deneyleri çalıştırır. Okumak içinresults/AlertScore_Sonuclar.xlsxdosyasını açın (ilk sayfa sütun açıklamalarıdır).results/*.csvdosyaları başka programlar içindir; Türkçe Excel onları tek sütunda açar.--quickile hızlı deneme yapılır. -
İsteğe bağlı:
download_data.batek NAB serileri indirir (--allile etiketli tüm seriler). Seri sayısı arttıkça test bölümündeki anomali olayı sayısı da artar ve sonuçlar daha güvenilir olur; ardındanrun_experiments.battekrar çalıştırılır.
Sitede takıldığınız yerde Rehber sayfasına bakın: grafiğin nasıl okunacağı, her sütunun anlamı ve sonuçları yorumlarken dikkat edilecekler orada.
Elle: python -m venv .venv, .venv\Scripts\activate, pip install -r requirements.txt, streamlit run app\app.py.
alertscore/
├── app/app.py Streamlit arayüzü (6 sayfa)
├── src/alertscore/
│ ├── data.py CSV okuma/doğrulama, NAB etiketleri
│ ├── models.py Ortak arayüz + 3 algoritma
│ ├── metrics.py Nokta ve olay bazlı metrikler
│ ├── experiments.py Bölme, eşik, benchmark, dayanıklılık deneyleri
│ ├── plots.py Plotly grafikleri
│ └── report.py PDF rapor
├── scripts/ run_experiments.py, download_nab.py
├── tests/test_core.py Birim testleri
├── data/nab/ 4 NAB serisi + etiketler + lisans
├── results/ Deney çıktıları (CSV)
├── PROJECT_STATUS.md Güncel durum, bilinen sınırlar
└── TEKNOLOJILER.md Kullanılan araçlar ve kurulum notları
Yeni algoritma eklemek: models.py içinde BaseDetector'dan türetin (fit, score), make_model ve MODEL_NAMES listesine ekleyin. Geri kalan her şey (metrikler, deneyler, arayüz) değişmeden çalışır.
- Zamansal bölme: ilk %40 eğitim, sonraki %20 doğrulama, son %40 test. Rastgele karıştırma yoktur; zaman serisinde gelecek geçmişe sızmamalıdır.
- Nedensellik: her modelin
score(values)[t]değeri yalnızcavalues[:t+1]bilgisine bağlıdır (testle doğrulanır). - Ön işleme: ölçekleme parametreleri yalnızca eğitim bölümünden öğrenilir.
- Eşik: doğrulama bölümü skorlarının %99.5'lik yüzdeliği (ayarlanabilir). Test verisi eşik seçiminde hiç kullanılmaz; tüm modeller aynı kuralı kullanır (testle doğrulanır). İki kaynak seçeneği vardır:
val_all(varsayılan, doğrulamadaki tüm noktalar, etiket yok) veval_normal(doğrulamadaki anomali penceresi dışındaki noktalar; doğrulama etiketi kullanılır). Arayüzde 'Ortak ayarlar', komut satırında--threshold-sourceile seçilir. - Etiketler: NAB etiketleri satır başına 0/1 değil, anomali pencereleridir (
combined_windows.json). Nokta etiketleri zaman damgasından türetilir. - Nokta bazlı (Precision, Recall, F1, PR-AUC) ve olay bazlı (Event Recall, gecikme, yanlış alarm) metrikler ayrı tutulur.
- Yanlış alarm: hiçbir anomali penceresine değmeyen alarm olayı. Alarm sürekli açık kalırsa tek olay sayıldığı için yanına yanlış alarm nokta oranı (normal noktaların yüzde kaçı alarm verdi) da raporlanır.
- Veri kalitesi: sıralama bozukluğu düzeltilir, tekrarlı zaman damgalarının ortalaması alınır, boşluklar doldurulmaz. Hepsi Data Explorer'da raporlanır (örnek:
machine_temperaturedosyasında 12 tekrarlı zaman damgası ve 1 sıra bozukluğu var).
| Model | Yakalanan olay | F1 | PR-AUC | Yanlış alarm/gün | Yanlış alarm nokta oranı |
|---|---|---|---|---|---|
| Rolling Z-Score | 15/20 | 0.027 | 0.228 | 0.598 | 0.004 |
| Isolation Forest | 18/20 | 0.287 | 0.409 | 0.343 | 0.065 |
| Autoencoder | 15/20 | 0.205 | 0.358 | 0.332 | 0.078 |
İstatistiksel okuma (seri bazlı bootstrap, 5 tohum): Isolation Forest ve Autoencoder, Rolling Z-Score'dan F1 ve PR-AUC'de anlamlı biçimde iyidir (farkın %95 aralığı 0'ı içermez). Isolation Forest ile Autoencoder arasındaki fark ayırt edilemez (F1 farkı 0.082, aralık [-0.010, 0.200]). Tohumlar arası sapma küçüktür (Isolation Forest F1 0.287 ± 0.008).
Gözlemler (tek koşu; kesinlik için run_experiments.bat çıktısındaki güven aralıklarına bakın):
- Veri kayması (basamak, 1.5 × std): Isolation Forest'ta yanlış alarm nokta oranı 0.065 → 0.426; Rolling Z-Score sabit (0.004); Autoencoder 0.078 → 0.126.
- Tespit gecikmesi (enjekte 8 × std sıçrama): Z-Score ~0.2 dk, Autoencoder 3.7 dk, Isolation Forest 83 dk.
- Gürültü (0.5 × std'ye kadar): F1 değişimi en fazla ~0.03.
- Eşik, sonucu etkiler:
nyc_taxiserisinde doğrulama bölümündeki büyük bir anomali Autoencoder eşiğini 0.22'den 0.65'e çıkarıyor ve model test olaylarının hiçbirini yakalamıyor (0/4).threshold_source=val_normalile 2/4 (20 yanlış alarm olayıyla). 11 serinin tamamında bu ayar yalnız bu seride yakalamayı artırdı ve Isolation Forest'ta yanlış alarmı artırdı; bu yüzden varsayılan değil.
NAB'a uydurulmadığını göstermek için aynı yöntem SKAB (Skoltech Anomaly Benchmark, github.com/waico/SKAB) üzerinde de çalışır. Veri gerçek bir pompa düzeneğinden alınan sensör kayıtlarıdır; vana kapatılarak anomali oluşturulur. GPL-3.0 lisanslı olduğu için repoya konmaz, download_skab.bat ile indirilir (data/skab/ .gitignore'dadır).
download_skab.bat
run_experiments.bat --dataset skab (sonuç: results\skab\AlertScore_Sonuclar.xlsx)
run_experiments.bat --dataset skab --sensor Current
SKAB'a özgü kararlar (hepsi SKAB_CONFIG ve data.py içinde):
- Dosyalar ~1100 saniyelik tek deneydir ve anomali ortalarda başlar; bu yüzden bölme %30 eğitim, %15 doğrulama, %55 test (ilk %50 anomalisiz). Eğitim kısa olduğu için Autoencoder 100 epoch eğitilir.
- Veri çok sensörlüdür, proje tek değişkenlidir: her dosyadan tek sensör alınır. Varsayılan
Volume Flow RateRMS, sonuçlara bakmadan fiziksel nedenle seçildi (vana kapanınca akış etkilenir). Diğer sensörler--sensorile denenebilir; sensör seçimi bir hiperparametre sayılmalıdır ve sonuçlar sensöre göre değişebilir. - Etiket satır başına 0/1'dir; ardışık 1'ler tek anomali penceresine çevrilir. NAB'dan farklı olarak pencere başlangıcı gerçek anomali başlangıcıdır, dolayısıyla gecikme gerçek tespit gecikmesine daha yakındır.
- Test bölümü yalnızca ~9 dakikadır; "yanlış alarm / gün" bu yüzden çok büyük sayılara çıkar (tek alarm yüzlerce/gün eder). Bu sütunu yorumlamayın; yanlış alarm nokta oranı ve alarm sayısına bakın.
- Her dosyada tek anomali vardır:
valve1+valve2ile toplam 20 olay.
Gerçek NAB serileri üzerine kontrollü değişiklik uygulanır. Etiketler zaman damgası penceresi olduğu için değişiklikten etkilenmez.
- Gürültü: tüm seriye Gaussian gürültü (std = seviye × eğitim std'si), modeller yeniden eğitilir.
- Veri kayması: test bölümünde normal seviye kaydırılır (basamak veya rampa). Pencere dışındaki alarmlar yanlış alarmdır.
- Tespit gecikmesi: test bölümüne başlangıç anı bilinen yapay seviye sıçramaları eklenir, ilk alarma kadar geçen süre ölçülür.
- Eşik duyarlılığı: aynı skorlarla eşik yüzdeliği değiştirilir.
Veri: Numenta Anomaly Benchmark (NAB), https://github.com/numenta/NAB. Lisans: MIT, Copyright 2014-2024 Numenta Inc. (data/nab/LICENSE.txt, telif notu korunmalıdır). Projede dört seri hazır gelir; scripts/download_nab.py ek seri indirir.
Atıf: Lavin, A. ve Ahmad, S. (2015). Evaluating Real-time Anomaly Detection Algorithms – the Numenta Anomaly Benchmark. IEEE ICMLA.
- NAB pencereleri geniştir ve gerçek anomali başlangıcını değil çevresini işaretler. Nokta bazlı Recall bu yüzden düşük çıkar; gerçek gecikme yalnızca enjekte edilen anomalilerle ölçülebilir.
- Test bölümündeki olay sayısı azdır (11 seride toplam 20). Bu yüzden güven aralıkları geniştir; Excel raporundaki 'Güven aralığı' ve 'Model farkları' sayfaları (seri bazlı bootstrap) hangi farkların ayırt edilebildiğini gösterir. Farkı 0'ı içeren karşılaştırmalar yorumlanmamalıdır. Daha çok seri için
download_data.bat --all. - Eşik kuralı doğrulama bölümünün yüzdeliğine dayanır; doğrulama bölümünde anomali varsa eşik biraz yükselir.
- Tek değişkenli seriler; çok değişkenli veri ve ek modeller henüz yoktur.
- Zaman boşlukları doldurulmaz; pencereler satır sırasına göre kayar (
ambient_temperatureserisinde 10 boşluk var). - PDF rapor yalnızca tablo ve notlar içerir, grafik içermez.