Registrering af flerdimensionel uregelmæssighed med isolationsskov

I denne artikel kan du se, hvordan du kan bruge SynapseML på Apache Spark til registrering af flerdimensionel uregelmæssigheder. Registrering af flerdimensionelle uregelmæssigheder gør det muligt at registrere uregelmæssigheder blandt mange variabler eller tidsserier under hensyntagen til alle interkorrelationer og afhængigheder mellem de forskellige variabler. I dette scenarie bruger vi SynapseML til at oplære en Isolation Forest-model til registrering af flerdimensionel uregelmæssigheder, og vi bruger derefter til den oplærte model til at udlede flervariationer i et datasæt, der indeholder syntetiske målinger fra tre IoT-sensorer.

Hvis du vil vide mere om Isolation Forest-modellen, skal du se det oprindelige papir af Liu et al..

Forudsætninger

  • Vedhæft din notesbog til et lakehouse. I venstre side skal du vælge Tilføj for at tilføje et eksisterende lakehouse eller oprette et lakehouse.

Import af bibliotek

from IPython import get_ipython
from IPython.terminal.interactiveshell import TerminalInteractiveShell
import uuid
import mlflow

from pyspark.sql import functions as F
from pyspark.ml.feature import VectorAssembler
from pyspark.sql.types import *
from pyspark.ml import Pipeline

from synapse.ml.isolationforest import *

from synapse.ml.explainers import *
%matplotlib inline
from pyspark.sql import SparkSession

# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()

from synapse.ml.core.platform import *

if running_on_synapse():
    shell = TerminalInteractiveShell.instance()
    shell.define_macro("foo", """a,b=10,20""")

Inputdata

# Table inputs
timestampColumn = "timestamp"  # str: the name of the timestamp column in the table
inputCols = [
    "sensor_1",
    "sensor_2",
    "sensor_3",
]  # list(str): the names of the input variables

# Training Start time, and number of days to use for training:
trainingStartTime = (
    "2022-02-24T06:00:00Z"  # datetime: datetime for when to start the training
)
trainingEndTime = (
    "2022-03-08T23:55:00Z"  # datetime: datetime for when to end the training
)
inferenceStartTime = (
    "2022-03-09T09:30:00Z"  # datetime: datetime for when to start the training
)
inferenceEndTime = (
    "2022-03-20T23:55:00Z"  # datetime: datetime for when to end the training
)

# Isolation Forest parameters
contamination = 0.021
num_estimators = 100
max_samples = 256
max_features = 1.0

Læs data

df = (
    spark.read.format("csv")
    .option("header", "true")
    .load(
        "wasbs://publicwasb@mmlspark.blob.core.windows.net/generated_sample_mvad_data.csv"
    )
)

caste kolonner til relevante datatyper

df = (
    df.orderBy(timestampColumn)
    .withColumn("timestamp", F.date_format(timestampColumn, "yyyy-MM-dd'T'HH:mm:ss'Z'"))
    .withColumn("sensor_1", F.col("sensor_1").cast(DoubleType()))
    .withColumn("sensor_2", F.col("sensor_2").cast(DoubleType()))
    .withColumn("sensor_3", F.col("sensor_3").cast(DoubleType()))
    .drop("_c5")
)

display(df)

Oplæring af dataforberedelse

# filter to data with timestamps within the training window
df_train = df.filter(
    (F.col(timestampColumn) >= trainingStartTime)
    & (F.col(timestampColumn) <= trainingEndTime)
)
display(df_train)

Test dataforberedelse

# filter to data with timestamps within the inference window
df_test = df.filter(
    (F.col(timestampColumn) >= inferenceStartTime)
    & (F.col(timestampColumn) <= inferenceEndTime)
)
display(df_test)

Træn isolationsskovsmodel

isolationForest = (
    IsolationForest()
    .setNumEstimators(num_estimators)
    .setBootstrap(False)
    .setMaxSamples(max_samples)
    .setMaxFeatures(max_features)
    .setFeaturesCol("features")
    .setPredictionCol("predictedLabel")
    .setScoreCol("outlierScore")
    .setContamination(contamination)
    .setContaminationError(0.01 * contamination)
    .setRandomSeed(1)
)

Derefter opretter vi en ML-pipeline for at oplære Isolation Forest-modellen. Vi demonstrerer også, hvordan du opretter et MLflow-eksperiment og registrerer den oplærte model.

Registrering af MLflow-model er kun påkrævet, hvis du får adgang til den oplærte model på et senere tidspunkt. Modelobjektmodellen er tilstrækkelig til at oplære modellen og udføre udledelse i den samme notesbog.

va = VectorAssembler(inputCols=inputCols, outputCol="features")
pipeline = Pipeline(stages=[va, isolationForest])
model = pipeline.fit(df_train)

Udfør udledning

Indlæs den oplærte isolationsskovsmodel

Udfør udledning

df_test_pred = model.transform(df_test)
display(df_test_pred)

Færdiglavet Afvigelsesregistrering

Azure AI-Afvigelsesregistrering

  • Uregelmæssighedsstatus for seneste punkt: Genererer en model ved hjælp af foregående punkter og bestemmer, om det seneste punkt er unormalt (Scala, Python)
  • Find uregelmæssigheder: Genererer en model ved hjælp af en hel serie og finder uregelmæssigheder i serien (Scala, Python)