├── ElectricalFaultDetectionAndClassification.ipynb ├── README.md ├── faultclass.png ├── faultdetect.png └── faults.zip /ElectricalFaultDetectionAndClassification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "ElectricalFaultDetectionAndClassification.ipynb", 7 | "provenance": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | }, 17 | "accelerator": "GPU" 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "metadata": { 23 | "id": "22vGnvyZCB0Q" 24 | }, 25 | "source": [ 26 | "# Electrical Fault Detection and Classification using Line and Phase Currents and Voltages\n", 27 | "\n", 28 | "Electrical power plants require fault detection and operation of protection equipment in minimum possible time to remain stable. The faults on electrical power system transmission lines should be first detected and classified correctly, and repaired in the least possible time. The protection system used for a transmission line can also initiate the other relays to protect the power system from outages. A sound fault detection system provides a fast and secure relaying operation. Once trained on reliable data, an ANN-based fault detection system can help provide fast predictions for the presence of a fault and classify what kind of fault it is.\n" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "metadata": { 34 | "colab": { 35 | "base_uri": "https://localhost:8080/" 36 | }, 37 | "id": "vSeNLEdOq_6Y", 38 | "outputId": "b7d52502-a9e3-4948-8776-a0c70ba1db2f" 39 | }, 40 | "source": [ 41 | "from google.colab import drive\n", 42 | "drive.mount('/content/drive')" 43 | ], 44 | "execution_count": 1, 45 | "outputs": [ 46 | { 47 | "output_type": "stream", 48 | "name": "stdout", 49 | "text": [ 50 | "Mounted at /content/drive\n" 51 | ] 52 | } 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "metadata": { 58 | "id": "Uf66rESprpg_" 59 | }, 60 | "source": [ 61 | "import pandas as pd\n", 62 | "import numpy as np\n", 63 | "import matplotlib.pyplot as plt\n", 64 | "from sklearn.model_selection import train_test_split\n", 65 | "from sklearn.preprocessing import StandardScaler\n", 66 | "from sklearn.metrics import confusion_matrix, accuracy_score\n", 67 | "from sklearn.preprocessing import LabelEncoder\n", 68 | "from sklearn.compose import ColumnTransformer\n", 69 | "from sklearn.preprocessing import OneHotEncoder\n", 70 | "from keras.utils import np_utils\n", 71 | "from tensorflow.keras.layers import Dense\n", 72 | "from tensorflow.keras.models import Sequential" 73 | ], 74 | "execution_count": 60, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": { 80 | "id": "Vw66GP8It_IK" 81 | }, 82 | "source": [ 83 | "# Fault Detection" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": { 89 | "id": "J2vSpIGmrr9M" 90 | }, 91 | "source": [ 92 | "## Data Preprocessing" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "metadata": { 98 | "colab": { 99 | "base_uri": "https://localhost:8080/" 100 | }, 101 | "id": "lAnwsRAdrrvm", 102 | "outputId": "60ad4d1b-96d7-4a25-ec7a-5099c1d6a4f0" 103 | }, 104 | "source": [ 105 | "!unzip '/content/drive/MyDrive/Datasets/faults.zip' -d '/content'" 106 | ], 107 | "execution_count": 3, 108 | "outputs": [ 109 | { 110 | "output_type": "stream", 111 | "name": "stdout", 112 | "text": [ 113 | "Archive: /content/drive/MyDrive/Datasets/faults.zip\n", 114 | " inflating: /content/classData.csv \n", 115 | " inflating: /content/detect_dataset.csv \n" 116 | ] 117 | } 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "metadata": { 123 | "id": "jtxz8WJxr69Y" 124 | }, 125 | "source": [ 126 | "detectionData = pd.read_csv('detect_dataset.csv')" 127 | ], 128 | "execution_count": 4, 129 | "outputs": [] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "metadata": { 134 | "colab": { 135 | "base_uri": "https://localhost:8080/", 136 | "height": 203 137 | }, 138 | "id": "8oxpCnfhsBzo", 139 | "outputId": "05eac268-8f84-42ad-fb4f-151c548b7f42" 140 | }, 141 | "source": [ 142 | "detectionData.head()" 143 | ], 144 | "execution_count": 5, 145 | "outputs": [ 146 | { 147 | "output_type": "execute_result", 148 | "data": { 149 | "text/html": [ 150 | "
\n", 151 | "\n", 164 | "\n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | "
Output (S)IaIbIcVaVbVcUnnamed: 7Unnamed: 8
00-170.4721969.219613161.2525830.054490-0.6599210.605431NaNNaN
10-122.2357546.168667116.0670870.102000-0.6286120.526202NaNNaN
20-90.1614743.81363286.3478410.141026-0.6052770.464251NaNNaN
30-79.9049162.39880377.5061120.156272-0.6022350.445963NaNNaN
40-63.8852550.59066763.2945870.180451-0.5915010.411050NaNNaN
\n", 242 | "
" 243 | ], 244 | "text/plain": [ 245 | " Output (S) Ia Ib ... Vc Unnamed: 7 Unnamed: 8\n", 246 | "0 0 -170.472196 9.219613 ... 0.605431 NaN NaN\n", 247 | "1 0 -122.235754 6.168667 ... 0.526202 NaN NaN\n", 248 | "2 0 -90.161474 3.813632 ... 0.464251 NaN NaN\n", 249 | "3 0 -79.904916 2.398803 ... 0.445963 NaN NaN\n", 250 | "4 0 -63.885255 0.590667 ... 0.411050 NaN NaN\n", 251 | "\n", 252 | "[5 rows x 9 columns]" 253 | ] 254 | }, 255 | "metadata": {}, 256 | "execution_count": 5 257 | } 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "metadata": { 263 | "id": "P86wbmAmsEM-" 264 | }, 265 | "source": [ 266 | "detectionData.drop(['Unnamed: 7', 'Unnamed: 8'], axis='columns' ,inplace=True)" 267 | ], 268 | "execution_count": 6, 269 | "outputs": [] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "metadata": { 274 | "colab": { 275 | "base_uri": "https://localhost:8080/" 276 | }, 277 | "id": "7rDeOhAYyQnP", 278 | "outputId": "331c7708-7b48-4ab1-906c-295cc0da778d" 279 | }, 280 | "source": [ 281 | "detectionData.shape" 282 | ], 283 | "execution_count": 7, 284 | "outputs": [ 285 | { 286 | "output_type": "execute_result", 287 | "data": { 288 | "text/plain": [ 289 | "(12001, 7)" 290 | ] 291 | }, 292 | "metadata": {}, 293 | "execution_count": 7 294 | } 295 | ] 296 | }, 297 | { 298 | "cell_type": "code", 299 | "metadata": { 300 | "colab": { 301 | "base_uri": "https://localhost:8080/", 302 | "height": 203 303 | }, 304 | "id": "Tm77TZMxsle8", 305 | "outputId": "ff20ccb5-53fe-4bcd-a6f2-02a635b73ab5" 306 | }, 307 | "source": [ 308 | "detectionData.head()" 309 | ], 310 | "execution_count": 8, 311 | "outputs": [ 312 | { 313 | "output_type": "execute_result", 314 | "data": { 315 | "text/html": [ 316 | "
\n", 317 | "\n", 330 | "\n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | "
Output (S)IaIbIcVaVbVc
00-170.4721969.219613161.2525830.054490-0.6599210.605431
10-122.2357546.168667116.0670870.102000-0.6286120.526202
20-90.1614743.81363286.3478410.141026-0.6052770.464251
30-79.9049162.39880377.5061120.156272-0.6022350.445963
40-63.8852550.59066763.2945870.180451-0.5915010.411050
\n", 396 | "
" 397 | ], 398 | "text/plain": [ 399 | " Output (S) Ia Ib Ic Va Vb Vc\n", 400 | "0 0 -170.472196 9.219613 161.252583 0.054490 -0.659921 0.605431\n", 401 | "1 0 -122.235754 6.168667 116.067087 0.102000 -0.628612 0.526202\n", 402 | "2 0 -90.161474 3.813632 86.347841 0.141026 -0.605277 0.464251\n", 403 | "3 0 -79.904916 2.398803 77.506112 0.156272 -0.602235 0.445963\n", 404 | "4 0 -63.885255 0.590667 63.294587 0.180451 -0.591501 0.411050" 405 | ] 406 | }, 407 | "metadata": {}, 408 | "execution_count": 8 409 | } 410 | ] 411 | }, 412 | { 413 | "cell_type": "code", 414 | "metadata": { 415 | "colab": { 416 | "base_uri": "https://localhost:8080/" 417 | }, 418 | "id": "WQQ30YQQu8g_", 419 | "outputId": "a1bcb84a-52c1-47d3-ee20-2a81d0dd56e1" 420 | }, 421 | "source": [ 422 | "detectionData['Output (S)'].value_counts()" 423 | ], 424 | "execution_count": 9, 425 | "outputs": [ 426 | { 427 | "output_type": "execute_result", 428 | "data": { 429 | "text/plain": [ 430 | "0 6505\n", 431 | "1 5496\n", 432 | "Name: Output (S), dtype: int64" 433 | ] 434 | }, 435 | "metadata": {}, 436 | "execution_count": 9 437 | } 438 | ] 439 | }, 440 | { 441 | "cell_type": "code", 442 | "metadata": { 443 | "id": "AwC5WTuzuTui" 444 | }, 445 | "source": [ 446 | "Xdetection = detectionData.iloc[:, 1:].values\n", 447 | "ydetection = detectionData.iloc[:, 0].values" 448 | ], 449 | "execution_count": 10, 450 | "outputs": [] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "metadata": { 455 | "id": "ivPH1a7Xukef" 456 | }, 457 | "source": [ 458 | "Xd_train, Xd_test, yd_train, yd_test = train_test_split(Xdetection, ydetection, test_size = 0.2, random_state = 0)" 459 | ], 460 | "execution_count": 11, 461 | "outputs": [] 462 | }, 463 | { 464 | "cell_type": "code", 465 | "metadata": { 466 | "id": "KY6pZMEevVEz" 467 | }, 468 | "source": [ 469 | "sc = StandardScaler()\n", 470 | "Xd_train = sc.fit_transform(Xd_train)\n", 471 | "Xd_test = sc.transform(Xd_test)" 472 | ], 473 | "execution_count": 12, 474 | "outputs": [] 475 | }, 476 | { 477 | "cell_type": "markdown", 478 | "metadata": { 479 | "id": "tlGsXXi7vZM4" 480 | }, 481 | "source": [ 482 | "## ANN Model" 483 | ] 484 | }, 485 | { 486 | "cell_type": "code", 487 | "metadata": { 488 | "id": "eIgdcWpQvY_Z" 489 | }, 490 | "source": [ 491 | "detectionANN = Sequential()\n", 492 | "detectionANN.add(Dense(units=6, activation='relu'))\n", 493 | "detectionANN.add(Dense(units=6, activation='relu'))\n", 494 | "detectionANN.add(Dense(units=1, activation='sigmoid'))\n", 495 | "detectionANN.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])" 496 | ], 497 | "execution_count": 13, 498 | "outputs": [] 499 | }, 500 | { 501 | "cell_type": "code", 502 | "metadata": { 503 | "colab": { 504 | "base_uri": "https://localhost:8080/" 505 | }, 506 | "id": "fFtt5P2VwMA1", 507 | "outputId": "5c99ceac-328d-49ad-f4bd-cf68b487b1cf" 508 | }, 509 | "source": [ 510 | "detectionANN.fit(Xd_train, yd_train, batch_size = 32, epochs = 100)" 511 | ], 512 | "execution_count": 14, 513 | "outputs": [ 514 | { 515 | "output_type": "stream", 516 | "name": "stdout", 517 | "text": [ 518 | "Epoch 1/100\n", 519 | "300/300 [==============================] - 4s 3ms/step - loss: 0.5607 - accuracy: 0.7136\n", 520 | "Epoch 2/100\n", 521 | "300/300 [==============================] - 1s 3ms/step - loss: 0.3026 - accuracy: 0.8951\n", 522 | "Epoch 3/100\n", 523 | "300/300 [==============================] - 1s 3ms/step - loss: 0.1854 - accuracy: 0.9491\n", 524 | "Epoch 4/100\n", 525 | "300/300 [==============================] - 1s 3ms/step - loss: 0.1154 - accuracy: 0.9697\n", 526 | "Epoch 5/100\n", 527 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0831 - accuracy: 0.9775\n", 528 | "Epoch 6/100\n", 529 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0665 - accuracy: 0.9815\n", 530 | "Epoch 7/100\n", 531 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0574 - accuracy: 0.9837\n", 532 | "Epoch 8/100\n", 533 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0513 - accuracy: 0.9846\n", 534 | "Epoch 9/100\n", 535 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0470 - accuracy: 0.9859\n", 536 | "Epoch 10/100\n", 537 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0441 - accuracy: 0.9867\n", 538 | "Epoch 11/100\n", 539 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0417 - accuracy: 0.9870\n", 540 | "Epoch 12/100\n", 541 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0399 - accuracy: 0.9877\n", 542 | "Epoch 13/100\n", 543 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0388 - accuracy: 0.9883\n", 544 | "Epoch 14/100\n", 545 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0376 - accuracy: 0.9889\n", 546 | "Epoch 15/100\n", 547 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0367 - accuracy: 0.9893\n", 548 | "Epoch 16/100\n", 549 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0352 - accuracy: 0.9893\n", 550 | "Epoch 17/100\n", 551 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0345 - accuracy: 0.9895\n", 552 | "Epoch 18/100\n", 553 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0338 - accuracy: 0.9891\n", 554 | "Epoch 19/100\n", 555 | "300/300 [==============================] - 1s 2ms/step - loss: 0.0326 - accuracy: 0.9898\n", 556 | "Epoch 20/100\n", 557 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0318 - accuracy: 0.9900\n", 558 | "Epoch 21/100\n", 559 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0313 - accuracy: 0.9904\n", 560 | "Epoch 22/100\n", 561 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0304 - accuracy: 0.9903\n", 562 | "Epoch 23/100\n", 563 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0298 - accuracy: 0.9910\n", 564 | "Epoch 24/100\n", 565 | "300/300 [==============================] - 1s 2ms/step - loss: 0.0285 - accuracy: 0.9905\n", 566 | "Epoch 25/100\n", 567 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0282 - accuracy: 0.9909\n", 568 | "Epoch 26/100\n", 569 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0277 - accuracy: 0.9916\n", 570 | "Epoch 27/100\n", 571 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0270 - accuracy: 0.9916\n", 572 | "Epoch 28/100\n", 573 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0258 - accuracy: 0.9915\n", 574 | "Epoch 29/100\n", 575 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0255 - accuracy: 0.9916\n", 576 | "Epoch 30/100\n", 577 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0248 - accuracy: 0.9924\n", 578 | "Epoch 31/100\n", 579 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0244 - accuracy: 0.9923\n", 580 | "Epoch 32/100\n", 581 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0243 - accuracy: 0.9920\n", 582 | "Epoch 33/100\n", 583 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0237 - accuracy: 0.9922\n", 584 | "Epoch 34/100\n", 585 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0232 - accuracy: 0.9925\n", 586 | "Epoch 35/100\n", 587 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0230 - accuracy: 0.9924\n", 588 | "Epoch 36/100\n", 589 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0230 - accuracy: 0.9924\n", 590 | "Epoch 37/100\n", 591 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0223 - accuracy: 0.9927\n", 592 | "Epoch 38/100\n", 593 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0217 - accuracy: 0.9927\n", 594 | "Epoch 39/100\n", 595 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0217 - accuracy: 0.9927\n", 596 | "Epoch 40/100\n", 597 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0214 - accuracy: 0.9926\n", 598 | "Epoch 41/100\n", 599 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0211 - accuracy: 0.9930\n", 600 | "Epoch 42/100\n", 601 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0208 - accuracy: 0.9927\n", 602 | "Epoch 43/100\n", 603 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0207 - accuracy: 0.9926\n", 604 | "Epoch 44/100\n", 605 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0204 - accuracy: 0.9928\n", 606 | "Epoch 45/100\n", 607 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0203 - accuracy: 0.9932\n", 608 | "Epoch 46/100\n", 609 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0203 - accuracy: 0.9925\n", 610 | "Epoch 47/100\n", 611 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0201 - accuracy: 0.9930\n", 612 | "Epoch 48/100\n", 613 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0195 - accuracy: 0.9930\n", 614 | "Epoch 49/100\n", 615 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0199 - accuracy: 0.9928\n", 616 | "Epoch 50/100\n", 617 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0195 - accuracy: 0.9929\n", 618 | "Epoch 51/100\n", 619 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0192 - accuracy: 0.9928\n", 620 | "Epoch 52/100\n", 621 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0191 - accuracy: 0.9929\n", 622 | "Epoch 53/100\n", 623 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0187 - accuracy: 0.9931\n", 624 | "Epoch 54/100\n", 625 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0187 - accuracy: 0.9931\n", 626 | "Epoch 55/100\n", 627 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0187 - accuracy: 0.9934\n", 628 | "Epoch 56/100\n", 629 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0183 - accuracy: 0.9932\n", 630 | "Epoch 57/100\n", 631 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0180 - accuracy: 0.9932\n", 632 | "Epoch 58/100\n", 633 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0184 - accuracy: 0.9932\n", 634 | "Epoch 59/100\n", 635 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0178 - accuracy: 0.9930\n", 636 | "Epoch 60/100\n", 637 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0181 - accuracy: 0.9926\n", 638 | "Epoch 61/100\n", 639 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0177 - accuracy: 0.9932\n", 640 | "Epoch 62/100\n", 641 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0175 - accuracy: 0.9934\n", 642 | "Epoch 63/100\n", 643 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0176 - accuracy: 0.9928\n", 644 | "Epoch 64/100\n", 645 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0172 - accuracy: 0.9937\n", 646 | "Epoch 65/100\n", 647 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0173 - accuracy: 0.9933\n", 648 | "Epoch 66/100\n", 649 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0168 - accuracy: 0.9934\n", 650 | "Epoch 67/100\n", 651 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0168 - accuracy: 0.9932\n", 652 | "Epoch 68/100\n", 653 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0167 - accuracy: 0.9935\n", 654 | "Epoch 69/100\n", 655 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0167 - accuracy: 0.9932\n", 656 | "Epoch 70/100\n", 657 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0161 - accuracy: 0.9939\n", 658 | "Epoch 71/100\n", 659 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0162 - accuracy: 0.9940\n", 660 | "Epoch 72/100\n", 661 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0161 - accuracy: 0.9931\n", 662 | "Epoch 73/100\n", 663 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0162 - accuracy: 0.9934\n", 664 | "Epoch 74/100\n", 665 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0162 - accuracy: 0.9929\n", 666 | "Epoch 75/100\n", 667 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0161 - accuracy: 0.9935\n", 668 | "Epoch 76/100\n", 669 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0156 - accuracy: 0.9941\n", 670 | "Epoch 77/100\n", 671 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0152 - accuracy: 0.9945\n", 672 | "Epoch 78/100\n", 673 | "300/300 [==============================] - 1s 2ms/step - loss: 0.0155 - accuracy: 0.9939\n", 674 | "Epoch 79/100\n", 675 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0148 - accuracy: 0.9941\n", 676 | "Epoch 80/100\n", 677 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0152 - accuracy: 0.9941\n", 678 | "Epoch 81/100\n", 679 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0147 - accuracy: 0.9942\n", 680 | "Epoch 82/100\n", 681 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0149 - accuracy: 0.9939\n", 682 | "Epoch 83/100\n", 683 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0149 - accuracy: 0.9943\n", 684 | "Epoch 84/100\n", 685 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0147 - accuracy: 0.9947\n", 686 | "Epoch 85/100\n", 687 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0146 - accuracy: 0.9940\n", 688 | "Epoch 86/100\n", 689 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0149 - accuracy: 0.9937\n", 690 | "Epoch 87/100\n", 691 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0143 - accuracy: 0.9945\n", 692 | "Epoch 88/100\n", 693 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0141 - accuracy: 0.9940\n", 694 | "Epoch 89/100\n", 695 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0141 - accuracy: 0.9942\n", 696 | "Epoch 90/100\n", 697 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0139 - accuracy: 0.9947\n", 698 | "Epoch 91/100\n", 699 | "300/300 [==============================] - 1s 2ms/step - loss: 0.0136 - accuracy: 0.9943\n", 700 | "Epoch 92/100\n", 701 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0134 - accuracy: 0.9941\n", 702 | "Epoch 93/100\n", 703 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0134 - accuracy: 0.9937\n", 704 | "Epoch 94/100\n", 705 | "300/300 [==============================] - 1s 2ms/step - loss: 0.0131 - accuracy: 0.9944\n", 706 | "Epoch 95/100\n", 707 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0132 - accuracy: 0.9945\n", 708 | "Epoch 96/100\n", 709 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0133 - accuracy: 0.9947\n", 710 | "Epoch 97/100\n", 711 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0128 - accuracy: 0.9949\n", 712 | "Epoch 98/100\n", 713 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0130 - accuracy: 0.9952\n", 714 | "Epoch 99/100\n", 715 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0128 - accuracy: 0.9939\n", 716 | "Epoch 100/100\n", 717 | "300/300 [==============================] - 1s 3ms/step - loss: 0.0129 - accuracy: 0.9952\n" 718 | ] 719 | }, 720 | { 721 | "output_type": "execute_result", 722 | "data": { 723 | "text/plain": [ 724 | "" 725 | ] 726 | }, 727 | "metadata": {}, 728 | "execution_count": 14 729 | } 730 | ] 731 | }, 732 | { 733 | "cell_type": "markdown", 734 | "metadata": { 735 | "id": "D15b-JUAwqbD" 736 | }, 737 | "source": [ 738 | "## Results" 739 | ] 740 | }, 741 | { 742 | "cell_type": "code", 743 | "metadata": { 744 | "colab": { 745 | "base_uri": "https://localhost:8080/" 746 | }, 747 | "id": "C8IKuO2HwsFR", 748 | "outputId": "79854587-87f0-4af8-f388-f0ba3fc86b7c" 749 | }, 750 | "source": [ 751 | "yd_pred = detectionANN.predict(Xd_test)\n", 752 | "yd_pred = (yd_pred > 0.5)\n", 753 | "print(np.concatenate((yd_pred.reshape(len(yd_pred),1), yd_test.reshape(len(yd_test),1)),1))" 754 | ], 755 | "execution_count": 15, 756 | "outputs": [ 757 | { 758 | "output_type": "stream", 759 | "name": "stdout", 760 | "text": [ 761 | "[[1 1]\n", 762 | " [0 0]\n", 763 | " [0 0]\n", 764 | " ...\n", 765 | " [0 0]\n", 766 | " [0 0]\n", 767 | " [0 1]]\n" 768 | ] 769 | } 770 | ] 771 | }, 772 | { 773 | "cell_type": "code", 774 | "metadata": { 775 | "colab": { 776 | "base_uri": "https://localhost:8080/" 777 | }, 778 | "id": "Q4gfoCtNw0JS", 779 | "outputId": "3e48cc0f-76ab-4516-c969-e640c8bdbf8b" 780 | }, 781 | "source": [ 782 | "cm = confusion_matrix(yd_test, yd_pred)\n", 783 | "acc = accuracy_score(yd_test, yd_pred)\n", 784 | "tn, fp, fn, tp = cm.ravel()\n", 785 | "print(f\"Correct Predictions : {tn+tp}\")\n", 786 | "print(f\"Wrong Predictions : {fn+fp}\")\n", 787 | "print(f\"Accuracy : {acc*100} %\")" 788 | ], 789 | "execution_count": 16, 790 | "outputs": [ 791 | { 792 | "output_type": "stream", 793 | "name": "stdout", 794 | "text": [ 795 | "Correct Predictions : 2387\n", 796 | "Wrong Predictions : 14\n", 797 | "Accuracy : 99.41690962099126 %\n" 798 | ] 799 | } 800 | ] 801 | }, 802 | { 803 | "cell_type": "markdown", 804 | "metadata": { 805 | "id": "-CKxjp9gyjHF" 806 | }, 807 | "source": [ 808 | "# Fault Classification" 809 | ] 810 | }, 811 | { 812 | "cell_type": "markdown", 813 | "metadata": { 814 | "id": "f4fpRk8TzKvD" 815 | }, 816 | "source": [ 817 | "## Data Preprocessing" 818 | ] 819 | }, 820 | { 821 | "cell_type": "code", 822 | "metadata": { 823 | "id": "WJj55fkkyi0j" 824 | }, 825 | "source": [ 826 | "classData = pd.read_csv('classData.csv')" 827 | ], 828 | "execution_count": 17, 829 | "outputs": [] 830 | }, 831 | { 832 | "cell_type": "code", 833 | "metadata": { 834 | "colab": { 835 | "base_uri": "https://localhost:8080/" 836 | }, 837 | "id": "gxKpC5AayqvT", 838 | "outputId": "9a98df58-4240-4661-bc78-be4571210bdc" 839 | }, 840 | "source": [ 841 | "classData.shape" 842 | ], 843 | "execution_count": 18, 844 | "outputs": [ 845 | { 846 | "output_type": "execute_result", 847 | "data": { 848 | "text/plain": [ 849 | "(7861, 10)" 850 | ] 851 | }, 852 | "metadata": {}, 853 | "execution_count": 18 854 | } 855 | ] 856 | }, 857 | { 858 | "cell_type": "code", 859 | "metadata": { 860 | "colab": { 861 | "base_uri": "https://localhost:8080/", 862 | "height": 203 863 | }, 864 | "id": "q523-eTtysiX", 865 | "outputId": "37f47843-a222-4e81-c2b0-e200cfca7fb2" 866 | }, 867 | "source": [ 868 | "classData.head()" 869 | ], 870 | "execution_count": 72, 871 | "outputs": [ 872 | { 873 | "output_type": "execute_result", 874 | "data": { 875 | "text/html": [ 876 | "
\n", 877 | "\n", 890 | "\n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | "
GCBAIaIbIcVaVbVcfault_types
01001-151.291812-9.67745285.8001620.400750-0.132935-0.2678151001
11001-336.186183-76.28326218.3288970.312732-0.123633-0.1890991001
21001-502.891583-174.648023-80.9246630.265728-0.114301-0.1514281001
31001-593.941905-217.703359-124.8919240.235511-0.104940-0.1305701001
41001-643.663617-224.159427-132.2828150.209537-0.095554-0.1139831001
\n", 980 | "
" 981 | ], 982 | "text/plain": [ 983 | " G C B A Ia ... Ic Va Vb Vc fault_types\n", 984 | "0 1 0 0 1 -151.291812 ... 85.800162 0.400750 -0.132935 -0.267815 1001\n", 985 | "1 1 0 0 1 -336.186183 ... 18.328897 0.312732 -0.123633 -0.189099 1001\n", 986 | "2 1 0 0 1 -502.891583 ... -80.924663 0.265728 -0.114301 -0.151428 1001\n", 987 | "3 1 0 0 1 -593.941905 ... -124.891924 0.235511 -0.104940 -0.130570 1001\n", 988 | "4 1 0 0 1 -643.663617 ... -132.282815 0.209537 -0.095554 -0.113983 1001\n", 989 | "\n", 990 | "[5 rows x 11 columns]" 991 | ] 992 | }, 993 | "metadata": {}, 994 | "execution_count": 72 995 | } 996 | ] 997 | }, 998 | { 999 | "cell_type": "code", 1000 | "metadata": { 1001 | "id": "oLKebYk6zMq3" 1002 | }, 1003 | "source": [ 1004 | "Xclass = classData.iloc[:, 4:].values\n", 1005 | "yclass = classData.iloc[:, 0:4].values" 1006 | ], 1007 | "execution_count": 77, 1008 | "outputs": [] 1009 | }, 1010 | { 1011 | "cell_type": "code", 1012 | "metadata": { 1013 | "colab": { 1014 | "base_uri": "https://localhost:8080/" 1015 | }, 1016 | "id": "Z2PBjACsz7Q2", 1017 | "outputId": "5e00575e-ec71-4436-d212-462e8df00827" 1018 | }, 1019 | "source": [ 1020 | "print(Xclass[0,:])" 1021 | ], 1022 | "execution_count": 21, 1023 | "outputs": [ 1024 | { 1025 | "output_type": "stream", 1026 | "name": "stdout", 1027 | "text": [ 1028 | "[-1.51291812e+02 -9.67745156e+00 8.58001623e+01 4.00749853e-01\n", 1029 | " -1.32934945e-01 -2.67814907e-01]\n" 1030 | ] 1031 | } 1032 | ] 1033 | }, 1034 | { 1035 | "cell_type": "code", 1036 | "metadata": { 1037 | "colab": { 1038 | "base_uri": "https://localhost:8080/" 1039 | }, 1040 | "id": "fgOrKgzsz4rR", 1041 | "outputId": "49984d92-8e4e-4693-9c5d-ce9d9e0c112d" 1042 | }, 1043 | "source": [ 1044 | "print(yclass[0,:])" 1045 | ], 1046 | "execution_count": 50, 1047 | "outputs": [ 1048 | { 1049 | "output_type": "stream", 1050 | "name": "stdout", 1051 | "text": [ 1052 | "[1 0 0 1]\n" 1053 | ] 1054 | } 1055 | ] 1056 | }, 1057 | { 1058 | "cell_type": "code", 1059 | "metadata": { 1060 | "id": "2DzG96Yd3gc2", 1061 | "colab": { 1062 | "base_uri": "https://localhost:8080/" 1063 | }, 1064 | "outputId": "bc48f013-4b87-409f-8587-dc782740e722" 1065 | }, 1066 | "source": [ 1067 | "faults = [\"None\", \"LG Fault\", \"LL Fault\", \"LLG Fault\", \"LLL Fault\", \"LLLG Fault\"]\n", 1068 | "yc = []\n", 1069 | "for f in yclass:\n", 1070 | " if f[0] == 0 and f[1] == 0 and f[2] == 0 and f[3] == 0:\n", 1071 | " yc.append(faults[0])\n", 1072 | " elif f[0] == 1 and f[1] == 0 and f[2] == 0 and f[3] == 1:\n", 1073 | " yc.append(faults[1])\n", 1074 | " elif f[0] == 0 and f[1] == 1 and f[2] == 1 and f[3] == 0:\n", 1075 | " yc.append(faults[2])\n", 1076 | " elif f[0] == 1 and f[1] == 0 and f[2] == 1 and f[3] == 1:\n", 1077 | " yc.append(faults[3])\n", 1078 | " elif f[0] == 0 and f[1] == 1 and f[2] == 1 and f[3] == 1:\n", 1079 | " yc.append(faults[4])\n", 1080 | " else:\n", 1081 | " yc.append(faults[5])\n", 1082 | "yc = np.array(yc)\n", 1083 | "print(f\"No Fault : {len(yc[yc==faults[0]])}\")\n", 1084 | "print(f\"LF Fault : {len(yc[yc==faults[1]])}\")\n", 1085 | "print(f\"LL Fault : {len(yc[yc==faults[2]])}\")\n", 1086 | "print(f\"LLG Fault : {len(yc[yc==faults[3]])}\")\n", 1087 | "print(f\"LLL Fault : {len(yc[yc==faults[4]])}\")\n", 1088 | "print(f\"LLLG Fault : {len(yc[yc==faults[5]])}\")\n", 1089 | "yclass = yc" 1090 | ], 1091 | "execution_count": 78, 1092 | "outputs": [ 1093 | { 1094 | "output_type": "stream", 1095 | "name": "stdout", 1096 | "text": [ 1097 | "No Fault : 2365\n", 1098 | "LF Fault : 1129\n", 1099 | "LL Fault : 1004\n", 1100 | "LLG Fault : 1134\n", 1101 | "LLL Fault : 1096\n", 1102 | "LLLG Fault : 1133\n" 1103 | ] 1104 | } 1105 | ] 1106 | }, 1107 | { 1108 | "cell_type": "code", 1109 | "metadata": { 1110 | "id": "m3WSLLAV6Y0H" 1111 | }, 1112 | "source": [ 1113 | "encoder = LabelEncoder()\n", 1114 | "encoder.fit(yclass)\n", 1115 | "encoded_Y = encoder.transform(yclass)\n", 1116 | "yclass = np_utils.to_categorical(encoded_Y)" 1117 | ], 1118 | "execution_count": 79, 1119 | "outputs": [] 1120 | }, 1121 | { 1122 | "cell_type": "code", 1123 | "metadata": { 1124 | "id": "kw4WMxI3037x" 1125 | }, 1126 | "source": [ 1127 | "Xc_train, Xc_test, yc_train, yc_test = train_test_split(Xclass, yclass, test_size = 0.2, random_state = 0)" 1128 | ], 1129 | "execution_count": 80, 1130 | "outputs": [] 1131 | }, 1132 | { 1133 | "cell_type": "code", 1134 | "metadata": { 1135 | "id": "MEW-L6vP08lo" 1136 | }, 1137 | "source": [ 1138 | "sc = StandardScaler()\n", 1139 | "Xc_train = sc.fit_transform(Xc_train)\n", 1140 | "Xc_test = sc.transform(Xc_test)" 1141 | ], 1142 | "execution_count": 81, 1143 | "outputs": [] 1144 | }, 1145 | { 1146 | "cell_type": "markdown", 1147 | "metadata": { 1148 | "id": "q4NqAZHi0nNj" 1149 | }, 1150 | "source": [ 1151 | "## ANN Model" 1152 | ] 1153 | }, 1154 | { 1155 | "cell_type": "code", 1156 | "metadata": { 1157 | "id": "QsVLkzqn0mph" 1158 | }, 1159 | "source": [ 1160 | "classANN = Sequential()\n", 1161 | "classANN.add(Dense(units=12, activation='relu'))\n", 1162 | "classANN.add(Dense(units=12, activation='relu'))\n", 1163 | "classANN.add(Dense(units=6, activation='sigmoid'))\n", 1164 | "classANN.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])" 1165 | ], 1166 | "execution_count": 83, 1167 | "outputs": [] 1168 | }, 1169 | { 1170 | "cell_type": "code", 1171 | "metadata": { 1172 | "id": "wM1KNIUnz_NO", 1173 | "colab": { 1174 | "base_uri": "https://localhost:8080/" 1175 | }, 1176 | "outputId": "7712c9a6-f155-48c9-d2b1-a30390b3c3c2" 1177 | }, 1178 | "source": [ 1179 | "classANN.fit(Xc_train, yc_train, batch_size = 32, epochs = 100)" 1180 | ], 1181 | "execution_count": 84, 1182 | "outputs": [ 1183 | { 1184 | "output_type": "stream", 1185 | "name": "stdout", 1186 | "text": [ 1187 | "Epoch 1/100\n", 1188 | "197/197 [==============================] - 1s 4ms/step - loss: 1.4433 - accuracy: 0.5060\n", 1189 | "Epoch 2/100\n", 1190 | "197/197 [==============================] - 1s 4ms/step - loss: 0.8129 - accuracy: 0.7351\n", 1191 | "Epoch 3/100\n", 1192 | "197/197 [==============================] - 1s 4ms/step - loss: 0.4896 - accuracy: 0.8357\n", 1193 | "Epoch 4/100\n", 1194 | "197/197 [==============================] - 1s 4ms/step - loss: 0.3413 - accuracy: 0.8930\n", 1195 | "Epoch 5/100\n", 1196 | "197/197 [==============================] - 1s 3ms/step - loss: 0.2666 - accuracy: 0.9210\n", 1197 | "Epoch 6/100\n", 1198 | "197/197 [==============================] - 1s 3ms/step - loss: 0.2195 - accuracy: 0.9342\n", 1199 | "Epoch 7/100\n", 1200 | "197/197 [==============================] - 1s 3ms/step - loss: 0.1888 - accuracy: 0.9413\n", 1201 | "Epoch 8/100\n", 1202 | "197/197 [==============================] - 1s 4ms/step - loss: 0.1654 - accuracy: 0.9555\n", 1203 | "Epoch 9/100\n", 1204 | "197/197 [==============================] - 1s 4ms/step - loss: 0.1462 - accuracy: 0.9614\n", 1205 | "Epoch 10/100\n", 1206 | "197/197 [==============================] - 1s 3ms/step - loss: 0.1307 - accuracy: 0.9666\n", 1207 | "Epoch 11/100\n", 1208 | "197/197 [==============================] - 1s 3ms/step - loss: 0.1184 - accuracy: 0.9709\n", 1209 | "Epoch 12/100\n", 1210 | "197/197 [==============================] - 1s 3ms/step - loss: 0.1099 - accuracy: 0.9763\n", 1211 | "Epoch 13/100\n", 1212 | "197/197 [==============================] - 1s 4ms/step - loss: 0.1020 - accuracy: 0.9746\n", 1213 | "Epoch 14/100\n", 1214 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0959 - accuracy: 0.9785\n", 1215 | "Epoch 15/100\n", 1216 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0899 - accuracy: 0.9806\n", 1217 | "Epoch 16/100\n", 1218 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0852 - accuracy: 0.9812\n", 1219 | "Epoch 17/100\n", 1220 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0805 - accuracy: 0.9816\n", 1221 | "Epoch 18/100\n", 1222 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0762 - accuracy: 0.9843\n", 1223 | "Epoch 19/100\n", 1224 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0728 - accuracy: 0.9843\n", 1225 | "Epoch 20/100\n", 1226 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0684 - accuracy: 0.9857\n", 1227 | "Epoch 21/100\n", 1228 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0656 - accuracy: 0.9844\n", 1229 | "Epoch 22/100\n", 1230 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0626 - accuracy: 0.9857\n", 1231 | "Epoch 23/100\n", 1232 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0596 - accuracy: 0.9870\n", 1233 | "Epoch 24/100\n", 1234 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0582 - accuracy: 0.9858\n", 1235 | "Epoch 25/100\n", 1236 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0556 - accuracy: 0.9874\n", 1237 | "Epoch 26/100\n", 1238 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0534 - accuracy: 0.9890\n", 1239 | "Epoch 27/100\n", 1240 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0515 - accuracy: 0.9892\n", 1241 | "Epoch 28/100\n", 1242 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0508 - accuracy: 0.9878\n", 1243 | "Epoch 29/100\n", 1244 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0480 - accuracy: 0.9895\n", 1245 | "Epoch 30/100\n", 1246 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0463 - accuracy: 0.9901\n", 1247 | "Epoch 31/100\n", 1248 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0453 - accuracy: 0.9885\n", 1249 | "Epoch 32/100\n", 1250 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0440 - accuracy: 0.9900\n", 1251 | "Epoch 33/100\n", 1252 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0426 - accuracy: 0.9900\n", 1253 | "Epoch 34/100\n", 1254 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0410 - accuracy: 0.9906\n", 1255 | "Epoch 35/100\n", 1256 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0394 - accuracy: 0.9908\n", 1257 | "Epoch 36/100\n", 1258 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0388 - accuracy: 0.9914\n", 1259 | "Epoch 37/100\n", 1260 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0376 - accuracy: 0.9916\n", 1261 | "Epoch 38/100\n", 1262 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0364 - accuracy: 0.9920\n", 1263 | "Epoch 39/100\n", 1264 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0362 - accuracy: 0.9906\n", 1265 | "Epoch 40/100\n", 1266 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0359 - accuracy: 0.9917\n", 1267 | "Epoch 41/100\n", 1268 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0341 - accuracy: 0.9906\n", 1269 | "Epoch 42/100\n", 1270 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0337 - accuracy: 0.9914\n", 1271 | "Epoch 43/100\n", 1272 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0322 - accuracy: 0.9932\n", 1273 | "Epoch 44/100\n", 1274 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0320 - accuracy: 0.9917\n", 1275 | "Epoch 45/100\n", 1276 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0311 - accuracy: 0.9928\n", 1277 | "Epoch 46/100\n", 1278 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0299 - accuracy: 0.9924\n", 1279 | "Epoch 47/100\n", 1280 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0297 - accuracy: 0.9924\n", 1281 | "Epoch 48/100\n", 1282 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0290 - accuracy: 0.9927\n", 1283 | "Epoch 49/100\n", 1284 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0283 - accuracy: 0.9925\n", 1285 | "Epoch 50/100\n", 1286 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0272 - accuracy: 0.9932\n", 1287 | "Epoch 51/100\n", 1288 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0269 - accuracy: 0.9935\n", 1289 | "Epoch 52/100\n", 1290 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0271 - accuracy: 0.9927\n", 1291 | "Epoch 53/100\n", 1292 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0262 - accuracy: 0.9928\n", 1293 | "Epoch 54/100\n", 1294 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0271 - accuracy: 0.9924\n", 1295 | "Epoch 55/100\n", 1296 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0251 - accuracy: 0.9941\n", 1297 | "Epoch 56/100\n", 1298 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0244 - accuracy: 0.9930\n", 1299 | "Epoch 57/100\n", 1300 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0240 - accuracy: 0.9940\n", 1301 | "Epoch 58/100\n", 1302 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0239 - accuracy: 0.9941\n", 1303 | "Epoch 59/100\n", 1304 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0237 - accuracy: 0.9943\n", 1305 | "Epoch 60/100\n", 1306 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0231 - accuracy: 0.9938\n", 1307 | "Epoch 61/100\n", 1308 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0223 - accuracy: 0.9933\n", 1309 | "Epoch 62/100\n", 1310 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0220 - accuracy: 0.9952\n", 1311 | "Epoch 63/100\n", 1312 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0215 - accuracy: 0.9949\n", 1313 | "Epoch 64/100\n", 1314 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0221 - accuracy: 0.9944\n", 1315 | "Epoch 65/100\n", 1316 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0214 - accuracy: 0.9941\n", 1317 | "Epoch 66/100\n", 1318 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0211 - accuracy: 0.9943\n", 1319 | "Epoch 67/100\n", 1320 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0215 - accuracy: 0.9935\n", 1321 | "Epoch 68/100\n", 1322 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0206 - accuracy: 0.9941\n", 1323 | "Epoch 69/100\n", 1324 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0200 - accuracy: 0.9946\n", 1325 | "Epoch 70/100\n", 1326 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0193 - accuracy: 0.9952\n", 1327 | "Epoch 71/100\n", 1328 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0196 - accuracy: 0.9943\n", 1329 | "Epoch 72/100\n", 1330 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0183 - accuracy: 0.9949\n", 1331 | "Epoch 73/100\n", 1332 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0182 - accuracy: 0.9952\n", 1333 | "Epoch 74/100\n", 1334 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0184 - accuracy: 0.9949\n", 1335 | "Epoch 75/100\n", 1336 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0180 - accuracy: 0.9949\n", 1337 | "Epoch 76/100\n", 1338 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0175 - accuracy: 0.9951\n", 1339 | "Epoch 77/100\n", 1340 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0177 - accuracy: 0.9946\n", 1341 | "Epoch 78/100\n", 1342 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0174 - accuracy: 0.9955\n", 1343 | "Epoch 79/100\n", 1344 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0176 - accuracy: 0.9946\n", 1345 | "Epoch 80/100\n", 1346 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0169 - accuracy: 0.9949\n", 1347 | "Epoch 81/100\n", 1348 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0174 - accuracy: 0.9955\n", 1349 | "Epoch 82/100\n", 1350 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0166 - accuracy: 0.9957\n", 1351 | "Epoch 83/100\n", 1352 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0165 - accuracy: 0.9955\n", 1353 | "Epoch 84/100\n", 1354 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0160 - accuracy: 0.9954\n", 1355 | "Epoch 85/100\n", 1356 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0161 - accuracy: 0.9957\n", 1357 | "Epoch 86/100\n", 1358 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0160 - accuracy: 0.9948\n", 1359 | "Epoch 87/100\n", 1360 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0157 - accuracy: 0.9954\n", 1361 | "Epoch 88/100\n", 1362 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0159 - accuracy: 0.9959\n", 1363 | "Epoch 89/100\n", 1364 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0157 - accuracy: 0.9963\n", 1365 | "Epoch 90/100\n", 1366 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0149 - accuracy: 0.9960\n", 1367 | "Epoch 91/100\n", 1368 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0153 - accuracy: 0.9954\n", 1369 | "Epoch 92/100\n", 1370 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0147 - accuracy: 0.9955\n", 1371 | "Epoch 93/100\n", 1372 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0150 - accuracy: 0.9949\n", 1373 | "Epoch 94/100\n", 1374 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0147 - accuracy: 0.9957\n", 1375 | "Epoch 95/100\n", 1376 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0150 - accuracy: 0.9960\n", 1377 | "Epoch 96/100\n", 1378 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0144 - accuracy: 0.9954\n", 1379 | "Epoch 97/100\n", 1380 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0142 - accuracy: 0.9955\n", 1381 | "Epoch 98/100\n", 1382 | "197/197 [==============================] - 1s 4ms/step - loss: 0.0145 - accuracy: 0.9948\n", 1383 | "Epoch 99/100\n", 1384 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0144 - accuracy: 0.9951\n", 1385 | "Epoch 100/100\n", 1386 | "197/197 [==============================] - 1s 3ms/step - loss: 0.0145 - accuracy: 0.9949\n" 1387 | ] 1388 | }, 1389 | { 1390 | "output_type": "execute_result", 1391 | "data": { 1392 | "text/plain": [ 1393 | "" 1394 | ] 1395 | }, 1396 | "metadata": {}, 1397 | "execution_count": 84 1398 | } 1399 | ] 1400 | }, 1401 | { 1402 | "cell_type": "markdown", 1403 | "metadata": { 1404 | "id": "20Ok4goz-KAC" 1405 | }, 1406 | "source": [ 1407 | "## Results" 1408 | ] 1409 | }, 1410 | { 1411 | "cell_type": "code", 1412 | "metadata": { 1413 | "colab": { 1414 | "base_uri": "https://localhost:8080/" 1415 | }, 1416 | "id": "_IoFrxSh-Ts5", 1417 | "outputId": "80f6c4ae-3918-44b3-9027-3c77f32bacd2" 1418 | }, 1419 | "source": [ 1420 | "loss, acc = classANN.evaluate(Xc_test, yc_test)\n", 1421 | "print(f'Accuracy : {acc*100} %')" 1422 | ], 1423 | "execution_count": 95, 1424 | "outputs": [ 1425 | { 1426 | "output_type": "stream", 1427 | "name": "stdout", 1428 | "text": [ 1429 | "50/50 [==============================] - 0s 3ms/step - loss: 0.0162 - accuracy: 0.9943\n", 1430 | "Accuracy : 99.42784309387207 %\n" 1431 | ] 1432 | } 1433 | ] 1434 | }, 1435 | { 1436 | "cell_type": "markdown", 1437 | "metadata": { 1438 | "id": "uslk5JVp_swo" 1439 | }, 1440 | "source": [ 1441 | "# Summary\n", 1442 | "\n", 1443 | "For Fault Detection, the ANN Model predicted the faults with an accuracy of 99.41% and for Fault Classification, the model was able to classify faults with an accuracy of 99.42%. " 1444 | ] 1445 | } 1446 | ] 1447 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Electrical Fault Detection and Classification using Line and Phase Currents and Voltages 2 | 3 | Electrical power plants require fault detection and operation of protection equipment in minimum possible time to remain stable. The faults on electrical power system transmission lines should be first detected and classified correctly, and repaired in the least possible time. The protection system used for a transmission line can also initiate the other relays to protect the power system from outages. A sound fault detection system provides a fast and secure relaying operation. Once trained on reliable data, an ANN-based fault detection system can help provide fast predictions for the presence of a fault and classify what kind of fault it is. Data for training the ANN was obtained from Kaggle. 4 | 5 | Fault Detection ANN Model: 6 | 7 | ![Fault Detection](https://github.com/IronVenom/Fault-Detection-and-Classification/blob/main/faultdetect.png) 8 | 9 | 10 | Fault Classification ANN Model: 11 | 12 | ![Fault Classification](https://github.com/IronVenom/Fault-Detection-and-Classification/blob/main/faultclass.png) 13 | 14 | For Fault Detection, the model predicted the faults with an accuracy of 99.41% and for Fault Classification, the model was able to classify faults with an accuracy of 99.42%. 15 | -------------------------------------------------------------------------------- /faultclass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronVenom/Fault-Detection-and-Classification/5fffdf48c3c3f2b4581fb5d096eed1f550d376e7/faultclass.png -------------------------------------------------------------------------------- /faultdetect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronVenom/Fault-Detection-and-Classification/5fffdf48c3c3f2b4581fb5d096eed1f550d376e7/faultdetect.png -------------------------------------------------------------------------------- /faults.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronVenom/Fault-Detection-and-Classification/5fffdf48c3c3f2b4581fb5d096eed1f550d376e7/faults.zip --------------------------------------------------------------------------------