{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.4"
},
"colab": {
"name": "FHR_tree_svm_ensemble.ipynb",
"provenance": []
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"85013890037d4eae9e46bce44ef6fe31": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_d1726335eb9847dcb8c408db31d29e39",
"_dom_classes": [],
"description": "Processing: ",
"_model_name": "IntProgressModel",
"bar_style": "",
"max": 13,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 3,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_c069b042d8ee4808a04e5a02388dbc89"
}
},
"d1726335eb9847dcb8c408db31d29e39": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "ProgressStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"bar_color": null,
"_model_module": "@jupyter-widgets/controls"
}
},
"c069b042d8ee4808a04e5a02388dbc89": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"8b11b69c85564a5fbd8a7656ff91e850": {
"model_module": "@jupyter-widgets/controls",
"model_name": "TextModel",
"state": {
"_view_name": "TextView",
"style": "IPY_MODEL_2016bba888b7450f96b6018d8100e534",
"_dom_classes": [],
"description": "",
"_model_name": "TextModel",
"placeholder": "",
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": "Following data types have been inferred automatically, if they are correct press enter to continue or type 'quit' otherwise.",
"_view_count": null,
"disabled": false,
"_view_module_version": "1.5.0",
"continuous_update": true,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_d82f871fd9494cd29198d0758cc3ddde"
}
},
"2016bba888b7450f96b6018d8100e534": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "DescriptionStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"_model_module": "@jupyter-widgets/controls"
}
},
"d82f871fd9494cd29198d0758cc3ddde": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": "100%",
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"04d55d6a1d1a482a9b7009586b58979b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_f09f1960e4254302a99b590ce733d608",
"_dom_classes": [],
"description": "Processing: ",
"_model_name": "IntProgressModel",
"bar_style": "",
"max": 176,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 172,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_fff4b352b5594f77bf468695d468f288"
}
},
"f09f1960e4254302a99b590ce733d608": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "ProgressStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"bar_color": null,
"_model_module": "@jupyter-widgets/controls"
}
},
"fff4b352b5594f77bf468695d468f288": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"1deea41a50a34193a4a1d4a53ef32286": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_aa38ef63b6d4402fabe4edb0d6419168",
"_dom_classes": [],
"description": "Processing: ",
"_model_name": "IntProgressModel",
"bar_style": "",
"max": 14,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 14,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_ed7d18dacd964948995dc160f99736cf"
}
},
"aa38ef63b6d4402fabe4edb0d6419168": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "ProgressStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"bar_color": null,
"_model_module": "@jupyter-widgets/controls"
}
},
"ed7d18dacd964948995dc160f99736cf": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"d73315df6042479586c9f7782ba8490b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_92b07214d46b4ae988829aeecd46b921",
"_dom_classes": [],
"description": "Processing: ",
"_model_name": "IntProgressModel",
"bar_style": "",
"max": 16,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 16,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_7b59664e0dc74453889dbcde7ddd4978"
}
},
"92b07214d46b4ae988829aeecd46b921": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "ProgressStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"bar_color": null,
"_model_module": "@jupyter-widgets/controls"
}
},
"7b59664e0dc74453889dbcde7ddd4978": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"aec1a6ff8c24465d9a90d427594eb11f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_35dcf7d2a35540f3a1b34b940cd8ea65",
"_dom_classes": [],
"description": "Processing: ",
"_model_name": "IntProgressModel",
"bar_style": "",
"max": 5,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 5,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_03c027fb02bb4deaa85d151a7a7ec702"
}
},
"6833484a36ba4c289e68a046d6c5f25e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_370b2c73f86b4ed5b7170fafb38beb34",
"_dom_classes": [],
"description": "Processing: ",
"_model_name": "IntProgressModel",
"bar_style": "",
"max": 5,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 5,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_5208c840b11e4922a587b09855e7b83a"
}
}
}
}
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "eoSVEnEpORn6",
"colab_type": "code",
"colab": {}
},
"source": [
"## Importing necessary libraries \n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "EJzIqSuqOU0O",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "a77ba090-ba0d-49e7-84de-26b63ccdc6b4"
},
"source": [
"## Installing our favourite pycaret library\n",
"!pip install pycaret"
],
"execution_count": 14,
"outputs": [
{
"output_type": "stream",
"text": [
"Collecting pycaret\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/91/ae/000d825af8f7d9ff86808600f220e7ad57a873987fd6119c87dc4c5b1d91/pycaret-2.0-py3-none-any.whl (255kB)\n",
"\u001b[K |████████████████████████████████| 256kB 2.8MB/s \n",
"\u001b[?25hCollecting lightgbm>=2.3.1\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/0b/9d/ddcb2f43aca194987f1a99e27edf41cf9bc39ea750c3371c2a62698c509a/lightgbm-2.3.1-py2.py3-none-manylinux1_x86_64.whl (1.2MB)\n",
"\u001b[K |████████████████████████████████| 1.2MB 8.7MB/s \n",
"\u001b[?25hCollecting datefinder>=0.7.0\n",
" Downloading https://files.pythonhosted.org/packages/0c/4f/29524c9ca35d2ba1a8a3c6c895b90fc92525cf0fe357f747133890953ebe/datefinder-0.7.1-py2.py3-none-any.whl\n",
"Requirement already satisfied: nltk in /usr/local/lib/python3.6/dist-packages (from pycaret) (3.2.5)\n",
"Requirement already satisfied: pandas in /usr/local/lib/python3.6/dist-packages (from pycaret) (1.0.5)\n",
"Collecting pyod\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/77/4e/5767edaccbfc227914ca774cb6ca9b628a08cbb59b9b4839296953a63d34/pyod-0.8.1.tar.gz (93kB)\n",
"\u001b[K |████████████████████████████████| 102kB 9.0MB/s \n",
"\u001b[?25hRequirement already satisfied: imbalanced-learn in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.4.3)\n",
"Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.6/dist-packages (from pycaret) (1.18.5)\n",
"Requirement already satisfied: spacy in /usr/local/lib/python3.6/dist-packages (from pycaret) (2.2.4)\n",
"Collecting kmodes>=0.10.1\n",
" Downloading https://files.pythonhosted.org/packages/b2/55/d8ec1ae1f7e1e202a8a4184c6852a3ee993b202b0459672c699d0ac18fc8/kmodes-0.10.2-py2.py3-none-any.whl\n",
"Collecting pyLDAvis\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/a5/3a/af82e070a8a96e13217c8f362f9a73e82d61ac8fff3a2561946a97f96266/pyLDAvis-2.1.2.tar.gz (1.6MB)\n",
"\u001b[K |████████████████████████████████| 1.6MB 13.0MB/s \n",
"\u001b[?25hRequirement already satisfied: xgboost>=0.90 in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.90)\n",
"Requirement already satisfied: IPython in /usr/local/lib/python3.6/dist-packages (from pycaret) (5.5.0)\n",
"Requirement already satisfied: wordcloud in /usr/local/lib/python3.6/dist-packages (from pycaret) (1.5.0)\n",
"Requirement already satisfied: joblib in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.16.0)\n",
"Collecting mlflow\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/00/2f/2529268d85af0a1521b0b7c137b63b731dff4784e1322fb3055403a959fb/mlflow-1.10.0-py3-none-any.whl (12.4MB)\n",
"\u001b[K |████████████████████████████████| 12.4MB 22.0MB/s \n",
"\u001b[?25hCollecting yellowbrick>=1.0.1\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/13/95/a14e4fdfb8b1c8753bbe74a626e910a98219ef9c87c6763585bbd30d84cf/yellowbrick-1.1-py3-none-any.whl (263kB)\n",
"\u001b[K |████████████████████████████████| 266kB 51.5MB/s \n",
"\u001b[?25hRequirement already satisfied: seaborn in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.10.1)\n",
"Collecting pandas-profiling>=2.3.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/b9/94/ef8ef4517540d13406fcc0b8adfd75336e014242c69bd4162ab46931f36a/pandas_profiling-2.8.0-py2.py3-none-any.whl (259kB)\n",
"\u001b[K |████████████████████████████████| 266kB 47.0MB/s \n",
"\u001b[?25hCollecting DateTime>=4.3\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/73/22/a5297f3a1f92468cc737f8ce7ba6e5f245fcfafeae810ba37bd1039ea01c/DateTime-4.3-py2.py3-none-any.whl (60kB)\n",
"\u001b[K |████████████████████████████████| 61kB 8.0MB/s \n",
"\u001b[?25hRequirement already satisfied: plotly>=4.4.1 in /usr/local/lib/python3.6/dist-packages (from pycaret) (4.4.1)\n",
"Collecting catboost\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/96/6c/6608210b29649267de52001b09e369777ee2a5cfe1c71fa75eba82a4f2dc/catboost-0.24-cp36-none-manylinux1_x86_64.whl (65.9MB)\n",
"\u001b[K |████████████████████████████████| 65.9MB 125kB/s \n",
"\u001b[?25hRequirement already satisfied: textblob in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.15.3)\n",
"Requirement already satisfied: mlxtend in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.14.0)\n",
"Requirement already satisfied: cufflinks>=0.17.0 in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.17.3)\n",
"Requirement already satisfied: gensim in /usr/local/lib/python3.6/dist-packages (from pycaret) (3.6.0)\n",
"Requirement already satisfied: ipywidgets in /usr/local/lib/python3.6/dist-packages (from pycaret) (7.5.1)\n",
"Collecting scikit-learn>=0.23\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/5c/a1/273def87037a7fb010512bbc5901c31cfddfca8080bc63b42b26e3cc55b3/scikit_learn-0.23.2-cp36-cp36m-manylinux1_x86_64.whl (6.8MB)\n",
"\u001b[K |████████████████████████████████| 6.8MB 50.2MB/s \n",
"\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from pycaret) (3.2.2)\n",
"Requirement already satisfied: umap-learn in /usr/local/lib/python3.6/dist-packages (from pycaret) (0.4.6)\n",
"Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from lightgbm>=2.3.1->pycaret) (1.4.1)\n",
"Requirement already satisfied: python-dateutil>=2.4.2 in /usr/local/lib/python3.6/dist-packages (from datefinder>=0.7.0->pycaret) (2.8.1)\n",
"Requirement already satisfied: regex>=2017.02.08 in /usr/local/lib/python3.6/dist-packages (from datefinder>=0.7.0->pycaret) (2019.12.20)\n",
"Requirement already satisfied: pytz in /usr/local/lib/python3.6/dist-packages (from datefinder>=0.7.0->pycaret) (2018.9)\n",
"Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from nltk->pycaret) (1.15.0)\n",
"Collecting combo\n",
" Downloading https://files.pythonhosted.org/packages/0a/2a/61b6ac584e75d8df16dc27962aa5fe99d76b09da5b6710e83d4862c84001/combo-0.1.1.tar.gz\n",
"Requirement already satisfied: numba>=0.35 in /usr/local/lib/python3.6/dist-packages (from pyod->pycaret) (0.48.0)\n",
"Collecting suod\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/a1/87/9170cabe1b5e10a7d095c0e28f2e30e7c1886a13f063de85d3cfacc06f4b/suod-0.0.4.tar.gz (2.1MB)\n",
"\u001b[K |████████████████████████████████| 2.1MB 39.7MB/s \n",
"\u001b[?25hRequirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (2.23.0)\n",
"Requirement already satisfied: wasabi<1.1.0,>=0.4.0 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (0.7.1)\n",
"Requirement already satisfied: thinc==7.4.0 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (7.4.0)\n",
"Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (1.0.2)\n",
"Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (49.2.0)\n",
"Requirement already satisfied: plac<1.2.0,>=0.9.6 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (1.1.3)\n",
"Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (2.0.3)\n",
"Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (4.41.1)\n",
"Requirement already satisfied: blis<0.5.0,>=0.4.0 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (0.4.1)\n",
"Requirement already satisfied: catalogue<1.1.0,>=0.0.7 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (1.0.0)\n",
"Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (3.0.2)\n",
"Requirement already satisfied: srsly<1.1.0,>=1.0.2 in /usr/local/lib/python3.6/dist-packages (from spacy->pycaret) (1.0.2)\n",
"Requirement already satisfied: wheel>=0.23.0 in /usr/local/lib/python3.6/dist-packages (from pyLDAvis->pycaret) (0.34.2)\n",
"Requirement already satisfied: jinja2>=2.7.2 in /usr/local/lib/python3.6/dist-packages (from pyLDAvis->pycaret) (2.11.2)\n",
"Requirement already satisfied: numexpr in /usr/local/lib/python3.6/dist-packages (from pyLDAvis->pycaret) (2.7.1)\n",
"Requirement already satisfied: pytest in /usr/local/lib/python3.6/dist-packages (from pyLDAvis->pycaret) (3.6.4)\n",
"Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from pyLDAvis->pycaret) (0.16.0)\n",
"Collecting funcy\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/ce/4b/6ffa76544e46614123de31574ad95758c421aae391a1764921b8a81e1eae/funcy-1.14.tar.gz (548kB)\n",
"\u001b[K |████████████████████████████████| 552kB 35.5MB/s \n",
"\u001b[?25hRequirement already satisfied: pickleshare in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (0.7.5)\n",
"Requirement already satisfied: pexpect; sys_platform != \"win32\" in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (4.8.0)\n",
"Requirement already satisfied: prompt-toolkit<2.0.0,>=1.0.4 in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (1.0.18)\n",
"Requirement already satisfied: decorator in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (4.4.2)\n",
"Requirement already satisfied: simplegeneric>0.8 in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (0.8.1)\n",
"Requirement already satisfied: pygments in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (2.1.3)\n",
"Requirement already satisfied: traitlets>=4.2 in /usr/local/lib/python3.6/dist-packages (from IPython->pycaret) (4.3.3)\n",
"Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from wordcloud->pycaret) (7.0.0)\n",
"Collecting azure-storage-blob>=12.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/6d/3d/31614573e8a197db12d8ab47a7fd813f15bd4a4b5c64e85d23b865de5b9b/azure_storage_blob-12.3.2-py2.py3-none-any.whl (280kB)\n",
"\u001b[K |████████████████████████████████| 286kB 48.9MB/s \n",
"\u001b[?25hRequirement already satisfied: protobuf>=3.6.0 in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (3.12.4)\n",
"Requirement already satisfied: cloudpickle in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (1.3.0)\n",
"Requirement already satisfied: entrypoints in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (0.3)\n",
"Collecting querystring-parser\n",
" Downloading https://files.pythonhosted.org/packages/4a/fa/f54f5662e0eababf0c49e92fd94bf178888562c0e7b677c8941bbbcd1bd6/querystring_parser-1.2.4.tar.gz\n",
"Collecting databricks-cli>=0.8.7\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/1e/57/5c2d6b83cb8753d12f548e89f91037632baa8289677c1b2ab2adf14bf6b2/databricks-cli-0.11.0.tar.gz (49kB)\n",
"\u001b[K |████████████████████████████████| 51kB 6.7MB/s \n",
"\u001b[?25hRequirement already satisfied: sqlparse in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (0.3.1)\n",
"Collecting gunicorn; platform_system != \"Windows\"\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/69/ca/926f7cd3a2014b16870086b2d0fdc84a9e49473c68a8dff8b57f7c156f43/gunicorn-20.0.4-py2.py3-none-any.whl (77kB)\n",
"\u001b[K |████████████████████████████████| 81kB 9.3MB/s \n",
"\u001b[?25hCollecting sqlalchemy<=1.3.13\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/af/47/35edeb0f86c0b44934c05d961c893e223ef27e79e1f53b5e6f14820ff553/SQLAlchemy-1.3.13.tar.gz (6.0MB)\n",
"\u001b[K |████████████████████████████████| 6.0MB 43.9MB/s \n",
"\u001b[?25hCollecting prometheus-flask-exporter\n",
" Downloading https://files.pythonhosted.org/packages/84/b0/7549899a75e7ef0be5f8969094d0709e5dcc51dc21d58cc86b8d69441dce/prometheus_flask_exporter-0.15.4.tar.gz\n",
"Collecting gorilla\n",
" Downloading https://files.pythonhosted.org/packages/e3/56/5a683944cbfc77e429c6f03c636ca50504a785f60ffae91ddd7f5f7bb520/gorilla-0.3.0-py2.py3-none-any.whl\n",
"Collecting docker>=4.0.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/3c/15/7a2f095a3b8b0fff9a0a5f56bd941e05fa958d4ca31105541001a5f7d3eb/docker-4.2.2-py2.py3-none-any.whl (144kB)\n",
"\u001b[K |████████████████████████████████| 153kB 51.0MB/s \n",
"\u001b[?25hCollecting gitpython>=2.1.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/f9/1e/a45320cab182bf1c8656107b3d4c042e659742822fc6bff150d769a984dd/GitPython-3.1.7-py3-none-any.whl (158kB)\n",
"\u001b[K |████████████████████████████████| 163kB 51.2MB/s \n",
"\u001b[?25hRequirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (3.13)\n",
"Requirement already satisfied: click>=7.0 in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (7.1.2)\n",
"Requirement already satisfied: Flask in /usr/local/lib/python3.6/dist-packages (from mlflow->pycaret) (1.1.2)\n",
"Collecting alembic\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/60/1e/cabc75a189de0fbb2841d0975243e59bde8b7822bacbb95008ac6fe9ad47/alembic-1.4.2.tar.gz (1.1MB)\n",
"\u001b[K |████████████████████████████████| 1.1MB 43.7MB/s \n",
"\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
" Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
" Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n",
"Requirement already satisfied: cycler>=0.10.0 in /usr/local/lib/python3.6/dist-packages (from yellowbrick>=1.0.1->pycaret) (0.10.0)\n",
"Collecting tangled-up-in-unicode>=0.0.6\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/4a/e2/e588ab9298d4989ce7fdb2b97d18aac878d99dbdc379a4476a09d9271b68/tangled_up_in_unicode-0.0.6-py3-none-any.whl (3.1MB)\n",
"\u001b[K |████████████████████████████████| 3.1MB 31.0MB/s \n",
"\u001b[?25hCollecting htmlmin>=0.1.12\n",
" Downloading https://files.pythonhosted.org/packages/b3/e7/fcd59e12169de19f0131ff2812077f964c6b960e7c09804d30a7bf2ab461/htmlmin-0.1.12.tar.gz\n",
"Collecting visions[type_image_path]==0.4.4\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/4a/03/5a45d542257830cf1d9da2cdc1c0bc6f55a9212937b70fdd6d7031b46d6c/visions-0.4.4-py3-none-any.whl (59kB)\n",
"\u001b[K |████████████████████████████████| 61kB 7.9MB/s \n",
"\u001b[?25hCollecting phik>=0.9.10\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/01/5a/7ef1c04ce62cd72f900c06298dc2385840550d5c653a0dbc19109a5477e6/phik-0.10.0-py3-none-any.whl (599kB)\n",
"\u001b[K |████████████████████████████████| 604kB 45.3MB/s \n",
"\u001b[?25hRequirement already satisfied: missingno>=0.4.2 in /usr/local/lib/python3.6/dist-packages (from pandas-profiling>=2.3.0->pycaret) (0.4.2)\n",
"Requirement already satisfied: astropy>=4.0 in /usr/local/lib/python3.6/dist-packages (from pandas-profiling>=2.3.0->pycaret) (4.0.1.post1)\n",
"Collecting confuse>=1.0.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/b5/6d/bedc0d1068bd244cee05843313cbec6cebb9f01f925538269bababc6d887/confuse-1.3.0-py2.py3-none-any.whl (64kB)\n",
"\u001b[K |████████████████████████████████| 71kB 9.4MB/s \n",
"\u001b[?25hCollecting zope.interface\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/57/33/565274c28a11af60b7cfc0519d46bde4125fcd7d32ebc0a81b480d0e8da6/zope.interface-5.1.0-cp36-cp36m-manylinux2010_x86_64.whl (234kB)\n",
"\u001b[K |████████████████████████████████| 235kB 53.2MB/s \n",
"\u001b[?25hRequirement already satisfied: retrying>=1.3.3 in /usr/local/lib/python3.6/dist-packages (from plotly>=4.4.1->pycaret) (1.3.3)\n",
"Requirement already satisfied: graphviz in /usr/local/lib/python3.6/dist-packages (from catboost->pycaret) (0.10.1)\n",
"Requirement already satisfied: colorlover>=0.2.1 in /usr/local/lib/python3.6/dist-packages (from cufflinks>=0.17.0->pycaret) (0.3.0)\n",
"Requirement already satisfied: smart-open>=1.2.1 in /usr/local/lib/python3.6/dist-packages (from gensim->pycaret) (2.1.0)\n",
"Requirement already satisfied: widgetsnbextension~=3.5.0 in /usr/local/lib/python3.6/dist-packages (from ipywidgets->pycaret) (3.5.1)\n",
"Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.6/dist-packages (from ipywidgets->pycaret) (4.10.1)\n",
"Requirement already satisfied: nbformat>=4.2.0 in /usr/local/lib/python3.6/dist-packages (from ipywidgets->pycaret) (5.0.7)\n",
"Collecting threadpoolctl>=2.0.0\n",
" Downloading https://files.pythonhosted.org/packages/f7/12/ec3f2e203afa394a149911729357aa48affc59c20e2c1c8297a60f33f133/threadpoolctl-2.1.0-py3-none-any.whl\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->pycaret) (1.2.0)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->pycaret) (2.4.7)\n",
"Requirement already satisfied: llvmlite<0.32.0,>=0.31.0dev0 in /usr/local/lib/python3.6/dist-packages (from numba>=0.35->pyod->pycaret) (0.31.0)\n",
"Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.13.0->spacy->pycaret) (3.0.4)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.13.0->spacy->pycaret) (2020.6.20)\n",
"Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.13.0->spacy->pycaret) (1.24.3)\n",
"Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.13.0->spacy->pycaret) (2.10)\n",
"Requirement already satisfied: importlib-metadata>=0.20; python_version < \"3.8\" in /usr/local/lib/python3.6/dist-packages (from catalogue<1.1.0,>=0.0.7->spacy->pycaret) (1.7.0)\n",
"Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.6/dist-packages (from jinja2>=2.7.2->pyLDAvis->pycaret) (1.1.1)\n",
"Requirement already satisfied: more-itertools>=4.0.0 in /usr/local/lib/python3.6/dist-packages (from pytest->pyLDAvis->pycaret) (8.4.0)\n",
"Requirement already satisfied: py>=1.5.0 in /usr/local/lib/python3.6/dist-packages (from pytest->pyLDAvis->pycaret) (1.9.0)\n",
"Requirement already satisfied: pluggy<0.8,>=0.5 in /usr/local/lib/python3.6/dist-packages (from pytest->pyLDAvis->pycaret) (0.7.1)\n",
"Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.6/dist-packages (from pytest->pyLDAvis->pycaret) (19.3.0)\n",
"Requirement already satisfied: atomicwrites>=1.0 in /usr/local/lib/python3.6/dist-packages (from pytest->pyLDAvis->pycaret) (1.4.0)\n",
"Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.6/dist-packages (from pexpect; sys_platform != \"win32\"->IPython->pycaret) (0.6.0)\n",
"Requirement already satisfied: wcwidth in /usr/local/lib/python3.6/dist-packages (from prompt-toolkit<2.0.0,>=1.0.4->IPython->pycaret) (0.2.5)\n",
"Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.6/dist-packages (from traitlets>=4.2->IPython->pycaret) (0.2.0)\n",
"Collecting azure-core<2.0.0,>=1.6.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/8b/00/efb68e2dda82139d732090fc3b7ff47fe6f34724ea7ba31e518a854b15c1/azure_core-1.7.0-py2.py3-none-any.whl (121kB)\n",
"\u001b[K |████████████████████████████████| 122kB 52.8MB/s \n",
"\u001b[?25hCollecting msrest>=0.6.10\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/d9/ed/8e1b75721ad983c1672cd968ad3ae374d2e94767edff6f0b72a15dfde933/msrest-0.6.18-py2.py3-none-any.whl (84kB)\n",
"\u001b[K |████████████████████████████████| 92kB 11.7MB/s \n",
"\u001b[?25hCollecting cryptography>=2.1.4\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/ba/91/84a29d6a27fd6dfc21f475704c4d2053d58ed7a4033c2b0ce1b4ca4d03d9/cryptography-3.0-cp35-abi3-manylinux2010_x86_64.whl (2.7MB)\n",
"\u001b[K |████████████████████████████████| 2.7MB 48.1MB/s \n",
"\u001b[?25hRequirement already satisfied: tabulate>=0.7.7 in /usr/local/lib/python3.6/dist-packages (from databricks-cli>=0.8.7->mlflow->pycaret) (0.8.7)\n",
"Requirement already satisfied: prometheus_client in /usr/local/lib/python3.6/dist-packages (from prometheus-flask-exporter->mlflow->pycaret) (0.8.0)\n",
"Collecting websocket-client>=0.32.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/4c/5f/f61b420143ed1c8dc69f9eaec5ff1ac36109d52c80de49d66e0c36c3dfdf/websocket_client-0.57.0-py2.py3-none-any.whl (200kB)\n",
"\u001b[K |████████████████████████████████| 204kB 48.0MB/s \n",
"\u001b[?25hCollecting gitdb<5,>=4.0.1\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/48/11/d1800bca0a3bae820b84b7d813ad1eff15a48a64caea9c823fc8c1b119e8/gitdb-4.0.5-py3-none-any.whl (63kB)\n",
"\u001b[K |████████████████████████████████| 71kB 9.4MB/s \n",
"\u001b[?25hRequirement already satisfied: Werkzeug>=0.15 in /usr/local/lib/python3.6/dist-packages (from Flask->mlflow->pycaret) (1.0.1)\n",
"Requirement already satisfied: itsdangerous>=0.24 in /usr/local/lib/python3.6/dist-packages (from Flask->mlflow->pycaret) (1.1.0)\n",
"Collecting python-editor>=0.3\n",
" Downloading https://files.pythonhosted.org/packages/c6/d3/201fc3abe391bbae6606e6f1d598c15d367033332bd54352b12f35513717/python_editor-1.0.4-py3-none-any.whl\n",
"Collecting Mako\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/a6/37/0e706200d22172eb8fa17d68a7ae22dec7631a0a92266634fb518a88a5b2/Mako-1.1.3-py2.py3-none-any.whl (75kB)\n",
"\u001b[K |████████████████████████████████| 81kB 10.8MB/s \n",
"\u001b[?25hRequirement already satisfied: networkx>=2.4 in /usr/local/lib/python3.6/dist-packages (from visions[type_image_path]==0.4.4->pandas-profiling>=2.3.0->pycaret) (2.4)\n",
"Collecting imagehash; extra == \"type_image_path\"\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/1a/5d/cc81830be3c4705a46cdbca74439b67f1017881383ba0127c41c4cecb7b3/ImageHash-4.1.0.tar.gz (291kB)\n",
"\u001b[K |████████████████████████████████| 296kB 52.4MB/s \n",
"\u001b[?25hRequirement already satisfied: boto in /usr/local/lib/python3.6/dist-packages (from smart-open>=1.2.1->gensim->pycaret) (2.49.0)\n",
"Requirement already satisfied: boto3 in /usr/local/lib/python3.6/dist-packages (from smart-open>=1.2.1->gensim->pycaret) (1.14.33)\n",
"Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.6/dist-packages (from widgetsnbextension~=3.5.0->ipywidgets->pycaret) (5.3.1)\n",
"Requirement already satisfied: tornado>=4.0 in /usr/local/lib/python3.6/dist-packages (from ipykernel>=4.5.1->ipywidgets->pycaret) (5.1.1)\n",
"Requirement already satisfied: jupyter-client in /usr/local/lib/python3.6/dist-packages (from ipykernel>=4.5.1->ipywidgets->pycaret) (5.3.5)\n",
"Requirement already satisfied: jupyter-core in /usr/local/lib/python3.6/dist-packages (from nbformat>=4.2.0->ipywidgets->pycaret) (4.6.3)\n",
"Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /usr/local/lib/python3.6/dist-packages (from nbformat>=4.2.0->ipywidgets->pycaret) (2.6.0)\n",
"Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.6/dist-packages (from importlib-metadata>=0.20; python_version < \"3.8\"->catalogue<1.1.0,>=0.0.7->spacy->pycaret) (3.1.0)\n",
"Collecting isodate>=0.6.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/9b/9f/b36f7774ff5ea8e428fdcfc4bb332c39ee5b9362ddd3d40d9516a55221b2/isodate-0.6.0-py2.py3-none-any.whl (45kB)\n",
"\u001b[K |████████████████████████████████| 51kB 7.4MB/s \n",
"\u001b[?25hRequirement already satisfied: requests-oauthlib>=0.5.0 in /usr/local/lib/python3.6/dist-packages (from msrest>=0.6.10->azure-storage-blob>=12.0->mlflow->pycaret) (1.3.0)\n",
"Requirement already satisfied: cffi!=1.11.3,>=1.8 in /usr/local/lib/python3.6/dist-packages (from cryptography>=2.1.4->azure-storage-blob>=12.0->mlflow->pycaret) (1.14.1)\n",
"Collecting smmap<4,>=3.0.1\n",
" Downloading https://files.pythonhosted.org/packages/b0/9a/4d409a6234eb940e6a78dfdfc66156e7522262f5f2fecca07dc55915952d/smmap-3.0.4-py2.py3-none-any.whl\n",
"Requirement already satisfied: PyWavelets in /usr/local/lib/python3.6/dist-packages (from imagehash; extra == \"type_image_path\"->visions[type_image_path]==0.4.4->pandas-profiling>=2.3.0->pycaret) (1.1.1)\n",
"Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/lib/python3.6/dist-packages (from boto3->smart-open>=1.2.1->gensim->pycaret) (0.10.0)\n",
"Requirement already satisfied: botocore<1.18.0,>=1.17.33 in /usr/local/lib/python3.6/dist-packages (from boto3->smart-open>=1.2.1->gensim->pycaret) (1.17.33)\n",
"Requirement already satisfied: s3transfer<0.4.0,>=0.3.0 in /usr/local/lib/python3.6/dist-packages (from boto3->smart-open>=1.2.1->gensim->pycaret) (0.3.3)\n",
"Requirement already satisfied: terminado>=0.8.1 in /usr/local/lib/python3.6/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (0.8.3)\n",
"Requirement already satisfied: nbconvert in /usr/local/lib/python3.6/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (5.6.1)\n",
"Requirement already satisfied: Send2Trash in /usr/local/lib/python3.6/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (1.5.0)\n",
"Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.6/dist-packages (from jupyter-client->ipykernel>=4.5.1->ipywidgets->pycaret) (19.0.2)\n",
"Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.6/dist-packages (from requests-oauthlib>=0.5.0->msrest>=0.6.10->azure-storage-blob>=12.0->mlflow->pycaret) (3.1.0)\n",
"Requirement already satisfied: pycparser in /usr/local/lib/python3.6/dist-packages (from cffi!=1.11.3,>=1.8->cryptography>=2.1.4->azure-storage-blob>=12.0->mlflow->pycaret) (2.20)\n",
"Requirement already satisfied: docutils<0.16,>=0.10 in /usr/local/lib/python3.6/dist-packages (from botocore<1.18.0,>=1.17.33->boto3->smart-open>=1.2.1->gensim->pycaret) (0.15.2)\n",
"Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.6/dist-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (1.4.2)\n",
"Requirement already satisfied: defusedxml in /usr/local/lib/python3.6/dist-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (0.6.0)\n",
"Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.6/dist-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (0.8.4)\n",
"Requirement already satisfied: testpath in /usr/local/lib/python3.6/dist-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (0.4.4)\n",
"Requirement already satisfied: bleach in /usr/local/lib/python3.6/dist-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (3.1.5)\n",
"Requirement already satisfied: packaging in /usr/local/lib/python3.6/dist-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (20.4)\n",
"Requirement already satisfied: webencodings in /usr/local/lib/python3.6/dist-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets->pycaret) (0.5.1)\n",
"Building wheels for collected packages: alembic\n",
" Building wheel for alembic (PEP 517) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for alembic: filename=alembic-1.4.2-cp36-none-any.whl size=159543 sha256=309fbef7b58de6f22d45967758ffe517a2963ef0741f4a541a87eb8a6ac48ba4\n",
" Stored in directory: /root/.cache/pip/wheels/1f/04/83/76023f7a4c14688c0b5c2682a96392cfdd3ee4449eaaa287ef\n",
"Successfully built alembic\n",
"Building wheels for collected packages: pyod, pyLDAvis, combo, suod, funcy, querystring-parser, databricks-cli, sqlalchemy, prometheus-flask-exporter, htmlmin, imagehash\n",
" Building wheel for pyod (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for pyod: filename=pyod-0.8.1-cp36-none-any.whl size=105653 sha256=41463c62ee01d31e88d6befa1b8a1c6535ea988713770f2885de476022c24c2b\n",
" Stored in directory: /root/.cache/pip/wheels/2e/ca/18/727e9d98a41f5f4385a97d5b429f3a9c8fbee13f9780c18642\n",
" Building wheel for pyLDAvis (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for pyLDAvis: filename=pyLDAvis-2.1.2-py2.py3-none-any.whl size=97711 sha256=6a63286df6295e0018bbb934b25549ef564ffce6b51024706765368a7ab9f999\n",
" Stored in directory: /root/.cache/pip/wheels/98/71/24/513a99e58bb6b8465bae4d2d5e9dba8f0bef8179e3051ac414\n",
" Building wheel for combo (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for combo: filename=combo-0.1.1-cp36-none-any.whl size=42111 sha256=49e5562899211ab1b3b8c05a843297e7b8c66c9e906af2319fb0d5c47e074113\n",
" Stored in directory: /root/.cache/pip/wheels/55/ec/e5/a2331372c676c467e70c6646e646edf6997d5c4905b8c0f5e6\n",
" Building wheel for suod (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for suod: filename=suod-0.0.4-cp36-none-any.whl size=2167157 sha256=21fcf9d4522bbf43b320fb71f72efccf1b482709ab1d85fe954f7de4c11a62bc\n",
" Stored in directory: /root/.cache/pip/wheels/57/55/e5/a4fca65bba231f6d0115059b589148774b41faea25b3f2aa27\n",
" Building wheel for funcy (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for funcy: filename=funcy-1.14-py2.py3-none-any.whl size=32042 sha256=c1ea9da984de369ccc7a10cf2828bc5ed8c26db59adbabf5217be546297ba163\n",
" Stored in directory: /root/.cache/pip/wheels/20/5a/d8/1d875df03deae6f178dfdf70238cca33f948ef8a6f5209f2eb\n",
" Building wheel for querystring-parser (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for querystring-parser: filename=querystring_parser-1.2.4-cp36-none-any.whl size=7079 sha256=0da67d12deb77e070027ff61d9b4d41455c514c8e0a1cd82a70486dcc41acda0\n",
" Stored in directory: /root/.cache/pip/wheels/1e/41/34/23ebf5d1089a9aed847951e0ee375426eb4ad0a7079d88d41e\n",
" Building wheel for databricks-cli (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for databricks-cli: filename=databricks_cli-0.11.0-cp36-none-any.whl size=90300 sha256=e22cba1e3e55d769750f7c28c4110c2e1f2cb9999a4377bbed550babc9a981ad\n",
" Stored in directory: /root/.cache/pip/wheels/63/d0/4f/3deeca1f4c47a6aca7c2c6a6e2bf272391565dc86a7718a59b\n",
" Building wheel for sqlalchemy (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for sqlalchemy: filename=SQLAlchemy-1.3.13-cp36-cp36m-linux_x86_64.whl size=1217157 sha256=4eb0a1dcc6b43c2a89bffdb95b3b380c876b852012f97e4b78b7bf196e785ac3\n",
" Stored in directory: /root/.cache/pip/wheels/b3/35/98/4c9cb3fd63d21d5606b972dd70643769745adf60e622467b71\n",
" Building wheel for prometheus-flask-exporter (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for prometheus-flask-exporter: filename=prometheus_flask_exporter-0.15.4-cp36-none-any.whl size=16454 sha256=d383c4d6f77b11d204000381eec6affc7aa3f9d354ec4650bc4a0729e296a1e1\n",
" Stored in directory: /root/.cache/pip/wheels/4f/b4/70/b18fa12c1c0a30fd542767dbbcdac225c6aae012fa1b3124e4\n",
" Building wheel for htmlmin (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for htmlmin: filename=htmlmin-0.1.12-cp36-none-any.whl size=27084 sha256=c11808ab108051c28e9a8ded5d08bc0aaa5d85f8445f2a3a4da75a705fbc0cf1\n",
" Stored in directory: /root/.cache/pip/wheels/43/07/ac/7c5a9d708d65247ac1f94066cf1db075540b85716c30255459\n",
" Building wheel for imagehash (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for imagehash: filename=ImageHash-4.1.0-py2.py3-none-any.whl size=291990 sha256=c868a432cb639fcd99048a8f991dcb15a2c391d1ef24fb10bd7fc407478680ef\n",
" Stored in directory: /root/.cache/pip/wheels/07/1c/dc/6831446f09feb8cc199ec73a0f2f0703253f6ae013a22f4be9\n",
"Successfully built pyod pyLDAvis combo suod funcy querystring-parser databricks-cli sqlalchemy prometheus-flask-exporter htmlmin imagehash\n",
"\u001b[31mERROR: pandas-profiling 2.8.0 has requirement tqdm>=4.43.0, but you'll have tqdm 4.41.1 which is incompatible.\u001b[0m\n",
"Installing collected packages: threadpoolctl, scikit-learn, lightgbm, datefinder, combo, suod, pyod, kmodes, funcy, pyLDAvis, azure-core, isodate, msrest, cryptography, azure-storage-blob, querystring-parser, databricks-cli, gunicorn, sqlalchemy, prometheus-flask-exporter, gorilla, websocket-client, docker, smmap, gitdb, gitpython, python-editor, Mako, alembic, mlflow, yellowbrick, tangled-up-in-unicode, htmlmin, imagehash, visions, phik, confuse, pandas-profiling, zope.interface, DateTime, catboost, pycaret\n",
" Found existing installation: scikit-learn 0.22.2.post1\n",
" Uninstalling scikit-learn-0.22.2.post1:\n",
" Successfully uninstalled scikit-learn-0.22.2.post1\n",
" Found existing installation: lightgbm 2.2.3\n",
" Uninstalling lightgbm-2.2.3:\n",
" Successfully uninstalled lightgbm-2.2.3\n",
" Found existing installation: SQLAlchemy 1.3.18\n",
" Uninstalling SQLAlchemy-1.3.18:\n",
" Successfully uninstalled SQLAlchemy-1.3.18\n",
" Found existing installation: yellowbrick 0.9.1\n",
" Uninstalling yellowbrick-0.9.1:\n",
" Successfully uninstalled yellowbrick-0.9.1\n",
" Found existing installation: pandas-profiling 1.4.1\n",
" Uninstalling pandas-profiling-1.4.1:\n",
" Successfully uninstalled pandas-profiling-1.4.1\n",
"Successfully installed DateTime-4.3 Mako-1.1.3 alembic-1.4.2 azure-core-1.7.0 azure-storage-blob-12.3.2 catboost-0.24 combo-0.1.1 confuse-1.3.0 cryptography-3.0 databricks-cli-0.11.0 datefinder-0.7.1 docker-4.2.2 funcy-1.14 gitdb-4.0.5 gitpython-3.1.7 gorilla-0.3.0 gunicorn-20.0.4 htmlmin-0.1.12 imagehash-4.1.0 isodate-0.6.0 kmodes-0.10.2 lightgbm-2.3.1 mlflow-1.10.0 msrest-0.6.18 pandas-profiling-2.8.0 phik-0.10.0 prometheus-flask-exporter-0.15.4 pyLDAvis-2.1.2 pycaret-2.0 pyod-0.8.1 python-editor-1.0.4 querystring-parser-1.2.4 scikit-learn-0.23.2 smmap-3.0.4 sqlalchemy-1.3.13 suod-0.0.4 tangled-up-in-unicode-0.0.6 threadpoolctl-2.1.0 visions-0.4.4 websocket-client-0.57.0 yellowbrick-1.1 zope.interface-5.1.0\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9ojSqYgIZf7s",
"colab_type": "text"
},
"source": [
"## Dataset Introduction:\n",
"Cardiotocography\n",
"Since we all know that there are numerous techniques available to observe the fetus and ultrasound technique is one of the common ones but this ultrasound technique is not very helpful to record the heart-rate of the fetus and other details such as uterine contractions. This is where the cardiotocography comes into play. Cardiotocography is the technique that helps doctors to trace the heart rate of the fetus, which includes measuring accelerations, decelerations, and variability, with the help of uterine contractions. Further, this cardiotocography can be used to classify fetus into three states namely:\n",
"* Normal trace\n",
"* Suspicious trace\n",
"* Pathological trace\n",
"\n",
"## Problem Statement\n",
"Fetal Pulse Rate and Uterine Contractions (UC) are among the basic and common diagnostic techniques to judge maternal and fetal well-being during pregnancy and before delivery. By observing the Cardiotocography data doctors can predict and observe the state of the fetus. Therefore we’ll use CTG data to predict the state of the fetus. \n",
"\n",
"Dataset link: https://www.kaggle.com/akshat0007/fetalhr"
]
},
{
"cell_type": "code",
"metadata": {
"id": "1pkwzPRqORn-",
"colab_type": "code",
"colab": {}
},
"source": [
"## Reading the dataset using pandas\n",
"df=pd.read_csv(\"CTG.csv\")"
],
"execution_count": 36,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "nfMRHcmwORoC",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 216
},
"outputId": "5f96bdfc-07b6-40fc-df7c-3c38652ef15c"
},
"source": [
"## Having a look of our data\n",
"df.head()"
],
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" FileName | \n",
" Date | \n",
" SegFile | \n",
" b | \n",
" e | \n",
" LBE | \n",
" LB | \n",
" AC | \n",
" FM | \n",
" UC | \n",
" ASTV | \n",
" MSTV | \n",
" ALTV | \n",
" MLTV | \n",
" DL | \n",
" DS | \n",
" DP | \n",
" DR | \n",
" Width | \n",
" Min | \n",
" Max | \n",
" Nmax | \n",
" Nzeros | \n",
" Mode | \n",
" Mean | \n",
" Median | \n",
" Variance | \n",
" Tendency | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" AD | \n",
" DE | \n",
" LD | \n",
" FS | \n",
" SUSP | \n",
" CLASS | \n",
" NSP | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Variab10.txt | \n",
" 12/1/1996 | \n",
" CTG0001.txt | \n",
" 240.0 | \n",
" 357.0 | \n",
" 120.0 | \n",
" 120.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 73.0 | \n",
" 0.5 | \n",
" 43.0 | \n",
" 2.4 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 64.0 | \n",
" 62.0 | \n",
" 126.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 120.0 | \n",
" 137.0 | \n",
" 121.0 | \n",
" 73.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 9.0 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 1 | \n",
" Fmcs_1.txt | \n",
" 5/3/1996 | \n",
" CTG0002.txt | \n",
" 5.0 | \n",
" 632.0 | \n",
" 132.0 | \n",
" 132.0 | \n",
" 4.0 | \n",
" 0.0 | \n",
" 4.0 | \n",
" 17.0 | \n",
" 2.1 | \n",
" 0.0 | \n",
" 10.4 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 130.0 | \n",
" 68.0 | \n",
" 198.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
" 141.0 | \n",
" 136.0 | \n",
" 140.0 | \n",
" 12.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2 | \n",
" Fmcs_1.txt | \n",
" 5/3/1996 | \n",
" CTG0003.txt | \n",
" 177.0 | \n",
" 779.0 | \n",
" 133.0 | \n",
" 133.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 5.0 | \n",
" 16.0 | \n",
" 2.1 | \n",
" 0.0 | \n",
" 13.4 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 130.0 | \n",
" 68.0 | \n",
" 198.0 | \n",
" 5.0 | \n",
" 1.0 | \n",
" 141.0 | \n",
" 135.0 | \n",
" 138.0 | \n",
" 13.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 3 | \n",
" Fmcs_1.txt | \n",
" 5/3/1996 | \n",
" CTG0004.txt | \n",
" 411.0 | \n",
" 1192.0 | \n",
" 134.0 | \n",
" 134.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 16.0 | \n",
" 2.4 | \n",
" 0.0 | \n",
" 23.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 117.0 | \n",
" 53.0 | \n",
" 170.0 | \n",
" 11.0 | \n",
" 0.0 | \n",
" 137.0 | \n",
" 134.0 | \n",
" 137.0 | \n",
" 13.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 4 | \n",
" Fmcs_1.txt | \n",
" 5/3/1996 | \n",
" CTG0005.txt | \n",
" 533.0 | \n",
" 1147.0 | \n",
" 132.0 | \n",
" 132.0 | \n",
" 4.0 | \n",
" 0.0 | \n",
" 5.0 | \n",
" 16.0 | \n",
" 2.4 | \n",
" 0.0 | \n",
" 19.9 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 117.0 | \n",
" 53.0 | \n",
" 170.0 | \n",
" 9.0 | \n",
" 0.0 | \n",
" 137.0 | \n",
" 136.0 | \n",
" 138.0 | \n",
" 11.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" FileName Date SegFile b ... FS SUSP CLASS NSP\n",
"0 Variab10.txt 12/1/1996 CTG0001.txt 240.0 ... 1.0 0.0 9.0 2.0\n",
"1 Fmcs_1.txt 5/3/1996 CTG0002.txt 5.0 ... 0.0 0.0 6.0 1.0\n",
"2 Fmcs_1.txt 5/3/1996 CTG0003.txt 177.0 ... 0.0 0.0 6.0 1.0\n",
"3 Fmcs_1.txt 5/3/1996 CTG0004.txt 411.0 ... 0.0 0.0 6.0 1.0\n",
"4 Fmcs_1.txt 5/3/1996 CTG0005.txt 533.0 ... 0.0 0.0 2.0 1.0\n",
"\n",
"[5 rows x 40 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 4
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hc0WTN3jORoF",
"colab_type": "text"
},
"source": [
"# Feature Abbreviations used in the dataset :-\n",
"\n",
"\n",
"\n",
"### FileName:\tof CTG examination\t\n",
"### Date:\tof the examination\t\n",
"### b:\tstart instant\t\n",
"### e:\tend instant\t\n",
"### LBE:\tbaseline value (medical expert)\t\n",
"### LB:\tbaseline value (SisPorto)\t\n",
"### AC:\taccelerations (SisPorto)\t\n",
"### FM:\tfoetal movement (SisPorto)\t\n",
"### UC:\tuterine contractions (SisPorto)\t\n",
"### ASTV:\tpercentage of time with abnormal short term variability (SisPorto)\t\n",
"### mSTV:\tmean value of short term variability (SisPorto)\t\n",
"### ALTV:\tpercentage of time with abnormal long term variability (SisPorto)\t\n",
"### mLTV:\tmean value of long term variability (SisPorto)\t\n",
"### DL:\tlight decelerations\t\n",
"### DS:\tsevere decelerations\t\n",
"### DP:\tprolongued decelerations\t\n",
"### DR:\trepetitive decelerations\t\n",
"### Width:\thistogram width\t\n",
"### Min:\tlow freq. of the histogram\t\n",
"### Max:\thigh freq. of the histogram\t\n",
"### Nmax:\tnumber of histogram peaks\t\n",
"### Nzeros:\tnumber of histogram zeros\t\n",
"### Mode:\thistogram mode\t\n",
"### Mean:\thistogram mean\t\n",
"### Median:\thistogram median\t\n",
"### Variance:\thistogram variance\t\n",
"### Tendency:\thistogram tendency: -1=left assymetric; 0=symmetric; 1=right assymetric\t\n",
"### A:\tcalm sleep\t\n",
"### B:\tREM sleep\t\n",
"### C:\tcalm vigilance\t\n",
"### D:\tactive vigilance\t\n",
"### SH:\tshift pattern (A or Susp with shifts)\t\n",
"### AD:\taccelerative/decelerative pattern (stress situation)\t\n",
"### DE:\tdecelerative pattern (vagal stimulation)\t\n",
"### LD:\tlargely decelerative pattern\t\n",
"### FS:\tflat-sinusoidal pattern (pathological state)\t\n",
"### SUSP:\tsuspect pattern\t\n",
"### CLASS:\tClass code (1 to 10) for classes A to SUSP\t\n",
"### NSP:\tNormal=1; Suspect=2; Pathologic=3\t\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "qS3F3sS9ORoG",
"colab_type": "code",
"colab": {}
},
"source": [
"## Dropping the columns which we don't need\n",
"df=df.drop([\"FileName\",\"Date\",\"SegFile\",\"b\",\"e\"],axis=1)"
],
"execution_count": 37,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "8_j3dXzCORoI",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 216
},
"outputId": "97ba0c46-aeb1-4170-be52-52bbfbc52df1"
},
"source": [
"df.head()"
],
"execution_count": 6,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" LBE | \n",
" LB | \n",
" AC | \n",
" FM | \n",
" UC | \n",
" ASTV | \n",
" MSTV | \n",
" ALTV | \n",
" MLTV | \n",
" DL | \n",
" DS | \n",
" DP | \n",
" DR | \n",
" Width | \n",
" Min | \n",
" Max | \n",
" Nmax | \n",
" Nzeros | \n",
" Mode | \n",
" Mean | \n",
" Median | \n",
" Variance | \n",
" Tendency | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" AD | \n",
" DE | \n",
" LD | \n",
" FS | \n",
" SUSP | \n",
" CLASS | \n",
" NSP | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 120.0 | \n",
" 120.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 73.0 | \n",
" 0.5 | \n",
" 43.0 | \n",
" 2.4 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 64.0 | \n",
" 62.0 | \n",
" 126.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 120.0 | \n",
" 137.0 | \n",
" 121.0 | \n",
" 73.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 9.0 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 1 | \n",
" 132.0 | \n",
" 132.0 | \n",
" 4.0 | \n",
" 0.0 | \n",
" 4.0 | \n",
" 17.0 | \n",
" 2.1 | \n",
" 0.0 | \n",
" 10.4 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 130.0 | \n",
" 68.0 | \n",
" 198.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
" 141.0 | \n",
" 136.0 | \n",
" 140.0 | \n",
" 12.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2 | \n",
" 133.0 | \n",
" 133.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 5.0 | \n",
" 16.0 | \n",
" 2.1 | \n",
" 0.0 | \n",
" 13.4 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 130.0 | \n",
" 68.0 | \n",
" 198.0 | \n",
" 5.0 | \n",
" 1.0 | \n",
" 141.0 | \n",
" 135.0 | \n",
" 138.0 | \n",
" 13.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 3 | \n",
" 134.0 | \n",
" 134.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 16.0 | \n",
" 2.4 | \n",
" 0.0 | \n",
" 23.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 117.0 | \n",
" 53.0 | \n",
" 170.0 | \n",
" 11.0 | \n",
" 0.0 | \n",
" 137.0 | \n",
" 134.0 | \n",
" 137.0 | \n",
" 13.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 4 | \n",
" 132.0 | \n",
" 132.0 | \n",
" 4.0 | \n",
" 0.0 | \n",
" 5.0 | \n",
" 16.0 | \n",
" 2.4 | \n",
" 0.0 | \n",
" 19.9 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 117.0 | \n",
" 53.0 | \n",
" 170.0 | \n",
" 9.0 | \n",
" 0.0 | \n",
" 137.0 | \n",
" 136.0 | \n",
" 138.0 | \n",
" 11.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" LBE LB AC FM UC ASTV ... DE LD FS SUSP CLASS NSP\n",
"0 120.0 120.0 0.0 0.0 0.0 73.0 ... 0.0 0.0 1.0 0.0 9.0 2.0\n",
"1 132.0 132.0 4.0 0.0 4.0 17.0 ... 0.0 0.0 0.0 0.0 6.0 1.0\n",
"2 133.0 133.0 2.0 0.0 5.0 16.0 ... 0.0 0.0 0.0 0.0 6.0 1.0\n",
"3 134.0 134.0 2.0 0.0 6.0 16.0 ... 0.0 0.0 0.0 0.0 6.0 1.0\n",
"4 132.0 132.0 4.0 0.0 5.0 16.0 ... 0.0 0.0 0.0 0.0 2.0 1.0\n",
"\n",
"[5 rows x 35 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2lTTiQ0LORoL",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 100
},
"outputId": "cebda70b-1bcd-493d-d00a-d73857a37c5b"
},
"source": [
"df.columns"
],
"execution_count": 7,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['LBE', 'LB', 'AC', 'FM', 'UC', 'ASTV', 'MSTV', 'ALTV', 'MLTV', 'DL',\n",
" 'DS', 'DP', 'DR', 'Width', 'Min', 'Max', 'Nmax', 'Nzeros', 'Mode',\n",
" 'Mean', 'Median', 'Variance', 'Tendency', 'A', 'B', 'C', 'D', 'E', 'AD',\n",
" 'DE', 'LD', 'FS', 'SUSP', 'CLASS', 'NSP'],\n",
" dtype='object')"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gK6s6aXbRxlZ",
"colab_type": "text"
},
"source": [
"## Performing some basic preprocessing techniques"
]
},
{
"cell_type": "code",
"metadata": {
"id": "W8hRcAhlORoQ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 33
},
"outputId": "ab1046ff-8419-4aa2-a36c-2bcc92c759d3"
},
"source": [
"## This will print the number of columns and rows\n",
"print(df.shape)"
],
"execution_count": 34,
"outputs": [
{
"output_type": "stream",
"text": [
"(2126, 35)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QW-KthkFORoT",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 619
},
"outputId": "1ee8f939-b347-45c0-91cb-cb9d24422e3b"
},
"source": [
"## Checking for the null values\n",
"df.isnull().sum()"
],
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LBE 3\n",
"LB 3\n",
"AC 3\n",
"FM 2\n",
"UC 2\n",
"ASTV 2\n",
"MSTV 2\n",
"ALTV 2\n",
"MLTV 2\n",
"DL 1\n",
"DS 1\n",
"DP 1\n",
"DR 1\n",
"Width 3\n",
"Min 3\n",
"Max 3\n",
"Nmax 3\n",
"Nzeros 3\n",
"Mode 3\n",
"Mean 3\n",
"Median 3\n",
"Variance 3\n",
"Tendency 3\n",
"A 3\n",
"B 3\n",
"C 3\n",
"D 3\n",
"E 3\n",
"AD 3\n",
"DE 3\n",
"LD 3\n",
"FS 3\n",
"SUSP 3\n",
"CLASS 3\n",
"NSP 3\n",
"dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "mJjIfadIORoW",
"colab_type": "code",
"colab": {}
},
"source": [
"## Dropping the the rows containing null values\n",
"df=df.dropna()"
],
"execution_count": 35,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "VojGGVKZORoY",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 619
},
"outputId": "528a202a-4a5a-43f2-c62c-604a5d7efb89"
},
"source": [
"df.isnull().sum()"
],
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LBE 0\n",
"LB 0\n",
"AC 0\n",
"FM 0\n",
"UC 0\n",
"ASTV 0\n",
"MSTV 0\n",
"ALTV 0\n",
"MLTV 0\n",
"DL 0\n",
"DS 0\n",
"DP 0\n",
"DR 0\n",
"Width 0\n",
"Min 0\n",
"Max 0\n",
"Nmax 0\n",
"Nzeros 0\n",
"Mode 0\n",
"Mean 0\n",
"Median 0\n",
"Variance 0\n",
"Tendency 0\n",
"A 0\n",
"B 0\n",
"C 0\n",
"D 0\n",
"E 0\n",
"AD 0\n",
"DE 0\n",
"LD 0\n",
"FS 0\n",
"SUSP 0\n",
"CLASS 0\n",
"NSP 0\n",
"dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "6w2Qld4GORoa",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 619
},
"outputId": "317d255a-6a28-45b4-d6d4-9a7c4681ccd3"
},
"source": [
"## Checking the data type of the columns\n",
"df.dtypes"
],
"execution_count": 12,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LBE float64\n",
"LB float64\n",
"AC float64\n",
"FM float64\n",
"UC float64\n",
"ASTV float64\n",
"MSTV float64\n",
"ALTV float64\n",
"MLTV float64\n",
"DL float64\n",
"DS float64\n",
"DP float64\n",
"DR float64\n",
"Width float64\n",
"Min float64\n",
"Max float64\n",
"Nmax float64\n",
"Nzeros float64\n",
"Mode float64\n",
"Mean float64\n",
"Median float64\n",
"Variance float64\n",
"Tendency float64\n",
"A float64\n",
"B float64\n",
"C float64\n",
"D float64\n",
"E float64\n",
"AD float64\n",
"DE float64\n",
"LD float64\n",
"FS float64\n",
"SUSP float64\n",
"CLASS float64\n",
"NSP float64\n",
"dtype: object"
]
},
"metadata": {
"tags": []
},
"execution_count": 12
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vCVQdQ9ZR3Mv",
"colab_type": "text"
},
"source": [
"## Importing the pycaret library"
]
},
{
"cell_type": "code",
"metadata": {
"id": "7oVTEnMxORod",
"colab_type": "code",
"colab": {}
},
"source": [
"# This command will basically import all the modules from pycaret that are necessary for classification tasks\n",
"from pycaret.classification import *"
],
"execution_count": 15,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "mmTt0qoaPb8B",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 918,
"referenced_widgets": [
"85013890037d4eae9e46bce44ef6fe31",
"d1726335eb9847dcb8c408db31d29e39",
"c069b042d8ee4808a04e5a02388dbc89",
"8b11b69c85564a5fbd8a7656ff91e850",
"2016bba888b7450f96b6018d8100e534",
"d82f871fd9494cd29198d0758cc3ddde"
]
},
"outputId": "9d1c6476-fffd-4d78-c678-b3a8c9ed1ace"
},
"source": [
"# Setting up the classifier\n",
"# Pass the complete dataset as data and the featured to be predicted as target\n",
"clf=setup(data=df,target='NSP')"
],
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"text": [
"Setup Succesfully Completed!\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
" | Description | Value |
\n",
" \n",
" 0 | \n",
" session_id | \n",
" 4471 | \n",
"
\n",
" \n",
" 1 | \n",
" Target Type | \n",
" Multiclass | \n",
"
\n",
" \n",
" 2 | \n",
" Label Encoded | \n",
" None | \n",
"
\n",
" \n",
" 3 | \n",
" Original Data | \n",
" (2126, 35) | \n",
"
\n",
" \n",
" 4 | \n",
" Missing Values | \n",
" False | \n",
"
\n",
" \n",
" 5 | \n",
" Numeric Features | \n",
" 23 | \n",
"
\n",
" \n",
" 6 | \n",
" Categorical Features | \n",
" 11 | \n",
"
\n",
" \n",
" 7 | \n",
" Ordinal Features | \n",
" False | \n",
"
\n",
" \n",
" 8 | \n",
" High Cardinality Features | \n",
" False | \n",
"
\n",
" \n",
" 9 | \n",
" High Cardinality Method | \n",
" None | \n",
"
\n",
" \n",
" 10 | \n",
" Sampled Data | \n",
" (2126, 35) | \n",
"
\n",
" \n",
" 11 | \n",
" Transformed Train Set | \n",
" (1488, 45) | \n",
"
\n",
" \n",
" 12 | \n",
" Transformed Test Set | \n",
" (638, 45) | \n",
"
\n",
" \n",
" 13 | \n",
" Numeric Imputer | \n",
" mean | \n",
"
\n",
" \n",
" 14 | \n",
" Categorical Imputer | \n",
" constant | \n",
"
\n",
" \n",
" 15 | \n",
" Normalize | \n",
" False | \n",
"
\n",
" \n",
" 16 | \n",
" Normalize Method | \n",
" None | \n",
"
\n",
" \n",
" 17 | \n",
" Transformation | \n",
" False | \n",
"
\n",
" \n",
" 18 | \n",
" Transformation Method | \n",
" None | \n",
"
\n",
" \n",
" 19 | \n",
" PCA | \n",
" False | \n",
"
\n",
" \n",
" 20 | \n",
" PCA Method | \n",
" None | \n",
"
\n",
" \n",
" 21 | \n",
" PCA Components | \n",
" None | \n",
"
\n",
" \n",
" 22 | \n",
" Ignore Low Variance | \n",
" False | \n",
"
\n",
" \n",
" 23 | \n",
" Combine Rare Levels | \n",
" False | \n",
"
\n",
" \n",
" 24 | \n",
" Rare Level Threshold | \n",
" None | \n",
"
\n",
" \n",
" 25 | \n",
" Numeric Binning | \n",
" False | \n",
"
\n",
" \n",
" 26 | \n",
" Remove Outliers | \n",
" False | \n",
"
\n",
" \n",
" 27 | \n",
" Outliers Threshold | \n",
" None | \n",
"
\n",
" \n",
" 28 | \n",
" Remove Multicollinearity | \n",
" False | \n",
"
\n",
" \n",
" 29 | \n",
" Multicollinearity Threshold | \n",
" None | \n",
"
\n",
" \n",
" 30 | \n",
" Clustering | \n",
" False | \n",
"
\n",
" \n",
" 31 | \n",
" Clustering Iteration | \n",
" None | \n",
"
\n",
" \n",
" 32 | \n",
" Polynomial Features | \n",
" False | \n",
"
\n",
" \n",
" 33 | \n",
" Polynomial Degree | \n",
" None | \n",
"
\n",
" \n",
" 34 | \n",
" Trignometry Features | \n",
" False | \n",
"
\n",
" \n",
" 35 | \n",
" Polynomial Threshold | \n",
" None | \n",
"
\n",
" \n",
" 36 | \n",
" Group Features | \n",
" False | \n",
"
\n",
" \n",
" 37 | \n",
" Feature Selection | \n",
" False | \n",
"
\n",
" \n",
" 38 | \n",
" Features Selection Threshold | \n",
" None | \n",
"
\n",
" \n",
" 39 | \n",
" Feature Interaction | \n",
" False | \n",
"
\n",
" \n",
" 40 | \n",
" Feature Ratio | \n",
" False | \n",
"
\n",
" \n",
" 41 | \n",
" Interaction Threshold | \n",
" None | \n",
"
\n",
" \n",
" 42 | \n",
" Fix Imbalance | \n",
" False | \n",
"
\n",
" \n",
" 43 | \n",
" Fix Imbalance Method | \n",
" SMOTE | \n",
"
\n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "5c5D_CcpP4pR",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 633,
"referenced_widgets": [
"04d55d6a1d1a482a9b7009586b58979b",
"f09f1960e4254302a99b590ce733d608",
"fff4b352b5594f77bf468695d468f288"
]
},
"outputId": "a4a72143-5ccf-4429-f9cd-af1da1210ab0"
},
"source": [
"# This model will be used to compare all the model along with the cross validation\n",
"compare_models()"
],
"execution_count": 18,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
" | Model | Accuracy | AUC | Recall | Prec. | F1 | Kappa | MCC | TT (Sec) |
\n",
" \n",
" 0 | \n",
" Extra Trees Classifier | \n",
" 0.9926 | \n",
" 0.0000 | \n",
" 0.9850 | \n",
" 0.9928 | \n",
" 0.9925 | \n",
" 0.9795 | \n",
" 0.9800 | \n",
" 0.6159 | \n",
"
\n",
" \n",
" 1 | \n",
" Extreme Gradient Boosting | \n",
" 0.9926 | \n",
" 0.0000 | \n",
" 0.9863 | \n",
" 0.9928 | \n",
" 0.9925 | \n",
" 0.9796 | \n",
" 0.9800 | \n",
" 0.4475 | \n",
"
\n",
" \n",
" 2 | \n",
" Random Forest Classifier | \n",
" 0.9913 | \n",
" 0.0000 | \n",
" 0.9818 | \n",
" 0.9914 | \n",
" 0.9911 | \n",
" 0.9758 | \n",
" 0.9763 | \n",
" 0.2814 | \n",
"
\n",
" \n",
" 3 | \n",
" Light Gradient Boosting Machine | \n",
" 0.9913 | \n",
" 0.0000 | \n",
" 0.9817 | \n",
" 0.9915 | \n",
" 0.9911 | \n",
" 0.9758 | \n",
" 0.9763 | \n",
" 0.3541 | \n",
"
\n",
" \n",
" 4 | \n",
" CatBoost Classifier | \n",
" 0.9913 | \n",
" 0.0000 | \n",
" 0.9818 | \n",
" 0.9915 | \n",
" 0.9911 | \n",
" 0.9758 | \n",
" 0.9763 | \n",
" 9.7183 | \n",
"
\n",
" \n",
" 5 | \n",
" Ada Boost Classifier | \n",
" 0.9879 | \n",
" 0.0000 | \n",
" 0.9777 | \n",
" 0.9882 | \n",
" 0.9877 | \n",
" 0.9665 | \n",
" 0.9672 | \n",
" 0.4853 | \n",
"
\n",
" \n",
" 6 | \n",
" Gradient Boosting Classifier | \n",
" 0.9879 | \n",
" 0.0000 | \n",
" 0.9763 | \n",
" 0.9881 | \n",
" 0.9877 | \n",
" 0.9666 | \n",
" 0.9672 | \n",
" 1.2628 | \n",
"
\n",
" \n",
" 7 | \n",
" Ridge Classifier | \n",
" 0.9859 | \n",
" 0.0000 | \n",
" 0.9689 | \n",
" 0.9862 | \n",
" 0.9855 | \n",
" 0.9604 | \n",
" 0.9615 | \n",
" 0.0282 | \n",
"
\n",
" \n",
" 8 | \n",
" Linear Discriminant Analysis | \n",
" 0.9859 | \n",
" 0.0000 | \n",
" 0.9689 | \n",
" 0.9862 | \n",
" 0.9855 | \n",
" 0.9604 | \n",
" 0.9615 | \n",
" 0.0674 | \n",
"
\n",
" \n",
" 9 | \n",
" Decision Tree Classifier | \n",
" 0.9805 | \n",
" 0.0000 | \n",
" 0.9692 | \n",
" 0.9815 | \n",
" 0.9805 | \n",
" 0.9472 | \n",
" 0.9476 | \n",
" 0.0355 | \n",
"
\n",
" \n",
" 10 | \n",
" Logistic Regression | \n",
" 0.9590 | \n",
" 0.0000 | \n",
" 0.9035 | \n",
" 0.9597 | \n",
" 0.9578 | \n",
" 0.8845 | \n",
" 0.8869 | \n",
" 0.2037 | \n",
"
\n",
" \n",
" 11 | \n",
" Naive Bayes | \n",
" 0.9429 | \n",
" 0.0000 | \n",
" 0.9651 | \n",
" 0.9567 | \n",
" 0.9463 | \n",
" 0.8580 | \n",
" 0.8658 | \n",
" 0.0160 | \n",
"
\n",
" \n",
" 12 | \n",
" SVM - Linear Kernel | \n",
" 0.9174 | \n",
" 0.0000 | \n",
" 0.7901 | \n",
" 0.9206 | \n",
" 0.9133 | \n",
" 0.7621 | \n",
" 0.7712 | \n",
" 0.0476 | \n",
"
\n",
" \n",
" 13 | \n",
" K Neighbors Classifier | \n",
" 0.9079 | \n",
" 0.0000 | \n",
" 0.7949 | \n",
" 0.9051 | \n",
" 0.9039 | \n",
" 0.7351 | \n",
" 0.7402 | \n",
" 0.0295 | \n",
"
\n",
" \n",
" 14 | \n",
" Quadratic Discriminant Analysis | \n",
" 0.8804 | \n",
" 0.0000 | \n",
" 0.9244 | \n",
" 0.9366 | \n",
" 0.8944 | \n",
" 0.7415 | \n",
" 0.7697 | \n",
" 0.0312 | \n",
"
\n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"OneVsRestClassifier(estimator=ExtraTreesClassifier(bootstrap=False,\n",
" ccp_alpha=0.0,\n",
" class_weight=None,\n",
" criterion='gini',\n",
" max_depth=None,\n",
" max_features='auto',\n",
" max_leaf_nodes=None,\n",
" max_samples=None,\n",
" min_impurity_decrease=0.0,\n",
" min_impurity_split=None,\n",
" min_samples_leaf=1,\n",
" min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0,\n",
" n_estimators=100, n_jobs=-1,\n",
" oob_score=False,\n",
" random_state=8450, verbose=0,\n",
" warm_start=False),\n",
" n_jobs=-1)"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jlbJqN8fS_fb",
"colab_type": "text"
},
"source": [
"### The AUC score is 0.000 because it is not supported for the muli-classification tasks\n",
"\n",
"### Also, from the above it is understood that Extreme Gradient Boosting(popularly known as XGBoost) model really performed well. So, we will proceed with Extreme Gradient Boosting model."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fXcVr-yCTtBx",
"colab_type": "text"
},
"source": [
"## Creating the Extreme Gradient Boosting(XGBoost) model"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Rvy2ZevaRQB4",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 273,
"referenced_widgets": [
"1deea41a50a34193a4a1d4a53ef32286",
"aa38ef63b6d4402fabe4edb0d6419168",
"ed7d18dacd964948995dc160f99736cf"
]
},
"outputId": "05eac637-6b6a-45f4-cdfd-1d9e15008faf"
},
"source": [
"xgboost_classifier=create_model('xgboost')"
],
"execution_count": 22,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
" | Accuracy | AUC | Recall | Prec. | F1 | Kappa | MCC |
\n",
" \n",
" 0 | \n",
" 0.9866 | \n",
" 0.0000 | \n",
" 0.9683 | \n",
" 0.9868 | \n",
" 0.9863 | \n",
" 0.9626 | \n",
" 0.9634 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.0000 | \n",
" 0.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.9799 | \n",
" 0.0000 | \n",
" 0.9524 | \n",
" 0.9804 | \n",
" 0.9792 | \n",
" 0.9432 | \n",
" 0.9450 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.9933 | \n",
" 0.0000 | \n",
" 0.9841 | \n",
" 0.9938 | \n",
" 0.9933 | \n",
" 0.9818 | \n",
" 0.9819 | \n",
"
\n",
" \n",
" 4 | \n",
" 1.0000 | \n",
" 0.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.9799 | \n",
" 0.0000 | \n",
" 0.9654 | \n",
" 0.9796 | \n",
" 0.9797 | \n",
" 0.9460 | \n",
" 0.9461 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.9933 | \n",
" 0.0000 | \n",
" 0.9971 | \n",
" 0.9936 | \n",
" 0.9934 | \n",
" 0.9824 | \n",
" 0.9826 | \n",
"
\n",
" \n",
" 7 | \n",
" 0.9732 | \n",
" 0.0000 | \n",
" 0.9333 | \n",
" 0.9740 | \n",
" 0.9719 | \n",
" 0.9235 | \n",
" 0.9266 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.9932 | \n",
" 0.0000 | \n",
" 0.9833 | \n",
" 0.9933 | \n",
" 0.9932 | \n",
" 0.9810 | \n",
" 0.9812 | \n",
"
\n",
" \n",
" 9 | \n",
" 1.0000 | \n",
" 0.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
"
\n",
" \n",
" Mean | \n",
" 0.9899 | \n",
" 0.0000 | \n",
" 0.9784 | \n",
" 0.9902 | \n",
" 0.9897 | \n",
" 0.9721 | \n",
" 0.9727 | \n",
"
\n",
" \n",
" SD | \n",
" 0.0091 | \n",
" 0.0000 | \n",
" 0.0219 | \n",
" 0.0090 | \n",
" 0.0095 | \n",
" 0.0257 | \n",
" 0.0248 | \n",
"
\n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ov9ni9O_TpsF",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 251
},
"outputId": "7e5e6e5b-664c-431f-bcc0-c1a60c517e75"
},
"source": [
"## Let's now check the model hyperparameters\n",
"print(xgboost_classifier)"
],
"execution_count": 23,
"outputs": [
{
"output_type": "stream",
"text": [
"OneVsRestClassifier(estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n",
" colsample_bylevel=1,\n",
" colsample_bynode=1,\n",
" colsample_bytree=1, gamma=0,\n",
" learning_rate=0.1, max_delta_step=0,\n",
" max_depth=3, min_child_weight=1,\n",
" missing=None, n_estimators=100,\n",
" n_jobs=-1, nthread=None,\n",
" objective='binary:logistic',\n",
" random_state=4471, reg_alpha=0,\n",
" reg_lambda=1, scale_pos_weight=1,\n",
" seed=None, silent=None, subsample=1,\n",
" verbosity=0),\n",
" n_jobs=-1)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mdZAVDx2UPfN",
"colab_type": "text"
},
"source": [
"## Tuning the hyperparametes for better performance"
]
},
{
"cell_type": "code",
"metadata": {
"id": "N2oq1DlCUKVU",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 273,
"referenced_widgets": [
"d73315df6042479586c9f7782ba8490b",
"92b07214d46b4ae988829aeecd46b921",
"7b59664e0dc74453889dbcde7ddd4978"
]
},
"outputId": "05d577e0-1b52-467d-bc5a-f1cec63be28c"
},
"source": [
"# Whenenver we compare different models or build a model, the model uses deault\n",
"#hyperparameter values. Hence, we need to tune our model to get better performance\n",
"\n",
"tuned_xgboost_classifier=tune_model(xgboost_classifier)"
],
"execution_count": 26,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
" | Accuracy | AUC | Recall | Prec. | F1 | Kappa | MCC |
\n",
" \n",
" 0 | \n",
" 0.9866 | \n",
" 0.0000 | \n",
" 0.9683 | \n",
" 0.9868 | \n",
" 0.9863 | \n",
" 0.9626 | \n",
" 0.9634 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.0000 | \n",
" 0.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.9799 | \n",
" 0.0000 | \n",
" 0.9524 | \n",
" 0.9804 | \n",
" 0.9792 | \n",
" 0.9432 | \n",
" 0.9450 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.9933 | \n",
" 0.0000 | \n",
" 0.9841 | \n",
" 0.9938 | \n",
" 0.9933 | \n",
" 0.9818 | \n",
" 0.9819 | \n",
"
\n",
" \n",
" 4 | \n",
" 1.0000 | \n",
" 0.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.9866 | \n",
" 0.0000 | \n",
" 0.9812 | \n",
" 0.9866 | \n",
" 0.9866 | \n",
" 0.9644 | \n",
" 0.9644 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.9933 | \n",
" 0.0000 | \n",
" 0.9971 | \n",
" 0.9936 | \n",
" 0.9934 | \n",
" 0.9824 | \n",
" 0.9826 | \n",
"
\n",
" \n",
" 7 | \n",
" 0.9799 | \n",
" 0.0000 | \n",
" 0.9500 | \n",
" 0.9804 | \n",
" 0.9792 | \n",
" 0.9433 | \n",
" 0.9451 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.9865 | \n",
" 0.0000 | \n",
" 0.9667 | \n",
" 0.9871 | \n",
" 0.9863 | \n",
" 0.9621 | \n",
" 0.9626 | \n",
"
\n",
" \n",
" 9 | \n",
" 1.0000 | \n",
" 0.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
" 1.0000 | \n",
"
\n",
" \n",
" Mean | \n",
" 0.9906 | \n",
" 0.0000 | \n",
" 0.9800 | \n",
" 0.9909 | \n",
" 0.9904 | \n",
" 0.9740 | \n",
" 0.9745 | \n",
"
\n",
" \n",
" SD | \n",
" 0.0075 | \n",
" 0.0000 | \n",
" 0.0187 | \n",
" 0.0073 | \n",
" 0.0077 | \n",
" 0.0210 | \n",
" 0.0204 | \n",
"
\n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nFWNkrBXU8Dr",
"colab_type": "text"
},
"source": [
"#### We can clearly conclude that our tuned model has performed better than our original model with default hyperparameters. The mean accuracy increased from 0.9899 to 0.9906\n",
"\n",
"#### pycaret library really makes the process of tuning hyperparameters easy\n",
"#### We just need to pass the model in the following command\n",
"#### tune_model(model_name)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "47ReN5fjWgyr",
"colab_type": "text"
},
"source": [
"## Plotting classification plots"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ow6SMWB0Wy4s",
"colab_type": "text"
},
"source": [
"## Classification Report"
]
},
{
"cell_type": "code",
"metadata": {
"id": "WqjMk3NAWfXf",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 401,
"referenced_widgets": [
"aec1a6ff8c24465d9a90d427594eb11f"
]
},
"outputId": "e7bf4228-8280-4e92-e2ac-5a92138e7503"
},
"source": [
"plot_model(tuned_xgboost_classifier,plot='class_report')"
],
"execution_count": 27,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgkAAAGACAYAAAAnNfF1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3yO9ePH8dd972gHsy1zaGLJ+ZyIpmS2GTkUq62TlPJNSIkUMgpJKhlSUgqhNEIhaqUcQo4jc8oMYwfHHex4/f7Yz53l2ii2Zd7Px8PDrutzXZ/r87k/u3e978913fdtMQzDQERERORvrKXdABEREflvUkgQERERUwoJIiIiYkohQUREREwpJIiIiIgphQQRERExpZAgGIbBZ599RpcuXQgJCaFDhw6MHDmSkydP/us64+LiaNSoEWfPnr2kLDw8nK+++qrQfaOiomjatCkhISG29nTu3JnFixf/6/YAfPnllwWWf/75Z8LCwujQoQPt27enb9++HDhwwNaGXr16XdXxzISEhJCcnExubi49e/YkICCA2NhY2/qrYRgGn376KZ07d6ZDhw4EBgYyatQozp07B8Arr7zCtGnTrkU3bHbs2EHv3r0BiI+PJygoiG7duhVY/29s376dPXv2ADBnzhwmTZp0TdoLEBAQQLt27Wy/X0FBQTz//PMkJSVds2MUJSsr66p/l0VKjCE3vHfeecfo0aOHkZCQYBiGYWRnZxsTJkwwOnXqZGRkZPzresPDw4358+cXWBcXF2c0adLEOHfuXKH7ff3118YTTzxRYN3BgweNFi1aGPv37/9XbUlMTDSCgoJsy9HR0Ya/v7+xefNmwzAMIy8vz5g/f77RsmVLIzk52bQN19KxY8eMunXrGllZWdeszgkTJhihoaHG8ePHDcMwjLS0NGPYsGHGww8/bOTl5RlDhw41pk6des2O93eLFi0yHn744WtS12uvvWYsXrz4mtT1d+3atTM2bdpkW87JyTFef/11Y9CgQcVyvL/bunVrsf5uiVxLmkm4wZ0+fZrPPvuMt99+m8qVKwNgb2/PkCFDcHJy4ptvvgHyX33Nnz+f0NBQ2rRpw/jx4211rF69mi5dutC+fXueeuop2wxE9+7dWbJkSYHjLVmyhMDAQNzc3Ni7dy9hYWHcd999BAcHM2fOnELb6efnh5+fH3v37gVg//79PPbYY3To0IEuXbqwc+dOANLS0ujXrx8dO3akffv2jBgxguzsbMLDwzl27BghISFkZWURGRnJgAEDaN68OQAWi4WwsDDeeustnJycChw7OTmZ3r17ExISQkBAAJ9++qmtbM6cOXTs2JGQkBBCQ0PZt29fkevr1KnD0aNHefzxx8nLy6NLly7s2bOHOnXqcPz4cQAWLFhgO9agQYM4f/48kD8T8Oabb9KlSxeWL19+yTjOnj2b8ePHU6lSJQBcXFwYOXIkTz/9NMbfPjNt69atdO/enZCQEDp16sS6desAyMnJYfjw4XTo0IGgoCD69+9Pampqoet/++03goKC2Lp1KxMnTmT37t107drVth7g/PnzvPzyywQEBNCxY0fb71RGRgYvvPACHTp0ICAggLfeeguAefPm8c033/D222/z6aefEhkZyfDhwwE4duwYvXv3vmR26ciRI7Rp04bPP/+cLl26cPfdd/Pdd98V+vt0MTs7O+69917bzIVhGEyZMoUOHTrQrl07xowZQ25uLpD/PJgxYwbdu3enVatWBWY4li9fTufOnQkJCaFnz54cPnwYgMjISEaMGEFoaCgfffQR/fv3Z9u2bTzyyCNX1D6RUlXaKUVK108//WR06NDBtCwyMtL26qpdu3bGoEGDjJycHOP48eNGgwYNjISEBOPw4cNGs2bNjNjYWMMwDGP69OnGgAEDDMMwjHPnzhlNmzY1jhw5YqszODjYWLt2rWEYhjFgwAAjKirKMAzDSElJMfr27WtkZmaavorfvHmz0axZMyM+Pt7Izc01goODjS+//NJW1qZNGyM7O9uYM2eO8corrxiGkT8jMnLkSGP37t3Ghg0bjMDAQMMw8l9h16lTx/aK28zFbXj99deNkSNHGoZhGIcPHzYaNGhgHDt2zDh37pxxxx132GZFvvvuO+Ojjz4qdL1hGEbt2rWNhIQEIz4+3qhXr57teBfWb9q0yWjdurWtba+99poxfvx4wzAMY+jQoUaXLl2M8+fPX9Len376qcBMiZmLZxI6d+5sLFu2zDCM/BmAC49NdHS00bNnTyMvL8/Iy8sz3nvvPWPNmjWFrr/4cb34Mbt4/dSpU40XXnjBMAzDSEhIMJo3b24cP37cmDlzpvH0008beXl5xunTp42WLVvaXuE/9thjtpmEyZMnG8OGDTMM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OvDPH3FyciqNQ8s/EGHElnYT5DI0RtcJrydKuwVSlMxMOBJT2q34TyqVkPC+XwAZCcmlcWi5AhdOPKMtdUq5JVKUCCNWY3QdiDBi+VHj9J9mqXIT5ZdOLtmD3nobWNP/+X55LpB27ZtTGF1uEBEREVMKCSIiImJKIUFERERMKSSIiIiIKYUEERERMaWQICIiIqYUEkRERMSUQoKIiIiYUkgQERERUwoJIiIiYkohQUREREwpJIiIiIgphQQRERExpZAgIiIiphQSRERExJRCgoiIiJhSSBARERFTCgkiIiJiSiFBRERETCkkiIiIiCmFBBERETGlkCAiIiKmFBJERETElEKCiIiImFJIEBEREVMKCSIiImJKIUFERERMKSSIiIiIKYUEERERMaWQICIiIqYUEkRERMSUQoKIiIiYUkgQERERUwoJIiIiYsq+tBsgIiJyo7F41sLikP3P98t2gLRiaFAhNJMgIiIipjSTICIiUoaMGzeO7du3Y7FYGDZsGI0bN7aVbdiwgXfffRer1Yqfnx9jx47Fai18vkAzCSIiImXExo0biYuLY8GCBYwdO5axY8cWKB85ciSTJ09m/vz5pKWl8csvvxRZn0KCiIhIGbF+/XoCAwMBqFmzJmfOnCE1NdVWHhUVReXKlQHw8vLi1KlTRdankCAiIlJGJCcn4+npaVv28vIiKSnJtuzm5gZAYmIia9eupW3btkXWp5AgIiJSRhmGccm6lJQUnn32WSIiIgoECjMKCSIiImWEj48PycnJtuXExEQqVqxoW05NTeWZZ57hhRdeoE2bNpetTyFBRESkjPD392flypUA7Nq1Cx8fH9slBoDx48fzxBNPcM8991xRfXoLpIiISBlx++2306BBA8LDw7FYLERERBAVFYW7uztt2rRh8eLFxMXFsXDhQgA6d+5MWFhYofUpJIiIiJQhgwcPLrBct25d288xMTH/qC6FhL+p0a4VwRNfxtHNhdNxx/jmyVc5d/REgW1qdribwPEv4VzBncRd+1n0+MucP3UGi50dQW8NptZ992JfzolNU+aybuJMANyr+nDf9NF43VYdi8XCb+9/zubp80qji9e94hojr1o16Dx9NO5VfcjNzmb9xE/Y/vni0uhimVBc4/RE9Od43lqN7PTztno+b/8E544llmj/bgTendrS5NuPWFcjgOzkU9SOHEH5u27H6mDPwZGTOTF3CU7VqtD0+08K7Od8SxViwl4kZVl0KbVcrhXdk3ARB5dyhM5/lyVPj2BKnRD2Lo2m8/TRBbZxucmTHvPeYXGvV3jfrz2JO2IJfvtlAJo/8xA339mE6U27Mb1xV5o+1YNb2jQHoPOHr5Pw+y6m1e/EZwFPEDDuRbxr+5V4H693xTlG3T59k90LVzK1XkfmBPcm+J1X8KpVo6S7WCYU5zgBLOo5lKn1Otr+KSBce9ZyztQc/xLZKfnvo6/x2nNYXV34rV5HttzzKLdNGIJzDV8y4xP4rV5H27/tHXqTeeQ4p1avK+UeyLVwRSFh7969BAYGMmfOnEvK1q1bR2hoKGFhYUydOvWaN7Ak+QW04tTBeI5v3Q3A1k++pmawP45urrZtfFs34+S+OE5s3wPA+vdmUa9HMAC3Bt3Fzi+WkZuZRebZVLZ9GkW9Hh0A+P3DBfz2/ucApCYkcvrPI9xU79aS7F6ZUJxjVKlRbf78YT0AqceTSNn7JxXr1yzJ7pUZxTlOUjL8Rg3g+Owl5JzL/zYhr6C7OD4rCgyDzKMnSFq8mpu6tb9kv5oThnDojQ/IO59Z0k2WYnDZkJCens4bb7xB69atTcvHjBlDZGQk8+bNY+3atezfv/+aN7KkeNeuwckD8bbl7LR00lNO43XbLX9tZBhY7KwXbZOBc4XylPP2xDAMrBeVZaWm2/bduyya86fPAlC+WhW8a9cgYcvuYu5R2VOcY3Twh/U0DO8EFgvetf2oUMOXIxu2F3+nyqDiHCeA1oOepM+WRfxv2zc06x1avJ25Abk2rI1X0F3EvzfLts4wDLCzsy3npqbjcvF4Aq4NauF+e32Oz11SUk2VYnbZkODo6MiMGTPw8fG5pCw+Ph4PDw+qVKmC1Wqlbdu2rF+/vlgaWhIcXMqR+7f0m5ORiYOri205fv02vGvVwC+gFZD/xyo3Oxt7Z0cOrlpHs96hOHm4U86rAo0f74q9s1OB+pw83Hno60h+GfchZ+MTir9TZUxxjtHKF8bRrHcoLydv4Lnd37JmzAeknUhG/rniHKd93/7MtllRfHT7A0Q98hLtxw2i+j0tSq5zN4A600ezd8AYjJwc27pTq9bh2+9RrE6OOFWrQsUHArH+7e/bLUN6Ez/pMzD5AB+5Pl32xkV7e3vs7c03S0pKwsvLy7bs5eVFfHy86bbXg6y0dOz+9kvv4OJMVupfX96dkXKKrx56gaC3X8bqYM/WjxeSk5FJ5plUtnz8FV41b+Hp374iNSGRg6vWFZiudq10E48un8HeJT/y65sflli/ypLiHKOHoiKJHjmZ7Z8twv3mSjy5Zi7Ht+7myIZtJdrHsqA4x+nCDYwASbv3EzP/W2rddy9xazaVTOfKuKp9wkjfvZ8za38vsP7PN6ZRe/IIWu5YQvr+w6QsX4ORlW0rtzg6UPH+QPYPfqukmyzFSDcuXiR5z8ECU5pO5d1w9vTg5L64AtsdWPkLHzXvzvTGXdmzeDXpKafJSk3DyM1l1csTmFo3hM/a9SQvJ5fEnXsBcHR35bGVM9nx+WJ+GhVZov0qS4prjMp5e1K1eUN2zl0KwLmjJ4hft7XAzXJy5YprnCxWK5Ua1ylQh9XenrzsbOTauKlbe27q1h7/hF/xT/gV52pVuGPTQsq3bMyep4ezoU4IO+7rg52bK6n///cNwPPeO0n74wDZyUV/YZBcX64qJPz94x9PnDhhelnienEo+jcqVK9KNf/8E0OrF3uxd1k02ekZtm0c3V3pt2cF5atVAeCe155j+6woABo90oUe894FiwW3Kj407fUAO/7/pBMw5gUO/biBDZM+K+FelS3FNUYZJ0+TlphC7S7tAHCuUJ5qdzUjMWZfCfewbCjO59LDyz6kfmgIAOV9K1OvexB7v/25JLtXpu24rw+/VrqLtVXasLZKG87HJ7C5RSjlWzbmtolDAXCpVxOvwNYkf/ODbT+3JnVJ/+NAaTVbislVfU6Cr68vqampHDlyhMqVKxMdHc3EiROvVdtKXM75TBaGD6LT1JE4upbj5P7DLO71Cu5VfXhs5Uw+aNSFrHNpbHhvFr1+noPFauHgqnX8Mi7/0sGexaup1yOY5w+sJi8nh9WvvMOpA4cBaP6/cM4dS+S2jn99FOaGSZ/x+4fzS6Wv16viHKMvQ58neOJQ2r/5EhYLbJu1iP0r1pRmd69bxTpO3QfQMXIE7ca8QF52Nj8On8SR9VtLs7s3hIRZUTSc/x6tD6wmN+M8u3sOJefMOVu5k28lMo/rHp6yxmKYfUXURWJiYnjrrbc4evQo9vb2VKpUiYCAAHx9fQkKCmLTpk22YBAcHEzv3r0LrSszM5OYmBh+6PI8GQn6ZfqvijBiARhtqXOZLaU0RRixGqPrQIQRy48ap/80S5WbKL90Mg0bNsTJyenyO1yFC+fBhr6xODn888tkmdkOxBypUyJthSuYSWjYsCGzZ88utLxFixYsWLDgmjZKRERESp9uXBQRERFTCgkiIiJiSiFBRERETCkkiIiIiCmFBBERETGlkCAiIiKmFBJERETElEKCiIiImFJIEBEREVMKCSIiImJKIUFERERMKSSIiIiIqav6qmgRERH5FyrUgX/zJY6ZwJFr3ZjCaSZBRERETCkkiIiIiCmFBBERETGlkCAiIiKmFBJERETElEKCiIiImFJIEBEREVMKCSIiImJKIUFERERMKSSIiIiIKYUEERERMaWQICIiIqYUEkRERMSUQoKIiIiYUkgQERERUwoJIiIiYkohQUREREwpJIiIiIgphQQRERExpZAgIiIiphQSRERExJRCgoiIiJhSSBARERFTCgkiIiJiSiFBRERETCkkiIiIiCmFBBERETGlkCAiIiKmFBJERETElEKCiIiImFJIEBERKUPGjRtHWFgY4eHh7Nixo0DZunXrCA0NJSwsjKlTp162LoUEERGRMmLjxo3ExcWxYMECxo4dy9ixYwuUjxkzhsjISObNm8fatWvZv39/kfUpJIiIiJQR69evJzAwEICaNWty5swZUlNTAYiPj8fDw4MqVapgtVpp27Yt69evL7I++2Jv8UUMwwCgb+wKHB0dS/LQ8g9kZmYC8Mr5HZfZUkpTZmamxug6kJmZib/G6T8tKyuLvXv32s5RJSE7u3j2S05OpkGDBrZlLy8vkpKScHNzIykpCS8vrwJl8fHxRdZXoiEh+/97t3fv3pI8rIiIyGVlZ2fj7OxcrMews7PDzs6O2Njcq67jSlxt8CnRkODq6krt2rVxcHDAYrGU5KFFRERMGYZBdnY2rq6uxX4se3t7GjZsSG7u1YUEe3vz07ePjw/Jycm25cTERCpWrGhaduLECXx8fIpu779u5b9gtVpxd3cvyUOKiIhcVnHPIFzM3t6+0JP81fL39ycyMpLw8HB27dqFj48Pbm5uAPj6+pKamsqRI0eoXLky0dHRTJw4scj6LEZJXoQRERGRYjVx4kQ2b96MxWIhIiKC3bt34+7uTlBQEJs2bbIFg+DgYHr37l1kXQoJIiIiYkpvgRQRERFTCgkiIiJiSiFBRERETCkklCDd/vHfkZWVVdpNECnT8vLySrsJ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\n",
"text/plain": [
"