{ "cells": [ { "cell_type": "markdown", "id": "154b5160-fd11-4ed9-82f3-17b7bf7abf0d", "metadata": {}, "source": [ "# Drift Detection in CapyMOA\n", "\n", "In this tutorial, we show how to conduct drift detection using CapyMOA.\n", "\n", "* Usage example of several detectors.\n", "* Example using ADWIN.\n", "* Evaluating detectors based on known drift locations.\n", "* Multivariate drift detection using ABCD.\n", "\n", "---\n", "\n", "*More information about CapyMOA can be found at* https://www.capymoa.org.\n", "\n", "**last update on 28/11/2025**" ] }, { "cell_type": "code", "execution_count": 1, "id": "78dc8927-1bc3-4ce2-b352-ecf50ab56480", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "import capymoa.drift.detectors as detectors" ] }, { "cell_type": "markdown", "id": "432b8844-6f91-412d-ad36-3a640affc223", "metadata": {}, "source": [ "## 1. Basic example" ] }, { "cell_type": "markdown", "id": "93224151-66bd-4124-ba0f-4ad486d5810a", "metadata": {}, "source": [ "* Creating dummy data" ] }, { "cell_type": "code", "execution_count": 2, "id": "3406740a-f265-4434-aae8-05db48de7e56", "metadata": {}, "outputs": [], "source": [ "data_stream = np.random.randint(2, size=2000)\n", "for i in range(999, 2000):\n", " data_stream[i] = np.random.randint(6, high=12)" ] }, { "cell_type": "markdown", "id": "e6aca673-6eab-42b0-8981-e5c73491243e", "metadata": {}, "source": [ "* Basic drift detection example" ] }, { "cell_type": "code", "execution_count": 3, "id": "bca87b8f-91f3-4eaf-a011-e8b274bda1f5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ABCD 1\n", "ADWIN 1\n", "CUSUM 2\n", "DDM 1\n", "EWMAChart 1\n", "GeometricMovingAverage 1\n", "HDDMAverage 135\n", "HDDMWeighted 88\n", "OPTWIN 1\n", "PageHinkley 2\n", "RDDM 1\n", "SEED 2\n", "STEPD 1\n", "STUDD 0\n", "dtype: int64\n" ] } ], "source": [ "all_detectors = detectors.__all__\n", "\n", "n_detections = {k: 0 for k in all_detectors}\n", "for detector_name in all_detectors:\n", " if detector_name == \"STUDD\":\n", " continue\n", "\n", " detector = getattr(detectors, detector_name)()\n", "\n", " for i in range(2000):\n", " detector.add_element(float(data_stream[i]))\n", " if detector.detected_change():\n", " n_detections[detector_name] += 1\n", "\n", "print(pd.Series(n_detections))" ] }, { "cell_type": "markdown", "id": "5ca1d03f-a7a2-421a-b800-ebd6a7918791", "metadata": {}, "source": [ "## 2. Example using ADWIN" ] }, { "cell_type": "code", "execution_count": 4, "id": "5c9ade00-778f-481c-a51c-49dd199cd145", "metadata": {}, "outputs": [], "source": [ "# detector = ADWIN(delta=0.001)\n", "\n", "for i in range(2000):\n", " detector.add_element(data_stream[i])\n", " if detector.detected_change():\n", " print(\n", " \"Change detected in data: \" + str(data_stream[i]) + \" - at index: \" + str(i)\n", " )" ] }, { "cell_type": "code", "execution_count": 5, "id": "dcf26795-09bb-4508-ab36-878c4f145197", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1000]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Detection indices\n", "detector.detection_index" ] }, { "cell_type": "code", "execution_count": 6, "id": "cd7ae6be-17cb-4dec-b630-32e41531b020", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[92,\n", " 521,\n", " 522,\n", " 523,\n", " 524,\n", " 525,\n", " 526,\n", " 527,\n", " 528,\n", " 533,\n", " 534,\n", " 535,\n", " 536,\n", " 537,\n", " 538,\n", " 539,\n", " 540,\n", " 541,\n", " 542,\n", " 543,\n", " 544,\n", " 638,\n", " 639,\n", " 640,\n", " 641,\n", " 644,\n", " 726,\n", " 729,\n", " 730,\n", " 731]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Warning indices\n", "detector.warning_index" ] }, { "cell_type": "code", "execution_count": 7, "id": "0b8a45e7-d983-4f69-a0d8-035619da3b11", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4000" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Instance counter\n", "detector.idx" ] }, { "cell_type": "markdown", "id": "71ba1b8b-751c-4ab4-a9a3-331de462b0f9", "metadata": {}, "source": [ "## 3. Evaluating drift detectors\n", "\n", "Assuming the drift locations are known, you can evaluate detectors using **EvaluateDetector** class.\n", "\n", "This class takes a parameter called **max_delay**, which is the maximum number of instances for which we consider a detector to have detected a change. After **max_delay** instances, we assume that the change is obvious and has been missed by the detector." ] }, { "cell_type": "code", "execution_count": 8, "id": "4a2df820-9314-42e8-bf37-575c837ffabe", "metadata": {}, "outputs": [], "source": [ "from capymoa.drift.eval_detector import EvaluateDriftDetector\n", "\n", "drift_eval = EvaluateDriftDetector(max_delay=200)" ] }, { "cell_type": "markdown", "id": "98799472-d6cb-4cc1-912e-49d1004b3c84", "metadata": {}, "source": [ "The EvaluateDetector class takes two arguments for evaluating detectors:\n", "- The locations of the drift\n", "- The locations of the detections" ] }, { "cell_type": "code", "execution_count": 9, "id": "352a52da-71e0-4f7b-bf74-09230086b91a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DriftDetectionMetrics(fp=0, tp=1, fn=0, precision=1.0, recall=1.0, episode_recall=1.0, f1=1.0, mdt=np.float64(0.0), far=0.0, ar=0.25, n_episodes=1, n_alarms=1)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trues = np.array([1000])\n", "preds = detector.detection_index\n", "\n", "drift_eval.calc_performance(trues, preds, tot_n_instances=detector.idx)" ] }, { "cell_type": "markdown", "id": "928328fa-c4bc-41b2-8920-8ee59b1a2818", "metadata": {}, "source": [ "## 4. Multivariate drift detection" ] }, { "cell_type": "code", "execution_count": 10, "id": "17658d67-c038-4293-9013-90734fd50b20", "metadata": {}, "outputs": [], "source": [ "from capymoa.drift.detectors import ABCD\n", "from capymoa.datasets import ElectricityTiny\n", "\n", "detector = ABCD()\n", "\n", "## Opening a file as a stream\n", "stream = ElectricityTiny()" ] }, { "cell_type": "code", "execution_count": 11, "id": "e9cb0128-5eb1-421c-ac6b-ed06dd85ad31", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected at index: 2776\n" ] } ], "source": [ "i = 0\n", "loss_values = []\n", "while stream.has_more_instances() and i < 5000:\n", " i += 1\n", " instance = stream.next_instance()\n", " detector.add_element(instance)\n", " loss_values.append(detector.loss())\n", " if detector.detected_change():\n", " print(\"Change detected at index: \" + str(i))" ] }, { "cell_type": "code", "execution_count": 12, "id": "aae1b2a8-f45d-4c25-aa10-7ee72acfac04", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A 2-dimensional stream\n" ] } ], "source": [ "detector = ABCD(model_id=\"pca\")\n", "\n", "## Opening a file as a stream\n", "stream_change = np.hstack(\n", " [np.random.uniform(0, 0.5, 3000), np.random.uniform(0.5, 1.0, 3000)]\n", ")\n", "stream_nochange = np.random.uniform(0, 1.0, len(stream_change))\n", "stream = np.vstack([stream_change, stream_nochange]).T\n", "print(f\"A {stream.shape[-1]}-dimensional stream\")" ] }, { "cell_type": "code", "execution_count": 13, "id": "849708ef-0725-43e5-84e8-5c6c34b52430", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected at index: 3060\n" ] } ], "source": [ "i = 0\n", "loss_values = []\n", "while i < len(stream):\n", " instance = stream[i]\n", " i += 1\n", " detector.add_element(instance)\n", " loss_values.append(detector.loss())\n", " if detector.detected_change():\n", " print(\"Change detected at index: \" + str(i))" ] }, { "cell_type": "code", "execution_count": 14, "id": "fd1914b1-0bd0-4d14-b076-1a96ddff305f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Reconstruction loss')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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zgjOh5DagGaxEUIMUiqVWL9+PXr37o1r165pjsfExGDhwoVISUnBU089xTmnXr16iIuL0/z+zDPPwM/PD++88w62bNmCwYMHw8vLCwAknZ5fWFiIwMBAg2nUQc++fftQr149nDhxAp988gkCAgKwYMECzXNeXl6IiooyuSwuLi6acUpqderUwaNHjwSdHxERge+//14zHb9Jkyac12bK/VuzZg0aNGgAhUKBy5cvAwAaNWoENzc3rF27Fp999pngvAh50lGARAgxaOfOncjKysL69euxfv16nefXrl2rEyDx6du3LwBg7969GDx4MJo3bw4AOHXqFKKjo80u561bt5CXl6d36QG10NBQNGjQAHv37kVERAQYhkFsbCwCAgLw1ltv4caNG9i3bx+6dOkCBwfTG9kdHR1NPheo7MZjB5na2PdPiPz8fPz9998oKSlBkyZNdJ5ft24dPv30U8hkMtMKTMgThgIkQohBa9euRWBgIJYtW6bz3KZNm/DHH39g+fLlcHV1NZhPRUUFgMpWHgAYMGAAHB0dsWbNGkkGav/8888AKmduGdO9e3fs3bsXDRo0QHR0NDw9PREVFQVvb28kJSUhLS1Ns8aRPrYOJJo2bYpmzZrhzz//xJdffml05e5NmzahpKQE3377Lfz9/TnPXbhwAR9++CEOHDiAbt26WbLYhNQYFCARQvR6/PgxNm3ahOHDh2sGJbOFhobil19+wV9//YURI0YYzOvvv/8GAE23VVhYGCZNmoTly5fjq6++whtvvMFJr1KpsHjxYowYMcLoVP+dO3fi448/RoMGDTB69Gijr6t79+746aefsGHDBgwYMAAA4ODggC5dumDRokUoLy83Ov7Izc0NAGy6EvW8efMwcuRIvPzyy1izZo1mhqDav//+i7KyMjz99NNYs2YNGjZsqDMuCgBKS0sxf/58rF27lgIkQqpQgEQI0euvv/5CQUEBnnnmGd7nO3fujICAAKxdu5YTIF28eFGzHlFxcTEOHTqEH3/8EY0bN+a0Fi1cuBBXrlzBm2++iU2bNuHpp59GnTp1kJmZiY0bN3Jmzqlt27YN58+fR0VFBXJycrBz504kJycjPDwcf/31F1xcXIy+LnXwc+HCBc64mx49emDbtm1QKBTo2LGjwTxcXV3RsmVLbNiwAU2bNoWvry9at26N1q1bG72+VEaMGIFT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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.plot(pd.Series(loss_values).rolling(10).mean())\n", "plt.title(\"ABCD with PCA\")\n", "plt.xlabel(\"# Instances\")\n", "plt.ylabel(\"Reconstruction loss\")" ] }, { "cell_type": "markdown", "id": "b8c75d0d-266f-4c55-a73d-6c23458efb8b", "metadata": {}, "source": [ "We see that a value of 1 as maximum reconstruction error is very conservative. By decreasing the `maximum_absolute_value` parameter, we can make change detection faster as it makes the applied statistical test more sensitive." ] }, { "cell_type": "code", "execution_count": 15, "id": "47940ff5-27a7-4b3f-8467-47803307b031", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected at index: 3023\n" ] } ], "source": [ "detector = ABCD(model_id=\"pca\", maximum_absolute_value=0.3)\n", "\n", "i = 0\n", "loss_values = []\n", "while i < len(stream):\n", " instance = stream[i]\n", " i += 1\n", " detector.add_element(instance)\n", " loss_values.append(detector.loss())\n", " if detector.detected_change():\n", " print(\"Change detected at index: \" + str(i))" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.7" } }, "nbformat": 4, "nbformat_minor": 5 }