Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu tarif, çok değişkenli anomali algılama için Apache Spark üzerinde SynapseML ve Foundry Araçları'nın nasıl kullanılacağını gösterir. Çok değişkenli anomali algılama, birçok değişken veya zaman serisi arasındaki anomalilerin algılanmasıyla birlikte, farklı değişkenler arasındaki tüm bağıntılar ve bağımlılıkların hesaplanmasıdır. Bu senaryoda, bir modeli çok değişkenli anomali algılama için eğitmek için SynapseML ve Foundry Araçları kullanılır. Ardından modeli kullanarak üç IoT algılayıcısından yapay ölçümler içeren bir veri kümesi içinde çok değişkenli anomaliler çıkarabilirsiniz.
Önemli
20 Eylül 2023'den itibaren yeni Anomali Algılayıcısı kaynakları oluşturamazsınız. Anomali Algılayıcısı hizmeti 1 Ekim 2026'da kullanımdan kaldırılacak.
Azure Yapay Zeka Anomali Algılayıcısı hakkında daha fazla bilgi için Anomaly Detector bilgi kaynağını ziyaret edin.
Önkoşullar
- Azure aboneliği - Ücretsiz bir abonelik oluştur
- Defterinizi bir lakehouse'a bağlayın. Sol tarafta Ekle'yi seçerek mevcut bir göl evi ekleyin veya bir göl evi oluşturun.
Ayarlama
Mevcut Anomaly Detector bir kaynakla başlayarak, çeşitli biçimlerdeki verileri işlemenin yollarını keşfedebilirsiniz.
Anomali Algılayıcısı kaynağı oluşturma
Uyarı
20 Eylül 2023'ten bu yana yeni Anomali Algılayıcısı kaynakları oluşturamazsınız. Aşağıdaki adımlar yalnızca mevcut bir Anomali Algılayıcısı kaynağınız varsa geçerlidir. Anomali Algılayıcısı hizmetini gerektirmeyen çok değişkenli bir anomali algılama yaklaşımı için bkz. Yalıtım Ormanı ile Çok Değişkenli Anomali Algılama.
- Azure portalında kaynak grubunuzda Create öğesini seçin ve ardından Anomaly Detector yazın. Anomali Algılayıcısı kaynağını seçin.
- Kaynağı adlandırın ve ideal olarak kaynak grubunuzun geri kalanıyla aynı bölgeyi kullanın. Geri kalanı için varsayılan seçenekleri kullanın ve ardından Gözden Geçir + Oluştur'u ve sonra Oluştur'u seçin.
- Anomali Algılayıcısı kaynağını oluşturduktan sonra açın ve sol gezinti bölmesindeki paneli seçin
Keys and Endpoints. Anomali Algılayıcısı kaynağının anahtarını ortam değişkenineANOMALY_API_KEYkopyalayın veya değişkendeanomalyKeydepolayın.
Depolama Hesabı kaynağı oluştur
Ara verileri kaydetmek için bir Azure Blob Depolama Hesabı oluşturmanız gerekir. Bu depolama hesabında ara verileri depolamak için bir kapsayıcı oluşturun. Kapsayıcı adını not edin ve bağlantı dizesini kapsayıcıya kopyalayın. Daha sonra containerName değişkenini ve BLOB_CONNECTION_STRING ortam değişkenini doldurmak için buna ihtiyacınız vardır.
Hizmet anahtarlarınızı girin
İlk olarak, hizmet anahtarlarınız için ortam değişkenlerini ayarlayın. Sonraki hücre ANOMALY_API_KEY ve BLOB_CONNECTION_STRING ortam değişkenlerini Azure Key Vault depolanan değerlere göre ayarlar. Bu öğreticiyi kendi ortamınızda çalıştırırsanız, devam etmeden önce bu ortam değişkenlerini ayarladığınızdan emin olun:
import os
from pyspark.sql import SparkSession
from synapse.ml.core.platform import find_secret
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
ANOMALY_API_KEY ve BLOB_CONNECTION_STRING ortam değişkenlerini okuyun ve ve containerName değişkenlerini ayarlayınlocation:
# An Anomaly Detector subscription key
anomalyKey = find_secret("anomaly-api-key") # use your own anomaly api key
# Your storage account name
storageName = "anomalydetectiontest" # use your own storage account name
# A connection string to your blob storage account
storageKey = find_secret("madtest-storage-key") # use your own storage key
# A place to save intermediate MVAD results
intermediateSaveDir = (
"wasbs://madtest@anomalydetectiontest.blob.core.windows.net/intermediateData"
)
# The location of the anomaly detector resource that you created
location = "westus2"
Anomali algılayıcısının bu depolama hesabına ara sonuçları kaydedebilmesi için depolama hesabına bağlanın:
spark.sparkContext._jsc.hadoopConfiguration().set(
f"fs.azure.account.key.{storageName}.blob.core.windows.net", storageKey
)
Tüm gerekli modülleri içeri aktarın:
import numpy as np
import pandas as pd
import pyspark
from pyspark.sql.functions import col
from pyspark.sql.functions import lit
from pyspark.sql.types import DoubleType
import matplotlib.pyplot as plt
import synapse.ml
from synapse.ml.services import *
Spark DataFrame'de örnek verileri okuyun:
df = (
spark.read.format("csv")
.option("header", "true")
.load("wasbs://publicwasb@mmlspark.blob.core.windows.net/MVAD/sample.csv")
)
df = (
df.withColumn("sensor_1", col("sensor_1").cast(DoubleType()))
.withColumn("sensor_2", col("sensor_2").cast(DoubleType()))
.withColumn("sensor_3", col("sensor_3").cast(DoubleType()))
)
# Let's inspect the dataframe:
df.show(5)
Artık modelinizi eğitmek için kullandığınız bir estimator nesne oluşturabilirsiniz. Eğitim verileri için başlangıç ve bitiş saatlerini belirtin. Ayrıca kullanılacak giriş sütunlarını ve zaman damgalarını içeren sütunun adını belirtin. Son olarak, anomali algılama kayan penceresinde kullanılacak veri noktalarının sayısını belirtin ve Azure Blob Depolama Hesabı için bağlantı dizesi'i ayarlayın.
trainingStartTime = "2020-06-01T12:00:00Z"
trainingEndTime = "2020-07-02T17:55:00Z"
timestampColumn = "timestamp"
inputColumns = ["sensor_1", "sensor_2", "sensor_3"]
estimator = (
FitMultivariateAnomaly()
.setSubscriptionKey(anomalyKey)
.setLocation(location)
.setStartTime(trainingStartTime)
.setEndTime(trainingEndTime)
.setIntermediateSaveDir(intermediateSaveDir)
.setTimestampCol(timestampColumn)
.setInputCols(inputColumns)
.setSlidingWindow(200)
)
Verilere estimator’i sığdırın.
model = estimator.fit(df)
Eğitim tamamlandıktan sonra çıkarım için modeli kullanın. Sonraki hücredeki kod, anomalileri algılamak istediğiniz verilerin başlangıç ve bitiş saatlerini belirtir:
inferenceStartTime = "2020-07-02T18:00:00Z"
inferenceEndTime = "2020-07-06T05:15:00Z"
result = (
model.setStartTime(inferenceStartTime)
.setEndTime(inferenceEndTime)
.setOutputCol("results")
.setErrorCol("errors")
.setInputCols(inputColumns)
.setTimestampCol(timestampColumn)
.transform(df)
)
result.show(5)
Önceki hücrede .show(5) ilk beş veri çerçevesi satırını gösterir. Sonuçların tümü, çıkarım penceresinin dışında kaldığından null.
Yalnızca çıkarsanan verilerin sonuçlarını göstermek için gerekli sütunları seçin. Ardından veri çerçevesindeki satırları artan düzende sıralayabilir ve sonucu yalnızca çıkarım penceresi aralığındaki satırları gösterecek şekilde filtreleyebilirsiniz. Burada, inferenceEndTime veri çerçevesinin son satırıyla eşleştiği için onu göz ardı edebilirsiniz.
Son olarak, sonuçları daha iyi çizmek için Spark veri çerçevesini Pandas veri çerçevesine dönüştürün:
rdf = (
result.select(
"timestamp",
*inputColumns,
"results.contributors",
"results.isAnomaly",
"results.severity"
)
.orderBy("timestamp", ascending=True)
.filter(col("timestamp") >= lit(inferenceStartTime))
.toPandas()
)
rdf
contributors Her bir sensörden saptanan anomalilere katkı puanını depolayan sütunu biçimlendirin. Sonraki hücre bunu işler ve her algılayıcının katkı puanını kendi sütununa böler:
def parse(x):
if type(x) is list:
return dict([item[::-1] for item in x])
else:
return {"series_0": 0, "series_1": 0, "series_2": 0}
rdf["contributors"] = rdf["contributors"].apply(parse)
rdf = pd.concat(
[rdf.drop(["contributors"], axis=1), pd.json_normalize(rdf["contributors"])], axis=1
)
rdf
Artık sırasıyla , series_0ve series_1 sütunlarında 1, 2 ve 3 algılayıcılarının series_2katkı puanlarına sahipsiniz.
Sonuçları çizmek için sonraki hücreyi çalıştırın. parametresi, minSeverity çizecek anomalilerin en düşük önem derecesini belirtir:
minSeverity = 0.1
####### Main Figure #######
plt.figure(figsize=(23, 8))
plt.plot(
rdf["timestamp"],
rdf["sensor_1"],
color="tab:orange",
linestyle="solid",
linewidth=2,
label="sensor_1",
)
plt.plot(
rdf["timestamp"],
rdf["sensor_2"],
color="tab:green",
linestyle="solid",
linewidth=2,
label="sensor_2",
)
plt.plot(
rdf["timestamp"],
rdf["sensor_3"],
color="tab:blue",
linestyle="solid",
linewidth=2,
label="sensor_3",
)
plt.grid(axis="y")
plt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)
plt.legend()
anoms = list(rdf["severity"] >= minSeverity)
_, _, ymin, ymax = plt.axis()
plt.vlines(np.where(anoms), ymin=ymin, ymax=ymax, color="r", alpha=0.8)
plt.legend()
plt.title(
"A plot of the values from the three sensors with the detected anomalies highlighted in red."
)
plt.show()
####### Severity Figure #######
plt.figure(figsize=(23, 1))
plt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)
plt.plot(
rdf["timestamp"],
rdf["severity"],
color="black",
linestyle="solid",
linewidth=2,
label="Severity score",
)
plt.plot(
rdf["timestamp"],
[minSeverity] * len(rdf["severity"]),
color="red",
linestyle="dotted",
linewidth=1,
label="minSeverity",
)
plt.grid(axis="y")
plt.legend()
plt.ylim([0, 1])
plt.title("Severity of the detected anomalies")
plt.show()
####### Contributors Figure #######
plt.figure(figsize=(23, 1))
plt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)
plt.bar(
rdf["timestamp"], rdf["series_0"], width=2, color="tab:orange", label="sensor_1"
)
plt.bar(
rdf["timestamp"],
rdf["series_1"],
width=2,
color="tab:green",
label="sensor_2",
bottom=rdf["series_0"],
)
plt.bar(
rdf["timestamp"],
rdf["series_2"],
width=2,
color="tab:blue",
label="sensor_3",
bottom=rdf["series_0"] + rdf["series_1"],
)
plt.grid(axis="y")
plt.legend()
plt.ylim([0, 1])
plt.title("The contribution of each sensor to the detected anomaly")
plt.show()
Çizimler, algılayıcılardan alınan ham verileri (çıkarım penceresinin içinde) turuncu, yeşil ve mavi olarak gösterir. İlk şekildeki kırmızı dikey çizgiler, önem derecesi değerinden büyük veya eşit minSeverityolan algılanan anomalileri gösterir.
İkinci çizimde, algılanan tüm anomalilerin önem derecesi puanı gösterilir ve minSeverity eşik noktalı kırmızı çizgide gösterilir.
Son olarak, son çizimde her algılayıcıdan alınan verilerin algılanan anomalilere katkısı gösterilir. Her anomalinin en olası nedenini tanılamaya ve anlamaya yardımcı olur.
İlgili içerik
- Çok Değişkenli Anomali Algılama ile İzolasyon Ormanı – Azure Yapay Zeka Anomali Algılayıcısı kaynağı gerektirmez.
- SynapseML ile LightGBM kullanma
- SynapseML ile Döküm Araçları'nı kullanma
- Hiper parametreleri ayarlamak için SynapseML'yi kullanma