{ "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", "* Then test different drift detectors\n", "* Example using ADWIN\n", "* Evaluating detectors based on known drift location\n", "\n", "---\n", "\n", "*More information about CapyMOA can be found in* https://www.capymoa.org\n", "\n", "**last update on 25/07/2024**" ] }, { "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": [ "## 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": [ "ADWIN 2\n", "CUSUM 1\n", "DDM 1\n", "EWMAChart 1\n", "GeometricMovingAverage 1\n", "HDDMAverage 126\n", "HDDMWeighted 89\n", "PageHinkley 1\n", "RDDM 2\n", "SEED 2\n", "STEPD 1\n", "ABCD 1\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", " 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": [ "## Example using ADWIN" ] }, { "cell_type": "code", "execution_count": 4, "id": "5c9ade00-778f-481c-a51c-49dd199cd145", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected in data: 1 - at index: 24\n", "Change detected in data: 6 - at index: 1010\n" ] } ], "source": [ "from capymoa.drift.detectors import ADWIN\n", "\n", "# 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": [ "[1011, 2025, 3011]" ] }, "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": [ "[1009, 1010, 2022, 2023, 2024, 3009, 3010]" ] }, "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": [ "## 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 have been missed by the detector." ] }, { "cell_type": "code", "execution_count": 8, "id": "598a89e7-8460-415f-8a92-6854509e4697", "metadata": {}, "outputs": [], "source": [ "from capymoa.drift.eval_detector import EvaluateDetector" ] }, { "cell_type": "code", "execution_count": 9, "id": "4a2df820-9314-42e8-bf37-575c837ffabe", "metadata": {}, "outputs": [], "source": [ "eval = EvaluateDetector(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": 10, "id": "352a52da-71e0-4f7b-bf74-09230086b91a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mean_time_to_detect 11.0\n", "missed_detection_ratio 0.0\n", "mean_time_btw_false_alarms NaN\n", "no_alarms_per_episode 0.0\n", "dtype: float64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trues = np.array([1000])\n", "preds = detector.detection_index\n", "\n", "eval.calc_performance(preds, trues)" ] }, { "cell_type": "markdown", "id": "928328fa-c4bc-41b2-8920-8ee59b1a2818", "metadata": {}, "source": [ "## Multivariate Drift Detection" ] }, { "cell_type": "code", "execution_count": 11, "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": 12, "id": "e9cb0128-5eb1-421c-ac6b-ed06dd85ad31", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected at index: 2283\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": 13, "id": "aae1b2a8-f45d-4c25-aa10-7ee72acfac04", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A 2-dimensional stream\n" ] } ], "source": [ "import numpy as np\n", "from capymoa.drift.detectors import ABCD\n", "from capymoa.datasets import ElectricityTiny\n", "\n", "detector = ABCD(model_id=\"pca\")\n", "\n", "## Opening a file as a stream\n", "stream_change = np.hstack([np.random.uniform(0, 0.5, 3000), np.random.uniform(0.5, 1.0, 3000)])\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": 14, "id": "849708ef-0725-43e5-84e8-5c6c34b52430", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected at index: 3063\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": 15, "id": "fd1914b1-0bd0-4d14-b076-1a96ddff305f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Reconstruction loss')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import pandas as pd\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": 16, "id": "47940ff5-27a7-4b3f-8467-47803307b031", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change detected at index: 3024\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": "Python 3 (ipykernel)", "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.9.19" } }, "nbformat": 4, "nbformat_minor": 5 }