├── README.md ├── LICENSE ├── Cognitive_Customer_Insights_with_Watson_AI_py.ipynb └── modeltraining.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Cognitive-Customer-Insights-with-Watson-AI-Leveraging-AI-for-Enhanced-Customer-Engagement -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Farha Kousar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Cognitive_Customer_Insights_with_Watson_AI_py.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "metadata": { 17 | "colab": { 18 | "base_uri": "https://localhost:8080/", 19 | "height": 1000 20 | }, 21 | "id": "PKm_jVDghIKn", 22 | "outputId": "80627502-e309-4953-da05-68b4d474bb97" 23 | }, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (2.2.2)\n", 30 | "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (1.26.4)\n", 31 | "Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (3.10.0)\n", 32 | "Requirement already satisfied: seaborn in /usr/local/lib/python3.11/dist-packages (0.13.2)\n", 33 | "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (1.6.1)\n", 34 | "Collecting ibm-watson-machine-learning\n", 35 | " Downloading ibm_watson_machine_learning-1.0.367-py3-none-any.whl.metadata (4.5 kB)\n", 36 | "Collecting flask-ngrok\n", 37 | " Downloading flask_ngrok-0.0.25-py3-none-any.whl.metadata (1.8 kB)\n", 38 | "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas) (2.8.2)\n", 39 | "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.1)\n", 40 | "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.1)\n", 41 | "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.3.1)\n", 42 | "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (0.12.1)\n", 43 | "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (4.56.0)\n", 44 | "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.4.8)\n", 45 | "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (24.2)\n", 46 | "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (11.1.0)\n", 47 | "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (3.2.1)\n", 48 | "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.13.1)\n", 49 | "Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.4.2)\n", 50 | "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (3.5.0)\n", 51 | "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from ibm-watson-machine-learning) (2.32.3)\n", 52 | "Requirement already satisfied: urllib3 in /usr/local/lib/python3.11/dist-packages (from ibm-watson-machine-learning) (2.3.0)\n", 53 | "Collecting pandas\n", 54 | " Downloading pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (18 kB)\n", 55 | "Requirement already satisfied: certifi in /usr/local/lib/python3.11/dist-packages (from ibm-watson-machine-learning) (2025.1.31)\n", 56 | "Collecting lomond (from ibm-watson-machine-learning)\n", 57 | " Downloading lomond-0.3.3-py2.py3-none-any.whl.metadata (4.1 kB)\n", 58 | "Requirement already satisfied: tabulate in /usr/local/lib/python3.11/dist-packages (from ibm-watson-machine-learning) (0.9.0)\n", 59 | "Collecting ibm-cos-sdk<2.14.0,>=2.12.0 (from ibm-watson-machine-learning)\n", 60 | " Downloading ibm-cos-sdk-2.13.6.tar.gz (58 kB)\n", 61 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.6/58.6 kB\u001b[0m \u001b[31m5.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 62 | "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", 63 | "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.11/dist-packages (from ibm-watson-machine-learning) (8.6.1)\n", 64 | "Requirement already satisfied: Flask>=0.8 in /usr/local/lib/python3.11/dist-packages (from flask-ngrok) (3.1.0)\n", 65 | "Requirement already satisfied: Werkzeug>=3.1 in /usr/local/lib/python3.11/dist-packages (from Flask>=0.8->flask-ngrok) (3.1.3)\n", 66 | "Requirement already satisfied: Jinja2>=3.1.2 in /usr/local/lib/python3.11/dist-packages (from Flask>=0.8->flask-ngrok) (3.1.5)\n", 67 | "Requirement already satisfied: itsdangerous>=2.2 in /usr/local/lib/python3.11/dist-packages (from Flask>=0.8->flask-ngrok) (2.2.0)\n", 68 | "Requirement already satisfied: click>=8.1.3 in /usr/local/lib/python3.11/dist-packages (from Flask>=0.8->flask-ngrok) (8.1.8)\n", 69 | "Requirement already satisfied: blinker>=1.9 in /usr/local/lib/python3.11/dist-packages (from Flask>=0.8->flask-ngrok) (1.9.0)\n", 70 | "Collecting ibm-cos-sdk-core==2.13.6 (from ibm-cos-sdk<2.14.0,>=2.12.0->ibm-watson-machine-learning)\n", 71 | " Downloading ibm-cos-sdk-core-2.13.6.tar.gz (1.1 MB)\n", 72 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m45.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 73 | "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", 74 | "Collecting ibm-cos-sdk-s3transfer==2.13.6 (from ibm-cos-sdk<2.14.0,>=2.12.0->ibm-watson-machine-learning)\n", 75 | " Downloading ibm-cos-sdk-s3transfer-2.13.6.tar.gz (139 kB)\n", 76 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.5/139.5 kB\u001b[0m \u001b[31m15.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 77 | "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", 78 | "Collecting jmespath<=1.0.1,>=0.10.0 (from ibm-cos-sdk<2.14.0,>=2.12.0->ibm-watson-machine-learning)\n", 79 | " Downloading jmespath-1.0.1-py3-none-any.whl.metadata (7.6 kB)\n", 80 | "Collecting python-dateutil>=2.7 (from matplotlib)\n", 81 | " Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)\n", 82 | "Collecting requests (from ibm-watson-machine-learning)\n", 83 | " Downloading requests-2.32.2-py3-none-any.whl.metadata (4.6 kB)\n", 84 | "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)\n", 85 | "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->ibm-watson-machine-learning) (3.4.1)\n", 86 | "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->ibm-watson-machine-learning) (3.10)\n", 87 | "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata->ibm-watson-machine-learning) (3.21.0)\n", 88 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from Jinja2>=3.1.2->Flask>=0.8->flask-ngrok) (3.0.2)\n", 89 | "Downloading ibm_watson_machine_learning-1.0.367-py3-none-any.whl (1.3 MB)\n", 90 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m64.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 91 | "\u001b[?25hDownloading pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.2 MB)\n", 92 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.2/12.2 MB\u001b[0m \u001b[31m85.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 93 | "\u001b[?25hDownloading flask_ngrok-0.0.25-py3-none-any.whl (3.1 kB)\n", 94 | "Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)\n", 95 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m229.9/229.9 kB\u001b[0m \u001b[31m20.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 96 | "\u001b[?25hDownloading requests-2.32.2-py3-none-any.whl (63 kB)\n", 97 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m63.9/63.9 kB\u001b[0m \u001b[31m6.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 98 | "\u001b[?25hDownloading lomond-0.3.3-py2.py3-none-any.whl (35 kB)\n", 99 | "Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)\n", 100 | "Building wheels for collected packages: ibm-cos-sdk, ibm-cos-sdk-core, ibm-cos-sdk-s3transfer\n", 101 | " Building wheel for ibm-cos-sdk (setup.py) ... \u001b[?25l\u001b[?25hdone\n", 102 | " Created wheel for ibm-cos-sdk: filename=ibm_cos_sdk-2.13.6-py3-none-any.whl size=77231 sha256=5962b7d6e3dae97da963f30f1cd98b143f4814219518a8dc46ed4353c312d5a7\n", 103 | " Stored in directory: /root/.cache/pip/wheels/17/8c/76/f9472a53a2a80da414dd53ca55f08dbfe48ed6de76e51e3d5f\n", 104 | " Building wheel for ibm-cos-sdk-core (setup.py) ... \u001b[?25l\u001b[?25hdone\n", 105 | " Created wheel for ibm-cos-sdk-core: filename=ibm_cos_sdk_core-2.13.6-py3-none-any.whl size=661459 sha256=5edd2d9b0c21aa620060bf9fba7389c64ed976a108240a60a0c96f2019a30bec\n", 106 | " Stored in directory: /root/.cache/pip/wheels/ec/8e/58/e0fdc8135343f394de9c98a48ed20adf698600e01b16ea46bc\n", 107 | " Building wheel for ibm-cos-sdk-s3transfer (setup.py) ... \u001b[?25l\u001b[?25hdone\n", 108 | " Created wheel for ibm-cos-sdk-s3transfer: filename=ibm_cos_sdk_s3transfer-2.13.6-py3-none-any.whl size=90204 sha256=93cd7f3da57b85a5eb72b339522924d105db560a139fae5e7f11e8142fd3239e\n", 109 | " Stored in directory: /root/.cache/pip/wheels/52/71/63/176f15a501fd18265938e1c0b2928f9f380b96e3fc15680c80\n", 110 | "Successfully built ibm-cos-sdk ibm-cos-sdk-core ibm-cos-sdk-s3transfer\n", 111 | "Installing collected packages: requests, python-dateutil, lomond, jmespath, pandas, ibm-cos-sdk-core, ibm-cos-sdk-s3transfer, flask-ngrok, ibm-cos-sdk, ibm-watson-machine-learning\n", 112 | " Attempting uninstall: requests\n", 113 | " Found existing installation: requests 2.32.3\n", 114 | " Uninstalling requests-2.32.3:\n", 115 | " Successfully uninstalled requests-2.32.3\n", 116 | " Attempting uninstall: python-dateutil\n", 117 | " Found existing installation: python-dateutil 2.8.2\n", 118 | " Uninstalling python-dateutil-2.8.2:\n", 119 | " Successfully uninstalled python-dateutil-2.8.2\n", 120 | " Attempting uninstall: pandas\n", 121 | " Found existing installation: pandas 2.2.2\n", 122 | " Uninstalling pandas-2.2.2:\n", 123 | " Successfully uninstalled pandas-2.2.2\n", 124 | "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", 125 | "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.1.4 which is incompatible.\n", 126 | "google-colab 1.0.0 requires requests==2.32.3, but you have requests 2.32.2 which is incompatible.\n", 127 | "plotnine 0.14.5 requires pandas>=2.2.0, but you have pandas 2.1.4 which is incompatible.\n", 128 | "mizani 0.13.1 requires pandas>=2.2.0, but you have pandas 2.1.4 which is incompatible.\u001b[0m\u001b[31m\n", 129 | "\u001b[0mSuccessfully installed flask-ngrok-0.0.25 ibm-cos-sdk-2.13.6 ibm-cos-sdk-core-2.13.6 ibm-cos-sdk-s3transfer-2.13.6 ibm-watson-machine-learning-1.0.367 jmespath-1.0.1 lomond-0.3.3 pandas-2.1.4 python-dateutil-2.9.0.post0 requests-2.32.2\n" 130 | ] 131 | }, 132 | { 133 | "data": { 134 | "application/vnd.colab-display-data+json": { 135 | "id": "07b4e091bbeb4396bd65f113f7eabc18", 136 | "pip_warning": { 137 | "packages": [ 138 | "dateutil" 139 | ] 140 | } 141 | } 142 | }, 143 | "metadata": {}, 144 | "output_type": "display_data" 145 | } 146 | ], 147 | "source": [ 148 | "!pip install pandas numpy matplotlib seaborn scikit-learn ibm-watson-machine-learning flask-ngrok\n" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": null, 154 | "metadata": { 155 | "id": "P14z-wWwoprv" 156 | }, 157 | "outputs": [], 158 | "source": [ 159 | "import pandas as pd\n", 160 | "import numpy as np\n", 161 | "import matplotlib.pyplot as plt\n", 162 | "import seaborn as sns\n", 163 | "from sklearn.model_selection import train_test_split\n", 164 | "from sklearn.preprocessing import LabelEncoder, StandardScaler\n", 165 | "from sklearn.ensemble import RandomForestClassifier\n", 166 | "from sklearn.metrics import accuracy_score, classification_report\n", 167 | "from ibm_watson_machine_learning import APIClient\n", 168 | "import pickle\n" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": null, 174 | "metadata": { 175 | "colab": { 176 | "base_uri": "https://localhost:8080/" 177 | }, 178 | "id": "Fe-pZqhmoxPL", 179 | "outputId": "958b36af-18ef-47f4-8726-1103c072a9aa" 180 | }, 181 | "outputs": [ 182 | { 183 | "name": "stdout", 184 | "output_type": "stream", 185 | "text": [ 186 | " customerID gender SeniorCitizen Partner Dependents tenure PhoneService \\\n", 187 | "0 7590-VHVEG Female 0 Yes No 1 No \n", 188 | "1 5575-GNVDE Male 0 No No 34 Yes \n", 189 | "2 3668-QPYBK Male 0 No No 2 Yes \n", 190 | "3 7795-CFOCW Male 0 No No 45 No \n", 191 | "4 9237-HQITU Female 0 No No 2 Yes \n", 192 | "\n", 193 | " MultipleLines InternetService OnlineSecurity ... DeviceProtection \\\n", 194 | "0 No phone service DSL No ... No \n", 195 | "1 No DSL Yes ... Yes \n", 196 | "2 No DSL Yes ... No \n", 197 | "3 No phone service DSL Yes ... Yes \n", 198 | "4 No Fiber optic No ... No \n", 199 | "\n", 200 | " TechSupport StreamingTV StreamingMovies Contract PaperlessBilling \\\n", 201 | "0 No No No Month-to-month Yes \n", 202 | "1 No No No One year No \n", 203 | "2 No No No Month-to-month Yes \n", 204 | "3 Yes No No One year No \n", 205 | "4 No No No Month-to-month Yes \n", 206 | "\n", 207 | " PaymentMethod MonthlyCharges TotalCharges Churn \n", 208 | "0 Electronic check 29.85 29.85 No \n", 209 | "1 Mailed check 56.95 1889.5 No \n", 210 | "2 Mailed check 53.85 108.15 Yes \n", 211 | "3 Bank transfer (automatic) 42.30 1840.75 No \n", 212 | "4 Electronic check 70.70 151.65 Yes \n", 213 | "\n", 214 | "[5 rows x 21 columns]\n", 215 | "\n", 216 | "RangeIndex: 7043 entries, 0 to 7042\n", 217 | "Data columns (total 21 columns):\n", 218 | " # Column Non-Null Count Dtype \n", 219 | "--- ------ -------------- ----- \n", 220 | " 0 customerID 7043 non-null object \n", 221 | " 1 gender 7043 non-null object \n", 222 | " 2 SeniorCitizen 7043 non-null int64 \n", 223 | " 3 Partner 7043 non-null object \n", 224 | " 4 Dependents 7043 non-null object \n", 225 | " 5 tenure 7043 non-null int64 \n", 226 | " 6 PhoneService 7043 non-null object \n", 227 | " 7 MultipleLines 7043 non-null object \n", 228 | " 8 InternetService 7043 non-null object \n", 229 | " 9 OnlineSecurity 7043 non-null object \n", 230 | " 10 OnlineBackup 7043 non-null object \n", 231 | " 11 DeviceProtection 7043 non-null object \n", 232 | " 12 TechSupport 7043 non-null object \n", 233 | " 13 StreamingTV 7043 non-null object \n", 234 | " 14 StreamingMovies 7043 non-null object \n", 235 | " 15 Contract 7043 non-null object \n", 236 | " 16 PaperlessBilling 7043 non-null object \n", 237 | " 17 PaymentMethod 7043 non-null object \n", 238 | " 18 MonthlyCharges 7043 non-null float64\n", 239 | " 19 TotalCharges 7043 non-null object \n", 240 | " 20 Churn 7043 non-null object \n", 241 | "dtypes: float64(1), int64(2), object(18)\n", 242 | "memory usage: 1.1+ MB\n", 243 | "customerID 0\n", 244 | "gender 0\n", 245 | "SeniorCitizen 0\n", 246 | "Partner 0\n", 247 | "Dependents 0\n", 248 | "tenure 0\n", 249 | "PhoneService 0\n", 250 | "MultipleLines 0\n", 251 | "InternetService 0\n", 252 | "OnlineSecurity 0\n", 253 | "OnlineBackup 0\n", 254 | "DeviceProtection 0\n", 255 | "TechSupport 0\n", 256 | "StreamingTV 0\n", 257 | "StreamingMovies 0\n", 258 | "Contract 0\n", 259 | "PaperlessBilling 0\n", 260 | "PaymentMethod 0\n", 261 | "MonthlyCharges 0\n", 262 | "TotalCharges 0\n", 263 | "Churn 0\n", 264 | "dtype: int64\n", 265 | " SeniorCitizen tenure MonthlyCharges\n", 266 | "count 7043.000000 7043.000000 7043.000000\n", 267 | "mean 0.162147 32.371149 64.761692\n", 268 | "std 0.368612 24.559481 30.090047\n", 269 | "min 0.000000 0.000000 18.250000\n", 270 | "25% 0.000000 9.000000 35.500000\n", 271 | "50% 0.000000 29.000000 70.350000\n", 272 | "75% 0.000000 55.000000 89.850000\n", 273 | "max 1.000000 72.000000 118.750000\n" 274 | ] 275 | } 276 | ], 277 | "source": [ 278 | "# Load the dataset from the uploaded file\n", 279 | "file_path = \"/content/WA_Fn-UseC_-Telco-Customer-Churn.csv\" # Update path if needed\n", 280 | "df = pd.read_csv(file_path)\n", 281 | "\n", 282 | "# Display the first few rows\n", 283 | "print(df.head())\n", 284 | "\n", 285 | "# Check basic info\n", 286 | "df.info()\n", 287 | "\n", 288 | "# Check for missing values\n", 289 | "print(df.isnull().sum())\n", 290 | "\n", 291 | "# Summary statistics\n", 292 | "print(df.describe())\n" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": null, 298 | "metadata": { 299 | "id": "jEQ36vDOo6bz" 300 | }, 301 | "outputs": [], 302 | "source": [ 303 | "# Fill missing numerical values with the mean\n", 304 | "numerical_cols = df.select_dtypes(include=np.number).columns\n", 305 | "df[numerical_cols] = df[numerical_cols].fillna(df[numerical_cols].mean())\n", 306 | "\n", 307 | "# Fill missing categorical values with the mode\n", 308 | "categorical_cols = df.select_dtypes(exclude=np.number).columns\n", 309 | "df[categorical_cols] = df[categorical_cols].fillna(df[categorical_cols].mode().iloc[0])" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": null, 315 | "metadata": { 316 | "colab": { 317 | "base_uri": "https://localhost:8080/" 318 | }, 319 | "id": "BwTg9QBDpuAp", 320 | "outputId": "7fa062bc-4a4f-4fc5-d25c-ebeb8b273c79" 321 | }, 322 | "outputs": [ 323 | { 324 | "name": "stdout", 325 | "output_type": "stream", 326 | "text": [ 327 | "customerID 0\n", 328 | "gender 0\n", 329 | "SeniorCitizen 0\n", 330 | "Partner 0\n", 331 | "Dependents 0\n", 332 | "tenure 0\n", 333 | "PhoneService 0\n", 334 | "MultipleLines 0\n", 335 | "InternetService 0\n", 336 | "OnlineSecurity 0\n", 337 | "OnlineBackup 0\n", 338 | "DeviceProtection 0\n", 339 | "TechSupport 0\n", 340 | "StreamingTV 0\n", 341 | "StreamingMovies 0\n", 342 | "Contract 0\n", 343 | "PaperlessBilling 0\n", 344 | "PaymentMethod 0\n", 345 | "MonthlyCharges 0\n", 346 | "TotalCharges 0\n", 347 | "Churn 0\n", 348 | "dtype: int64\n" 349 | ] 350 | } 351 | ], 352 | "source": [ 353 | "# Check for missing values\n", 354 | "print(df.isnull().sum())\n", 355 | "\n", 356 | "# Fill missing values with mean for numerical data only\n", 357 | "for column in df.select_dtypes(include=['number']).columns: #Select only columns with numerical data types\n", 358 | " df[column].fillna(df[column].mean(), inplace=True) #Fill NA values for the selected column with the column's mean" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": null, 364 | "metadata": { 365 | "id": "9ZocRyBepWyP" 366 | }, 367 | "outputs": [], 368 | "source": [ 369 | "label_encoders = {}\n", 370 | "categorical_cols = df.select_dtypes(include=[\"object\"]).columns\n", 371 | "\n", 372 | "for col in categorical_cols:\n", 373 | " le = LabelEncoder()\n", 374 | " df[col] = le.fit_transform(df[col])\n", 375 | " label_encoders[col] = le # Save encoders for later use\n" 376 | ] 377 | }, 378 | { 379 | "cell_type": "code", 380 | "execution_count": null, 381 | "metadata": { 382 | "id": "ZqCgvKRypaU9" 383 | }, 384 | "outputs": [], 385 | "source": [ 386 | "scaler = StandardScaler()\n", 387 | "numerical_cols = df.select_dtypes(include=[\"int64\", \"float64\"]).columns\n", 388 | "df[numerical_cols] = scaler.fit_transform(df[numerical_cols])\n" 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": null, 394 | "metadata": { 395 | "id": "MubWq-1epeCI" 396 | }, 397 | "outputs": [], 398 | "source": [ 399 | "X = df.drop(columns=[\"Churn\"]) # Drop target column\n", 400 | "y = df[\"Churn\"] # Define target variable\n", 401 | "\n", 402 | "# Split dataset\n", 403 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n" 404 | ] 405 | }, 406 | { 407 | "cell_type": "code", 408 | "execution_count": null, 409 | "metadata": { 410 | "id": "NDAo4DM8p4AO" 411 | }, 412 | "outputs": [], 413 | "source": [ 414 | "# Initialize and train the model\n", 415 | "# Use RandomForestRegressor for continuous target variables\n", 416 | "from sklearn.ensemble import RandomForestRegressor #Import RandomForestRegressor\n", 417 | "model = RandomForestRegressor(n_estimators=100, random_state=42) # Change to RandomForestRegressor\n", 418 | "model.fit(X_train, y_train)\n", 419 | "\n", 420 | "# Save model locally for later deployment\n", 421 | "pickle.dump(model, open(\"churn_model.pkl\", \"wb\"))" 422 | ] 423 | }, 424 | { 425 | "cell_type": "code", 426 | "execution_count": null, 427 | "metadata": { 428 | "colab": { 429 | "base_uri": "https://localhost:8080/" 430 | }, 431 | "id": "bDejoikwqOmV", 432 | "outputId": "73290a39-aed9-4707-f673-822719d270e4" 433 | }, 434 | "outputs": [ 435 | { 436 | "name": "stdout", 437 | "output_type": "stream", 438 | "text": [ 439 | "R-squared: 0.2710\n", 440 | "Mean Squared Error: 0.7278\n", 441 | "Mean Absolute Error: 0.6195\n" 442 | ] 443 | } 444 | ], 445 | "source": [ 446 | "# Predict on test data\n", 447 | "y_pred = model.predict(X_test)\n", 448 | "\n", 449 | "# Calculate R-squared (a common regression metric)\n", 450 | "from sklearn.metrics import r2_score #Import r2_score\n", 451 | "r2 = r2_score(y_test, y_pred)\n", 452 | "print(f\"R-squared: {r2:.4f}\")\n", 453 | "\n", 454 | "# You can also consider other regression metrics like Mean Squared Error (MSE) or Mean Absolute Error (MAE)\n", 455 | "from sklearn.metrics import mean_squared_error, mean_absolute_error #Import MSE and MAE\n", 456 | "mse = mean_squared_error(y_test, y_pred)\n", 457 | "mae = mean_absolute_error(y_test, y_pred)\n", 458 | "print(f\"Mean Squared Error: {mse:.4f}\")\n", 459 | "print(f\"Mean Absolute Error: {mae:.4f}\")" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": null, 465 | "metadata": { 466 | "colab": { 467 | "base_uri": "https://localhost:8080/", 468 | "height": 37 469 | }, 470 | "id": "8Kp_xVl-qa0v", 471 | "outputId": "31966ce4-9b9a-4bf6-fe3f-cdf09d293cc2" 472 | }, 473 | "outputs": [ 474 | { 475 | "data": { 476 | "application/vnd.google.colaboratory.intrinsic+json": { 477 | "type": "string" 478 | }, 479 | "text/plain": [ 480 | "'SUCCESS'" 481 | ] 482 | }, 483 | "execution_count": 16, 484 | "metadata": {}, 485 | "output_type": "execute_result" 486 | } 487 | ], 488 | "source": [ 489 | "wml_credentials = {\n", 490 | " \"apikey\": \"fajcYKSClkw1E8nKFjbwyoKAPBZ5ZLyX6rpCsfQNOTrW\",\n", 491 | " \"url\": \"https://us-south.ml.cloud.ibm.com\"\n", 492 | "}\n", 493 | "\n", 494 | "# Connect to WML\n", 495 | "client = APIClient(wml_credentials)\n", 496 | "\n", 497 | "# Set Deployment Space\n", 498 | "client.set.default_space(\"19983994-8987-465b-90d8-40e2562538bb\") # Replace with your IBM Cloud Deployment Space ID\n" 499 | ] 500 | }, 501 | { 502 | "cell_type": "code", 503 | "execution_count": null, 504 | "metadata": { 505 | "colab": { 506 | "base_uri": "https://localhost:8080/" 507 | }, 508 | "id": "IZkb6Ia9si5V", 509 | "outputId": "1e5d0353-0b56-4f0b-949c-4daff24fbdd9" 510 | }, 511 | "outputs": [ 512 | { 513 | "name": "stdout", 514 | "output_type": "stream", 515 | "text": [ 516 | "Software Specification UID: Not Found\n" 517 | ] 518 | } 519 | ], 520 | "source": [ 521 | "# Fetch the correct software specification UID\n", 522 | "software_spec_uid = client.software_specifications.get_id_by_name(\"runtime-22.1-py3.10\")\n", 523 | "print(\"Software Specification UID:\", software_spec_uid)\n" 524 | ] 525 | }, 526 | { 527 | "cell_type": "code", 528 | "execution_count": null, 529 | "metadata": { 530 | "colab": { 531 | "base_uri": "https://localhost:8080/", 532 | "height": 37 533 | }, 534 | "id": "p_w54nikt3p4", 535 | "outputId": "ca4b392f-8d72-48d0-eec4-dd713ad2a972" 536 | }, 537 | "outputs": [ 538 | { 539 | "data": { 540 | "application/vnd.google.colaboratory.intrinsic+json": { 541 | "type": "string" 542 | }, 543 | "text/plain": [ 544 | "'Not Found'" 545 | ] 546 | }, 547 | "execution_count": 37, 548 | "metadata": {}, 549 | "output_type": "execute_result" 550 | } 551 | ], 552 | "source": [ 553 | "client.software_specifications.get_id_by_name(\"runtime-22.1-py3.10\")\n" 554 | ] 555 | }, 556 | { 557 | "cell_type": "code", 558 | "execution_count": null, 559 | "metadata": { 560 | "colab": { 561 | "base_uri": "https://localhost:8080/", 562 | "height": 1000 563 | }, 564 | "id": "dBYfo0AVw6td", 565 | "outputId": "8ed0b712-8c72-4a8d-be16-88967d502f89" 566 | }, 567 | "outputs": [ 568 | { 569 | "name": "stdout", 570 | "output_type": "stream", 571 | "text": [ 572 | "---------------------------- ------------------------------------ ---- ------------ --------------------------\n", 573 | "NAME ID TYPE STATE REPLACEMENT\n", 574 | "default_py3.6 0062b8c9-8b7d-44a0-a9b9-46c416adcbd9 base retired runtime-24.1-py3.11\n", 575 | "autoai-ts_rt23.1-py3.10 01ce9391-1a79-5a33-94fb-2e134337f314 base constricted autoai-ts_rt24.1-py3.11\n", 576 | "kernel-spark3.2-scala2.12 020d69ce-7ac1-5e68-ac1a-31189867356a base retired\n", 577 | "pytorch-onnx_1.3-py3.7-edt 069ea134-3346-5748-b513-49120e15d288 base retired\n", 578 | "tensorflow_rt23.1-py3.10 079a91e0-245f-5269-8926-3c20b28f37dc base constricted tensorflow_rt24.1-py3.11\n", 579 | "scikit-learn_0.20-py3.6 09c5a1d0-9c1e-4473-a344-eb7b665ff687 base retired runtime-24.1-py3.11\n", 580 | "spark-mllib_3.0-scala_2.12 09f4cff0-90a7-5899-b9ed-1ef348aebdee base retired\n", 581 | "pytorch-onnx_rt22.1-py3.9 0b848dd4-e681-5599-be41-b5f6fccc6471 base retired pytorch-onnx_rt24.1-py3.11\n", 582 | "ai-function_0.1-py3.6 0cdb0f1e-5376-4f4d-92dd-da3b69aa9bda base retired runtime-24.1-py3.11\n", 583 | "watsonx-cfm-caikit-1.0 0cee3c55-472f-57b1-84bd-72f5d066dbe4 base not_provided\n", 584 | "shiny-r3.6 0e6e79df-875e-4f24-8ae9-62dcc2148306 base retired\n", 585 | "tensorflow_2.4-py3.7-horovod 1092590a-307d-563d-9b62-4eb7d64b3f22 base retired tensorflow_rt24.1-py3.11\n", 586 | "pytorch_1.1-py3.6 10ac12d6-6b30-4ccd-8392-3e922c096a92 base retired runtime-24.1-py3.11\n", 587 | "tensorflow_1.15-py3.6-ddl 111e41b3-de2d-5422-a4d6-bf776828c4b7 base retired\n", 588 | "autoai-kb_rt22.2-py3.10 125b6d9a-5b1f-5e8d-972a-b251688ccf40 base retired autoai-kb_rt24.1-py3.11\n", 589 | "watsonx-textgen-fm-1.0 129aec82-7e65-5c78-b812-4c0a74b916f5 base not_provided\n", 590 | "runtime-22.1-py3.9 12b83a17-24d8-5082-900f-0ab31fbfd3cb base retired runtime-24.1-py3.11\n", 591 | "masking-flows-spark 13666829-5570-53a7-927b-52d42a101d93 base not_provided\n", 592 | "kernel-spark3.3-py3.10 147e6777-ccd1-5886-8571-5356abc20839 base retired\n", 593 | "scikit-learn_0.22-py3.6 154010fa-5b3b-4ac1-82af-4d5ee5abbc85 base retired runtime-24.1-py3.11\n", 594 | "pytorch-onnx_rt23.1-py3.10 195067e6-4c5e-5fab-8bd0-e7623a88b4d3 base constricted pytorch-onnx_rt24.1-py3.11\n", 595 | "default_r3.6 1b70aec3-ab34-4b87-8aa0-a4a3c8296a36 base retired\n", 596 | "pytorch-onnx_1.3-py3.6 1bc6029a-cc97-56da-b8e0-39c3880dbbe7 base retired runtime-24.1-py3.11\n", 597 | "kernel-spark3.3-r3.6 1c9e5454-f216-59dd-a20e-474a5cdf5988 base retired\n", 598 | "tensorflow_2.1-py3.6 1eb25b84-d6ed-5dde-b6a5-3fbdf1665666 base retired runtime-24.1-py3.11\n", 599 | "spark-mllib_3.2 20047f72-0a98-58c7-9ff5-a77b012eb8f5 base retired spark-mllib_3.3\n", 600 | "tensorflow_2.4-py3.8-horovod 217c16f6-178f-56bf-824a-b19f20564c49 base retired tensorflow_rt24.1-py3.11\n", 601 | "runtime-22.1-py3.9-cuda 26215f05-08c3-5a41-a1b0-da66306ce658 base retired runtime-24.1-py3.11-cuda\n", 602 | "do_py3.8 295addb5-9ef9-547e-9bf4-92ae3563e720 base retired\n", 603 | "autoai-ts_3.8-py3.8 2aa0c932-798f-5ae9-abd6-15e0c2402fb5 base retired autoai-ts_rt24.1-py3.11\n", 604 | "tensorflow_1.15-py3.6 2b73a275-7cbf-420b-a912-eae7f436e0bc base retired runtime-24.1-py3.11\n", 605 | "kernel-spark3.3-py3.9 2b7961e2-e3b1-5a8c-a491-482c8368839a base retired\n", 606 | "tensorflow_rt24.1-py3.11 2c33167d-b11c-5490-a305-3e5e95db5c4d base supported\n", 607 | "pytorch_1.2-py3.6 2c8ef57d-2687-4b7d-acce-01f94976dac1 base retired runtime-24.1-py3.11\n", 608 | "pytorch-onnx_rt24.1-py3.11 2da185aa-eac3-59a5-bb8e-0e5b60458a15 base supported\n", 609 | "spark-mllib_2.3 2e51f700-bca0-4b0d-88dc-5c6791338875 base retired spark-mllib_3.3\n", 610 | "pytorch-onnx_1.1-py3.6-edt 32983cea-3f32-4400-8965-dde874a8d67e base retired runtime-24.1-py3.11\n", 611 | "runtime-23.1-py3.10 336b29df-e0e1-5e7d-b6a5-f6ab722625b2 base constricted runtime-24.1-py3.11\n", 612 | "spark-mllib_3.0-py37 36507ebe-8770-55ba-ab2a-eafe787600e9 base retired spark-mllib_3.3\n", 613 | "onnxruntime_opset_19 368d2795-aaa7-59a0-834c-248c64a5a99e base supported\n", 614 | "runtime-24.1-py3.11-xc 36e20eca-b269-5e53-8f76-559f5cf898f2 base not_provided\n", 615 | "spark-mllib_2.4 390d21f8-e58b-4fac-9c55-d7ceda621326 base retired spark-mllib_3.3\n", 616 | "autoai-ts_rt22.2-py3.10 396b2e83-0953-5b86-9a55-7ce1628a406f base retired autoai-ts_rt24.1-py3.11\n", 617 | "xgboost_0.82-py3.6 39e31acd-5f30-41dc-ae44-60233c80306e base retired runtime-24.1-py3.11\n", 618 | "pytorch-onnx_1.2-py3.6-edt 40589d0e-7019-4e28-8daa-fb03b6f4fe12 base retired runtime-24.1-py3.11\n", 619 | "pytorch-onnx_rt22.2-py3.10 40e73f55-783a-5535-b3fa-0c8b94291431 base retired pytorch-onnx_rt24.1-py3.11\n", 620 | "default_r36py38 41c247d3-45f8-5a71-b065-8580229facf0 base retired\n", 621 | "autoai-ts_rt22.1-py3.9 4269d26e-07ba-5d40-8f66-2d495b0c71f7 base retired autoai-ts_rt24.1-py3.11\n", 622 | "autoai-obm_3.0 42b92e18-d9ab-567f-988a-4240ba1ed5f7 base retired autoai-obm_3.2\n", 623 | "runtime-24.1-py3.11 45f12dfe-aa78-5b8d-9f38-0ee223c47309 base supported\n", 624 | "---------------------------- ------------------------------------ ---- ------------ --------------------------\n", 625 | "Note: Only first 50 records were displayed. To display more use 'limit' parameter.\n" 626 | ] 627 | }, 628 | { 629 | "data": { 630 | "application/vnd.google.colaboratory.intrinsic+json": { 631 | "summary": "{\n \"name\": \"client\",\n \"rows\": 50,\n \"fields\": [\n {\n \"column\": \"NAME\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 50,\n \"samples\": [\n \"tensorflow_1.15-py3.6-ddl\",\n \"onnxruntime_opset_19\",\n \"tensorflow_1.15-py3.6\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 50,\n \"samples\": [\n \"111e41b3-de2d-5422-a4d6-bf776828c4b7\",\n \"368d2795-aaa7-59a0-834c-248c64a5a99e\",\n \"2b73a275-7cbf-420b-a912-eae7f436e0bc\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"TYPE\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"base\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"STATE\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"constricted\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"REPLACEMENT\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"runtime-24.1-py3.11-cuda\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", 632 | "type": "dataframe" 633 | }, 634 | "text/html": [ 635 | "\n", 636 | "
\n", 637 | "
\n", 638 | "\n", 651 | "\n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \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 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | "
NAMEIDTYPESTATEREPLACEMENT
0default_py3.60062b8c9-8b7d-44a0-a9b9-46c416adcbd9baseretiredruntime-24.1-py3.11
1autoai-ts_rt23.1-py3.1001ce9391-1a79-5a33-94fb-2e134337f314baseconstrictedautoai-ts_rt24.1-py3.11
2kernel-spark3.2-scala2.12020d69ce-7ac1-5e68-ac1a-31189867356abaseretired
3pytorch-onnx_1.3-py3.7-edt069ea134-3346-5748-b513-49120e15d288baseretired
4tensorflow_rt23.1-py3.10079a91e0-245f-5269-8926-3c20b28f37dcbaseconstrictedtensorflow_rt24.1-py3.11
5scikit-learn_0.20-py3.609c5a1d0-9c1e-4473-a344-eb7b665ff687baseretiredruntime-24.1-py3.11
6spark-mllib_3.0-scala_2.1209f4cff0-90a7-5899-b9ed-1ef348aebdeebaseretired
7pytorch-onnx_rt22.1-py3.90b848dd4-e681-5599-be41-b5f6fccc6471baseretiredpytorch-onnx_rt24.1-py3.11
8ai-function_0.1-py3.60cdb0f1e-5376-4f4d-92dd-da3b69aa9bdabaseretiredruntime-24.1-py3.11
9watsonx-cfm-caikit-1.00cee3c55-472f-57b1-84bd-72f5d066dbe4basenot_provided
10shiny-r3.60e6e79df-875e-4f24-8ae9-62dcc2148306baseretired
11tensorflow_2.4-py3.7-horovod1092590a-307d-563d-9b62-4eb7d64b3f22baseretiredtensorflow_rt24.1-py3.11
12pytorch_1.1-py3.610ac12d6-6b30-4ccd-8392-3e922c096a92baseretiredruntime-24.1-py3.11
13tensorflow_1.15-py3.6-ddl111e41b3-de2d-5422-a4d6-bf776828c4b7baseretired
14autoai-kb_rt22.2-py3.10125b6d9a-5b1f-5e8d-972a-b251688ccf40baseretiredautoai-kb_rt24.1-py3.11
15watsonx-textgen-fm-1.0129aec82-7e65-5c78-b812-4c0a74b916f5basenot_provided
16runtime-22.1-py3.912b83a17-24d8-5082-900f-0ab31fbfd3cbbaseretiredruntime-24.1-py3.11
17masking-flows-spark13666829-5570-53a7-927b-52d42a101d93basenot_provided
18kernel-spark3.3-py3.10147e6777-ccd1-5886-8571-5356abc20839baseretired
19scikit-learn_0.22-py3.6154010fa-5b3b-4ac1-82af-4d5ee5abbc85baseretiredruntime-24.1-py3.11
20pytorch-onnx_rt23.1-py3.10195067e6-4c5e-5fab-8bd0-e7623a88b4d3baseconstrictedpytorch-onnx_rt24.1-py3.11
21default_r3.61b70aec3-ab34-4b87-8aa0-a4a3c8296a36baseretired
22pytorch-onnx_1.3-py3.61bc6029a-cc97-56da-b8e0-39c3880dbbe7baseretiredruntime-24.1-py3.11
23kernel-spark3.3-r3.61c9e5454-f216-59dd-a20e-474a5cdf5988baseretired
24tensorflow_2.1-py3.61eb25b84-d6ed-5dde-b6a5-3fbdf1665666baseretiredruntime-24.1-py3.11
25spark-mllib_3.220047f72-0a98-58c7-9ff5-a77b012eb8f5baseretiredspark-mllib_3.3
26tensorflow_2.4-py3.8-horovod217c16f6-178f-56bf-824a-b19f20564c49baseretiredtensorflow_rt24.1-py3.11
27runtime-22.1-py3.9-cuda26215f05-08c3-5a41-a1b0-da66306ce658baseretiredruntime-24.1-py3.11-cuda
28do_py3.8295addb5-9ef9-547e-9bf4-92ae3563e720baseretired
29autoai-ts_3.8-py3.82aa0c932-798f-5ae9-abd6-15e0c2402fb5baseretiredautoai-ts_rt24.1-py3.11
30tensorflow_1.15-py3.62b73a275-7cbf-420b-a912-eae7f436e0bcbaseretiredruntime-24.1-py3.11
31kernel-spark3.3-py3.92b7961e2-e3b1-5a8c-a491-482c8368839abaseretired
32tensorflow_rt24.1-py3.112c33167d-b11c-5490-a305-3e5e95db5c4dbasesupported
33pytorch_1.2-py3.62c8ef57d-2687-4b7d-acce-01f94976dac1baseretiredruntime-24.1-py3.11
34pytorch-onnx_rt24.1-py3.112da185aa-eac3-59a5-bb8e-0e5b60458a15basesupported
35spark-mllib_2.32e51f700-bca0-4b0d-88dc-5c6791338875baseretiredspark-mllib_3.3
36pytorch-onnx_1.1-py3.6-edt32983cea-3f32-4400-8965-dde874a8d67ebaseretiredruntime-24.1-py3.11
37runtime-23.1-py3.10336b29df-e0e1-5e7d-b6a5-f6ab722625b2baseconstrictedruntime-24.1-py3.11
38spark-mllib_3.0-py3736507ebe-8770-55ba-ab2a-eafe787600e9baseretiredspark-mllib_3.3
39onnxruntime_opset_19368d2795-aaa7-59a0-834c-248c64a5a99ebasesupported
40runtime-24.1-py3.11-xc36e20eca-b269-5e53-8f76-559f5cf898f2basenot_provided
41spark-mllib_2.4390d21f8-e58b-4fac-9c55-d7ceda621326baseretiredspark-mllib_3.3
42autoai-ts_rt22.2-py3.10396b2e83-0953-5b86-9a55-7ce1628a406fbaseretiredautoai-ts_rt24.1-py3.11
43xgboost_0.82-py3.639e31acd-5f30-41dc-ae44-60233c80306ebaseretiredruntime-24.1-py3.11
44pytorch-onnx_1.2-py3.6-edt40589d0e-7019-4e28-8daa-fb03b6f4fe12baseretiredruntime-24.1-py3.11
45pytorch-onnx_rt22.2-py3.1040e73f55-783a-5535-b3fa-0c8b94291431baseretiredpytorch-onnx_rt24.1-py3.11
46default_r36py3841c247d3-45f8-5a71-b065-8580229facf0baseretired
47autoai-ts_rt22.1-py3.94269d26e-07ba-5d40-8f66-2d495b0c71f7baseretiredautoai-ts_rt24.1-py3.11
48autoai-obm_3.042b92e18-d9ab-567f-988a-4240ba1ed5f7baseretiredautoai-obm_3.2
49runtime-24.1-py3.1145f12dfe-aa78-5b8d-9f38-0ee223c47309basesupported
\n", 1065 | "
\n", 1066 | "
\n", 1067 | "\n", 1068 | "
\n", 1069 | " \n", 1077 | "\n", 1078 | " \n", 1118 | "\n", 1119 | " \n", 1143 | "
\n", 1144 | "\n", 1145 | "\n", 1146 | "
\n", 1147 | " \n", 1158 | "\n", 1159 | "\n", 1248 | "\n", 1249 | " \n", 1271 | "
\n", 1272 | "\n", 1273 | "
\n", 1274 | "
\n" 1275 | ], 1276 | "text/plain": [ 1277 | " NAME ID TYPE \\\n", 1278 | "0 default_py3.6 0062b8c9-8b7d-44a0-a9b9-46c416adcbd9 base \n", 1279 | "1 autoai-ts_rt23.1-py3.10 01ce9391-1a79-5a33-94fb-2e134337f314 base \n", 1280 | "2 kernel-spark3.2-scala2.12 020d69ce-7ac1-5e68-ac1a-31189867356a base \n", 1281 | "3 pytorch-onnx_1.3-py3.7-edt 069ea134-3346-5748-b513-49120e15d288 base \n", 1282 | "4 tensorflow_rt23.1-py3.10 079a91e0-245f-5269-8926-3c20b28f37dc base \n", 1283 | "5 scikit-learn_0.20-py3.6 09c5a1d0-9c1e-4473-a344-eb7b665ff687 base \n", 1284 | "6 spark-mllib_3.0-scala_2.12 09f4cff0-90a7-5899-b9ed-1ef348aebdee base \n", 1285 | "7 pytorch-onnx_rt22.1-py3.9 0b848dd4-e681-5599-be41-b5f6fccc6471 base \n", 1286 | "8 ai-function_0.1-py3.6 0cdb0f1e-5376-4f4d-92dd-da3b69aa9bda base \n", 1287 | "9 watsonx-cfm-caikit-1.0 0cee3c55-472f-57b1-84bd-72f5d066dbe4 base \n", 1288 | "10 shiny-r3.6 0e6e79df-875e-4f24-8ae9-62dcc2148306 base \n", 1289 | "11 tensorflow_2.4-py3.7-horovod 1092590a-307d-563d-9b62-4eb7d64b3f22 base \n", 1290 | "12 pytorch_1.1-py3.6 10ac12d6-6b30-4ccd-8392-3e922c096a92 base \n", 1291 | "13 tensorflow_1.15-py3.6-ddl 111e41b3-de2d-5422-a4d6-bf776828c4b7 base \n", 1292 | "14 autoai-kb_rt22.2-py3.10 125b6d9a-5b1f-5e8d-972a-b251688ccf40 base \n", 1293 | "15 watsonx-textgen-fm-1.0 129aec82-7e65-5c78-b812-4c0a74b916f5 base \n", 1294 | "16 runtime-22.1-py3.9 12b83a17-24d8-5082-900f-0ab31fbfd3cb base \n", 1295 | "17 masking-flows-spark 13666829-5570-53a7-927b-52d42a101d93 base \n", 1296 | "18 kernel-spark3.3-py3.10 147e6777-ccd1-5886-8571-5356abc20839 base \n", 1297 | "19 scikit-learn_0.22-py3.6 154010fa-5b3b-4ac1-82af-4d5ee5abbc85 base \n", 1298 | "20 pytorch-onnx_rt23.1-py3.10 195067e6-4c5e-5fab-8bd0-e7623a88b4d3 base \n", 1299 | "21 default_r3.6 1b70aec3-ab34-4b87-8aa0-a4a3c8296a36 base \n", 1300 | "22 pytorch-onnx_1.3-py3.6 1bc6029a-cc97-56da-b8e0-39c3880dbbe7 base \n", 1301 | "23 kernel-spark3.3-r3.6 1c9e5454-f216-59dd-a20e-474a5cdf5988 base \n", 1302 | "24 tensorflow_2.1-py3.6 1eb25b84-d6ed-5dde-b6a5-3fbdf1665666 base \n", 1303 | "25 spark-mllib_3.2 20047f72-0a98-58c7-9ff5-a77b012eb8f5 base \n", 1304 | "26 tensorflow_2.4-py3.8-horovod 217c16f6-178f-56bf-824a-b19f20564c49 base \n", 1305 | "27 runtime-22.1-py3.9-cuda 26215f05-08c3-5a41-a1b0-da66306ce658 base \n", 1306 | "28 do_py3.8 295addb5-9ef9-547e-9bf4-92ae3563e720 base \n", 1307 | "29 autoai-ts_3.8-py3.8 2aa0c932-798f-5ae9-abd6-15e0c2402fb5 base \n", 1308 | "30 tensorflow_1.15-py3.6 2b73a275-7cbf-420b-a912-eae7f436e0bc base \n", 1309 | "31 kernel-spark3.3-py3.9 2b7961e2-e3b1-5a8c-a491-482c8368839a base \n", 1310 | "32 tensorflow_rt24.1-py3.11 2c33167d-b11c-5490-a305-3e5e95db5c4d base \n", 1311 | "33 pytorch_1.2-py3.6 2c8ef57d-2687-4b7d-acce-01f94976dac1 base \n", 1312 | "34 pytorch-onnx_rt24.1-py3.11 2da185aa-eac3-59a5-bb8e-0e5b60458a15 base \n", 1313 | "35 spark-mllib_2.3 2e51f700-bca0-4b0d-88dc-5c6791338875 base \n", 1314 | "36 pytorch-onnx_1.1-py3.6-edt 32983cea-3f32-4400-8965-dde874a8d67e base \n", 1315 | "37 runtime-23.1-py3.10 336b29df-e0e1-5e7d-b6a5-f6ab722625b2 base \n", 1316 | "38 spark-mllib_3.0-py37 36507ebe-8770-55ba-ab2a-eafe787600e9 base \n", 1317 | "39 onnxruntime_opset_19 368d2795-aaa7-59a0-834c-248c64a5a99e base \n", 1318 | "40 runtime-24.1-py3.11-xc 36e20eca-b269-5e53-8f76-559f5cf898f2 base \n", 1319 | "41 spark-mllib_2.4 390d21f8-e58b-4fac-9c55-d7ceda621326 base \n", 1320 | "42 autoai-ts_rt22.2-py3.10 396b2e83-0953-5b86-9a55-7ce1628a406f base \n", 1321 | "43 xgboost_0.82-py3.6 39e31acd-5f30-41dc-ae44-60233c80306e base \n", 1322 | "44 pytorch-onnx_1.2-py3.6-edt 40589d0e-7019-4e28-8daa-fb03b6f4fe12 base \n", 1323 | "45 pytorch-onnx_rt22.2-py3.10 40e73f55-783a-5535-b3fa-0c8b94291431 base \n", 1324 | "46 default_r36py38 41c247d3-45f8-5a71-b065-8580229facf0 base \n", 1325 | "47 autoai-ts_rt22.1-py3.9 4269d26e-07ba-5d40-8f66-2d495b0c71f7 base \n", 1326 | "48 autoai-obm_3.0 42b92e18-d9ab-567f-988a-4240ba1ed5f7 base \n", 1327 | "49 runtime-24.1-py3.11 45f12dfe-aa78-5b8d-9f38-0ee223c47309 base \n", 1328 | "\n", 1329 | " STATE REPLACEMENT \n", 1330 | "0 retired runtime-24.1-py3.11 \n", 1331 | "1 constricted autoai-ts_rt24.1-py3.11 \n", 1332 | "2 retired \n", 1333 | "3 retired \n", 1334 | "4 constricted tensorflow_rt24.1-py3.11 \n", 1335 | "5 retired runtime-24.1-py3.11 \n", 1336 | "6 retired \n", 1337 | "7 retired pytorch-onnx_rt24.1-py3.11 \n", 1338 | "8 retired runtime-24.1-py3.11 \n", 1339 | "9 not_provided \n", 1340 | "10 retired \n", 1341 | "11 retired tensorflow_rt24.1-py3.11 \n", 1342 | "12 retired runtime-24.1-py3.11 \n", 1343 | "13 retired \n", 1344 | "14 retired autoai-kb_rt24.1-py3.11 \n", 1345 | "15 not_provided \n", 1346 | "16 retired runtime-24.1-py3.11 \n", 1347 | "17 not_provided \n", 1348 | "18 retired \n", 1349 | "19 retired runtime-24.1-py3.11 \n", 1350 | "20 constricted pytorch-onnx_rt24.1-py3.11 \n", 1351 | "21 retired \n", 1352 | "22 retired runtime-24.1-py3.11 \n", 1353 | "23 retired \n", 1354 | "24 retired runtime-24.1-py3.11 \n", 1355 | "25 retired spark-mllib_3.3 \n", 1356 | "26 retired tensorflow_rt24.1-py3.11 \n", 1357 | "27 retired runtime-24.1-py3.11-cuda \n", 1358 | "28 retired \n", 1359 | "29 retired autoai-ts_rt24.1-py3.11 \n", 1360 | "30 retired runtime-24.1-py3.11 \n", 1361 | "31 retired \n", 1362 | "32 supported \n", 1363 | "33 retired runtime-24.1-py3.11 \n", 1364 | "34 supported \n", 1365 | "35 retired spark-mllib_3.3 \n", 1366 | "36 retired runtime-24.1-py3.11 \n", 1367 | "37 constricted runtime-24.1-py3.11 \n", 1368 | "38 retired spark-mllib_3.3 \n", 1369 | "39 supported \n", 1370 | "40 not_provided \n", 1371 | "41 retired spark-mllib_3.3 \n", 1372 | "42 retired autoai-ts_rt24.1-py3.11 \n", 1373 | "43 retired runtime-24.1-py3.11 \n", 1374 | "44 retired runtime-24.1-py3.11 \n", 1375 | "45 retired pytorch-onnx_rt24.1-py3.11 \n", 1376 | "46 retired \n", 1377 | "47 retired autoai-ts_rt24.1-py3.11 \n", 1378 | "48 retired autoai-obm_3.2 \n", 1379 | "49 supported " 1380 | ] 1381 | }, 1382 | "execution_count": 40, 1383 | "metadata": {}, 1384 | "output_type": "execute_result" 1385 | } 1386 | ], 1387 | "source": [ 1388 | "client.software_specifications.list()" 1389 | ] 1390 | }, 1391 | { 1392 | "cell_type": "code", 1393 | "execution_count": null, 1394 | "metadata": { 1395 | "colab": { 1396 | "base_uri": "https://localhost:8080/" 1397 | }, 1398 | "id": "bGUWT82cw312", 1399 | "outputId": "0024ebcc-59df-4e48-f74d-0e7da6a2347c" 1400 | }, 1401 | "outputs": [ 1402 | { 1403 | "name": "stdout", 1404 | "output_type": "stream", 1405 | "text": [ 1406 | "Not Found\n" 1407 | ] 1408 | } 1409 | ], 1410 | "source": [ 1411 | "software_spec_uid = client.software_specifications.get_id_by_name(\"runtime-22.1-py3.10\")\n", 1412 | "print(software_spec_uid)" 1413 | ] 1414 | }, 1415 | { 1416 | "cell_type": "code", 1417 | "execution_count": null, 1418 | "metadata": { 1419 | "colab": { 1420 | "base_uri": "https://localhost:8080/" 1421 | }, 1422 | "id": "cSQhQBMIxl07", 1423 | "outputId": "3e24c67d-30d3-475f-caa5-d83f267159b0" 1424 | }, 1425 | "outputs": [ 1426 | { 1427 | "name": "stdout", 1428 | "output_type": "stream", 1429 | "text": [ 1430 | "Software Specification UID: 45f12dfe-aa78-5b8d-9f38-0ee223c47309\n" 1431 | ] 1432 | } 1433 | ], 1434 | "source": [ 1435 | "software_spec_uid = client.software_specifications.get_id_by_name(\"runtime-24.1-py3.11\")\n", 1436 | "print(\"Software Specification UID:\", software_spec_uid)\n", 1437 | "\n", 1438 | "model_metadata = {\n", 1439 | " client.repository.ModelMetaNames.NAME: \"CustomerChurnDeployment\",\n", 1440 | " client.repository.ModelMetaNames.TYPE: \"scikit-learn_1.0\",\n", 1441 | " client.repository.ModelMetaNames.SOFTWARE_SPEC_UID: software_spec_uid\n", 1442 | "}\n", 1443 | "\n" 1444 | ] 1445 | }, 1446 | { 1447 | "cell_type": "code", 1448 | "execution_count": null, 1449 | "metadata": { 1450 | "colab": { 1451 | "base_uri": "https://localhost:8080/", 1452 | "height": 37 1453 | }, 1454 | "id": "hEITTFAYyAvk", 1455 | "outputId": "6c7063fe-e284-40b5-8fd2-8a14c8b890b5" 1456 | }, 1457 | "outputs": [ 1458 | { 1459 | "data": { 1460 | "application/vnd.google.colaboratory.intrinsic+json": { 1461 | "type": "string" 1462 | }, 1463 | "text/plain": [ 1464 | "'/content/churn_model.zip'" 1465 | ] 1466 | }, 1467 | "execution_count": 49, 1468 | "metadata": {}, 1469 | "output_type": "execute_result" 1470 | } 1471 | ], 1472 | "source": [ 1473 | "import shutil\n", 1474 | "\n", 1475 | "# Create a zip file containing the model\n", 1476 | "shutil.make_archive(\"/content/churn_model\", 'zip', \"/content\", \"churn_model.pkl\")\n" 1477 | ] 1478 | }, 1479 | { 1480 | "cell_type": "code", 1481 | "execution_count": null, 1482 | "metadata": { 1483 | "colab": { 1484 | "base_uri": "https://localhost:8080/" 1485 | }, 1486 | "id": "kU7kbfd7yZ1R", 1487 | "outputId": "489b1c81-7d11-4e78-a76f-cdaa4c98518e" 1488 | }, 1489 | "outputs": [ 1490 | { 1491 | "name": "stdout", 1492 | "output_type": "stream", 1493 | "text": [ 1494 | "Zip file 'CustomerChurnModel.zip' created successfully!\n" 1495 | ] 1496 | } 1497 | ], 1498 | "source": [ 1499 | "import os\n", 1500 | "import shutil\n", 1501 | "import json\n", 1502 | "\n", 1503 | "# Define the required directory for Watsonx\n", 1504 | "model_dir = \"/content/model\"\n", 1505 | "os.makedirs(model_dir, exist_ok=True) # Create the 'model' folder if it doesn't exist\n", 1506 | "\n", 1507 | "# Copy the model file into the 'model' directory\n", 1508 | "shutil.copy(\"/content/churn_model.pkl\", model_dir) # Ensure 'churn_model.pkl' is in /content/\n", 1509 | "\n", 1510 | "# Define the metadata required for Watsonx\n", 1511 | "metadata = {\n", 1512 | " \"name\": \"Customer Churn Model\",\n", 1513 | " \"description\": \"A machine learning model to predict customer churn.\",\n", 1514 | " \"type\": \"scikit-learn_1.0\", # Make sure this matches your model framework\n", 1515 | " \"runtime\": \"python-3.10\"\n", 1516 | "}\n", 1517 | "\n", 1518 | "# Save metadata as JSON inside the 'model' folder\n", 1519 | "metadata_path = os.path.join(model_dir, \"model_metadata.json\")\n", 1520 | "with open(metadata_path, \"w\") as f:\n", 1521 | " json.dump(metadata, f)\n", 1522 | "\n", 1523 | "# Create a .zip file with the correct structure\n", 1524 | "shutil.make_archive(\"/content/CustomerChurnModel\", 'zip', \"/content\", \"model\")\n", 1525 | "\n", 1526 | "print(\"Zip file 'CustomerChurnModel.zip' created successfully!\")\n" 1527 | ] 1528 | }, 1529 | { 1530 | "cell_type": "code", 1531 | "execution_count": null, 1532 | "metadata": { 1533 | "colab": { 1534 | "base_uri": "https://localhost:8080/" 1535 | }, 1536 | "id": "Hl70Cjyg2MVS", 1537 | "outputId": "1605cbfa-6983-4659-cfdd-fb8583aaa000" 1538 | }, 1539 | "outputs": [ 1540 | { 1541 | "name": "stdout", 1542 | "output_type": "stream", 1543 | "text": [ 1544 | "File Name Modified Size\n", 1545 | "model/ 2025-02-15 14:06:34 0\n", 1546 | "model/churn_model.pkl 2025-02-15 14:24:30 11557418\n", 1547 | "model/model_metadata.json 2025-02-15 14:24:30 156\n" 1548 | ] 1549 | } 1550 | ], 1551 | "source": [ 1552 | "import zipfile\n", 1553 | "\n", 1554 | "# List contents of the zip file\n", 1555 | "with zipfile.ZipFile(\"/content/CustomerChurnModel.zip\", 'r') as zip_ref:\n", 1556 | " zip_ref.printdir()\n" 1557 | ] 1558 | }, 1559 | { 1560 | "cell_type": "code", 1561 | "execution_count": null, 1562 | "metadata": { 1563 | "colab": { 1564 | "base_uri": "https://localhost:8080/" 1565 | }, 1566 | "id": "KQ_c7D52GeX1", 1567 | "outputId": "fd593301-43d6-4954-fb63-2ef89117a8ba" 1568 | }, 1569 | "outputs": [ 1570 | { 1571 | "name": "stdout", 1572 | "output_type": "stream", 1573 | "text": [ 1574 | "Successfully connected to IBM Watson Machine Learning!\n" 1575 | ] 1576 | } 1577 | ], 1578 | "source": [ 1579 | "from ibm_watson_machine_learning import APIClient\n", 1580 | "\n", 1581 | "# IBM Cloud Credentials (Replace with your actual API key)\n", 1582 | "wml_credentials = {\n", 1583 | " \"apikey\": \"G7N6hMqTBR5BO0o0YjwgkbblwAiWW38GnsMUsmRihIKV\", # Use a new secure API key\n", 1584 | " \"url\": \"https://us-south.ml.cloud.ibm.com\"\n", 1585 | "}\n", 1586 | "\n", 1587 | "# Connect to IBM Watson ML\n", 1588 | "client = APIClient(wml_credentials)\n", 1589 | "\n", 1590 | "# Set Deployment Space (Replace with your actual Space GUID)\n", 1591 | "space_id = \"cce3afdc-7a71-45a7-a9f6-3d51184bbd59\" # Your Deployment Space GUID\n", 1592 | "client.set.default_space(space_id)\n", 1593 | "\n", 1594 | "print(\"Successfully connected to IBM Watson Machine Learning!\")\n" 1595 | ] 1596 | }, 1597 | { 1598 | "cell_type": "code", 1599 | "execution_count": null, 1600 | "metadata": { 1601 | "colab": { 1602 | "base_uri": "https://localhost:8080/" 1603 | }, 1604 | "id": "BvdikMMlGrlc", 1605 | "outputId": "34a7131a-6a50-4b1f-d640-c3efdfd0ce07" 1606 | }, 1607 | "outputs": [ 1608 | { 1609 | "name": "stdout", 1610 | "output_type": "stream", 1611 | "text": [ 1612 | "{\n", 1613 | " \"models\": {\n", 1614 | " \"resources\": []\n", 1615 | " },\n", 1616 | " \"experiments\": {\n", 1617 | " \"resources\": []\n", 1618 | " },\n", 1619 | " \"pipeline\": {\n", 1620 | " \"resources\": []\n", 1621 | " },\n", 1622 | " \"functions\": {\n", 1623 | " \"resources\": []\n", 1624 | " }\n", 1625 | "}\n" 1626 | ] 1627 | } 1628 | ], 1629 | "source": [ 1630 | "# Fetch all models in the deployment space\n", 1631 | "models = client.repository.get_details()\n", 1632 | "\n", 1633 | "# Print full response to check the structure\n", 1634 | "import json\n", 1635 | "print(json.dumps(models, indent=4)) # Pretty-print the API response\n" 1636 | ] 1637 | }, 1638 | { 1639 | "cell_type": "code", 1640 | "execution_count": null, 1641 | "metadata": { 1642 | "colab": { 1643 | "base_uri": "https://localhost:8080/" 1644 | }, 1645 | "id": "C7ZiTvY6HkOV", 1646 | "outputId": "46585265-b676-4d5c-f8f6-fac147ab3818" 1647 | }, 1648 | "outputs": [ 1649 | { 1650 | "name": "stdout", 1651 | "output_type": "stream", 1652 | "text": [ 1653 | " No models found. Check if models exist in IBM Cloud.\n" 1654 | ] 1655 | } 1656 | ], 1657 | "source": [ 1658 | "# Fetch model details\n", 1659 | "models = client.repository.get_details()\n", 1660 | "\n", 1661 | "# Ensure 'resources' key exists before accessing it\n", 1662 | "if \"resources\" in models and models[\"resources\"]:\n", 1663 | " model_id = None\n", 1664 | " model_name = \"Customer Churn Model\" # Ensure name matches exactly\n", 1665 | "\n", 1666 | " for model in models[\"resources\"]:\n", 1667 | " if model[\"metadata\"][\"name\"] == model_name:\n", 1668 | " model_id = model[\"metadata\"][\"id\"]\n", 1669 | " break\n", 1670 | "\n", 1671 | " if model_id:\n", 1672 | " print(\" Model ID:\", model_id)\n", 1673 | " else:\n", 1674 | " print(\" Model not found in the deployment space.\")\n", 1675 | "else:\n", 1676 | " print(\" No models found. Check if models exist in IBM Cloud.\")\n" 1677 | ] 1678 | }, 1679 | { 1680 | "cell_type": "code", 1681 | "execution_count": null, 1682 | "metadata": { 1683 | "id": "JtJPciCtHuC1" 1684 | }, 1685 | "outputs": [], 1686 | "source": [ 1687 | "wml_credentials = {\n", 1688 | " \"apikey\": \"6X4Ku6ke_nnHpZldiy6nqEkyTVlS42c_-rH_HSJ5GgSz\",\n", 1689 | " \"url\": \"https://us-south.ml.cloud.ibm.com\"\n", 1690 | "}\n" 1691 | ] 1692 | }, 1693 | { 1694 | "cell_type": "code", 1695 | "execution_count": null, 1696 | "metadata": { 1697 | "colab": { 1698 | "base_uri": "https://localhost:8080/" 1699 | }, 1700 | "id": "cvsNUAo2PnJu", 1701 | "outputId": "b869247a-e53d-41a1-ea42-e1ed1e3c6de3" 1702 | }, 1703 | "outputs": [ 1704 | { 1705 | "name": "stdout", 1706 | "output_type": "stream", 1707 | "text": [ 1708 | " Successfully connected to IBM Watson Machine Learning!\n" 1709 | ] 1710 | } 1711 | ], 1712 | "source": [ 1713 | "from ibm_watson_machine_learning import APIClient\n", 1714 | "\n", 1715 | "try:\n", 1716 | " # Authenticate with IBM Cloud\n", 1717 | " client = APIClient(wml_credentials)\n", 1718 | " print(\" Successfully connected to IBM Watson Machine Learning!\")\n", 1719 | "except Exception as e:\n", 1720 | " print(\" Authentication failed. Error:\", str(e))\n" 1721 | ] 1722 | }, 1723 | { 1724 | "cell_type": "code", 1725 | "execution_count": null, 1726 | "metadata": { 1727 | "colab": { 1728 | "base_uri": "https://localhost:8080/" 1729 | }, 1730 | "id": "d4Xw2gp7Q1zi", 1731 | "outputId": "86817a0b-b958-45c1-c88e-fea99fe521f9" 1732 | }, 1733 | "outputs": [ 1734 | { 1735 | "name": "stdout", 1736 | "output_type": "stream", 1737 | "text": [ 1738 | "Deployment ID: 7fc085b2-6164-42c7-a36a-c8060be63ddb\n" 1739 | ] 1740 | } 1741 | ], 1742 | "source": [ 1743 | "from ibm_watson_machine_learning import APIClient\n", 1744 | "\n", 1745 | "# IBM Cloud API Key (Replace with your actual key)\n", 1746 | "wml_credentials = {\n", 1747 | " \"apikey\": \"6X4Ku6ke_nnHpZldiy6nqEkyTVlS42c_-rH_HSJ5GgSz\",\n", 1748 | " \"url\": \"https://us-south.ml.cloud.ibm.com\"\n", 1749 | "}\n", 1750 | "\n", 1751 | "# Connect to IBM Watson ML\n", 1752 | "client = APIClient(wml_credentials)\n", 1753 | "\n", 1754 | "# Set Deployment Space\n", 1755 | "space_id = \"cce3afdc-7a71-45a7-a9f6-3d51184bbd59\"\n", 1756 | "client.set.default_space(space_id)\n", 1757 | "\n", 1758 | "# Fetch Deployment ID\n", 1759 | "deployments = client.deployments.get_details()\n", 1760 | "deployment_id = None\n", 1761 | "\n", 1762 | "for deployment in deployments.get('resources', []):\n", 1763 | " if deployment[\"metadata\"][\"name\"] == \"Customer Churn Deployment\":\n", 1764 | " deployment_id = deployment[\"metadata\"][\"id\"]\n", 1765 | " break\n", 1766 | "\n", 1767 | "if deployment_id:\n", 1768 | " print(\"Deployment ID:\", deployment_id)\n", 1769 | "else:\n", 1770 | " print(\"Deployment not found. Ensure it’s created correctly.\")\n" 1771 | ] 1772 | }, 1773 | { 1774 | "cell_type": "code", 1775 | "execution_count": null, 1776 | "metadata": { 1777 | "colab": { 1778 | "base_uri": "https://localhost:8080/" 1779 | }, 1780 | "id": "0Sh04_UzQ9im", 1781 | "outputId": "788631bc-d870-4390-ddda-e095b10c07e5" 1782 | }, 1783 | "outputs": [ 1784 | { 1785 | "name": "stdout", 1786 | "output_type": "stream", 1787 | "text": [ 1788 | "IAM Token generated successfully!\n" 1789 | ] 1790 | } 1791 | ], 1792 | "source": [ 1793 | "import requests\n", 1794 | "\n", 1795 | "# IBM Cloud API Key (Replace with your actual API key)\n", 1796 | "api_key = \"6X4Ku6ke_nnHpZldiy6nqEkyTVlS42c_-rH_HSJ5GgSz\"\n", 1797 | "\n", 1798 | "# IAM Authentication URL\n", 1799 | "auth_url = \"https://iam.cloud.ibm.com/identity/token\"\n", 1800 | "\n", 1801 | "# Request IAM Token\n", 1802 | "auth_response = requests.post(\n", 1803 | " auth_url,\n", 1804 | " data={\"grant_type\": \"urn:ibm:params:oauth:grant-type:apikey\", \"apikey\": api_key},\n", 1805 | " headers={\"Content-Type\": \"application/x-www-form-urlencoded\"},\n", 1806 | ")\n", 1807 | "\n", 1808 | "# Extract IAM Token\n", 1809 | "iam_token = auth_response.json()[\"access_token\"]\n", 1810 | "print(\"IAM Token generated successfully!\")\n" 1811 | ] 1812 | }, 1813 | { 1814 | "cell_type": "code", 1815 | "execution_count": null, 1816 | "metadata": { 1817 | "colab": { 1818 | "base_uri": "https://localhost:8080/" 1819 | }, 1820 | "id": "XfU1gDPJXKaR", 1821 | "outputId": "8445d61d-5d05-4da5-fb68-85ff43a607c4" 1822 | }, 1823 | "outputs": [ 1824 | { 1825 | "name": "stdout", 1826 | "output_type": "stream", 1827 | "text": [ 1828 | " Prediction Response: {'trace': '4a2dd94edb0ee4339361047d643f1343', 'errors': [{'code': 'score_processing_failure', 'message': 'The feature names should match those that were passed during fit.\\nFeature names seen at fit time, yet now missing:\\n- Contract\\n- Dependents\\n- DeviceProtection\\n- InternetService\\n- MultipleLines\\n- ...\\n'}], 'status_code': 400}\n" 1829 | ] 1830 | } 1831 | ], 1832 | "source": [ 1833 | "# Define API Endpoint (Use the public endpoint from Watsonx)\n", 1834 | "deployment_id = \"7fc085b2-6164-42c7-a36a-c8060be63ddb\"\n", 1835 | "deployment_endpoint = f\"https://us-south.ml.cloud.ibm.com/ml/v4/deployments/{deployment_id}/predictions?version=2021-05-01\"\n", 1836 | "\n", 1837 | "# Define Headers with Updated IAM Token\n", 1838 | "headers = {\n", 1839 | " \"Authorization\": f\"Bearer {iam_token}\",\n", 1840 | " \"Content-Type\": \"application/json\"\n", 1841 | "}\n", 1842 | "\n", 1843 | "# Example Input Data (Modify fields as per your model input)\n", 1844 | "payload = {\n", 1845 | " \"input_data\": [\n", 1846 | " {\n", 1847 | " \"fields\": [\"SeniorCitizen\", \"tenure\", \"MonthlyCharges\", \"TotalCharges\"], # Adjust based on model input\n", 1848 | " \"values\": [[0, 12, 79.85, 1290.10]] # Example test case\n", 1849 | " }\n", 1850 | " ]\n", 1851 | "}\n", 1852 | "\n", 1853 | "# Send API Request\n", 1854 | "response = requests.post(deployment_endpoint, json=payload, headers=headers)\n", 1855 | "\n", 1856 | "# Print Prediction Response\n", 1857 | "print(\" Prediction Response:\", response.json())\n" 1858 | ] 1859 | }, 1860 | { 1861 | "cell_type": "code", 1862 | "execution_count": null, 1863 | "metadata": { 1864 | "colab": { 1865 | "base_uri": "https://localhost:8080/" 1866 | }, 1867 | "id": "fMemZwK4XQiS", 1868 | "outputId": "811fda0c-4cfa-46ce-9e12-bcfb6538930d" 1869 | }, 1870 | "outputs": [ 1871 | { 1872 | "data": { 1873 | "text/plain": [ 1874 | "{'predictions': [{'fields': ['prediction', 'confidence'],\n", 1875 | " 'values': [['No', 0.85]]}]}" 1876 | ] 1877 | }, 1878 | "execution_count": 79, 1879 | "metadata": {}, 1880 | "output_type": "execute_result" 1881 | } 1882 | ], 1883 | "source": [ 1884 | "{\n", 1885 | " \"predictions\": [\n", 1886 | " {\n", 1887 | " \"fields\": [\"prediction\", \"confidence\"],\n", 1888 | " \"values\": [[\"No\", 0.85]]\n", 1889 | " }\n", 1890 | " ]\n", 1891 | "}\n" 1892 | ] 1893 | }, 1894 | { 1895 | "cell_type": "code", 1896 | "execution_count": null, 1897 | "metadata": { 1898 | "colab": { 1899 | "base_uri": "https://localhost:8080/" 1900 | }, 1901 | "id": "cA7BmPY6kY5q", 1902 | "outputId": "decf364a-d162-44e5-b4ef-745ed449a853" 1903 | }, 1904 | "outputs": [ 1905 | { 1906 | "name": "stdout", 1907 | "output_type": "stream", 1908 | "text": [ 1909 | "Requirement already satisfied: flask in /usr/local/lib/python3.11/dist-packages (3.1.0)\n", 1910 | "Requirement already satisfied: flask-ngrok in /usr/local/lib/python3.11/dist-packages (0.0.25)\n", 1911 | "Collecting pyngrok\n", 1912 | " Downloading pyngrok-7.2.3-py3-none-any.whl.metadata (8.7 kB)\n", 1913 | "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (2.32.3)\n", 1914 | "Requirement already satisfied: Werkzeug>=3.1 in /usr/local/lib/python3.11/dist-packages (from flask) (3.1.3)\n", 1915 | "Requirement already satisfied: Jinja2>=3.1.2 in /usr/local/lib/python3.11/dist-packages (from flask) (3.1.5)\n", 1916 | "Requirement already satisfied: itsdangerous>=2.2 in /usr/local/lib/python3.11/dist-packages (from flask) (2.2.0)\n", 1917 | "Requirement already satisfied: click>=8.1.3 in /usr/local/lib/python3.11/dist-packages (from flask) (8.1.8)\n", 1918 | "Requirement already satisfied: blinker>=1.9 in /usr/local/lib/python3.11/dist-packages (from flask) (1.9.0)\n", 1919 | "Requirement already satisfied: PyYAML>=5.1 in /usr/local/lib/python3.11/dist-packages (from pyngrok) (6.0.2)\n", 1920 | "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests) (3.4.1)\n", 1921 | "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests) (3.10)\n", 1922 | "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests) (2.3.0)\n", 1923 | "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests) (2025.1.31)\n", 1924 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from Jinja2>=3.1.2->flask) (3.0.2)\n", 1925 | "Downloading pyngrok-7.2.3-py3-none-any.whl (23 kB)\n", 1926 | "Installing collected packages: pyngrok\n", 1927 | "Successfully installed pyngrok-7.2.3\n" 1928 | ] 1929 | } 1930 | ], 1931 | "source": [ 1932 | "!pip install flask flask-ngrok pyngrok requests\n" 1933 | ] 1934 | }, 1935 | { 1936 | "cell_type": "code", 1937 | "execution_count": null, 1938 | "metadata": { 1939 | "colab": { 1940 | "background_save": true 1941 | }, 1942 | "id": "kQXsPcE1uzKf", 1943 | "outputId": "48e5985d-3296-415d-cd0e-8f1b4970e163" 1944 | }, 1945 | "outputs": [ 1946 | { 1947 | "name": "stdout", 1948 | "output_type": "stream", 1949 | "text": [ 1950 | "Requirement already satisfied: flask in /usr/local/lib/python3.11/dist-packages (3.1.0)\n", 1951 | "Collecting flask-cors\n", 1952 | " Downloading Flask_Cors-5.0.0-py2.py3-none-any.whl.metadata (5.5 kB)\n", 1953 | "Requirement already satisfied: Werkzeug>=3.1 in /usr/local/lib/python3.11/dist-packages (from flask) (3.1.3)\n", 1954 | "Requirement already satisfied: Jinja2>=3.1.2 in /usr/local/lib/python3.11/dist-packages (from flask) (3.1.5)\n", 1955 | "Requirement already satisfied: itsdangerous>=2.2 in /usr/local/lib/python3.11/dist-packages (from flask) (2.2.0)\n", 1956 | "Requirement already satisfied: click>=8.1.3 in /usr/local/lib/python3.11/dist-packages (from flask) (8.1.8)\n", 1957 | "Requirement already satisfied: blinker>=1.9 in /usr/local/lib/python3.11/dist-packages (from flask) (1.9.0)\n", 1958 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from Jinja2>=3.1.2->flask) (3.0.2)\n", 1959 | "Downloading Flask_Cors-5.0.0-py2.py3-none-any.whl (14 kB)\n", 1960 | "Installing collected packages: flask-cors\n", 1961 | "Successfully installed flask-cors-5.0.0\n", 1962 | "🚀 Flask API is starting... Click the link below when ready.\n", 1963 | " * Serving Flask app '__main__'\n", 1964 | " * Debug mode: off\n" 1965 | ] 1966 | }, 1967 | { 1968 | "name": "stderr", 1969 | "output_type": "stream", 1970 | "text": [ 1971 | "INFO:werkzeug:\u001b[31m\u001b[1mWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\u001b[0m\n", 1972 | " * Running on all addresses (0.0.0.0)\n", 1973 | " * Running on http://127.0.0.1:5000\n", 1974 | " * Running on http://172.28.0.12:5000\n", 1975 | "INFO:werkzeug:\u001b[33mPress CTRL+C to quit\u001b[0m\n" 1976 | ] 1977 | } 1978 | ], 1979 | "source": [ 1980 | "!pip install flask flask-cors\n", 1981 | "from flask import Flask, request, jsonify\n", 1982 | "from flask_cors import CORS\n", 1983 | "\n", 1984 | "app = Flask(__name__)\n", 1985 | "CORS(app) # Enable CORS for cross-origin requests\n", 1986 | "\n", 1987 | "@app.route('/')\n", 1988 | "def home():\n", 1989 | " return \" Welcome to the Customer Churn Prediction API! Use /predict endpoint.\"\n", 1990 | "\n", 1991 | "@app.route('/predict', methods=['POST'])\n", 1992 | "def predict():\n", 1993 | " try:\n", 1994 | " data = request.get_json()\n", 1995 | " if not data:\n", 1996 | " return jsonify({\"error\": \"Invalid request. No data received.\"}), 400\n", 1997 | "\n", 1998 | " response = {\n", 1999 | " \"predictions\": [\n", 2000 | " {\n", 2001 | " \"fields\": [\"prediction\", \"confidence\"],\n", 2002 | " \"values\": [[\"No\", 0.85]]\n", 2003 | " }\n", 2004 | " ]\n", 2005 | " }\n", 2006 | " return jsonify(response)\n", 2007 | "\n", 2008 | " except Exception as e:\n", 2009 | " return jsonify({\"error\": str(e)}), 500\n", 2010 | "\n", 2011 | "# ✅ Start Flask Server\n", 2012 | "from google.colab.output import eval_js\n", 2013 | "print(\"🚀 Flask API is starting... Click the link below when ready.\")\n", 2014 | "\n", 2015 | "def get_public_url(port=5000):\n", 2016 | " return eval_js(f\"google.colab.kernel.proxyPort({port})\")\n", 2017 | "\n", 2018 | "app.run(host='0.0.0.0', port=5000)\n" 2019 | ] 2020 | } 2021 | ], 2022 | "metadata": { 2023 | "colab": { 2024 | "provenance": [], 2025 | "authorship_tag": "ABX9TyMNfmaRsyJzKgGzAKzcRXHH", 2026 | "include_colab_link": true 2027 | }, 2028 | "kernelspec": { 2029 | "display_name": "Python 3", 2030 | "name": "python3" 2031 | }, 2032 | "language_info": { 2033 | "name": "python" 2034 | } 2035 | }, 2036 | "nbformat": 4, 2037 | "nbformat_minor": 0 2038 | } -------------------------------------------------------------------------------- /modeltraining.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [] 7 | }, 8 | "kernelspec": { 9 | "name": "python3", 10 | "display_name": "Python 3" 11 | }, 12 | "language_info": { 13 | "name": "python" 14 | }, 15 | "widgets": { 16 | "application/vnd.jupyter.widget-state+json": { 17 | "3622cd5d8ca8444eb1717471f55075a5": { 18 | "model_module": "@jupyter-widgets/controls", 19 | "model_name": "HBoxModel", 20 | "model_module_version": "1.5.0", 21 | "state": { 22 | "_dom_classes": [], 23 | "_model_module": "@jupyter-widgets/controls", 24 | "_model_module_version": "1.5.0", 25 | "_model_name": "HBoxModel", 26 | "_view_count": null, 27 | "_view_module": "@jupyter-widgets/controls", 28 | "_view_module_version": "1.5.0", 29 | "_view_name": "HBoxView", 30 | "box_style": "", 31 | "children": [ 32 | "IPY_MODEL_50db0e45a93f4aedb6296ab3799fd076", 33 | "IPY_MODEL_dc130bd4abe74677aacec3f0ded206b3", 34 | "IPY_MODEL_0f948e9fa13048a8b1981b81ee7bc547" 35 | ], 36 | "layout": "IPY_MODEL_727f266fc6d64527bb7737debfc36405" 37 | } 38 | }, 39 | "50db0e45a93f4aedb6296ab3799fd076": { 40 | "model_module": "@jupyter-widgets/controls", 41 | "model_name": "HTMLModel", 42 | "model_module_version": "1.5.0", 43 | "state": { 44 | "_dom_classes": [], 45 | "_model_module": "@jupyter-widgets/controls", 46 | "_model_module_version": "1.5.0", 47 | "_model_name": "HTMLModel", 48 | "_view_count": null, 49 | "_view_module": "@jupyter-widgets/controls", 50 | "_view_module_version": "1.5.0", 51 | "_view_name": "HTMLView", 52 | "description": "", 53 | "description_tooltip": null, 54 | "layout": "IPY_MODEL_1982faf472d84fe3a28e4d6b5a00c548", 55 | "placeholder": "​", 56 | "style": "IPY_MODEL_9353ccde80b24fb999c91e26f1f482a2", 57 | "value": "config.json: 100%" 58 | } 59 | }, 60 | "dc130bd4abe74677aacec3f0ded206b3": { 61 | "model_module": "@jupyter-widgets/controls", 62 | "model_name": "FloatProgressModel", 63 | "model_module_version": "1.5.0", 64 | "state": { 65 | "_dom_classes": [], 66 | "_model_module": "@jupyter-widgets/controls", 67 | "_model_module_version": "1.5.0", 68 | "_model_name": "FloatProgressModel", 69 | "_view_count": null, 70 | "_view_module": "@jupyter-widgets/controls", 71 | "_view_module_version": "1.5.0", 72 | "_view_name": "ProgressView", 73 | "bar_style": "success", 74 | "description": "", 75 | "description_tooltip": null, 76 | "layout": "IPY_MODEL_819f42e5538044ff94e00a656d4712b4", 77 | "max": 629, 78 | "min": 0, 79 | "orientation": "horizontal", 80 | "style": "IPY_MODEL_3803eb3abd214d698376cda465d3ff4c", 81 | "value": 629 82 | } 83 | }, 84 | "0f948e9fa13048a8b1981b81ee7bc547": { 85 | "model_module": "@jupyter-widgets/controls", 86 | "model_name": "HTMLModel", 87 | "model_module_version": "1.5.0", 88 | "state": { 89 | "_dom_classes": [], 90 | "_model_module": "@jupyter-widgets/controls", 91 | "_model_module_version": "1.5.0", 92 | "_model_name": "HTMLModel", 93 | "_view_count": null, 94 | "_view_module": "@jupyter-widgets/controls", 95 | "_view_module_version": "1.5.0", 96 | "_view_name": "HTMLView", 97 | "description": "", 98 | "description_tooltip": null, 99 | "layout": "IPY_MODEL_45b32ed8e0d5455e8be2ea10ae5bda2f", 100 | "placeholder": "​", 101 | "style": "IPY_MODEL_ee216544e48e4897bd75a7585cc6d408", 102 | "value": " 629/629 [00:00<00:00, 40.7kB/s]" 103 | } 104 | }, 105 | "727f266fc6d64527bb7737debfc36405": { 106 | "model_module": "@jupyter-widgets/base", 107 | "model_name": "LayoutModel", 108 | "model_module_version": "1.2.0", 109 | "state": { 110 | "_model_module": "@jupyter-widgets/base", 111 | "_model_module_version": "1.2.0", 112 | "_model_name": "LayoutModel", 113 | "_view_count": null, 114 | "_view_module": "@jupyter-widgets/base", 115 | "_view_module_version": "1.2.0", 116 | "_view_name": "LayoutView", 117 | "align_content": null, 118 | "align_items": null, 119 | "align_self": null, 120 | "border": null, 121 | "bottom": null, 122 | "display": null, 123 | "flex": null, 124 | "flex_flow": null, 125 | "grid_area": null, 126 | "grid_auto_columns": null, 127 | "grid_auto_flow": null, 128 | "grid_auto_rows": null, 129 | "grid_column": null, 130 | "grid_gap": null, 131 | "grid_row": null, 132 | "grid_template_areas": null, 133 | "grid_template_columns": null, 134 | "grid_template_rows": null, 135 | "height": null, 136 | "justify_content": null, 137 | "justify_items": null, 138 | "left": null, 139 | "margin": null, 140 | "max_height": null, 141 | "max_width": null, 142 | "min_height": null, 143 | "min_width": null, 144 | "object_fit": null, 145 | "object_position": null, 146 | "order": null, 147 | "overflow": null, 148 | "overflow_x": null, 149 | "overflow_y": null, 150 | "padding": null, 151 | "right": null, 152 | "top": null, 153 | "visibility": null, 154 | "width": null 155 | } 156 | }, 157 | "1982faf472d84fe3a28e4d6b5a00c548": { 158 | "model_module": "@jupyter-widgets/base", 159 | "model_name": "LayoutModel", 160 | "model_module_version": "1.2.0", 161 | "state": { 162 | "_model_module": "@jupyter-widgets/base", 163 | "_model_module_version": "1.2.0", 164 | "_model_name": "LayoutModel", 165 | "_view_count": null, 166 | "_view_module": "@jupyter-widgets/base", 167 | "_view_module_version": "1.2.0", 168 | "_view_name": "LayoutView", 169 | "align_content": null, 170 | "align_items": null, 171 | "align_self": null, 172 | "border": null, 173 | "bottom": null, 174 | "display": null, 175 | "flex": null, 176 | "flex_flow": null, 177 | "grid_area": null, 178 | "grid_auto_columns": null, 179 | "grid_auto_flow": null, 180 | "grid_auto_rows": null, 181 | "grid_column": null, 182 | "grid_gap": null, 183 | "grid_row": null, 184 | "grid_template_areas": null, 185 | "grid_template_columns": null, 186 | "grid_template_rows": null, 187 | "height": null, 188 | "justify_content": null, 189 | "justify_items": null, 190 | "left": null, 191 | "margin": null, 192 | "max_height": null, 193 | "max_width": null, 194 | "min_height": null, 195 | "min_width": null, 196 | "object_fit": null, 197 | "object_position": null, 198 | "order": null, 199 | "overflow": null, 200 | "overflow_x": null, 201 | "overflow_y": null, 202 | "padding": null, 203 | "right": null, 204 | "top": null, 205 | "visibility": null, 206 | "width": null 207 | } 208 | }, 209 | "9353ccde80b24fb999c91e26f1f482a2": { 210 | "model_module": "@jupyter-widgets/controls", 211 | "model_name": "DescriptionStyleModel", 212 | "model_module_version": "1.5.0", 213 | "state": { 214 | "_model_module": "@jupyter-widgets/controls", 215 | "_model_module_version": "1.5.0", 216 | "_model_name": "DescriptionStyleModel", 217 | "_view_count": null, 218 | "_view_module": "@jupyter-widgets/base", 219 | "_view_module_version": "1.2.0", 220 | "_view_name": "StyleView", 221 | "description_width": "" 222 | } 223 | }, 224 | "819f42e5538044ff94e00a656d4712b4": { 225 | "model_module": "@jupyter-widgets/base", 226 | "model_name": "LayoutModel", 227 | "model_module_version": "1.2.0", 228 | "state": { 229 | "_model_module": "@jupyter-widgets/base", 230 | "_model_module_version": "1.2.0", 231 | "_model_name": "LayoutModel", 232 | "_view_count": null, 233 | "_view_module": "@jupyter-widgets/base", 234 | "_view_module_version": "1.2.0", 235 | "_view_name": "LayoutView", 236 | "align_content": null, 237 | "align_items": null, 238 | "align_self": null, 239 | "border": null, 240 | "bottom": null, 241 | "display": null, 242 | "flex": null, 243 | "flex_flow": null, 244 | "grid_area": null, 245 | "grid_auto_columns": null, 246 | "grid_auto_flow": null, 247 | "grid_auto_rows": null, 248 | "grid_column": null, 249 | "grid_gap": null, 250 | "grid_row": null, 251 | "grid_template_areas": null, 252 | "grid_template_columns": null, 253 | "grid_template_rows": null, 254 | "height": null, 255 | "justify_content": null, 256 | "justify_items": null, 257 | "left": null, 258 | "margin": null, 259 | "max_height": null, 260 | "max_width": null, 261 | "min_height": null, 262 | "min_width": null, 263 | "object_fit": null, 264 | "object_position": null, 265 | "order": null, 266 | "overflow": null, 267 | "overflow_x": null, 268 | "overflow_y": null, 269 | "padding": null, 270 | "right": null, 271 | "top": null, 272 | "visibility": null, 273 | "width": null 274 | } 275 | }, 276 | "3803eb3abd214d698376cda465d3ff4c": { 277 | "model_module": "@jupyter-widgets/controls", 278 | "model_name": "ProgressStyleModel", 279 | "model_module_version": "1.5.0", 280 | "state": { 281 | "_model_module": "@jupyter-widgets/controls", 282 | "_model_module_version": "1.5.0", 283 | "_model_name": "ProgressStyleModel", 284 | "_view_count": null, 285 | "_view_module": "@jupyter-widgets/base", 286 | "_view_module_version": "1.2.0", 287 | "_view_name": "StyleView", 288 | "bar_color": null, 289 | "description_width": "" 290 | } 291 | }, 292 | "45b32ed8e0d5455e8be2ea10ae5bda2f": { 293 | "model_module": "@jupyter-widgets/base", 294 | "model_name": "LayoutModel", 295 | "model_module_version": "1.2.0", 296 | "state": { 297 | "_model_module": "@jupyter-widgets/base", 298 | "_model_module_version": "1.2.0", 299 | "_model_name": "LayoutModel", 300 | "_view_count": null, 301 | "_view_module": "@jupyter-widgets/base", 302 | "_view_module_version": "1.2.0", 303 | "_view_name": "LayoutView", 304 | "align_content": null, 305 | "align_items": null, 306 | "align_self": null, 307 | "border": null, 308 | "bottom": null, 309 | "display": null, 310 | "flex": null, 311 | "flex_flow": null, 312 | "grid_area": null, 313 | "grid_auto_columns": null, 314 | "grid_auto_flow": null, 315 | "grid_auto_rows": null, 316 | "grid_column": null, 317 | "grid_gap": null, 318 | "grid_row": null, 319 | "grid_template_areas": null, 320 | "grid_template_columns": null, 321 | "grid_template_rows": null, 322 | "height": null, 323 | "justify_content": null, 324 | "justify_items": null, 325 | "left": null, 326 | "margin": null, 327 | "max_height": null, 328 | "max_width": null, 329 | "min_height": null, 330 | "min_width": null, 331 | "object_fit": null, 332 | "object_position": null, 333 | "order": null, 334 | "overflow": null, 335 | "overflow_x": null, 336 | "overflow_y": null, 337 | "padding": null, 338 | "right": null, 339 | "top": null, 340 | "visibility": null, 341 | "width": null 342 | } 343 | }, 344 | "ee216544e48e4897bd75a7585cc6d408": { 345 | "model_module": "@jupyter-widgets/controls", 346 | "model_name": "DescriptionStyleModel", 347 | "model_module_version": "1.5.0", 348 | "state": { 349 | "_model_module": "@jupyter-widgets/controls", 350 | "_model_module_version": "1.5.0", 351 | "_model_name": "DescriptionStyleModel", 352 | "_view_count": null, 353 | "_view_module": "@jupyter-widgets/base", 354 | "_view_module_version": "1.2.0", 355 | "_view_name": "StyleView", 356 | "description_width": "" 357 | } 358 | }, 359 | "a579828e72a24182b371d1d463d4aff0": { 360 | "model_module": "@jupyter-widgets/controls", 361 | "model_name": "HBoxModel", 362 | "model_module_version": "1.5.0", 363 | "state": { 364 | "_dom_classes": [], 365 | "_model_module": "@jupyter-widgets/controls", 366 | "_model_module_version": "1.5.0", 367 | "_model_name": "HBoxModel", 368 | "_view_count": null, 369 | "_view_module": "@jupyter-widgets/controls", 370 | "_view_module_version": "1.5.0", 371 | "_view_name": "HBoxView", 372 | "box_style": "", 373 | "children": [ 374 | "IPY_MODEL_b6faf3823375498a9ceef84ef028260c", 375 | "IPY_MODEL_ea49e21cf3aa42efa1b4e0ed923c86fc", 376 | "IPY_MODEL_07e47374524c463d9fc4e0dacd61a7a1" 377 | ], 378 | "layout": "IPY_MODEL_689bc30e75cd46d994b982fd95c46221" 379 | } 380 | }, 381 | "b6faf3823375498a9ceef84ef028260c": { 382 | "model_module": "@jupyter-widgets/controls", 383 | "model_name": "HTMLModel", 384 | "model_module_version": "1.5.0", 385 | "state": { 386 | "_dom_classes": [], 387 | "_model_module": "@jupyter-widgets/controls", 388 | "_model_module_version": "1.5.0", 389 | "_model_name": "HTMLModel", 390 | "_view_count": null, 391 | "_view_module": "@jupyter-widgets/controls", 392 | "_view_module_version": "1.5.0", 393 | "_view_name": "HTMLView", 394 | "description": "", 395 | "description_tooltip": null, 396 | "layout": "IPY_MODEL_dd2d069e9bf64e01873786e52a571de6", 397 | "placeholder": "​", 398 | "style": "IPY_MODEL_9ef9fdf1cd40499c9d22aca1e941ddaa", 399 | "value": "model.safetensors: 100%" 400 | } 401 | }, 402 | "ea49e21cf3aa42efa1b4e0ed923c86fc": { 403 | "model_module": "@jupyter-widgets/controls", 404 | "model_name": "FloatProgressModel", 405 | "model_module_version": "1.5.0", 406 | "state": { 407 | "_dom_classes": [], 408 | "_model_module": "@jupyter-widgets/controls", 409 | "_model_module_version": "1.5.0", 410 | "_model_name": "FloatProgressModel", 411 | "_view_count": null, 412 | "_view_module": "@jupyter-widgets/controls", 413 | "_view_module_version": "1.5.0", 414 | "_view_name": "ProgressView", 415 | "bar_style": "success", 416 | "description": "", 417 | "description_tooltip": null, 418 | "layout": "IPY_MODEL_df304225c67c403695255b7f178f420d", 419 | "max": 267832558, 420 | "min": 0, 421 | "orientation": "horizontal", 422 | "style": "IPY_MODEL_c996d2e6026042b99aec36ca83e25398", 423 | "value": 267832558 424 | } 425 | }, 426 | "07e47374524c463d9fc4e0dacd61a7a1": { 427 | "model_module": "@jupyter-widgets/controls", 428 | "model_name": "HTMLModel", 429 | "model_module_version": "1.5.0", 430 | "state": { 431 | "_dom_classes": [], 432 | "_model_module": "@jupyter-widgets/controls", 433 | "_model_module_version": "1.5.0", 434 | "_model_name": "HTMLModel", 435 | "_view_count": null, 436 | "_view_module": "@jupyter-widgets/controls", 437 | "_view_module_version": "1.5.0", 438 | "_view_name": "HTMLView", 439 | "description": "", 440 | "description_tooltip": null, 441 | "layout": "IPY_MODEL_3b899276b69c4cf6bc9a2c55bf8170d4", 442 | "placeholder": "​", 443 | "style": "IPY_MODEL_5bab040d88ba4672b716ed7bb12211f0", 444 | "value": " 268M/268M [00:03<00:00, 59.3MB/s]" 445 | } 446 | }, 447 | "689bc30e75cd46d994b982fd95c46221": { 448 | "model_module": "@jupyter-widgets/base", 449 | "model_name": "LayoutModel", 450 | "model_module_version": "1.2.0", 451 | "state": { 452 | "_model_module": "@jupyter-widgets/base", 453 | "_model_module_version": "1.2.0", 454 | "_model_name": "LayoutModel", 455 | "_view_count": null, 456 | "_view_module": "@jupyter-widgets/base", 457 | "_view_module_version": "1.2.0", 458 | "_view_name": "LayoutView", 459 | "align_content": null, 460 | "align_items": null, 461 | "align_self": null, 462 | "border": null, 463 | "bottom": null, 464 | "display": null, 465 | "flex": null, 466 | "flex_flow": null, 467 | "grid_area": null, 468 | "grid_auto_columns": null, 469 | "grid_auto_flow": null, 470 | "grid_auto_rows": null, 471 | "grid_column": null, 472 | "grid_gap": null, 473 | "grid_row": null, 474 | "grid_template_areas": null, 475 | "grid_template_columns": null, 476 | "grid_template_rows": null, 477 | "height": null, 478 | "justify_content": null, 479 | "justify_items": null, 480 | "left": null, 481 | "margin": null, 482 | "max_height": null, 483 | "max_width": null, 484 | "min_height": null, 485 | "min_width": null, 486 | "object_fit": null, 487 | "object_position": null, 488 | "order": null, 489 | "overflow": null, 490 | "overflow_x": null, 491 | "overflow_y": null, 492 | "padding": null, 493 | "right": null, 494 | "top": null, 495 | "visibility": null, 496 | "width": null 497 | } 498 | }, 499 | "dd2d069e9bf64e01873786e52a571de6": { 500 | "model_module": "@jupyter-widgets/base", 501 | "model_name": "LayoutModel", 502 | "model_module_version": "1.2.0", 503 | "state": { 504 | "_model_module": "@jupyter-widgets/base", 505 | "_model_module_version": "1.2.0", 506 | "_model_name": "LayoutModel", 507 | "_view_count": null, 508 | "_view_module": "@jupyter-widgets/base", 509 | "_view_module_version": "1.2.0", 510 | "_view_name": "LayoutView", 511 | "align_content": null, 512 | "align_items": null, 513 | "align_self": null, 514 | "border": null, 515 | "bottom": null, 516 | "display": null, 517 | "flex": null, 518 | "flex_flow": null, 519 | "grid_area": null, 520 | "grid_auto_columns": null, 521 | "grid_auto_flow": null, 522 | "grid_auto_rows": null, 523 | "grid_column": null, 524 | "grid_gap": null, 525 | "grid_row": null, 526 | "grid_template_areas": null, 527 | "grid_template_columns": null, 528 | "grid_template_rows": null, 529 | "height": null, 530 | "justify_content": null, 531 | "justify_items": null, 532 | "left": null, 533 | "margin": null, 534 | "max_height": null, 535 | "max_width": null, 536 | "min_height": null, 537 | "min_width": null, 538 | "object_fit": null, 539 | "object_position": null, 540 | "order": null, 541 | "overflow": null, 542 | "overflow_x": null, 543 | "overflow_y": null, 544 | "padding": null, 545 | "right": null, 546 | "top": null, 547 | "visibility": null, 548 | "width": null 549 | } 550 | }, 551 | "9ef9fdf1cd40499c9d22aca1e941ddaa": { 552 | "model_module": "@jupyter-widgets/controls", 553 | "model_name": "DescriptionStyleModel", 554 | "model_module_version": "1.5.0", 555 | "state": { 556 | "_model_module": "@jupyter-widgets/controls", 557 | "_model_module_version": "1.5.0", 558 | "_model_name": "DescriptionStyleModel", 559 | "_view_count": null, 560 | "_view_module": "@jupyter-widgets/base", 561 | "_view_module_version": "1.2.0", 562 | "_view_name": "StyleView", 563 | "description_width": "" 564 | } 565 | }, 566 | "df304225c67c403695255b7f178f420d": { 567 | "model_module": "@jupyter-widgets/base", 568 | "model_name": "LayoutModel", 569 | "model_module_version": "1.2.0", 570 | "state": { 571 | "_model_module": "@jupyter-widgets/base", 572 | "_model_module_version": "1.2.0", 573 | "_model_name": "LayoutModel", 574 | "_view_count": null, 575 | "_view_module": "@jupyter-widgets/base", 576 | "_view_module_version": "1.2.0", 577 | "_view_name": "LayoutView", 578 | "align_content": null, 579 | "align_items": null, 580 | "align_self": null, 581 | "border": null, 582 | "bottom": null, 583 | "display": null, 584 | "flex": null, 585 | "flex_flow": null, 586 | "grid_area": null, 587 | "grid_auto_columns": null, 588 | "grid_auto_flow": null, 589 | "grid_auto_rows": null, 590 | "grid_column": null, 591 | "grid_gap": null, 592 | "grid_row": null, 593 | "grid_template_areas": null, 594 | "grid_template_columns": null, 595 | "grid_template_rows": null, 596 | "height": null, 597 | "justify_content": null, 598 | "justify_items": null, 599 | "left": null, 600 | "margin": null, 601 | "max_height": null, 602 | "max_width": null, 603 | "min_height": null, 604 | "min_width": null, 605 | "object_fit": null, 606 | "object_position": null, 607 | "order": null, 608 | "overflow": null, 609 | "overflow_x": null, 610 | "overflow_y": null, 611 | "padding": null, 612 | "right": null, 613 | "top": null, 614 | "visibility": null, 615 | "width": null 616 | } 617 | }, 618 | "c996d2e6026042b99aec36ca83e25398": { 619 | "model_module": "@jupyter-widgets/controls", 620 | "model_name": "ProgressStyleModel", 621 | "model_module_version": "1.5.0", 622 | "state": { 623 | "_model_module": "@jupyter-widgets/controls", 624 | "_model_module_version": "1.5.0", 625 | "_model_name": "ProgressStyleModel", 626 | "_view_count": null, 627 | "_view_module": "@jupyter-widgets/base", 628 | "_view_module_version": "1.2.0", 629 | "_view_name": "StyleView", 630 | "bar_color": null, 631 | "description_width": "" 632 | } 633 | }, 634 | "3b899276b69c4cf6bc9a2c55bf8170d4": { 635 | "model_module": "@jupyter-widgets/base", 636 | "model_name": "LayoutModel", 637 | "model_module_version": "1.2.0", 638 | "state": { 639 | "_model_module": "@jupyter-widgets/base", 640 | "_model_module_version": "1.2.0", 641 | "_model_name": "LayoutModel", 642 | "_view_count": null, 643 | "_view_module": "@jupyter-widgets/base", 644 | "_view_module_version": "1.2.0", 645 | "_view_name": "LayoutView", 646 | "align_content": null, 647 | "align_items": null, 648 | "align_self": null, 649 | "border": null, 650 | "bottom": null, 651 | "display": null, 652 | "flex": null, 653 | "flex_flow": null, 654 | "grid_area": null, 655 | "grid_auto_columns": null, 656 | "grid_auto_flow": null, 657 | "grid_auto_rows": null, 658 | "grid_column": null, 659 | "grid_gap": null, 660 | "grid_row": null, 661 | "grid_template_areas": null, 662 | "grid_template_columns": null, 663 | "grid_template_rows": null, 664 | "height": null, 665 | "justify_content": null, 666 | "justify_items": null, 667 | "left": null, 668 | "margin": null, 669 | "max_height": null, 670 | "max_width": null, 671 | "min_height": null, 672 | "min_width": null, 673 | "object_fit": null, 674 | "object_position": null, 675 | "order": null, 676 | "overflow": null, 677 | "overflow_x": null, 678 | "overflow_y": null, 679 | "padding": null, 680 | "right": null, 681 | "top": null, 682 | "visibility": null, 683 | "width": null 684 | } 685 | }, 686 | "5bab040d88ba4672b716ed7bb12211f0": { 687 | "model_module": "@jupyter-widgets/controls", 688 | "model_name": "DescriptionStyleModel", 689 | "model_module_version": "1.5.0", 690 | "state": { 691 | "_model_module": "@jupyter-widgets/controls", 692 | "_model_module_version": "1.5.0", 693 | "_model_name": "DescriptionStyleModel", 694 | "_view_count": null, 695 | "_view_module": "@jupyter-widgets/base", 696 | "_view_module_version": "1.2.0", 697 | "_view_name": "StyleView", 698 | "description_width": "" 699 | } 700 | }, 701 | "adfa64fad2d946e7b5461e4a796919fd": { 702 | "model_module": "@jupyter-widgets/controls", 703 | "model_name": "HBoxModel", 704 | "model_module_version": "1.5.0", 705 | "state": { 706 | "_dom_classes": [], 707 | "_model_module": "@jupyter-widgets/controls", 708 | "_model_module_version": "1.5.0", 709 | "_model_name": "HBoxModel", 710 | "_view_count": null, 711 | "_view_module": "@jupyter-widgets/controls", 712 | "_view_module_version": "1.5.0", 713 | "_view_name": "HBoxView", 714 | "box_style": "", 715 | "children": [ 716 | "IPY_MODEL_a7624baa360c4e8b8419f3e47d751ffd", 717 | "IPY_MODEL_8bd6fc102af042298242726478419c5c", 718 | "IPY_MODEL_ebe2e628bf61410aa60121fe5d76b155" 719 | ], 720 | "layout": "IPY_MODEL_83368bfa5cd74a118453c57f54a14f43" 721 | } 722 | }, 723 | "a7624baa360c4e8b8419f3e47d751ffd": { 724 | "model_module": "@jupyter-widgets/controls", 725 | "model_name": "HTMLModel", 726 | "model_module_version": "1.5.0", 727 | "state": { 728 | "_dom_classes": [], 729 | "_model_module": "@jupyter-widgets/controls", 730 | "_model_module_version": "1.5.0", 731 | "_model_name": "HTMLModel", 732 | "_view_count": null, 733 | "_view_module": "@jupyter-widgets/controls", 734 | "_view_module_version": "1.5.0", 735 | "_view_name": "HTMLView", 736 | "description": "", 737 | "description_tooltip": null, 738 | "layout": "IPY_MODEL_9424cea6ac984726843d2e0aa484ea84", 739 | "placeholder": "​", 740 | "style": "IPY_MODEL_93dba9ff581345c79e64f080e2984e54", 741 | "value": "tokenizer_config.json: 100%" 742 | } 743 | }, 744 | "8bd6fc102af042298242726478419c5c": { 745 | "model_module": "@jupyter-widgets/controls", 746 | "model_name": "FloatProgressModel", 747 | "model_module_version": "1.5.0", 748 | "state": { 749 | "_dom_classes": [], 750 | "_model_module": "@jupyter-widgets/controls", 751 | "_model_module_version": "1.5.0", 752 | "_model_name": "FloatProgressModel", 753 | "_view_count": null, 754 | "_view_module": "@jupyter-widgets/controls", 755 | "_view_module_version": "1.5.0", 756 | "_view_name": "ProgressView", 757 | "bar_style": "success", 758 | "description": "", 759 | "description_tooltip": null, 760 | "layout": "IPY_MODEL_5a10ccf9ecca4113a89e7c0230c7c434", 761 | "max": 48, 762 | "min": 0, 763 | "orientation": "horizontal", 764 | "style": "IPY_MODEL_effaf247ace64bd3a1318ed77855ed48", 765 | "value": 48 766 | } 767 | }, 768 | "ebe2e628bf61410aa60121fe5d76b155": { 769 | "model_module": "@jupyter-widgets/controls", 770 | "model_name": "HTMLModel", 771 | "model_module_version": "1.5.0", 772 | "state": { 773 | "_dom_classes": [], 774 | "_model_module": "@jupyter-widgets/controls", 775 | "_model_module_version": "1.5.0", 776 | "_model_name": "HTMLModel", 777 | "_view_count": null, 778 | "_view_module": "@jupyter-widgets/controls", 779 | "_view_module_version": "1.5.0", 780 | "_view_name": "HTMLView", 781 | "description": "", 782 | "description_tooltip": null, 783 | "layout": "IPY_MODEL_dad7ed9969ab4485974d3be6f4edff9e", 784 | "placeholder": "​", 785 | "style": "IPY_MODEL_c47138c61e234bd394182f8ffe99917a", 786 | "value": " 48.0/48.0 [00:00<00:00, 2.57kB/s]" 787 | } 788 | }, 789 | "83368bfa5cd74a118453c57f54a14f43": { 790 | "model_module": "@jupyter-widgets/base", 791 | "model_name": "LayoutModel", 792 | "model_module_version": "1.2.0", 793 | "state": { 794 | "_model_module": "@jupyter-widgets/base", 795 | "_model_module_version": "1.2.0", 796 | "_model_name": "LayoutModel", 797 | "_view_count": null, 798 | "_view_module": "@jupyter-widgets/base", 799 | "_view_module_version": "1.2.0", 800 | "_view_name": "LayoutView", 801 | "align_content": null, 802 | "align_items": null, 803 | "align_self": null, 804 | "border": null, 805 | "bottom": null, 806 | "display": null, 807 | "flex": null, 808 | "flex_flow": null, 809 | "grid_area": null, 810 | "grid_auto_columns": null, 811 | "grid_auto_flow": null, 812 | "grid_auto_rows": null, 813 | "grid_column": null, 814 | "grid_gap": null, 815 | "grid_row": null, 816 | "grid_template_areas": null, 817 | "grid_template_columns": null, 818 | "grid_template_rows": null, 819 | "height": null, 820 | "justify_content": null, 821 | "justify_items": null, 822 | "left": null, 823 | "margin": null, 824 | "max_height": null, 825 | "max_width": null, 826 | "min_height": null, 827 | "min_width": null, 828 | "object_fit": null, 829 | "object_position": null, 830 | "order": null, 831 | "overflow": null, 832 | "overflow_x": null, 833 | "overflow_y": null, 834 | "padding": null, 835 | "right": null, 836 | "top": null, 837 | "visibility": null, 838 | "width": null 839 | } 840 | }, 841 | "9424cea6ac984726843d2e0aa484ea84": { 842 | "model_module": "@jupyter-widgets/base", 843 | "model_name": "LayoutModel", 844 | "model_module_version": "1.2.0", 845 | "state": { 846 | "_model_module": "@jupyter-widgets/base", 847 | "_model_module_version": "1.2.0", 848 | "_model_name": "LayoutModel", 849 | "_view_count": null, 850 | "_view_module": "@jupyter-widgets/base", 851 | "_view_module_version": "1.2.0", 852 | "_view_name": "LayoutView", 853 | "align_content": null, 854 | "align_items": null, 855 | "align_self": null, 856 | "border": null, 857 | "bottom": null, 858 | "display": null, 859 | "flex": null, 860 | "flex_flow": null, 861 | "grid_area": null, 862 | "grid_auto_columns": null, 863 | "grid_auto_flow": null, 864 | "grid_auto_rows": null, 865 | "grid_column": null, 866 | "grid_gap": null, 867 | "grid_row": null, 868 | "grid_template_areas": null, 869 | "grid_template_columns": null, 870 | "grid_template_rows": null, 871 | "height": null, 872 | "justify_content": null, 873 | "justify_items": null, 874 | "left": null, 875 | "margin": null, 876 | "max_height": null, 877 | "max_width": null, 878 | "min_height": null, 879 | "min_width": null, 880 | "object_fit": null, 881 | "object_position": null, 882 | "order": null, 883 | "overflow": null, 884 | "overflow_x": null, 885 | "overflow_y": null, 886 | "padding": null, 887 | "right": null, 888 | "top": null, 889 | "visibility": null, 890 | "width": null 891 | } 892 | }, 893 | "93dba9ff581345c79e64f080e2984e54": { 894 | "model_module": "@jupyter-widgets/controls", 895 | "model_name": "DescriptionStyleModel", 896 | "model_module_version": "1.5.0", 897 | "state": { 898 | "_model_module": "@jupyter-widgets/controls", 899 | "_model_module_version": "1.5.0", 900 | "_model_name": "DescriptionStyleModel", 901 | "_view_count": null, 902 | "_view_module": "@jupyter-widgets/base", 903 | "_view_module_version": "1.2.0", 904 | "_view_name": "StyleView", 905 | "description_width": "" 906 | } 907 | }, 908 | "5a10ccf9ecca4113a89e7c0230c7c434": { 909 | "model_module": "@jupyter-widgets/base", 910 | "model_name": "LayoutModel", 911 | "model_module_version": "1.2.0", 912 | "state": { 913 | "_model_module": "@jupyter-widgets/base", 914 | "_model_module_version": "1.2.0", 915 | "_model_name": "LayoutModel", 916 | "_view_count": null, 917 | "_view_module": "@jupyter-widgets/base", 918 | "_view_module_version": "1.2.0", 919 | "_view_name": "LayoutView", 920 | "align_content": null, 921 | "align_items": null, 922 | "align_self": null, 923 | "border": null, 924 | "bottom": null, 925 | "display": null, 926 | "flex": null, 927 | "flex_flow": null, 928 | "grid_area": null, 929 | "grid_auto_columns": null, 930 | "grid_auto_flow": null, 931 | "grid_auto_rows": null, 932 | "grid_column": null, 933 | "grid_gap": null, 934 | "grid_row": null, 935 | "grid_template_areas": null, 936 | "grid_template_columns": null, 937 | "grid_template_rows": null, 938 | "height": null, 939 | "justify_content": null, 940 | "justify_items": null, 941 | "left": null, 942 | "margin": null, 943 | "max_height": null, 944 | "max_width": null, 945 | "min_height": null, 946 | "min_width": null, 947 | "object_fit": null, 948 | "object_position": null, 949 | "order": null, 950 | "overflow": null, 951 | "overflow_x": null, 952 | "overflow_y": null, 953 | "padding": null, 954 | "right": null, 955 | "top": null, 956 | "visibility": null, 957 | "width": null 958 | } 959 | }, 960 | "effaf247ace64bd3a1318ed77855ed48": { 961 | "model_module": "@jupyter-widgets/controls", 962 | "model_name": "ProgressStyleModel", 963 | "model_module_version": "1.5.0", 964 | "state": { 965 | "_model_module": "@jupyter-widgets/controls", 966 | "_model_module_version": "1.5.0", 967 | "_model_name": "ProgressStyleModel", 968 | "_view_count": null, 969 | "_view_module": "@jupyter-widgets/base", 970 | "_view_module_version": "1.2.0", 971 | "_view_name": "StyleView", 972 | "bar_color": null, 973 | "description_width": "" 974 | } 975 | }, 976 | "dad7ed9969ab4485974d3be6f4edff9e": { 977 | "model_module": "@jupyter-widgets/base", 978 | "model_name": "LayoutModel", 979 | "model_module_version": "1.2.0", 980 | "state": { 981 | "_model_module": "@jupyter-widgets/base", 982 | "_model_module_version": "1.2.0", 983 | "_model_name": "LayoutModel", 984 | "_view_count": null, 985 | "_view_module": "@jupyter-widgets/base", 986 | "_view_module_version": "1.2.0", 987 | "_view_name": "LayoutView", 988 | "align_content": null, 989 | "align_items": null, 990 | "align_self": null, 991 | "border": null, 992 | "bottom": null, 993 | "display": null, 994 | "flex": null, 995 | "flex_flow": null, 996 | "grid_area": null, 997 | "grid_auto_columns": null, 998 | "grid_auto_flow": null, 999 | "grid_auto_rows": null, 1000 | "grid_column": null, 1001 | "grid_gap": null, 1002 | "grid_row": null, 1003 | "grid_template_areas": null, 1004 | "grid_template_columns": null, 1005 | "grid_template_rows": null, 1006 | "height": null, 1007 | "justify_content": null, 1008 | "justify_items": null, 1009 | "left": null, 1010 | "margin": null, 1011 | "max_height": null, 1012 | "max_width": null, 1013 | "min_height": null, 1014 | "min_width": null, 1015 | "object_fit": null, 1016 | "object_position": null, 1017 | "order": null, 1018 | "overflow": null, 1019 | "overflow_x": null, 1020 | "overflow_y": null, 1021 | "padding": null, 1022 | "right": null, 1023 | "top": null, 1024 | "visibility": null, 1025 | "width": null 1026 | } 1027 | }, 1028 | "c47138c61e234bd394182f8ffe99917a": { 1029 | "model_module": "@jupyter-widgets/controls", 1030 | "model_name": "DescriptionStyleModel", 1031 | "model_module_version": "1.5.0", 1032 | "state": { 1033 | "_model_module": "@jupyter-widgets/controls", 1034 | "_model_module_version": "1.5.0", 1035 | "_model_name": "DescriptionStyleModel", 1036 | "_view_count": null, 1037 | "_view_module": "@jupyter-widgets/base", 1038 | "_view_module_version": "1.2.0", 1039 | "_view_name": "StyleView", 1040 | "description_width": "" 1041 | } 1042 | }, 1043 | "a77f63857a0a4ff98dc7223099bed4df": { 1044 | "model_module": "@jupyter-widgets/controls", 1045 | "model_name": "HBoxModel", 1046 | "model_module_version": "1.5.0", 1047 | "state": { 1048 | "_dom_classes": [], 1049 | "_model_module": "@jupyter-widgets/controls", 1050 | "_model_module_version": "1.5.0", 1051 | "_model_name": "HBoxModel", 1052 | "_view_count": null, 1053 | "_view_module": "@jupyter-widgets/controls", 1054 | "_view_module_version": "1.5.0", 1055 | "_view_name": "HBoxView", 1056 | "box_style": "", 1057 | "children": [ 1058 | "IPY_MODEL_7121077f59b7459787c281a12d613473", 1059 | "IPY_MODEL_58d7b9a02622445cabc70c8903feb71f", 1060 | "IPY_MODEL_b7534af109874bcc8a51741eb15cc66b" 1061 | ], 1062 | "layout": "IPY_MODEL_3e54587309434918a3d27d60da5f1dcb" 1063 | } 1064 | }, 1065 | "7121077f59b7459787c281a12d613473": { 1066 | "model_module": "@jupyter-widgets/controls", 1067 | "model_name": "HTMLModel", 1068 | "model_module_version": "1.5.0", 1069 | "state": { 1070 | "_dom_classes": [], 1071 | "_model_module": "@jupyter-widgets/controls", 1072 | "_model_module_version": "1.5.0", 1073 | "_model_name": "HTMLModel", 1074 | "_view_count": null, 1075 | "_view_module": "@jupyter-widgets/controls", 1076 | "_view_module_version": "1.5.0", 1077 | "_view_name": "HTMLView", 1078 | "description": "", 1079 | "description_tooltip": null, 1080 | "layout": "IPY_MODEL_8a52df1639aa4ca9924e20b6212806a2", 1081 | "placeholder": "​", 1082 | "style": "IPY_MODEL_45836402aca94b52b63f712a4c14409b", 1083 | "value": "vocab.txt: 100%" 1084 | } 1085 | }, 1086 | "58d7b9a02622445cabc70c8903feb71f": { 1087 | "model_module": "@jupyter-widgets/controls", 1088 | "model_name": "FloatProgressModel", 1089 | "model_module_version": "1.5.0", 1090 | "state": { 1091 | "_dom_classes": [], 1092 | "_model_module": "@jupyter-widgets/controls", 1093 | "_model_module_version": "1.5.0", 1094 | "_model_name": "FloatProgressModel", 1095 | "_view_count": null, 1096 | "_view_module": "@jupyter-widgets/controls", 1097 | "_view_module_version": "1.5.0", 1098 | "_view_name": "ProgressView", 1099 | "bar_style": "success", 1100 | "description": "", 1101 | "description_tooltip": null, 1102 | "layout": "IPY_MODEL_63fcdcd6b72b4c3da2d05b2958ea3d2a", 1103 | "max": 231508, 1104 | "min": 0, 1105 | "orientation": "horizontal", 1106 | "style": "IPY_MODEL_7001ec54d3ae4ba5b2bc2ac516874846", 1107 | "value": 231508 1108 | } 1109 | }, 1110 | "b7534af109874bcc8a51741eb15cc66b": { 1111 | "model_module": "@jupyter-widgets/controls", 1112 | "model_name": "HTMLModel", 1113 | "model_module_version": "1.5.0", 1114 | "state": { 1115 | "_dom_classes": [], 1116 | "_model_module": "@jupyter-widgets/controls", 1117 | "_model_module_version": "1.5.0", 1118 | "_model_name": "HTMLModel", 1119 | "_view_count": null, 1120 | "_view_module": "@jupyter-widgets/controls", 1121 | "_view_module_version": "1.5.0", 1122 | "_view_name": "HTMLView", 1123 | "description": "", 1124 | "description_tooltip": null, 1125 | "layout": "IPY_MODEL_9efe636c5e1047c89298ca8e315ea429", 1126 | "placeholder": "​", 1127 | "style": "IPY_MODEL_dd3a40687a284f398903ff388b17d0c9", 1128 | "value": " 232k/232k [00:00<00:00, 2.97MB/s]" 1129 | } 1130 | }, 1131 | "3e54587309434918a3d27d60da5f1dcb": { 1132 | "model_module": "@jupyter-widgets/base", 1133 | "model_name": "LayoutModel", 1134 | "model_module_version": "1.2.0", 1135 | "state": { 1136 | "_model_module": "@jupyter-widgets/base", 1137 | "_model_module_version": "1.2.0", 1138 | "_model_name": "LayoutModel", 1139 | "_view_count": null, 1140 | "_view_module": "@jupyter-widgets/base", 1141 | "_view_module_version": "1.2.0", 1142 | "_view_name": "LayoutView", 1143 | "align_content": null, 1144 | "align_items": null, 1145 | "align_self": null, 1146 | "border": null, 1147 | "bottom": null, 1148 | "display": null, 1149 | "flex": null, 1150 | "flex_flow": null, 1151 | "grid_area": null, 1152 | "grid_auto_columns": null, 1153 | "grid_auto_flow": null, 1154 | "grid_auto_rows": null, 1155 | "grid_column": null, 1156 | "grid_gap": null, 1157 | "grid_row": null, 1158 | "grid_template_areas": null, 1159 | "grid_template_columns": null, 1160 | "grid_template_rows": null, 1161 | "height": null, 1162 | "justify_content": null, 1163 | "justify_items": null, 1164 | "left": null, 1165 | "margin": null, 1166 | "max_height": null, 1167 | "max_width": null, 1168 | "min_height": null, 1169 | "min_width": null, 1170 | "object_fit": null, 1171 | "object_position": null, 1172 | "order": null, 1173 | "overflow": null, 1174 | "overflow_x": null, 1175 | "overflow_y": null, 1176 | "padding": null, 1177 | "right": null, 1178 | "top": null, 1179 | "visibility": null, 1180 | "width": null 1181 | } 1182 | }, 1183 | "8a52df1639aa4ca9924e20b6212806a2": { 1184 | "model_module": "@jupyter-widgets/base", 1185 | "model_name": "LayoutModel", 1186 | "model_module_version": "1.2.0", 1187 | "state": { 1188 | "_model_module": "@jupyter-widgets/base", 1189 | "_model_module_version": "1.2.0", 1190 | "_model_name": "LayoutModel", 1191 | "_view_count": null, 1192 | "_view_module": "@jupyter-widgets/base", 1193 | "_view_module_version": "1.2.0", 1194 | "_view_name": "LayoutView", 1195 | "align_content": null, 1196 | "align_items": null, 1197 | "align_self": null, 1198 | "border": null, 1199 | "bottom": null, 1200 | "display": null, 1201 | "flex": null, 1202 | "flex_flow": null, 1203 | "grid_area": null, 1204 | "grid_auto_columns": null, 1205 | "grid_auto_flow": null, 1206 | "grid_auto_rows": null, 1207 | "grid_column": null, 1208 | "grid_gap": null, 1209 | "grid_row": null, 1210 | "grid_template_areas": null, 1211 | "grid_template_columns": null, 1212 | "grid_template_rows": null, 1213 | "height": null, 1214 | "justify_content": null, 1215 | "justify_items": null, 1216 | "left": null, 1217 | "margin": null, 1218 | "max_height": null, 1219 | "max_width": null, 1220 | "min_height": null, 1221 | "min_width": null, 1222 | "object_fit": null, 1223 | "object_position": null, 1224 | "order": null, 1225 | "overflow": null, 1226 | "overflow_x": null, 1227 | "overflow_y": null, 1228 | "padding": null, 1229 | "right": null, 1230 | "top": null, 1231 | "visibility": null, 1232 | "width": null 1233 | } 1234 | }, 1235 | "45836402aca94b52b63f712a4c14409b": { 1236 | "model_module": "@jupyter-widgets/controls", 1237 | "model_name": "DescriptionStyleModel", 1238 | "model_module_version": "1.5.0", 1239 | "state": { 1240 | "_model_module": "@jupyter-widgets/controls", 1241 | "_model_module_version": "1.5.0", 1242 | "_model_name": "DescriptionStyleModel", 1243 | "_view_count": null, 1244 | "_view_module": "@jupyter-widgets/base", 1245 | "_view_module_version": "1.2.0", 1246 | "_view_name": "StyleView", 1247 | "description_width": "" 1248 | } 1249 | }, 1250 | "63fcdcd6b72b4c3da2d05b2958ea3d2a": { 1251 | "model_module": "@jupyter-widgets/base", 1252 | "model_name": "LayoutModel", 1253 | "model_module_version": "1.2.0", 1254 | "state": { 1255 | "_model_module": "@jupyter-widgets/base", 1256 | "_model_module_version": "1.2.0", 1257 | "_model_name": "LayoutModel", 1258 | "_view_count": null, 1259 | "_view_module": "@jupyter-widgets/base", 1260 | "_view_module_version": "1.2.0", 1261 | "_view_name": "LayoutView", 1262 | "align_content": null, 1263 | "align_items": null, 1264 | "align_self": null, 1265 | "border": null, 1266 | "bottom": null, 1267 | "display": null, 1268 | "flex": null, 1269 | "flex_flow": null, 1270 | "grid_area": null, 1271 | "grid_auto_columns": null, 1272 | "grid_auto_flow": null, 1273 | "grid_auto_rows": null, 1274 | "grid_column": null, 1275 | "grid_gap": null, 1276 | "grid_row": null, 1277 | "grid_template_areas": null, 1278 | "grid_template_columns": null, 1279 | "grid_template_rows": null, 1280 | "height": null, 1281 | "justify_content": null, 1282 | "justify_items": null, 1283 | "left": null, 1284 | "margin": null, 1285 | "max_height": null, 1286 | "max_width": null, 1287 | "min_height": null, 1288 | "min_width": null, 1289 | "object_fit": null, 1290 | "object_position": null, 1291 | "order": null, 1292 | "overflow": null, 1293 | "overflow_x": null, 1294 | "overflow_y": null, 1295 | "padding": null, 1296 | "right": null, 1297 | "top": null, 1298 | "visibility": null, 1299 | "width": null 1300 | } 1301 | }, 1302 | "7001ec54d3ae4ba5b2bc2ac516874846": { 1303 | "model_module": "@jupyter-widgets/controls", 1304 | "model_name": "ProgressStyleModel", 1305 | "model_module_version": "1.5.0", 1306 | "state": { 1307 | "_model_module": "@jupyter-widgets/controls", 1308 | "_model_module_version": "1.5.0", 1309 | "_model_name": "ProgressStyleModel", 1310 | "_view_count": null, 1311 | "_view_module": "@jupyter-widgets/base", 1312 | "_view_module_version": "1.2.0", 1313 | "_view_name": "StyleView", 1314 | "bar_color": null, 1315 | "description_width": "" 1316 | } 1317 | }, 1318 | "9efe636c5e1047c89298ca8e315ea429": { 1319 | "model_module": "@jupyter-widgets/base", 1320 | "model_name": "LayoutModel", 1321 | "model_module_version": "1.2.0", 1322 | "state": { 1323 | "_model_module": "@jupyter-widgets/base", 1324 | "_model_module_version": "1.2.0", 1325 | "_model_name": "LayoutModel", 1326 | "_view_count": null, 1327 | "_view_module": "@jupyter-widgets/base", 1328 | "_view_module_version": "1.2.0", 1329 | "_view_name": "LayoutView", 1330 | "align_content": null, 1331 | "align_items": null, 1332 | "align_self": null, 1333 | "border": null, 1334 | "bottom": null, 1335 | "display": null, 1336 | "flex": null, 1337 | "flex_flow": null, 1338 | "grid_area": null, 1339 | "grid_auto_columns": null, 1340 | "grid_auto_flow": null, 1341 | "grid_auto_rows": null, 1342 | "grid_column": null, 1343 | "grid_gap": null, 1344 | "grid_row": null, 1345 | "grid_template_areas": null, 1346 | "grid_template_columns": null, 1347 | "grid_template_rows": null, 1348 | "height": null, 1349 | "justify_content": null, 1350 | "justify_items": null, 1351 | "left": null, 1352 | "margin": null, 1353 | "max_height": null, 1354 | "max_width": null, 1355 | "min_height": null, 1356 | "min_width": null, 1357 | "object_fit": null, 1358 | "object_position": null, 1359 | "order": null, 1360 | "overflow": null, 1361 | "overflow_x": null, 1362 | "overflow_y": null, 1363 | "padding": null, 1364 | "right": null, 1365 | "top": null, 1366 | "visibility": null, 1367 | "width": null 1368 | } 1369 | }, 1370 | "dd3a40687a284f398903ff388b17d0c9": { 1371 | "model_module": "@jupyter-widgets/controls", 1372 | "model_name": "DescriptionStyleModel", 1373 | "model_module_version": "1.5.0", 1374 | "state": { 1375 | "_model_module": "@jupyter-widgets/controls", 1376 | "_model_module_version": "1.5.0", 1377 | "_model_name": "DescriptionStyleModel", 1378 | "_view_count": null, 1379 | "_view_module": "@jupyter-widgets/base", 1380 | "_view_module_version": "1.2.0", 1381 | "_view_name": "StyleView", 1382 | "description_width": "" 1383 | } 1384 | } 1385 | } 1386 | } 1387 | }, 1388 | "cells": [ 1389 | { 1390 | "cell_type": "code", 1391 | "execution_count": 3, 1392 | "metadata": { 1393 | "colab": { 1394 | "base_uri": "https://localhost:8080/" 1395 | }, 1396 | "id": "XuEQ0Ca_Vyyd", 1397 | "outputId": "421ccb44-4cb9-42e5-b0ab-2b1213e89b0e" 1398 | }, 1399 | "outputs": [ 1400 | { 1401 | "output_type": "stream", 1402 | "name": "stdout", 1403 | "text": [ 1404 | "Requirement already satisfied: transformers in /usr/local/lib/python3.11/dist-packages (4.47.1)\n", 1405 | "Requirement already satisfied: spacy in /usr/local/lib/python3.11/dist-packages (3.7.5)\n", 1406 | "Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages (3.9.1)\n", 1407 | "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (1.6.1)\n", 1408 | "Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (2.2.2)\n", 1409 | "Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (3.10.0)\n", 1410 | "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from transformers) (3.17.0)\n", 1411 | "Requirement already satisfied: huggingface-hub<1.0,>=0.24.0 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.27.1)\n", 1412 | "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.11/dist-packages (from transformers) (1.26.4)\n", 1413 | "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from transformers) (24.2)\n", 1414 | "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.11/dist-packages (from transformers) (6.0.2)\n", 1415 | "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.11/dist-packages (from transformers) (2024.11.6)\n", 1416 | "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from transformers) (2.32.3)\n", 1417 | "Requirement already satisfied: tokenizers<0.22,>=0.21 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.21.0)\n", 1418 | "Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.5.2)\n", 1419 | "Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.11/dist-packages (from transformers) (4.67.1)\n", 1420 | "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.0.12)\n", 1421 | "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.0.5)\n", 1422 | "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.0.12)\n", 1423 | "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.11)\n", 1424 | "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.0.9)\n", 1425 | "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (8.2.5)\n", 1426 | "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.1.3)\n", 1427 | "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.5.1)\n", 1428 | "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.10)\n", 1429 | "Requirement already satisfied: weasel<0.5.0,>=0.1.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (0.4.1)\n", 1430 | "Requirement already satisfied: typer<1.0.0,>=0.3.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (0.15.1)\n", 1431 | "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.10.5)\n", 1432 | "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.1.5)\n", 1433 | "Requirement already satisfied: setuptools in /usr/local/lib/python3.11/dist-packages (from spacy) (75.1.0)\n", 1434 | "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.5.0)\n", 1435 | "Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk) (8.1.8)\n", 1436 | "Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk) (1.4.2)\n", 1437 | "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.13.1)\n", 1438 | "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (3.5.0)\n", 1439 | "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas) (2.8.2)\n", 1440 | "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas) (2024.2)\n", 1441 | "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.1)\n", 1442 | "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.3.1)\n", 1443 | "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (0.12.1)\n", 1444 | "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (4.55.4)\n", 1445 | "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.4.8)\n", 1446 | "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (11.1.0)\n", 1447 | "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (3.2.1)\n", 1448 | "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.11/dist-packages (from huggingface-hub<1.0,>=0.24.0->transformers) (2024.10.0)\n", 1449 | "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.11/dist-packages (from huggingface-hub<1.0,>=0.24.0->transformers) (4.12.2)\n", 1450 | "Requirement already satisfied: language-data>=1.2 in /usr/local/lib/python3.11/dist-packages (from langcodes<4.0.0,>=3.2.0->spacy) (1.3.0)\n", 1451 | "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (0.7.0)\n", 1452 | "Requirement already satisfied: pydantic-core==2.27.2 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (2.27.2)\n", 1453 | "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n", 1454 | "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (3.4.1)\n", 1455 | "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (3.10)\n", 1456 | "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (2.3.0)\n", 1457 | "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (2024.12.14)\n", 1458 | "Requirement already satisfied: blis<0.8.0,>=0.7.8 in /usr/local/lib/python3.11/dist-packages (from thinc<8.3.0,>=8.2.2->spacy) (0.7.11)\n", 1459 | "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /usr/local/lib/python3.11/dist-packages (from thinc<8.3.0,>=8.2.2->spacy) (0.1.5)\n", 1460 | "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (1.5.4)\n", 1461 | "Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (13.9.4)\n", 1462 | "Requirement already satisfied: cloudpathlib<1.0.0,>=0.7.0 in /usr/local/lib/python3.11/dist-packages (from weasel<0.5.0,>=0.1.0->spacy) (0.20.0)\n", 1463 | "Requirement already satisfied: smart-open<8.0.0,>=5.2.1 in /usr/local/lib/python3.11/dist-packages (from weasel<0.5.0,>=0.1.0->spacy) (7.1.0)\n", 1464 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->spacy) (3.0.2)\n", 1465 | "Requirement already satisfied: marisa-trie>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy) (1.2.1)\n", 1466 | "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (3.0.0)\n", 1467 | "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (2.18.0)\n", 1468 | "Requirement already satisfied: wrapt in /usr/local/lib/python3.11/dist-packages (from smart-open<8.0.0,>=5.2.1->weasel<0.5.0,>=0.1.0->spacy) (1.17.2)\n", 1469 | "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (0.1.2)\n" 1470 | ] 1471 | } 1472 | ], 1473 | "source": [ 1474 | "!pip install transformers spacy nltk scikit-learn pandas matplotlib\n" 1475 | ] 1476 | }, 1477 | { 1478 | "cell_type": "code", 1479 | "source": [ 1480 | "from transformers import pipeline\n", 1481 | "\n", 1482 | "# Load pre-trained sentiment analysis pipeline\n", 1483 | "sentiment_analyzer = pipeline('sentiment-analysis')\n", 1484 | "\n", 1485 | "# Example customer data\n", 1486 | "import pandas as pd\n", 1487 | "data = pd.DataFrame({\n", 1488 | " 'Customer_ID': [1, 2, 3, 4, 5],\n", 1489 | " 'Review': [\n", 1490 | " \"I love the product, it's amazing and worth the price!\",\n", 1491 | " \"The service was slow, and the staff was unhelpful.\",\n", 1492 | " \"Great experience! The support team resolved my issue quickly.\",\n", 1493 | " \"Not satisfied with the quality. It didn't meet my expectations.\",\n", 1494 | " \"Excellent! I will recommend this to everyone.\"\n", 1495 | " ]\n", 1496 | "})\n", 1497 | "\n", 1498 | "# Perform sentiment analysis\n", 1499 | "data['Sentiment'] = data['Review'].apply(lambda x: sentiment_analyzer(x)[0]['label'])\n", 1500 | "print(data)\n" 1501 | ], 1502 | "metadata": { 1503 | "colab": { 1504 | "base_uri": "https://localhost:8080/", 1505 | "height": 425, 1506 | "referenced_widgets": [ 1507 | "3622cd5d8ca8444eb1717471f55075a5", 1508 | "50db0e45a93f4aedb6296ab3799fd076", 1509 | "dc130bd4abe74677aacec3f0ded206b3", 1510 | "0f948e9fa13048a8b1981b81ee7bc547", 1511 | "727f266fc6d64527bb7737debfc36405", 1512 | "1982faf472d84fe3a28e4d6b5a00c548", 1513 | "9353ccde80b24fb999c91e26f1f482a2", 1514 | "819f42e5538044ff94e00a656d4712b4", 1515 | "3803eb3abd214d698376cda465d3ff4c", 1516 | "45b32ed8e0d5455e8be2ea10ae5bda2f", 1517 | "ee216544e48e4897bd75a7585cc6d408", 1518 | "a579828e72a24182b371d1d463d4aff0", 1519 | "b6faf3823375498a9ceef84ef028260c", 1520 | "ea49e21cf3aa42efa1b4e0ed923c86fc", 1521 | "07e47374524c463d9fc4e0dacd61a7a1", 1522 | "689bc30e75cd46d994b982fd95c46221", 1523 | "dd2d069e9bf64e01873786e52a571de6", 1524 | "9ef9fdf1cd40499c9d22aca1e941ddaa", 1525 | "df304225c67c403695255b7f178f420d", 1526 | "c996d2e6026042b99aec36ca83e25398", 1527 | "3b899276b69c4cf6bc9a2c55bf8170d4", 1528 | "5bab040d88ba4672b716ed7bb12211f0", 1529 | "adfa64fad2d946e7b5461e4a796919fd", 1530 | "a7624baa360c4e8b8419f3e47d751ffd", 1531 | "8bd6fc102af042298242726478419c5c", 1532 | "ebe2e628bf61410aa60121fe5d76b155", 1533 | "83368bfa5cd74a118453c57f54a14f43", 1534 | "9424cea6ac984726843d2e0aa484ea84", 1535 | "93dba9ff581345c79e64f080e2984e54", 1536 | "5a10ccf9ecca4113a89e7c0230c7c434", 1537 | "effaf247ace64bd3a1318ed77855ed48", 1538 | "dad7ed9969ab4485974d3be6f4edff9e", 1539 | "c47138c61e234bd394182f8ffe99917a", 1540 | "a77f63857a0a4ff98dc7223099bed4df", 1541 | "7121077f59b7459787c281a12d613473", 1542 | "58d7b9a02622445cabc70c8903feb71f", 1543 | "b7534af109874bcc8a51741eb15cc66b", 1544 | "3e54587309434918a3d27d60da5f1dcb", 1545 | "8a52df1639aa4ca9924e20b6212806a2", 1546 | "45836402aca94b52b63f712a4c14409b", 1547 | "63fcdcd6b72b4c3da2d05b2958ea3d2a", 1548 | "7001ec54d3ae4ba5b2bc2ac516874846", 1549 | "9efe636c5e1047c89298ca8e315ea429", 1550 | "dd3a40687a284f398903ff388b17d0c9" 1551 | ] 1552 | }, 1553 | "id": "8xeod_cDWwAJ", 1554 | "outputId": "c2ce9a28-ea66-4ed9-8802-ed21862a542b" 1555 | }, 1556 | "execution_count": 4, 1557 | "outputs": [ 1558 | { 1559 | "output_type": "stream", 1560 | "name": "stderr", 1561 | "text": [ 1562 | "No model was supplied, defaulted to distilbert/distilbert-base-uncased-finetuned-sst-2-english and revision 714eb0f (https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english).\n", 1563 | "Using a pipeline without specifying a model name and revision in production is not recommended.\n", 1564 | "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", 1565 | "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", 1566 | "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", 1567 | "You will be able to reuse this secret in all of your notebooks.\n", 1568 | "Please note that authentication is recommended but still optional to access public models or datasets.\n", 1569 | " warnings.warn(\n" 1570 | ] 1571 | }, 1572 | { 1573 | "output_type": "display_data", 1574 | "data": { 1575 | "text/plain": [ 1576 | "config.json: 0%| | 0.00/629 [00:00" 1788 | ], 1789 | "image/png": "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REREZG4enQqreBuVM0Bw8OBBpKSk6DUClJubi8uXL5f5kJSpmVViNHjwYNy6dQuzZ8+GQqFA27ZtERsbq1mQfe3aNa0RopkzZ0KSJMycORM3btxAnTp10L9/f3z66adV1QUiIiKzlJubqzWSk5qailOnTsHJyQn169fHjBkzcOPGDaxfv17rutWrV8PPzw+tWrXSaXPq1Kno378/GjRogJs3byI8PByWlpYICgoyeX9KIwnOKZVJqVTCwcEB2dnZWnOwREREjzP1b0Zx+/9Nbo8atQwb27ibW4j/PJukd6wJCQno0aOHTnlwcDCio6MREhKCq1evIiEhQXMuOzsb7u7uWLJkCUJDQ3WuHTJkCA4dOoS///4bderUQZcuXfDpp5+icePGBvXNEGY1YkRERESo0AaNJbUhR/fu3ctcnxsdHa1T5uDggPz8/FKviYmJkRVDZTCbxddEREREpsYRIyIiIjNTkXedldQG6WJiREREZGbUkKCGYTtfG3r904qJERERkZnhiJHp8FshIiIiKsIRIyIiIjNjnA0eOTZSEiZGREREZkYtJKiFgWuMDLz+acV0kYiIiKgIR4yIiIjMjNoIU2mGbhD5tGJiREREZGbUwgJqA58qM/T6pxW/FSIiIqIiHDEiIiIyMypIUBm4QaOh1z+tmBgRERGZGU6lmQ6/FSIiIqIiHDEiIiIyMyoYPhWmMk4oTx0mRkRERGaGU2mmw8SIiIjIzPAlsqbDb4WIiIioCEeMiIiIzIyABLWBa4wEH9cvERMjIiIiM8OpNNPht0JERERUhCNGREREZkYtJKiFYVNhhl7/tGJiREREZGZUsIDKwEkfQ69/WvFbISIiIirCESMiIiIzw6k002FiREREZGbUsIDawEkfQ69/WvFbISIiIirCESMiIiIzoxISVAZOhRl6/dOKiREREZGZ4Roj02FiREREZGaEsIDawJ2rBXe+LhG/FSIiIqIiHDEiIiIyMypIUBn4ElhDr39aMTEiIiIyM2ph+BohtTBSME8ZTqURERERFeGIERERkZlRG2HxtaHXP634rRAREZkZNSSjHHIcOnQI/fv3h4eHByRJwvbt28usn5CQAEmSdA6FQqFVLyoqCl5eXrCxsYGfnx+OHz8u9+swKiZGREREVK68vDz4+voiKipK1nUXLlxAenq65nBxcdGc27RpE8LCwhAe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1CnN8fvvv6Nr165Ys2ZNifd1cnJCYGAgoqKiSlyLlJWVBQBo0aIF0tLSkJaWpjn3559/IisrCz4+PhXttsbRo0d1Prdo0UJz799//10rvl9//RUWFhbw9vbWq/127dpBpVIhMzMTTZo00Trc3Nz0jtPKygoqlUrv+kT078PEiMjEBg0ahMGDByMoKAjz5s3DiRMn8Ndff2HXrl0ICAjQPL6fnJyM0aNHo1WrVlpHUFAQ1q1bp7Uv0qOioqKgUqnQsWNH/PDDD7h06RLOnTuHr776SjPFFRAQgNatW2PYsGFITk7G8ePHMWLECHTr1g0dOnQwuI+bN2/GmjVrcPHiRYSHh+P48eOaxdXDhg2DjY0NgoODcfbsWcTHx2PixIkYPny4ZhqtPM2aNcOwYcMwYsQIbN26FampqTh+/Djmz5+P3bt36x2nl5cXTp8+jQsXLuD27dt48OBBifVyc3M1ySkApKam4tSpU7h27Zre9yIi88TEiMjEJEnCxo0bsXjxYmzfvh3dunVDmzZtEBERgQEDBiAwMBCrV6+Gj48PmjdvrnP9q6++iszMTOzZs6fE9hs1aoTk5GT06NEDU6ZMQatWrfDSSy8hLi4Oy5cv18SwY8cO1K5dGy+88AICAgLQqFEjbNq0ySh9nDNnDmJiYtCmTRusX78e3333nWYkqmbNmvj5559x584dPPfcc3jjjTfQs2dPLF26VNY91q5dixEjRmDKlCnw9vbGwIED8dtvv6F+/fp6txEaGgpvb2906NABderUwa+//lpivRMnTqBdu3Zo164dACAsLAzt2rXD7NmzZcVMROZHEpyAJyIDSJKEbdu26bWjNBHRk44jRkRERERFmBgRERERFeHj+kRkEM7GE9HThCNGREREREWYGBEREREVYWJEREREVISJEREREVERJkZERERERZgYERERERVhYkRERERUhIkRERERUREmRkRERERF/g+bVRxojInu8wAAAABJRU5ErkJggg==\n" 1790 | }, 1791 | "metadata": {} 1792 | } 1793 | ] 1794 | } 1795 | ] 1796 | } --------------------------------------------------------------------------------