8. ünite / 8
Sıcaklık tahmini ve anomali uyarısı: bitirme projesine hazırlık
Tahmin artığını eğitimdeki dağılımla z-skoruna çevir; histerezis, ardışık örnek ve bekleme süresiyle uyarı üret. 5. gündeki ısıtıcı arızasını yakala, yanlış alarmı az tut, uyarıyı MQTT ile gönder.
Bu ünitenin sonunda
- Tahmin artığından z-skoru hesaplayıp bir anomali puanına çevirmek
- Histerezisli, ardışık örnekli ve beklemeli bir uyarı durum makinesi kurmak
- Bir uyarı sistemini yakalama, gecikme ve yanlış alarm sayısıyla değerlendirmek
- Uç hattı (temizle, özellik, tahmin, uyarı) cihazda ve MQTT ile uçtan uca bağlamak
Ders notları
Şimdiye kadar "bir saat sonra kaç derece olacak?" diye sorduk. Bu ünitede soruyu tersine çeviriyoruz: gerçekleşen değer, beklediğimden ne kadar farklı? İyi bir tahmin modeli, normal davranışın ölçüsüdür; modelin açıklayamadığı sapma ise bir şeylerin ters gittiğinin işaretidir.
Hat
- Temizle: Hampel süzgeciyle sıçramaları sil, doğrusal ara değerle boşlukları doldur (2. ünite).
- Özellik ve tahmin: aynı özellik tablosu, ilk dört gün (arızasız) ile eğitilmiş doğrusal model (5–6. üniteler).
- Artık: r = gerçek − tahmin. Eğitim dönemindeki artıkların ortalaması μ ve sapması σ hesaplanır.
- Puan: z = (r − μ) / σ. Normal günlerde |z| çoğunlukla 2'nin altındadır.
Puanı uyarıya çevirmek
Tek bir eşik iki sorun çıkarır: eşiğin çevresinde salınan puan uyarıyı açıp kapatıp durur, tek bir gürültülü örnek de alarm çaldırır. Üç önlem:
- Histerezis: açma eşiği 3, kapama eşiği 1,5. Uyarı bir kez açılınca puan iyice düşmeden kapanmaz.
- Ardışık örnek: eşik en az 2 örnek art arda aşılmalı; tek sıçrama yetmez.
- Bekleme: bir uyarıdan sonra 3 saat yeni bildirim gönderilmez; telefonu susturan kullanıcı sistemi kapatır.
Değerlendirme
Veri setinde 5. günün 13:00–19:00 arası takılı kalan bir ısıtıcı vardır (ariza = 1). Bir uyarı sistemini üç sayıyla ölçeriz: arıza yakalandı mı, arıza başladıktan kaç dakika sonra (gecikme) ve arıza penceresi dışında kaç yanlış alarm çaldı. Bunlar birbirine karşı çalışır: eşiği düşürmek gecikmeyi kısaltır ama yanlış alarmı artırır. Ufuk da önemlidir: 30 dakikalık tahminde rampa daha erken sezilir, 10 dakikalıkta model sapmaya hızla uyar ve geç fark eder.
Uyarı nereye gider?
Cihaz her örnekte puanı panoya, uyarıyı ise ayrı bir konuya retained olarak yayımlar: sonradan bağlanan bir telefon son uyarıyı hemen görür. IoT dersindeki MQTT broker'ı, konu düzeni ve son vasiyet aynen kullanılır; bitirme projesinde bu hattı uçtan uca kuracaksın.
Simülasyonlar
Sıcaklık tahmini ve anomali uyarısı
Model ilk dört günde (arızasız) eğitilir, sonra her örnekte tahmin artığının z-skoru hesaplanır. Açma ve kapama eşiği (histerezis), ardışık örnek sayısı ve bekleme süresiyle uyarıyı ayarla: 5. gündeki ısıtıcı arızasını yakala, yanlış alarmı az tut.
3B sera: ölçüm, tahmin ve anomali
Yedi günlük sera verisini 3B serada oynat. Yatakların rengi sıcaklığı, direkteki etiket gerçek ve tahmin değerini, öndeki sütunlar son iki saatin tahmin artığını gösterir. 5. günde ısıtıcı takılınca artık büyür, fener sarıdan kırmızıya döner.
3B sahne yükleniyor…
Sürükle: döndür · iki parmak / tekerlek: yakınlaş · sağ tuş: kaydır
Kod
struct Alarm {
float on = 3.0f, off = 1.5f; // açma eşiği > kapama eşiği
uint8_t minRun = 2; // art arda kaç örnek
uint16_t cooldown = 18; // 18 x 10 dk = 3 saat
bool active = false;
uint8_t run = 0;
int32_t last = -100000, k = 0;
// true: yeni bir uyarı gönderilmeli
bool step(float z) {
float a = fabsf(z);
bool fire = false;
if (!active) {
run = (a >= on) ? run + 1 : 0;
if (run >= minRun) {
active = true;
if (k - last >= cooldown) { fire = true; last = k; }
}
} else if (a < off) {
active = false; run = 0;
}
k++;
return fire;
}
};#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient net;
PubSubClient mqtt(net);
Alarm alarm; // alarm.h
void onSample(float actual, float forecast, float mu, float sd) {
float z = (actual - forecast - mu) / sd; // eğitim artıklarıyla ölçeklenmiş
char msg[96];
snprintf(msg, sizeof msg, "{\"z\":%.2f,\"t\":%.2f,\"pred\":%.2f}", z, actual, forecast);
mqtt.publish("sera/01/anomali/z", msg); // her örnek: pano için
if (alarm.step(z)) {
mqtt.publish("sera/01/uyari", msg, true); // retained: yeni abone son uyarıyı görür
}
mqtt.publish("sera/01/uyari/durum", alarm.active ? "1" : "0", true);
}Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Kendin dene
Simülasyonda varsayılan ayarlarla 5. gündeki ısıtıcı arızasının yakalandığını ve gecikmeyi not et. Açma eşiğini 2'ye indir: kaç yanlış alarm çıktı? Ardışık örnek sayısını 1, 2 ve 4 yaparak gecikme ile yanlış alarm arasındaki dengeyi yaz. Bekleme süresini 0 yapınca aynı olay için kaç bildirim geliyor? Sıfır yanlış alarm ve en kısa gecikmeyi veren ayarı bul, sonra Python kodunu çalıştırıp aynı sonucu CSV üzerinde doğrula.
Sık yapılan hatalar
- σ'yı arızalı dönemi de içeren tüm veriden hesaplamak: arıza σ'yı büyütür ve kendi uyarısını bastırır.
- Artığı tahminin yapıldığı satıra yazmak: artık h adım sonraki gerçek değere aittir, zamanı kaydırmak gerekir.
- Açma ve kapama eşiğini aynı yapmak: eşik çevresinde salınan puan uyarıyı sürekli açıp kapatır.
- Bekleme süresi koymamak: tek bir olay için onlarca bildirim gelir ve kullanıcı uyarıları kapatır.
Yazılım mühendisliği bağlantısı
Uyarı sistemi bir durum makinesidir; durum makineleri tablo testleriyle sınanır.
- Elle yazılmış kısa puan dizileriyle test yaz: "tek sıçrama uyarı açmaz", "iki ardışık örnek açar", "bekleme içinde ikinci bildirim yok".
- Uyarıyı gönderen kod ile karar veren kodu ayır; karar saf fonksiyon olsun, MQTT yalnız bir çıkış.
- Sahadaki yanlış alarmları etiketleyip veri setine geri ekle; eşikler sürüm numarasıyla değişsin.
Kendini sına
Artığın z-skoru hangi σ ile hesaplanmalıdır?
Histerezis (açma 3, kapama 1,5) neyi önler?
Açma eşiğini 3'ten 2'ye düşürmenin olası etkisi nedir?
Uyarıyı MQTT'de retained bayrağıyla yayımlamak ne sağlar?
Bu üniteden sonra bitirme projesinde
- Uyarı, testler ve demo: Histerezisli uyarı, değerlendirme (gecikme, yanlış alarm), test raporu ve 5 dakikalık demo.
