From a41c4eaacd9b3f8854aaae2cb28227e9a84ebf52 Mon Sep 17 00:00:00 2001 From: Shunping Huang Date: Fri, 13 Jun 2025 12:37:50 -0400 Subject: [PATCH 1/3] Polish anomaly detection zscore notebook for public doc. --- .../anomaly_detection_zscore.ipynb | 452 +++++++++++++++--- 1 file changed, 375 insertions(+), 77 deletions(-) diff --git a/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb b/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb index 1cf91b544b23..d7daec88f751 100644 --- a/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb +++ b/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb @@ -8,7 +8,7 @@ "cellView": "form", "id": "2d79fe3a-952b-478f-ba78-44cafddc91d1" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ "# @title ###### Licensed to the Apache Software Foundation (ASF), Version 2.0 (the \"License\")\n", "\n", @@ -52,17 +52,21 @@ { "cell_type": "markdown", "source": [ - "This notebook demonstrates how to perform anomaly detection on both batch and streaming data using the `AnomalyDetection` PTransform. This feature was introduced in Apache Beam version 2.64.0.\n", + "This notebook demonstrates how to perform anomaly detection on both batch and streaming data using the `AnomalyDetection` PTransform:\n", "\n", - "This notebook is divided into two main sections:\n", - "1. Batch Anomaly Detection: We will first generate a synthetic univariate dataset containing outliers. We will then apply the `AnomalyDetection` PTransform, configured to use the Z-Score algorithm, to this batch data. The outlier results (scores and labels) will be logged directly.\n", + "1. Batch Anomaly Detection\n", "\n", - "1. Streaming Anomaly Detection with Concept Drift: We will generate another synthetic univariate dataset that not only includes outliers but also incorporates various types of concept drift (i.e., changes in the underlying data distribution over time). This data will be published to a Pub/Sub topic to simulate a real-time streaming input. An Apache Beam pipeline will then:\n", - " - Read the data from this input Pub/Sub topic.\n", - " - Apply the AnomalyDetection PTransform using the Z-Score algorithm within a sliding window to calculate anomaly scores and assign labels.\n", - " - Publish these results (the original data along with their anomaly scores and labels) to a second Pub/Sub topic.\n", + " This section focuses on processing a static dataset. A synthetic univariate dataset containing outliers is generated. Subsequently, the AnomalyDetection PTransform, utilizing the Z-Score algorithm, is applied to identify and log the outliers.\n", "\n", - " Finally, we will visualize the labeled data points in an animated plot to observe the detection performance in a streaming context with concept drift." + "2. Streaming Anomaly Detection with Concept Drift\n", + "\n", + " This section simulates a real-time environment where the data distribution changes over time. A synthetic dataset incorporating both outliers and concept drift is published to a Pub/Sub topic. An Apache Beam pipeline is configured to:\n", + " - Read the streaming data from the input Pub/Sub topic.\n", + " - Apply the AnomalyDetection PTransform within a sliding window.\n", + " - Publish the enriched results (original data, anomaly scores, and labels) to an output Pub/Sub topic.\n", + " \n", + " Finally, the labeled data points are visulaized in a series of plots to observe the detection performance in a streaming context with concept drift.\n", + "\n" ], "metadata": { "id": "pIlokenR1vs7" @@ -83,15 +87,14 @@ { "cell_type": "code", "source": [ - "! pip install apache_beam[interactive,gcp]>=2.64.0 --quiet" + "! pip install 'apache_beam[interactive,gcp]>=2.64.0' --quiet" ], "metadata": { - "collapsed": true, "id": "SafqA6dALKvo" }, "id": "SafqA6dALKvo", "execution_count": null, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}] + "outputs": [] }, { "cell_type": "markdown", @@ -105,14 +108,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "8fb71376-b0eb-474b-ab51-2161dfa60e2d", "metadata": { "id": "8fb71376-b0eb-474b-ab51-2161dfa60e2d" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ - "# Imports Required for the notebook\n", + "# Import required dependencies for the notebook\n", "import json\n", "import os\n", "import random\n", @@ -163,12 +166,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "29cda7f0-a24e-4e74-ba6e-166413ab532c", "metadata": { "id": "29cda7f0-a24e-4e74-ba6e-166413ab532c" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ "# GCP-related constant are listed below\n", "\n", @@ -206,8 +209,8 @@ "id": "51jml7JvMpbD" }, "id": "51jml7JvMpbD", - "execution_count": null, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}] + "execution_count": 4, + "outputs": [] }, { "cell_type": "markdown", @@ -222,7 +225,13 @@ { "cell_type": "markdown", "source": [ - "### Generating Synthetic Data with Outliers" + "### Generating Synthetic Data with Outliers\n", + "This process synthesizes a dataset (N=200) for anomaly detection. The generation consists of two key steps:\n", + "\n", + "- A base dataset is generated from a standard normal distribution (μ=0,σ=1).\n", + "- Global outliers are introduced by replacing 1% of these points with values drawn from a normal distribution with a significant mean shift (μ=9,σ=1).\n", + "\n", + "A fixed random seed is used to ensure reproducibility." ], "metadata": { "id": "tj9wPNIZxcf2" @@ -258,8 +267,18 @@ "id": "S4hqN5tPxm-n" }, "id": "S4hqN5tPxm-n", - "execution_count": null, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}] + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Run the following code to visualize the dataset on a scatter plot." + ], + "metadata": { + "id": "KeCNv5m4mx4G" + }, + "id": "KeCNv5m4mx4G" }, { "cell_type": "code", @@ -270,16 +289,52 @@ "plt.scatter(x=range(len(df)), y=df, s=10)" ], "metadata": { - "id": "IUD3giMzyxer" + "id": "IUD3giMzyxer", + "outputId": "bbf8d53c-068c-447c-ec6b-b899c0585b80", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 391 + } }, "id": "IUD3giMzyxer", - "execution_count": null, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}] + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 6 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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DgAAAGNBYUH90ksvjRtvvLH/7x1Xcb/77rvjfe97X+y2225x6623xpIlS2LBggWxzz77xFlnnRWXX355Td/T3t4eX/nKV4T7FqE+W4v6bD3qtLWoz9aiPluL+mw96rS1FF2fhd9HHQAAAKheMWe+AwAAAHUR1AEAACAhgjoAAAAkRFAHAACAhDR1UL/mmmviTW96U+y5554xf/78+NWvflV2kajCihUr4h3veEdMmDAhpk6dGqeeemqsWbNmwGve9773RVtb24B/5513XkklZiRf/epXd6mvQw89tP/5119/PZYuXRr7779/7LvvvnH66afHhg0bSiwxw3nTm960S322tbXF0qVLI0L7TN29994bH/jAB2LGjBnR1tYWt9xyy4DnsyyLSy+9NKZPnx577bVXLFy4MJ544okBr3nppZfizDPPjI6Ojpg4cWKcc8458eqrrzbwV7Cz4ep069atcfHFF8eRRx4Z++yzT8yYMSM+9rGPxXPPPTfgMyq16yuuuKLBv4SIkdvo2WefvUtdnXTSSQNeo42mY6T6rLQ/bWtri6uuuqr/NdpnOqrJKdX0a9etWxcnn3xy7L333jF16tT4/Oc/H2+88UZNZWnaoP6jH/0oli1bFl/5ylfi4Ycfjrlz58aiRYvi+eefL7tojGDlypWxdOnSuP/+++P222+PrVu3xoknnhibN28e8Lpzzz031q9f3//vyiuvLKnEVOPwww8fUF+//OUv+5+78MIL42c/+1n8+Mc/jpUrV8Zzzz0Xp512WomlZTi//vWvB9Tl7bffHhERH/7wh/tfo32ma/PmzTF37ty45pprKj5/5ZVXxre//e247rrr4oEHHoh99tknFi1aFK+//nr/a84888x49NFH4/bbb49bb7017r333vjEJz7RqJ/AIMPV6WuvvRYPP/xwfPnLX46HH344fvKTn8SaNWvigx/84C6vvfzyywe0209/+tONKD6DjNRGIyJOOumkAXV10003DXheG03HSPW5cz2uX78+rr/++mhra4vTTz99wOu0zzRUk1NG6tdu27YtTj755NiyZUvcd999ceONN8YNN9wQl156aW2FyZrUsccemy1durT/723btmUzZszIVqxYUWKpqMfzzz+fRUS2cuXK/seOO+647LOf/Wx5haImX/nKV7K5c+dWfG7Tpk3ZHnvskf34xz/uf+yxxx7LIiJbtWpVg0rIaHz2s5/NDjrooGz79u1ZlmmfzSQisptvvrn/7+3bt2ddXV3ZVVdd1f/Ypk2bsvb29uymm27KsizLfve732URkf3617/uf80vfvGLrK2tLfuf//mfhpWdygbXaSW/+tWvsojInn766f7HDjzwwOyb3/xmsYWjZpXq86yzzspOOeWUId+jjaarmvZ5yimnZO9///sHPKZ9pmtwTqmmX/vv//7v2bhx47Lu7u7+11x77bVZR0dH1tfXV/V3N+UR9S1btsRDDz0UCxcu7H9s3LhxsXDhwli1alWJJaMePT09ERExadKkAY//67/+a0yePDmOOOKIWL58ebz22mtlFI8qPfHEEzFjxoyYM2dOnHnmmbFu3bqIiHjooYdi69atA9rroYceGrNmzdJem8CWLVvi+9//fvzd3/1dtLW19T+ufTantWvXRnd394D22NnZGfPnz+9vj6tWrYqJEyfG29/+9v7XLFy4MMaNGxcPPPBAw8tM7Xp6eqKtrS0mTpw44PErrrgi9t9//5g3b15cddVVNU/DpHHuueeemDp1ahxyyCGxZMmS2LhxY/9z2mjz2rBhQ/z85z+Pc845Z5fntM80Dc4p1fRrV61aFUceeWRMmzat/zWLFi2K3t7eePTRR6v+7t3z+AGN9uKLL8a2bdsG/PiIiGnTpsXjjz9eUqmox/bt2+OCCy6Id73rXXHEEUf0P/7Xf/3XceCBB8aMGTPiN7/5TVx88cWxZs2a+MlPflJiaRnK/Pnz44YbbohDDjkk1q9fH5dddlm85z3vid/+9rfR3d0d48eP36XDOG3atOju7i6nwFTtlltuiU2bNsXZZ5/d/5j22bx2tLlK+88dz3V3d8fUqVMHPL/77rvHpEmTtNkm8Prrr8fFF18cZ5xxRnR0dPQ//pnPfCaOPvromDRpUtx3332xfPnyWL9+fVx99dUllpZKTjrppDjttNNi9uzZ8dRTT8UXv/jFWLx4caxatSp22203bbSJ3XjjjTFhwoRdTv/TPtNUKadU06/t7u6uuJ/d8Vy1mjKo0zqWLl0av/3tbweczxwRA86zOvLII2P69OlxwgknxFNPPRUHHXRQo4vJCBYvXtz//6OOOirmz58fBx54YPzbv/1b7LXXXiWWjNH67ne/G4sXL44ZM2b0P6Z9Qpq2bt0af/VXfxVZlsW111474Llly5b1//+oo46K8ePHxyc/+clYsWJFtLe3N7qoDOOjH/1o//+PPPLIOOqoo+Kggw6Ke+65J0444YQSS8ZoXX/99XHmmWfGnnvuOeBx7TNNQ+WURmnKqe+TJ0+O3XbbbZer623YsCG6urpKKhW1Ov/88+PWW2+Nu+++Ow444IBhXzt//vyIiHjyyScbUTRGaeLEifGWt7wlnnzyyejq6ootW7bEpk2bBrxGe03f008/HXfccUf8/d///bCv0z6bx442N9z+s6ura5cLs77xxhvx0ksvabMJ2xHSn3766bj99tsHHE2vZP78+fHGG2/EH/7wh8YUkLrNmTMnJk+e3L+N1Uab03/+53/GmjVrRtynRmifKRgqp1TTr+3q6qq4n93xXLWaMqiPHz8+jjnmmLjzzjv7H9u+fXvceeedsWDBghJLRjWyLIvzzz8/br755rjrrrti9uzZI75n9erVERExffr0gktHHl599dV46qmnYvr06XHMMcfEHnvsMaC9rlmzJtatW6e9Ju573/teTJ06NU4++eRhX6d9No/Zs2dHV1fXgPbY29sbDzzwQH97XLBgQWzatCkeeuih/tfcddddsX379v5BGdKyI6Q/8cQTcccdd8T+++8/4ntWr14d48aN22UKNel59tlnY+PGjf3bWG20OX33u9+NY445JubOnTvia7XP8oyUU6rp1y5YsCD++7//e8CA2o4B1Le+9a01FaYp/fCHP8za29uzG264Ifvd736XfeITn8gmTpw44Op6pGnJkiVZZ2dnds8992Tr16/v//faa69lWZZlTz75ZHb55ZdnDz74YLZ27drspz/9aTZnzpzsve99b8klZygXXXRRds8992Rr167N/uu//itbuHBhNnny5Oz555/PsizLzjvvvGzWrFnZXXfdlT344IPZggULsgULFpRcaoazbdu2bNasWdnFF1884HHtM32vvPJK9sgjj2SPPPJIFhHZ1VdfnT3yyCP9VwC/4oorsokTJ2Y//elPs9/85jfZKaecks2ePTv74x//2P8ZJ510UjZv3rzsgQceyH75y19mBx98cHbGGWeU9ZPGvOHqdMuWLdkHP/jB7IADDshWr149YL+64+rC9913X/bNb34zW716dfbUU09l3//+97MpU6ZkH/vYx0r+ZWPTcPX5yiuvZJ/73OeyVatWZWvXrs3uuOOO7Oijj84OPvjg7PXXX+//DG00HSNtc7Msy3p6erK99947u/baa3d5v/aZlpFySpaN3K994403siOOOCI78cQTs9WrV2e33XZbNmXKlGz58uU1laVpg3qWZdl3vvOdbNasWdn48eOzY489Nrv//vvLLhJViIiK/773ve9lWZZl69aty9773vdmkyZNytrb27M3v/nN2ec///msp6en3IIzpI985CPZ9OnTs/Hjx2d/9md/ln3kIx/Jnnzyyf7n//jHP2af+tSnsv322y/be++9sw996EPZ+vXrSywxI/mP//iPLCKyNWvWDHhc+0zf3XffXXEbe9ZZZ2VZ9r+3aPvyl7+cTZs2LWtvb89OOOGEXep548aN2RlnnJHtu+++WUdHR/bxj388e+WVV0r4NWTZ8HW6du3aIferd999d5ZlWfbQQw9l8+fPzzo7O7M999wzO+yww7Kvf/3rA4IfjTNcfb722mvZiSeemE2ZMiXbY489sgMPPDA799xzdzkQpY2mY6RtbpZl2T//8z9ne+21V7Zp06Zd3q99pmWknJJl1fVr//CHP2SLFy/O9tprr2zy5MnZRRddlG3durWmsrT9/wUCAAAAEtCU56gDAABAqxLUAQAAICGCOgAAACREUAcAAICECOoAAACQEEEdAAAAEiKoAwAAQEIEdQAAAEiIoA4AAAAJEdQBAAAgIYI6AAAAJERQBwAAgIT8f/XQSsEpwRsXAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] }, { "cell_type": "markdown", "source": [ - "### Run the Beam Pipeline on the Batch Data" + "### Run the Beam Pipeline on the Batch Data\n", + "\n", + "The following Beam pipeline implements an anomaly detection workflow on batch data. It executes the following steps in sequence:\n", + "\n", + "- **Ingest and Format**: The pipeline begins by ingesting a collection of numerical data and converting each number into a `beam.Row`.\n", + "\n", + "- **Key for Stateful Processing**: A single global key is assigned to every element. This ensures all data is processed by a single instance of the downstream stateful transform.\n", + "\n", + "- **Anomaly Detection**: The `AnomalyDetection` PTransform is applied to the keyed data.\n", + "\n", + "- **Log Outliers**: A `Filter` transform inspects the prediction output from the detector, retaining only the elements flagged as anomalies (label == 1). These outlier records are then logged for inspection or downstream action." ], "metadata": { "id": "_JV5fG_px7BM" @@ -289,7 +344,7 @@ { "cell_type": "code", "source": [ - "options = PipelineOptions([])\n", + "options = PipelineOptions()\n", "with beam.Pipeline(options=options) as p:\n", " _ = (p | beam.Create(data)\n", " | \"Convert to Rows\" >> beam.Map(lambda x: beam.Row(f1=float(x))).with_output_types(beam.Row)\n", @@ -302,11 +357,64 @@ " )" ], "metadata": { - "id": "ZaXkJeHqx58p" + "id": "ZaXkJeHqx58p", + "outputId": "3192203c-f92f-40b7-b3e3-6a951d029f87", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 86 + } }, "id": "ZaXkJeHqx58p", - "execution_count": null, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}] + "execution_count": 7, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/javascript": [ + "\n", + " if (typeof window.interactive_beam_jquery == 'undefined') {\n", + " var jqueryScript = document.createElement('script');\n", + " jqueryScript.src = 'https://code.jquery.com/jquery-3.4.1.slim.min.js';\n", + " jqueryScript.type = 'text/javascript';\n", + " jqueryScript.onload = function() {\n", + " var datatableScript = document.createElement('script');\n", + " datatableScript.src = 'https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js';\n", + " datatableScript.type = 'text/javascript';\n", + " datatableScript.onload = function() {\n", + " window.interactive_beam_jquery = jQuery.noConflict(true);\n", + " window.interactive_beam_jquery(document).ready(function($){\n", + " \n", + " });\n", + " }\n", + " document.head.appendChild(datatableScript);\n", + " };\n", + " document.head.appendChild(jqueryScript);\n", + " } else {\n", + " window.interactive_beam_jquery(document).ready(function($){\n", + " \n", + " });\n", + " }" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:apache_beam.options.pipeline_options:Discarding unparseable args: ['-f', '/root/.local/share/jupyter/runtime/kernel-ad4fe005-8e82-4549-bac6-63e8e4b4d9c1.json']\n", + "WARNING:apache_beam.options.pipeline_options:Discarding unparseable args: ['-f', '/root/.local/share/jupyter/runtime/kernel-ad4fe005-8e82-4549-bac6-63e8e4b4d9c1.json']\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(0, AnomalyResult(example=Row(f1=9.544331108822645), predictions=[AnomalyPrediction(model_id='ZScore', score=8.672319197619325, label=1, threshold=3, info='', source_predictions=None)]))\n", + "(0, AnomalyResult(example=Row(f1=9.388712735779308), predictions=[AnomalyPrediction(model_id='ZScore', score=7.32926235264911, label=1, threshold=3, info='', source_predictions=None)]))\n" + ] + } + ] }, { "cell_type": "markdown", @@ -325,17 +433,18 @@ "id": "0064575d-5e60-4f8b-a970-9dc39db8d331" }, "source": [ - "### Generating Synthetic Data with Concept Drift" + "### Generating Synthetic Data with Concept Drift\n", + "This data generation process synthesizes a single data set (N=1000) composed of five distinct segments, each designed to simulate a specific distributional behavior or type of concept drift. After concatenating these segments, global outliers with a larger mean are injected to complete the dataset." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "37c1613e-e2ef-4f2c-8999-cce01563e180", "metadata": { "id": "37c1613e-e2ef-4f2c-8999-cce01563e180" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ "# The size of a segment in the synthetic data set. Each segment represents\n", "# a collection of data points generated from either a fixed distribution\n", @@ -351,13 +460,13 @@ "\n", "np.random.seed(seed)\n", "\n", - "# starting from a fixed distribution\n", + "# Starting from a fixed distribution\n", "data_seg1 = np.random.normal(loc=0, scale=1, size=seg_size)\n", "\n", - "# a sudden change between data_seg1 and data_seg2\n", + "# A sudden change between data_seg1 and data_seg2\n", "data_seg2 = np.random.normal(loc=3, scale=3, size=seg_size)\n", "\n", - "# a gradual change in data_seg3\n", + "# A gradual change in data_seg3\n", "data_seg3 = []\n", "for i in range(seg_size):\n", " prob = 1 - 1.0 * i / seg_size\n", @@ -368,7 +477,7 @@ " data_seg3.append(np.random.normal(loc=0, scale=1, size=1))\n", "data_seg3 = np.array(data_seg3).ravel()\n", "\n", - "# an incremental change in data_seg4\n", + "# An incremental change in data_seg4\n", "data_seg4 = []\n", "for i in range(seg_size):\n", " loc = 0 + 3.0 * i / seg_size\n", @@ -376,12 +485,13 @@ " data_seg4.append(np.random.normal(loc=loc, scale=scale, size=1))\n", "data_seg4 = np.array(data_seg4).ravel()\n", "\n", - "# back to a fixed distribution\n", + "# Back to a fixed distribution\n", "data_seg5 = np.random.normal(loc=3, scale=3, size=seg_size)\n", "\n", + "# Combining all segements\n", "data = np.concatenate((data_seg1, data_seg2, data_seg3, data_seg4, data_seg5))\n", "\n", - "# adding outliers\n", + "# Adding global outliers\n", "outlier_idx = np.random.choice(len(data), size=int(outlier_ratio * len(data)), replace = False)\n", "\n", "for idx in outlier_idx:\n", @@ -390,14 +500,50 @@ "df = pd.Series(data, name='f1')" ] }, + { + "cell_type": "markdown", + "source": [ + "Run the following code to visualize the dataset on a scatter plot." + ], + "metadata": { + "id": "DWui3p_ouMPH" + }, + "id": "DWui3p_ouMPH" + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "8e6f4f59-c6e5-4991-84d9-14eab18eb699", "metadata": { - "id": "8e6f4f59-c6e5-4991-84d9-14eab18eb699" + "id": "8e6f4f59-c6e5-4991-84d9-14eab18eb699", + "outputId": "15203973-9b73-4697-843a-70a66097ce61", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 391 + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 9 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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c+bMafg5+RxF98Ybb8jChQvlmGOOkZ/97Gfy29/+Vm6//XY59thj66+59dZb5Vvf+pbcddddsn79epkwYYIsWrRIDh48WH/N5ZdfLi+88IKsXr1aHnnkEXn88cflyiuvzOMrAaN8/etfl+9+97vyne98R373u9/J17/+dbn11lvl29/+dv015HMUzf79+2Xu3LmycuVK19/ryNODg4NywQUXyIknnijPPvus3HbbbfLVr35V/uEf/iFaYq2COuuss6ylS5fW/12tVq2enh5rxYoVOaYKiG/Xrl2WiFhr1qyxLMuy9u3bZx1zzDHWj370o/prfve731kiYq1bt86yLMv6f//v/1mtra3Wjh076q/57ne/a3V2dlrDw8PZfgHAx5tvvmmdfPLJ1urVq63zzjvP+vznP29ZFvkc5fClL33Jeu973+v5+1qtZk2fPt267bbb6j/bt2+f1dHRYf3gBz+wLMuyfvvb31oiYj399NP11/zsZz+zWlparG3btqWXeCCkCy+80PrTP/3Thp9dcskl1uWXX25ZFvkcxSci1kMPPVT/t648feedd1rHHntsQ5vlS1/6kjVr1qxI6SvkiPuhQ4fk2WeflfPPP7/+s9bWVjn//PNl3bp1OaYMiG9gYEBERLq6ukRE5Nlnn5XDhw835PNTTz1Vent76/l83bp1Mnv2bOnu7q6/ZtGiRTI4OCgvvPBChqkH/C1dulQuvPDChvwsQj5HOfzf//t/5cwzz5SPfexjMm3aNJk3b5784z/+Y/33W7ZskR07djTk80qlIvPnz2/I55MnT5Yzzzyz/przzz9fWltbZf369dl9GcDDOeecI48++qi89NJLIiLy3HPPyRNPPCGLFy8WEfI5ykdXnl63bp28733vkzFjxtRfs2jRItm8ebO88cYbodPTnvQL5WHPnj1SrVYbGnEiIt3d3fLiiy/mlCogvlqtJtddd50sXLhQTjvtNBER2bFjh4wZM0YmT57c8Nru7m7ZsWNH/TVuz4H9O8AEDzzwgPzLv/yLPP3006N+Rz5HGbz66qvy3e9+V5YtWyZ/+Zd/KU8//bRce+21MmbMGFmyZEk9n7rlY2c+nzZtWsPv29vbpauri3wOI9x4440yODgop556qrS1tUm1WpWvfe1rcvnll4uIkM9ROrry9I4dO6Svr2/Ue9i/cy6r8lPIwB0om6VLl8rzzz8vTzzxRN5JAbTaunWrfP7zn5fVq1fL2LFj804OkIparSZnnnmm/N3f/Z2IiMybN0+ef/55ueuuu2TJkiU5pw7QY9WqVfL9739f7r//fnnXu94lGzZskOuuu056enrI50AGCjlVfsqUKdLW1jZq1+GdO3fK9OnTc0oVEM8111wjjzzyiPziF7+QE044of7z6dOny6FDh2Tfvn0Nr3fm8+nTp7s+B/bvgLw9++yzsmvXLnn3u98t7e3t0t7eLmvWrJFvfetb0t7eLt3d3eRzFN7xxx8v73znOxt+9o53vEP6+/tF5Gg+9Wu3TJ8+fdQGuyMjI7J3717yOYzwhS98QW688Ub5xCc+IbNnz5ZPfepTcv3118uKFStEhHyO8tGVp3W1YwoZuI8ZM0bOOOMMefTRR+s/q9Vq8uijj8qCBQtyTBkQnmVZcs0118hDDz0kjz322KgpNGeccYYcc8wxDfl88+bN0t/fX8/nCxYskE2bNjUUGKtXr5bOzs5RjUggDx/4wAdk06ZNsmHDhvp/Z555plx++eX1/08+R9EtXLhw1HGeL730kpx44okiItLX1yfTp09vyOeDg4Oyfv36hny+b98+efbZZ+uveeyxx6RWq8n8+fMz+BaAvwMHDkhra2Po0NbWJrVaTUTI5ygfXXl6wYIF8vjjj8vhw4frr1m9erXMmjUr9DR5ESnurvIPPPCA1dHRYd17773Wb3/7W+vKK6+0Jk+e3LDrMGCyq666yqpUKtYvf/lL67XXXqv/d+DAgfpr/vzP/9zq7e21HnvsMeuZZ56xFixYYC1YsKD++5GREeu0006zLrjgAmvDhg3Wz3/+c2vq1KnW8uXL8/hKQCjOXeUti3yO4vv1r39ttbe3W1/72tesl19+2fr+979vjR8/3vrf//t/119zyy23WJMnT7Yefvhha+PGjdbFF19s9fX1WW+99Vb9NR/60IesefPmWevXr7eeeOIJ6+STT7Yuu+yyPL4SMMqSJUusGTNmWI888oi1ZcsW68EHH7SmTJliffGLX6y/hnyOonnzzTet3/zmN9ZvfvMbS0SsO+64w/rNb35j/du//ZtlWXry9L59+6zu7m7rU5/6lPX8889bDzzwgDV+/Hjr7rvvjpTWwgbulmVZ3/72t63e3l5rzJgx1llnnWU99dRTeScJCE1EXP+755576q956623rKuvvto69thjrfHjx1sf+chHrNdee63hff71X//VWrx4sTVu3DhrypQp1g033GAdPnw4428DhKcG7uRzlMFPfvIT67TTTrM6OjqsU0891fqHf/iHht/XajXry1/+stXd3W11dHRYH/jAB6zNmzc3vOb111+3LrvsMmvixIlWZ2endcUVV1hvvvlmll8D8DQ4OGh9/vOft3p7e62xY8daJ510kvXf/tt/azjiinyOovnFL37h2h5fsmSJZVn68vRzzz1nvfe977U6OjqsGTNmWLfcckvktLZYlmXFmDkAAAAAAAAyUMg17gAAAAAANAsCdwAAAAAADEbgDgAAAACAwQjcAQAAAAAwGIE7AAAAAAAGI3AHAAAAAMBgBO4AAAAAABiMwB0AAAAAAIMRuAMAAAAAYDACdwAAAAAADEbgDgAAAACAwQjcAQAAAAAw2P8PvqS1u7AbqSgAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ], "source": [ "plt.figure(figsize=(12, 4))\n", "plt.xlim(0, 1000)\n", @@ -412,17 +558,18 @@ "id": "32e7cdf4-a795-47d1-b5f1-9ae5e924a427" }, "source": [ - "### Setting Up Input/Output Pubsubs" + "### Setting Up Input/Output Pubsubs\n", + "Use the following code to create pubsub topics for input and output." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "11017009-f97e-4805-9cbb-6a9d4ddb68d3", "metadata": { "id": "11017009-f97e-4805-9cbb-6a9d4ddb68d3" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ "def create_topic_if_not_exists(project_id:str, topic_name:str, enable_message_ordering=False):\n", " if enable_message_ordering:\n", @@ -460,12 +607,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "66784c36-9f9e-410e-850b-3b8da29ff5ce", "metadata": { - "id": "66784c36-9f9e-410e-850b-3b8da29ff5ce" + "id": "66784c36-9f9e-410e-850b-3b8da29ff5ce", + "outputId": "e06dfbde-c92e-4b1f-a6c0-b7897cfe9343", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Created topic: projects/apache-beam-testing/topics/anomaly-input-9625\n", + "Created subscription: projects/apache-beam-testing/subscriptions/anomaly-input-9625-sub\n", + "Created topic: projects/apache-beam-testing/topics/anomaly-output-9625\n", + "Created subscription: projects/apache-beam-testing/subscriptions/anomaly-output-9625-sub\n" + ] + } + ], "source": [ "# for input data\n", "input_publisher = create_topic_if_not_exists(PROJECT_ID, INPUT_TOPIC, True)\n", @@ -483,17 +645,30 @@ "id": "dc4afa04-fb39-40cd-a8d7-f9d1c461648a" }, "source": [ - "### Publishing Input to Pub/Sub" + "### Publishing Input to Pub/Sub\n", + "To simulate a live data stream without blocking the execution, the following code starts a separate thread to publish the generated data to the input Pub/Sub topic." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "907f2469-1687-4ef3-bafd-9c4ec963b7e9", "metadata": { - "id": "907f2469-1687-4ef3-bafd-9c4ec963b7e9" + "id": "907f2469-1687-4ef3-bafd-9c4ec963b7e9", + "outputId": "c8b97419-e612-4f21-e579-af991d68289f", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Started to publish data to anomaly-input-9625\n" + ] + } + ], "source": [ "def publish_data(publisher, project_id: str, topic: str, data: Iterable[Any], delay=0.01, enable_message_ordering=False) -> None:\n", " topic_path = publisher.topic_path(project_id, topic)\n", @@ -519,7 +694,10 @@ { "cell_type": "markdown", "source": [ - "### Launching the Beam Pipeline" + "### Launching the Beam Pipeline\n", + "This pipeline adapts the core anomaly detection logic from the previous batch example for a real-time, streaming application. The key modification is in the I/O: instead of operating on a static collection, this pipeline reads its input stream from a Pub/Sub topic and writes the results to a separate output topic.\n", + "\n", + "Notice that the pipeline is run on a separate thread so later steps are not blocked." ], "metadata": { "id": "9RjcaxzDN5Tv" @@ -528,13 +706,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "6e8b069d-9d94-4938-a87e-bd5f9f7620c0", "metadata": { "scrolled": true, - "id": "6e8b069d-9d94-4938-a87e-bd5f9f7620c0" + "id": "6e8b069d-9d94-4938-a87e-bd5f9f7620c0", + "outputId": "3fc8cace-ee6a-41d5-b262-64d09be82b01", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Started to run beam pipeline for anomaly detection\n" + ] + } + ], "source": [ "def message_to_beam_row(msg: bytes) -> beam.Row:\n", " try:\n", @@ -581,17 +771,18 @@ "id": "1b785e34-a035-4148-9b58-f364ce0aed08" }, "source": [ - "### Collecting Results and Plotting" + "### Collecting Results and Plotting\n", + "To prepare for visualization, start another thread that retrieves output from the output pubsub topic." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "e4ca8af3-d74c-4d95-aeba-c34cb791525f", "metadata": { "id": "e4ca8af3-d74c-4d95-aeba-c34cb791525f" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ "x = []\n", "y = []\n", @@ -600,12 +791,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "b6bf369f-2b20-4834-b457-e9b1f0a596ca", "metadata": { "id": "b6bf369f-2b20-4834-b457-e9b1f0a596ca" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ "def collect_result(subscriber):\n", " subscription_path = pubsub_v1.SubscriberClient.subscription_path(PROJECT_ID, OUTPUT_SUB)\n", @@ -639,19 +830,50 @@ "result_thread.start()" ] }, + { + "cell_type": "markdown", + "source": [ + "Run the following line to check how many output results are coming out from the output pubsub." + ], + "metadata": { + "id": "1oB5UnvR0onC" + }, + "id": "1oB5UnvR0onC" + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "id": "a3433ea1-70ae-408d-84b2-27118a3fd898", "metadata": { - "id": "a3433ea1-70ae-408d-84b2-27118a3fd898" + "id": "a3433ea1-70ae-408d-84b2-27118a3fd898", + "outputId": "194511f7-7939-4d09-ed16-ac7940c9959f", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "168\n" + ] + } + ], "source": [ - "# Refresh this cell until we see results from the output pubsub\n", "print(len(x))" ] }, + { + "cell_type": "markdown", + "source": [ + "This following code visualizes the streaming output by repeatedly generating an animation. It refreshes the visualization every 20 seconds to incorporate newly arrived results. Within each refresh, an new animated scatter plot is rendered, progressively drawing each data point to show the evolution of the stream.In these plots, outliers are highlighted in red.\n" + ], + "metadata": { + "id": "GMLXN3a11Imf" + }, + "id": "GMLXN3a11Imf" + }, { "cell_type": "code", "execution_count": null, @@ -659,11 +881,10 @@ "metadata": { "id": "31f24bfc-b91d-4e67-b804-732dc65e7525" }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [], "source": [ - "# When we see the output, run this cell. It will generate a plot every 5 seconds\n", - "# to show how the data stream is processed.\n", - "for i in range (10):\n", + "# This will generate a plot every 20 seconds to show how the data stream is processed.\n", + "for i in range (5):\n", " matplotlib.rcParams['animation.embed_limit'] = 300\n", "\n", " data = np.array(list(zip(x,y)))\n", @@ -684,7 +905,58 @@ "\n", " ani = matplotlib.animation.FuncAnimation(fig, animate, frames=int(len(x)/10), interval=50, repeat=False)\n", " display(HTML(ani.to_jshtml()))\n", - " time.sleep(5)" + " time.sleep(20)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "After all the data is processed, run the code below to draw the final scatterplot." + ], + "metadata": { + "id": "TklGkLa2I8AN" + }, + "id": "TklGkLa2I8AN" + }, + { + "cell_type": "code", + "source": [ + "plt.figure(figsize=(12, 4))\n", + "plt.xlim(0, 1000)\n", + "plt.ylim(-10, 20)\n", + "plt.scatter(x=x, y=y, c=c, s=3)" + ], + "metadata": { + "id": "pSHS7AWDIiw-", + "outputId": "e8caae20-6a63-4e18-b0a4-abf9229d7830", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 391 + } + }, + "id": "pSHS7AWDIiw-", + "execution_count": 42, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 42 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } ] }, { @@ -699,12 +971,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "id": "350b8b1a-3010-4ecd-924f-010308bb5eb2", "metadata": { - "id": "350b8b1a-3010-4ecd-924f-010308bb5eb2" + "id": "350b8b1a-3010-4ecd-924f-010308bb5eb2", + "outputId": "f57e4602-8817-4694-813f-91cce4cc673c", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Input subscription deleted: projects/apache-beam-testing/subscriptions/anomaly-input-9625-sub.\n", + "Output subscription deleted: projects/apache-beam-testing/subscriptions/anomaly-output-9625-sub.\n" + ] + } + ], "source": [ "# deleting input and output subscriptions\n", "subscriber = pubsub_v1.SubscriberClient()\n", @@ -726,12 +1011,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "id": "10dc95cf-94ab-4a51-882b-88559340d4d2", "metadata": { - "id": "10dc95cf-94ab-4a51-882b-88559340d4d2" + "id": "10dc95cf-94ab-4a51-882b-88559340d4d2", + "outputId": "53f46c20-dc28-4a14-8c69-95b44fda5933", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [{"output_type": "stream", "name": "stdout", "text": ["\n"]}], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Input topic deleted: projects/apache-beam-testing/topics/anomaly-input-9625\n", + "Output topic deleted: projects/apache-beam-testing/topics/anomaly-output-9625\n" + ] + } + ], "source": [ "# deleting input and output topics\n", "publisher = pubsub_v1.PublisherClient()\n", @@ -776,4 +1074,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file From 3bf0d42fb96235c8e493ce42fdb7994eb796fd6b Mon Sep 17 00:00:00 2001 From: Shunping Huang Date: Fri, 13 Jun 2025 12:41:13 -0400 Subject: [PATCH 2/3] Adjust formatting. --- .../anomaly_detection_zscore.ipynb | 55 +++++++++---------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb b/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb index d7daec88f751..b9e07fae02cb 100644 --- a/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb +++ b/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb @@ -54,16 +54,13 @@ "source": [ "This notebook demonstrates how to perform anomaly detection on both batch and streaming data using the `AnomalyDetection` PTransform:\n", "\n", - "1. Batch Anomaly Detection\n", + "1. **Batch Anomaly Detection**: This section focuses on processing a static dataset. A synthetic univariate dataset containing outliers is generated. Subsequently, the AnomalyDetection PTransform, utilizing the Z-Score algorithm, is applied to identify and log the outliers.\n", "\n", - " This section focuses on processing a static dataset. A synthetic univariate dataset containing outliers is generated. Subsequently, the AnomalyDetection PTransform, utilizing the Z-Score algorithm, is applied to identify and log the outliers.\n", + "2. **Streaming Anomaly Detection with Concept Drift**: This section simulates a real-time environment where the data distribution changes over time. A synthetic dataset incorporating both outliers and concept drift is published to a Pub/Sub topic. An Apache Beam pipeline is configured to:\n", "\n", - "2. Streaming Anomaly Detection with Concept Drift\n", - "\n", - " This section simulates a real-time environment where the data distribution changes over time. A synthetic dataset incorporating both outliers and concept drift is published to a Pub/Sub topic. An Apache Beam pipeline is configured to:\n", - " - Read the streaming data from the input Pub/Sub topic.\n", - " - Apply the AnomalyDetection PTransform within a sliding window.\n", - " - Publish the enriched results (original data, anomaly scores, and labels) to an output Pub/Sub topic.\n", + " * Read the streaming data from the input Pub/Sub topic.\n", + " * Apply the AnomalyDetection PTransform within a sliding window.\n", + " * Publish the enriched results (original data, anomaly scores, and labels) to an output Pub/Sub topic.\n", " \n", " Finally, the labeled data points are visulaized in a series of plots to observe the detection performance in a streaming context with concept drift.\n", "\n" @@ -290,11 +287,11 @@ ], "metadata": { "id": "IUD3giMzyxer", - "outputId": "bbf8d53c-068c-447c-ec6b-b899c0585b80", "colab": { "base_uri": "https://localhost:8080/", "height": 391 - } + }, + "outputId": "bbf8d53c-068c-447c-ec6b-b899c0585b80" }, "id": "IUD3giMzyxer", "execution_count": 6, @@ -358,11 +355,11 @@ ], "metadata": { "id": "ZaXkJeHqx58p", - "outputId": "3192203c-f92f-40b7-b3e3-6a951d029f87", "colab": { "base_uri": "https://localhost:8080/", "height": 86 - } + }, + "outputId": "3192203c-f92f-40b7-b3e3-6a951d029f87" }, "id": "ZaXkJeHqx58p", "execution_count": 7, @@ -516,11 +513,11 @@ "id": "8e6f4f59-c6e5-4991-84d9-14eab18eb699", "metadata": { "id": "8e6f4f59-c6e5-4991-84d9-14eab18eb699", - "outputId": "15203973-9b73-4697-843a-70a66097ce61", "colab": { "base_uri": "https://localhost:8080/", "height": 391 - } + }, + "outputId": "15203973-9b73-4697-843a-70a66097ce61" }, "outputs": [ { @@ -611,10 +608,10 @@ "id": "66784c36-9f9e-410e-850b-3b8da29ff5ce", "metadata": { "id": "66784c36-9f9e-410e-850b-3b8da29ff5ce", - "outputId": "e06dfbde-c92e-4b1f-a6c0-b7897cfe9343", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "e06dfbde-c92e-4b1f-a6c0-b7897cfe9343" }, "outputs": [ { @@ -655,10 +652,10 @@ "id": "907f2469-1687-4ef3-bafd-9c4ec963b7e9", "metadata": { "id": "907f2469-1687-4ef3-bafd-9c4ec963b7e9", - "outputId": "c8b97419-e612-4f21-e579-af991d68289f", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "c8b97419-e612-4f21-e579-af991d68289f" }, "outputs": [ { @@ -711,10 +708,10 @@ "metadata": { "scrolled": true, "id": "6e8b069d-9d94-4938-a87e-bd5f9f7620c0", - "outputId": "3fc8cace-ee6a-41d5-b262-64d09be82b01", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "3fc8cace-ee6a-41d5-b262-64d09be82b01" }, "outputs": [ { @@ -846,10 +843,10 @@ "id": "a3433ea1-70ae-408d-84b2-27118a3fd898", "metadata": { "id": "a3433ea1-70ae-408d-84b2-27118a3fd898", - "outputId": "194511f7-7939-4d09-ed16-ac7940c9959f", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "194511f7-7939-4d09-ed16-ac7940c9959f" }, "outputs": [ { @@ -927,12 +924,12 @@ "plt.scatter(x=x, y=y, c=c, s=3)" ], "metadata": { - "id": "pSHS7AWDIiw-", - "outputId": "e8caae20-6a63-4e18-b0a4-abf9229d7830", "colab": { "base_uri": "https://localhost:8080/", "height": 391 - } + }, + "id": "pSHS7AWDIiw-", + "outputId": "e8caae20-6a63-4e18-b0a4-abf9229d7830" }, "id": "pSHS7AWDIiw-", "execution_count": 42, @@ -975,10 +972,10 @@ "id": "350b8b1a-3010-4ecd-924f-010308bb5eb2", "metadata": { "id": "350b8b1a-3010-4ecd-924f-010308bb5eb2", - "outputId": "f57e4602-8817-4694-813f-91cce4cc673c", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "f57e4602-8817-4694-813f-91cce4cc673c" }, "outputs": [ { @@ -1015,10 +1012,10 @@ "id": "10dc95cf-94ab-4a51-882b-88559340d4d2", "metadata": { "id": "10dc95cf-94ab-4a51-882b-88559340d4d2", - "outputId": "53f46c20-dc28-4a14-8c69-95b44fda5933", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "53f46c20-dc28-4a14-8c69-95b44fda5933" }, "outputs": [ { From daf0cf4da5826905e52003f0a519ac8b34a54abd Mon Sep 17 00:00:00 2001 From: Shunping Huang Date: Fri, 13 Jun 2025 12:42:21 -0400 Subject: [PATCH 3/3] Adjust formatting. --- .../anomaly_detection/anomaly_detection_zscore.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb b/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb index b9e07fae02cb..cc3951a882bb 100644 --- a/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb +++ b/examples/notebooks/beam-ml/anomaly_detection/anomaly_detection_zscore.ipynb @@ -58,11 +58,11 @@ "\n", "2. **Streaming Anomaly Detection with Concept Drift**: This section simulates a real-time environment where the data distribution changes over time. A synthetic dataset incorporating both outliers and concept drift is published to a Pub/Sub topic. An Apache Beam pipeline is configured to:\n", "\n", - " * Read the streaming data from the input Pub/Sub topic.\n", - " * Apply the AnomalyDetection PTransform within a sliding window.\n", - " * Publish the enriched results (original data, anomaly scores, and labels) to an output Pub/Sub topic.\n", + " * Read the streaming data from the input Pub/Sub topic.\n", + " * Apply the AnomalyDetection PTransform within a sliding window.\n", + " * Publish the enriched results (original data, anomaly scores, and labels) to an output Pub/Sub topic.\n", " \n", - " Finally, the labeled data points are visulaized in a series of plots to observe the detection performance in a streaming context with concept drift.\n", + " Finally, the labeled data points are visulaized in a series of plots to observe the detection performance in a streaming context with concept drift.\n", "\n" ], "metadata": {