Makine öğrenmesi ile kestirimci bakım, bir arızanın yaklaşıp yaklaşmadığını tahmin etmek için makinelerden gelen durum verisini kullanır; böylece bakım, bir arızadan sonra değil, öncesinde planlanabilir. Bu rehberde doğru sinyalleri MQTT üzerinden nasıl toplayacağınızı, bunları öznitelik ve etiketlere nasıl dönüştüreceğinizi, ilk modeli nasıl seçeceğinizi ve onu üretim sahasında nasıl davranacağını yansıtacak biçimde nasıl doğrulayacağınızı öğreneceksiniz.
Makine Öğrenmesi Bakıma Ne Katar?
Çoğu tesis zaten bir tür durum izleme yapar: sabit bir seviyede titreşim alarmı, bir rulmanda sıcaklık sınırı. Bu statik eşikler bariz arızalarda işe yarar, ancak yavaş ve çok sinyalli bozulmaları kaçırır ve çoğu zaman geç devreye girer. Makine öğrenmesi iki şey ekler. Birkaç zayıf sinyali tek ve daha güçlü bir göstergede birleştirebilir ve herkese tek bir sınır uygulamak yerine her makine için farklı yükler altında "normal"in neye benzediğini öğrenebilir.
Sınırlar konusunda da net olmak gerekir. Bir model yalnızca verisinde bulunan arıza desenlerini öğrenebilir. Bir makine tipi beş yılda iki kez arızalandıysa, denetimli bir arıza sınıflandırıcısı fazla bir şey öğrenemez; anomali tespiti veya bozulma trendi yaklaşımı daha uygundur. Problemi doğru çerçevelemek, algoritmayı seçmekten daha önemlidir.
Problemi Çerçevelemek
| Çerçeve | Yanıtlanan soru | Gerektirdiği | İyi bir ilk seçim olduğu durum |
|---|---|---|---|
| Anomali tespiti | Bu makine olağandışı mı davranıyor? | Yalnızca normal çalışma verisi | Arızalar nadir veya kötü kaydedilmiş |
| Arıza sınıflandırma | Bu makine önümüzdeki N gün içinde arızalanacak mı? | Etiketli arıza geçmişi | Arızalar sık ve kayıt altında |
| Kalan faydalı ömür regresyonu | Arızaya ne kadar süre var? | Arızaya kadar çalışma geçmişleri | Bozulma kademeli ve tekrarlanabilir |
| Arıza modu sınıflandırma | Hangi arıza gelişiyor? | Etiketli arıza tipleri | Bakım kayıtları kök nedenleri belirtiyor |
Pek çok ekip etiket gerektirmediği için anomali tespitiyle başlar, ardından yeterli etiketli olay topladıktan sonra sınıflandırmaya geçer. IoT anomali tespiti yazısı bu ilk adımı, kalan faydalı ömür tahmini ise regresyon çerçevesini ele alıyor.
MQTT Üzerinden Durum Verisi Toplamak
Sinyaller önemsediğiniz arıza modlarını izlemelidir. Dönen ekipman için olağan küme titreşim öznitelikleri, rulman veya sargı sıcaklığı, motor akımı ve hızdır. Hidrolik ve pnömatik sistemler için basınç, debi ve çevrim süreleri. Her zaman yük, hız ayar noktası ve ürün gibi çalışma bağlamını dahil edin; çünkü yükü bilmeyen bir model ağır bir partiyi gelişen bir arıza sanır.
Pratik bir MQTT düzeni, öznitelikleri varlık başına bir hiyerarşi altında, kaynak zaman damgalarıyla yayınlar:
connectmq/plant1/line2/pump3/condition {"ts":..., "vib_rms":..., "vib_peak":..., "bearing_temp":..., "current":..., "load":...}
connectmq/plant1/line2/pump3/events {"ts":..., "type":"maintenance", "action":"bearing replaced"}
kHz dalga formlarını akıtmak yerine titreşim özniteliklerini sahada hesaplayın. Bir saniyelik bir pencere RMS, tepe, tepe faktörü ve birkaç spektral bant enerjisi verir; bu da birkaç saniyede bir yayınlanacak kadar küçüktür. Events topic'i telemetri kadar önemlidir; kaydedilmiş bakım işlemleri ve arızalar olmadan etiket oluşturamazsınız. Zaman serisi sensör verisini etiketleme rehberi bu olayların operatörlerden nasıl toplanacağını gösteriyor.
Makine Öğrenmesi ile Kestirimci Bakım İçin Öznitelik Mühendisliği
Ham okumalar nadiren en iyi model girdileridir. Bozulma; seviye, değişkenlik ve zaman içindeki trend değişiklikleri olarak ortaya çıkar; bu yüzden öznitelikler genellikle kayan pencereler üzerinden hesaplanır.
- Seviye öznitelikleri: RMS titreşim, sıcaklık ve akımın kayan ortalaması.
- Değişkenlik öznitelikleri: kayan standart sapma, tepeden tepeye değer, tepe faktörü.
- Trend öznitelikleri: son saatler veya günler üzerindeki doğrusal uyumun eğimi.
- Göreli öznitelikler: ortam üzerindeki sıcaklık artışı, birim yük başına akım, makinenin kendi referansına göre titreşim.
- Spektral öznitelikler: rulman kusur frekanslarına veya dengesizliğe bağlı bantlardaki enerji.
- Çalışma bağlamı: yük, hız, son bakımdan bu yana çalışma saatleri.
Makineler birbirinden farklıysa varlık başına normalize edin. Komşularından her zaman biraz daha fazla titreşen bir pompa mutlaka bozulmuyordur; önemli olan kendi geçmişine göre değişimdir.
Sızıntı Olmadan Etiket Oluşturmak
Sınıflandırma çerçevesinde yaygın bir etiket "önümüzdeki H saat içinde arızalanacak" şeklindedir. Her arıza zaman damgasını alır, ondan önceki ufuk içindeki pencereleri pozitif, geri kalan her şeyi negatif olarak işaretlersiniz. Üç kural etiketleri dürüst tutar:
- Bakımdan hemen sonraki dönemi kısa bir süre için hariç tutun; çünkü alışma dönemindeki okumalar temsil edici değildir.
- Arızanın kendisini içeren pencereleri çıkarın; aksi halde model durmuş bir makineyi tanımayı öğrenir.
- Öznitelikleri asla pencerenin zaman damgasından sonraki verilerle hesaplamayın. Merkezlenmiş kayan pencereler klasik bir sızıntı kaynağıdır.
Python ile Çalışan Bir Örnek
Aşağıdaki betik, ara sıra bozulma gösteren birkaç pompa için simüle durum verisi üretir, bunu herkese açık MQTT test broker'ına yayınlar, bir aboneyle geri toplar ve eğitim sırasında hiç görmediği pompalar üzerinde değerlendirilen bir gradient boosting sınıflandırıcısı eğitir. Pratikte toplayıcı bunun yerine historian'ınızdan okur.
import json
import random
import time
import uuid
import numpy as np
import pandas as pd
import paho.mqtt.client as mqtt
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.metrics import classification_report
BROKER = "broker.connectmq.com"
PREFIX = f"connectmq/demo/{uuid.uuid4().hex[:8]}/plant1"
rows = []
def on_message(client, userdata, msg):
p = json.loads(msg.payload)
p["asset"] = msg.topic.split("/")[-2]
rows.append(p)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="pdm-" + uuid.uuid4().hex[:8])
client.on_message = on_message
client.connect(BROKER, 1883, keepalive=60)
client.subscribe(f"{PREFIX}/+/condition", qos=1)
client.loop_start()
time.sleep(1)
# 6 pompa x 600 adım simüle et; bazıları sona doğru arızaya yaklaşır
for asset in range(6):
fails = asset % 2 == 0
for step in range(600):
wear = max(0, step - 400) / 200 if fails else 0
body = {
"step": step,
"vib_rms": round(1.0 + 1.5 * wear ** 2 + random.gauss(0, 0.08), 3),
"bearing_temp": round(55 + 12 * wear + random.gauss(0, 0.5), 2),
"current": round(14 + 1.5 * wear + random.gauss(0, 0.2), 2),
"load": round(random.uniform(0.6, 1.0), 2),
"failed_at": 600 if fails else None,
}
client.publish(f"{PREFIX}/pump{asset}/condition", json.dumps(body), qos=0)
time.sleep(0.11) # herkese açık broker'ın istemci başına 10 mesaj/sn sınırının altında kal
time.sleep(3)
client.loop_stop()
df = pd.DataFrame(rows).sort_values(["asset", "step"])
HORIZON = 100
df["label"] = ((df["failed_at"].notna()) & (df["failed_at"] - df["step"] <= HORIZON)).astype(int)
feats = []
for col in ["vib_rms", "bearing_temp", "current"]:
g = df.groupby("asset")[col]
df[f"{col}_mean20"] = g.transform(lambda s: s.rolling(20, min_periods=5).mean())
df[f"{col}_std20"] = g.transform(lambda s: s.rolling(20, min_periods=5).std())
df[f"{col}_slope50"] = g.transform(lambda s: s.diff(50) / 50)
feats += [f"{col}_mean20", f"{col}_std20", f"{col}_slope50"]
feats.append("load")
df = df.dropna(subset=feats)
# Varlık bazlı bölme: 0-3 numaralı pompalarla eğit, modelin hiç görmediği 4-5 ile test et
train, test = df[~df["asset"].isin(["pump4", "pump5"])], df[df["asset"].isin(["pump4", "pump5"])]
model = HistGradientBoostingClassifier(max_iter=200, learning_rate=0.05)
model.fit(train[feats], train["label"])
print(classification_report(test["label"], model.predict(test[feats]), digits=3))
Bağımlılıkları pip install paho-mqtt pandas numpy scikit-learn ile kurun. Simülatör herkese açık broker'ın hız sınırına uyduğu için çalıştırma birkaç dakika sürer. 8883 portu üzerinden YOUR_USERNAME, YOUR_PASSWORD ve YOUR_CLIENT_ID ile kendi ConnectMQ broker'ınızı kullandığınızda birçok cihazdan paralel olarak yayın yapabilirsiniz.
İlk Modeli Seçmek
- Gradient boosted ağaçlar (scikit-learn, XGBoost, LightGBM) tablo biçimindeki öznitelikler için varsayılan seçimdir. Farklı ölçekleri idare eder, az ayar gerektirir ve bakım mühendislerinin tartışabileceği öznitelik önem değerleri verir.
- Lojistik regresyon faydalı bir referans modeldir ve açıklaması kolaydır.
- Isolation Forest veya autoencoder'lar, etiketler kıt olduğunda anomali çerçevesi için.
- Dizi modelleri (LSTM, 1D CNN, transformer'lar) yalnızca çok fazla geçmiş veriniz olduğunda ve basit modeller platoya ulaştığında.
Üretimdeki Gibi Doğrulamak
Rastgele eğitim-test bölmeleri zaman serilerinde performansı olduğundan yüksek gösterir; çünkü komşu pencereler neredeyse aynıdır. Zamana dayalı bir bölme kullanın ve ideal olarak modelin görmediği makinelere genelleşip genelleşmediğini kontrol etmek için varlıkların tamamını ayırın. Kesinlik (precision) ve duyarlılığı (recall) kullanmayı planladığınız alarm eşiğinde raporlayın ve bunları operasyonel terimlere çevirin: haftada kaç yanlış alarm, kaç arızanın ne kadar önceden yakalandığı. Bir bakım planlayıcısının önemsediği sayılar bunlardır.
Devreye Almak ve Döngüyü Kapatmak
Devreye alınmış bir model yalnızca bir MQTT istemcisi daha demektir. Durum topic'lerine abone olur, her yeni pencereyi puanlar ve bir risk skoru yayınlar:
connectmq/plant1/line2/pump3/health {"ts":..., "risk":0.82, "model":"pdm-gbt-1.4"}
Panolar, CMMS bağlayıcıları ve alarm araçları bu topic'e abone olur. ConnectMQ portalında yayınlanan risk değeri için eşik alarm kuralları da tanımlayabilirsiniz; böylece seçtiğiniz sınırın üzerindeki bir skor ek kod yazmadan alarm günlüğünde görünür. Her alarmın sonucunu bir olay olarak takip edin, etiketlere geri besleyin ve modeli periyodik olarak yeniden eğitin; IoT MLOps yazısı bu yaşam döngüsünü ele alıyor.
Modellerin ve cihazların birlikte çalıştığı daha geniş tablo için yapay zeka ve IoT rehberine bakın. Aynı soruna dijital ikiz perspektifinden bakmak için dijital ikiz ile kestirimci bakım yazısı, veri odaklı yaklaşıma fizik bağlamı ekliyor.
ConnectMQ ile Başlayın
Durum verisi toplamaya bugün başlayın: app.connectmq.com adresinde kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun ve saha cihazlarınızı oluşturulan kimlik bilgileriyle bağlayın. ConnectMQ, TLS, canlı topic gezgini ve eşik alarmları içeren tam yönetilen bir MQTT hizmeti sunar; böylece broker operasyonları yerine özniteliklere ve modellere odaklanabilirsiniz. İleride daha fazla bağlantıya veya izolasyona ihtiyaç duyarsanız aynı topic'ler daha yüksek kapasiteli bir bulut MQTT broker planına taşınır.
Sık Sorulan Sorular
Makine öğrenmesi ile kestirimci bakım için ne kadar veriye ihtiyacım var?
Denetimli arıza tahmini için her arıza modu başına birden fazla kaydedilmiş arızaya ve her birinden önceki durum verisine ihtiyacınız vardır. Az sayıda arızanız varsa normal veri üzerinde anomali tespitiyle başlayın ve ilerledikçe etiketli olaylar toplayın.
Kestirimci bakım için en iyi algoritma hangisi?
İyi tasarlanmış kayan öznitelikler üzerinde gradient boosted ağaçlar, çoğu durum verisi için güçlü bir başlangıç noktasıdır. Derin dizi modelleri büyük geçmiş verilerde yardımcı olabilir, ancak küçük veri kümelerinde iyi özniteliklerin önüne nadiren geçer.
Modelim testte doğru görünüyor ama üretimde neden başarısız oluyor?
En yaygın nedenler; neredeyse aynı pencereleri test kümesine sızdıran rastgele bölmeler, gelecekteki veriyle hesaplanan öznitelikler ve eksik çalışma bağlamıdır. Zamana veya varlığa dayalı bölmeler kullanın ve öznitelik pencerelerini dikkatle kontrol edin.
Modeli MQTT broker çalıştırabilir mi?
Hayır, broker mesajları yönlendirir. Modeli sahada veya bulutta, durum topic'lerine abone olan ve skorları broker'a geri yayınlayan ayrı bir MQTT istemcisi olarak çalıştırın.



