CoolFace
Apppublic

sks01dev/Customer-Conversion-Prediction

sourceHugging Faceapache-2.0updated 11mo agoView on Hugging Face
1likes
workshop-uv-fastapi.ipynb1987 linesDownload Raw Back to root
1{2 "cells": [3  {4   "cell_type": "markdown",5   "id": "4458df13-d0f7-462e-bc80-42169bb1a62b",6   "metadata": {},7   "source": [8    "This is a starter notebook for an updated module 5 of ML Zoomcamp\n",9    "\n",10    "The code is based on the modules 3 and 4. We use the same dataset: [telco customer churn](https://www.kaggle.com/datasets/blastchar/telco-customer-churn)"11   ]12  },13  {14   "cell_type": "code",15   "execution_count": 1,16   "id": "a16177e8-cbd2-4088-9bb0-07a0cfb3eee6",17   "metadata": {},18   "outputs": [],19   "source": [20    "import pandas as pd\n",21    "import numpy as np\n",22    "import sklearn"23   ]24  },25  {26   "cell_type": "code",27   "execution_count": 2,28   "id": "498798c7-1848-47f0-9789-5881ae3658bd",29   "metadata": {},30   "outputs": [31    {32     "name": "stdout",33     "output_type": "stream",34     "text": [35      "pandas==2.3.1\n",36      "numpy==2.3.1\n",37      "sklearn==1.7.0\n"38     ]39    }40   ],41   "source": [42    "print(f'pandas=={pd.__version__}')\n",43    "print(f'numpy=={np.__version__}')\n",44    "print(f'sklearn=={sklearn.__version__}')"45   ]46  },47  {48   "cell_type": "code",49   "execution_count": 4,50   "id": "e9e9464c-d8ed-45ea-9e8c-70e6d73842f7",51   "metadata": {},52   "outputs": [],53   "source": [54    "# Import the necessary libraries\n",55    "import numpy as np\n",56    "import pandas as pd\n",57    "from sklearn.linear_model import LogisticRegression\n",58    "from sklearn.pipeline import make_pipeline\n",59    "from sklearn.feature_extraction import DictVectorizer"60   ]61  },62  {63   "cell_type": "code",64   "execution_count": 8,65   "id": "54ff5e16-47a9-43ab-975b-37605ee75d19",66   "metadata": {67    "scrolled": true68   },69   "outputs": [70    {71     "data": {72      "text/html": [73       "<div>\n",74       "<style scoped>\n",75       "    .dataframe tbody tr th:only-of-type {\n",76       "        vertical-align: middle;\n",77       "    }\n",78       "\n",79       "    .dataframe tbody tr th {\n",80       "        vertical-align: top;\n",81       "    }\n",82       "\n",83       "    .dataframe thead th {\n",84       "        text-align: right;\n",85       "    }\n",86       "</style>\n",87       "<table border=\"1\" class=\"dataframe\">\n",88       "  <thead>\n",89       "    <tr style=\"text-align: right;\">\n",90       "      <th></th>\n",91       "      <th>lead_source</th>\n",92       "      <th>industry</th>\n",93       "      <th>number_of_courses_viewed</th>\n",94       "      <th>annual_income</th>\n",95       "      <th>employment_status</th>\n",96       "      <th>location</th>\n",97       "      <th>interaction_count</th>\n",98       "      <th>lead_score</th>\n",99       "      <th>converted</th>\n",100       "    </tr>\n",101       "  </thead>\n",102       "  <tbody>\n",103       "    <tr>\n",104       "      <th>0</th>\n",105       "      <td>paid_ads</td>\n",106       "      <td>NaN</td>\n",107       "      <td>1</td>\n",108       "      <td>79450.0</td>\n",109       "      <td>unemployed</td>\n",110       "      <td>south_america</td>\n",111       "      <td>4</td>\n",112       "      <td>0.94</td>\n",113       "      <td>1</td>\n",114       "    </tr>\n",115       "    <tr>\n",116       "      <th>1</th>\n",117       "      <td>social_media</td>\n",118       "      <td>retail</td>\n",119       "      <td>1</td>\n",120       "      <td>46992.0</td>\n",121       "      <td>employed</td>\n",122       "      <td>south_america</td>\n",123       "      <td>1</td>\n",124       "      <td>0.80</td>\n",125       "      <td>0</td>\n",126       "    </tr>\n",127       "    <tr>\n",128       "      <th>2</th>\n",129       "      <td>events</td>\n",130       "      <td>healthcare</td>\n",131       "      <td>5</td>\n",132       "      <td>78796.0</td>\n",133       "      <td>unemployed</td>\n",134       "      <td>australia</td>\n",135       "      <td>3</td>\n",136       "      <td>0.69</td>\n",137       "      <td>1</td>\n",138       "    </tr>\n",139       "    <tr>\n",140       "      <th>3</th>\n",141       "      <td>paid_ads</td>\n",142       "      <td>retail</td>\n",143       "      <td>2</td>\n",144       "      <td>83843.0</td>\n",145       "      <td>NaN</td>\n",146       "      <td>australia</td>\n",147       "      <td>1</td>\n",148       "      <td>0.87</td>\n",149       "      <td>0</td>\n",150       "    </tr>\n",151       "    <tr>\n",152       "      <th>4</th>\n",153       "      <td>referral</td>\n",154       "      <td>education</td>\n",155       "      <td>3</td>\n",156       "      <td>85012.0</td>\n",157       "      <td>self_employed</td>\n",158       "      <td>europe</td>\n",159       "      <td>3</td>\n",160       "      <td>0.62</td>\n",161       "      <td>1</td>\n",162       "    </tr>\n",163       "  </tbody>\n",164       "</table>\n",165       "</div>"166      ],167      "text/plain": [168       "    lead_source    industry  number_of_courses_viewed  annual_income  \\\n",169       "0      paid_ads         NaN                         1        79450.0   \n",170       "1  social_media      retail                         1        46992.0   \n",171       "2        events  healthcare                         5        78796.0   \n",172       "3      paid_ads      retail                         2        83843.0   \n",173       "4      referral   education                         3        85012.0   \n",174       "\n",175       "  employment_status       location  interaction_count  lead_score  converted  \n",176       "0        unemployed  south_america                  4        0.94          1  \n",177       "1          employed  south_america                  1        0.80          0  \n",178       "2        unemployed      australia                  3        0.69          1  \n",179       "3               NaN      australia                  1        0.87          0  \n",180       "4     self_employed         europe                  3        0.62          1  "181      ]182     },183     "execution_count": 8,184     "metadata": {},185     "output_type": "execute_result"186    }187   ],188   "source": [189    "# Load the data\n",190    "data_url =  \"https://raw.githubusercontent.com/alexeygrigorev/datasets/master/course_lead_scoring.csv\"\n",191    "df = pd.read_csv(data_url)\n",192    "df.head()"193   ]194  },195  {196   "cell_type": "code",197   "execution_count": 11,198   "id": "963e0b2c-5d60-4d8a-a216-00cb869d516d",199   "metadata": {},200   "outputs": [],201   "source": [202    "# the target variable\n",203    "y_train = df.converted"204   ]205  },206  {207   "cell_type": "code",208   "execution_count": 14,209   "id": "692ae989-fb9a-4219-9a01-18424176748d",210   "metadata": {},211   "outputs": [212    {213     "data": {214      "text/html": [215       "<style>#sk-container-id-2 {\n",216       "  /* Definition of color scheme common for light and dark mode */\n",217       "  --sklearn-color-text: #000;\n",218       "  --sklearn-color-text-muted: #666;\n",219       "  --sklearn-color-line: gray;\n",220       "  /* Definition of color scheme for unfitted estimators */\n",221       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",222       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",223       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",224       "  --sklearn-color-unfitted-level-3: chocolate;\n",225       "  /* Definition of color scheme for fitted estimators */\n",226       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",227       "  --sklearn-color-fitted-level-1: #d4ebff;\n",228       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",229       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",230       "\n",231       "  /* Specific color for light theme */\n",232       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",233       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",234       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",235       "  --sklearn-color-icon: #696969;\n",236       "\n",237       "  @media (prefers-color-scheme: dark) {\n",238       "    /* Redefinition of color scheme for dark theme */\n",239       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",240       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",241       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",242       "    --sklearn-color-icon: #878787;\n",243       "  }\n",244       "}\n",245       "\n",246       "#sk-container-id-2 {\n",247       "  color: var(--sklearn-color-text);\n",248       "}\n",249       "\n",250       "#sk-container-id-2 pre {\n",251       "  padding: 0;\n",252       "}\n",253       "\n",254       "#sk-container-id-2 input.sk-hidden--visually {\n",255       "  border: 0;\n",256       "  clip: rect(1px 1px 1px 1px);\n",257       "  clip: rect(1px, 1px, 1px, 1px);\n",258       "  height: 1px;\n",259       "  margin: -1px;\n",260       "  overflow: hidden;\n",261       "  padding: 0;\n",262       "  position: absolute;\n",263       "  width: 1px;\n",264       "}\n",265       "\n",266       "#sk-container-id-2 div.sk-dashed-wrapped {\n",267       "  border: 1px dashed var(--sklearn-color-line);\n",268       "  margin: 0 0.4em 0.5em 0.4em;\n",269       "  box-sizing: border-box;\n",270       "  padding-bottom: 0.4em;\n",271       "  background-color: var(--sklearn-color-background);\n",272       "}\n",273       "\n",274       "#sk-container-id-2 div.sk-container {\n",275       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",276       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",277       "     so we also need the `!important` here to be able to override the\n",278       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",279       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",280       "  display: inline-block !important;\n",281       "  position: relative;\n",282       "}\n",283       "\n",284       "#sk-container-id-2 div.sk-text-repr-fallback {\n",285       "  display: none;\n",286       "}\n",287       "\n",288       "div.sk-parallel-item,\n",289       "div.sk-serial,\n",290       "div.sk-item {\n",291       "  /* draw centered vertical line to link estimators */\n",292       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",293       "  background-size: 2px 100%;\n",294       "  background-repeat: no-repeat;\n",295       "  background-position: center center;\n",296       "}\n",297       "\n",298       "/* Parallel-specific style estimator block */\n",299       "\n",300       "#sk-container-id-2 div.sk-parallel-item::after {\n",301       "  content: \"\";\n",302       "  width: 100%;\n",303       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",304       "  flex-grow: 1;\n",305       "}\n",306       "\n",307       "#sk-container-id-2 div.sk-parallel {\n",308       "  display: flex;\n",309       "  align-items: stretch;\n",310       "  justify-content: center;\n",311       "  background-color: var(--sklearn-color-background);\n",312       "  position: relative;\n",313       "}\n",314       "\n",315       "#sk-container-id-2 div.sk-parallel-item {\n",316       "  display: flex;\n",317       "  flex-direction: column;\n",318       "}\n",319       "\n",320       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",321       "  align-self: flex-end;\n",322       "  width: 50%;\n",323       "}\n",324       "\n",325       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",326       "  align-self: flex-start;\n",327       "  width: 50%;\n",328       "}\n",329       "\n",330       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",331       "  width: 0;\n",332       "}\n",333       "\n",334       "/* Serial-specific style estimator block */\n",335       "\n",336       "#sk-container-id-2 div.sk-serial {\n",337       "  display: flex;\n",338       "  flex-direction: column;\n",339       "  align-items: center;\n",340       "  background-color: var(--sklearn-color-background);\n",341       "  padding-right: 1em;\n",342       "  padding-left: 1em;\n",343       "}\n",344       "\n",345       "\n",346       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",347       "clickable and can be expanded/collapsed.\n",348       "- Pipeline and ColumnTransformer use this feature and define the default style\n",349       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",350       "*/\n",351       "\n",352       "/* Pipeline and ColumnTransformer style (default) */\n",353       "\n",354       "#sk-container-id-2 div.sk-toggleable {\n",355       "  /* Default theme specific background. It is overwritten whether we have a\n",356       "  specific estimator or a Pipeline/ColumnTransformer */\n",357       "  background-color: var(--sklearn-color-background);\n",358       "}\n",359       "\n",360       "/* Toggleable label */\n",361       "#sk-container-id-2 label.sk-toggleable__label {\n",362       "  cursor: pointer;\n",363       "  display: flex;\n",364       "  width: 100%;\n",365       "  margin-bottom: 0;\n",366       "  padding: 0.5em;\n",367       "  box-sizing: border-box;\n",368       "  text-align: center;\n",369       "  align-items: start;\n",370       "  justify-content: space-between;\n",371       "  gap: 0.5em;\n",372       "}\n",373       "\n",374       "#sk-container-id-2 label.sk-toggleable__label .caption {\n",375       "  font-size: 0.6rem;\n",376       "  font-weight: lighter;\n",377       "  color: var(--sklearn-color-text-muted);\n",378       "}\n",379       "\n",380       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",381       "  /* Arrow on the left of the label */\n",382       "  content: \"▸\";\n",383       "  float: left;\n",384       "  margin-right: 0.25em;\n",385       "  color: var(--sklearn-color-icon);\n",386       "}\n",387       "\n",388       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",389       "  color: var(--sklearn-color-text);\n",390       "}\n",391       "\n",392       "/* Toggleable content - dropdown */\n",393       "\n",394       "#sk-container-id-2 div.sk-toggleable__content {\n",395       "  display: none;\n",396       "  text-align: left;\n",397       "  /* unfitted */\n",398       "  background-color: var(--sklearn-color-unfitted-level-0);\n",399       "}\n",400       "\n",401       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",402       "  /* fitted */\n",403       "  background-color: var(--sklearn-color-fitted-level-0);\n",404       "}\n",405       "\n",406       "#sk-container-id-2 div.sk-toggleable__content pre {\n",407       "  margin: 0.2em;\n",408       "  border-radius: 0.25em;\n",409       "  color: var(--sklearn-color-text);\n",410       "  /* unfitted */\n",411       "  background-color: var(--sklearn-color-unfitted-level-0);\n",412       "}\n",413       "\n",414       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",415       "  /* unfitted */\n",416       "  background-color: var(--sklearn-color-fitted-level-0);\n",417       "}\n",418       "\n",419       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",420       "  /* Expand drop-down */\n",421       "  display: block;\n",422       "  width: 100%;\n",423       "  overflow: visible;\n",424       "}\n",425       "\n",426       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",427       "  content: \"▾\";\n",428       "}\n",429       "\n",430       "/* Pipeline/ColumnTransformer-specific style */\n",431       "\n",432       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",433       "  color: var(--sklearn-color-text);\n",434       "  background-color: var(--sklearn-color-unfitted-level-2);\n",435       "}\n",436       "\n",437       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",438       "  background-color: var(--sklearn-color-fitted-level-2);\n",439       "}\n",440       "\n",441       "/* Estimator-specific style */\n",442       "\n",443       "/* Colorize estimator box */\n",444       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",445       "  /* unfitted */\n",446       "  background-color: var(--sklearn-color-unfitted-level-2);\n",447       "}\n",448       "\n",449       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",450       "  /* fitted */\n",451       "  background-color: var(--sklearn-color-fitted-level-2);\n",452       "}\n",453       "\n",454       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",455       "#sk-container-id-2 div.sk-label label {\n",456       "  /* The background is the default theme color */\n",457       "  color: var(--sklearn-color-text-on-default-background);\n",458       "}\n",459       "\n",460       "/* On hover, darken the color of the background */\n",461       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",462       "  color: var(--sklearn-color-text);\n",463       "  background-color: var(--sklearn-color-unfitted-level-2);\n",464       "}\n",465       "\n",466       "/* Label box, darken color on hover, fitted */\n",467       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",468       "  color: var(--sklearn-color-text);\n",469       "  background-color: var(--sklearn-color-fitted-level-2);\n",470       "}\n",471       "\n",472       "/* Estimator label */\n",473       "\n",474       "#sk-container-id-2 div.sk-label label {\n",475       "  font-family: monospace;\n",476       "  font-weight: bold;\n",477       "  display: inline-block;\n",478       "  line-height: 1.2em;\n",479       "}\n",480       "\n",481       "#sk-container-id-2 div.sk-label-container {\n",482       "  text-align: center;\n",483       "}\n",484       "\n",485       "/* Estimator-specific */\n",486       "#sk-container-id-2 div.sk-estimator {\n",487       "  font-family: monospace;\n",488       "  border: 1px dotted var(--sklearn-color-border-box);\n",489       "  border-radius: 0.25em;\n",490       "  box-sizing: border-box;\n",491       "  margin-bottom: 0.5em;\n",492       "  /* unfitted */\n",493       "  background-color: var(--sklearn-color-unfitted-level-0);\n",494       "}\n",495       "\n",496       "#sk-container-id-2 div.sk-estimator.fitted {\n",497       "  /* fitted */\n",498       "  background-color: var(--sklearn-color-fitted-level-0);\n",499       "}\n",500       "\n",501       "/* on hover */\n",502       "#sk-container-id-2 div.sk-estimator:hover {\n",503       "  /* unfitted */\n",504       "  background-color: var(--sklearn-color-unfitted-level-2);\n",505       "}\n",506       "\n",507       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",508       "  /* fitted */\n",509       "  background-color: var(--sklearn-color-fitted-level-2);\n",510       "}\n",511       "\n",512       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",513       "\n",514       "/* Common style for \"i\" and \"?\" */\n",515       "\n",516       ".sk-estimator-doc-link,\n",517       "a:link.sk-estimator-doc-link,\n",518       "a:visited.sk-estimator-doc-link {\n",519       "  float: right;\n",520       "  font-size: smaller;\n",521       "  line-height: 1em;\n",522       "  font-family: monospace;\n",523       "  background-color: var(--sklearn-color-background);\n",524       "  border-radius: 1em;\n",525       "  height: 1em;\n",526       "  width: 1em;\n",527       "  text-decoration: none !important;\n",528       "  margin-left: 0.5em;\n",529       "  text-align: center;\n",530       "  /* unfitted */\n",531       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",532       "  color: var(--sklearn-color-unfitted-level-1);\n",533       "}\n",534       "\n",535       ".sk-estimator-doc-link.fitted,\n",536       "a:link.sk-estimator-doc-link.fitted,\n",537       "a:visited.sk-estimator-doc-link.fitted {\n",538       "  /* fitted */\n",539       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",540       "  color: var(--sklearn-color-fitted-level-1);\n",541       "}\n",542       "\n",543       "/* On hover */\n",544       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",545       ".sk-estimator-doc-link:hover,\n",546       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",547       ".sk-estimator-doc-link:hover {\n",548       "  /* unfitted */\n",549       "  background-color: var(--sklearn-color-unfitted-level-3);\n",550       "  color: var(--sklearn-color-background);\n",551       "  text-decoration: none;\n",552       "}\n",553       "\n",554       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",555       ".sk-estimator-doc-link.fitted:hover,\n",556       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",557       ".sk-estimator-doc-link.fitted:hover {\n",558       "  /* fitted */\n",559       "  background-color: var(--sklearn-color-fitted-level-3);\n",560       "  color: var(--sklearn-color-background);\n",561       "  text-decoration: none;\n",562       "}\n",563       "\n",564       "/* Span, style for the box shown on hovering the info icon */\n",565       ".sk-estimator-doc-link span {\n",566       "  display: none;\n",567       "  z-index: 9999;\n",568       "  position: relative;\n",569       "  font-weight: normal;\n",570       "  right: .2ex;\n",571       "  padding: .5ex;\n",572       "  margin: .5ex;\n",573       "  width: min-content;\n",574       "  min-width: 20ex;\n",575       "  max-width: 50ex;\n",576       "  color: var(--sklearn-color-text);\n",577       "  box-shadow: 2pt 2pt 4pt #999;\n",578       "  /* unfitted */\n",579       "  background: var(--sklearn-color-unfitted-level-0);\n",580       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",581       "}\n",582       "\n",583       ".sk-estimator-doc-link.fitted span {\n",584       "  /* fitted */\n",585       "  background: var(--sklearn-color-fitted-level-0);\n",586       "  border: var(--sklearn-color-fitted-level-3);\n",587       "}\n",588       "\n",589       ".sk-estimator-doc-link:hover span {\n",590       "  display: block;\n",591       "}\n",592       "\n",593       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",594       "\n",595       "#sk-container-id-2 a.estimator_doc_link {\n",596       "  float: right;\n",597       "  font-size: 1rem;\n",598       "  line-height: 1em;\n",599       "  font-family: monospace;\n",600       "  background-color: var(--sklearn-color-background);\n",601       "  border-radius: 1rem;\n",602       "  height: 1rem;\n",603       "  width: 1rem;\n",604       "  text-decoration: none;\n",605       "  /* unfitted */\n",606       "  color: var(--sklearn-color-unfitted-level-1);\n",607       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",608       "}\n",609       "\n",610       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",611       "  /* fitted */\n",612       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",613       "  color: var(--sklearn-color-fitted-level-1);\n",614       "}\n",615       "\n",616       "/* On hover */\n",617       "#sk-container-id-2 a.estimator_doc_link:hover {\n",618       "  /* unfitted */\n",619       "  background-color: var(--sklearn-color-unfitted-level-3);\n",620       "  color: var(--sklearn-color-background);\n",621       "  text-decoration: none;\n",622       "}\n",623       "\n",624       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",625       "  /* fitted */\n",626       "  background-color: var(--sklearn-color-fitted-level-3);\n",627       "}\n",628       "\n",629       ".estimator-table summary {\n",630       "    padding: .5rem;\n",631       "    font-family: monospace;\n",632       "    cursor: pointer;\n",633       "}\n",634       "\n",635       ".estimator-table details[open] {\n",636       "    padding-left: 0.1rem;\n",637       "    padding-right: 0.1rem;\n",638       "    padding-bottom: 0.3rem;\n",639       "}\n",640       "\n",641       ".estimator-table .parameters-table {\n",642       "    margin-left: auto !important;\n",643       "    margin-right: auto !important;\n",644       "}\n",645       "\n",646       ".estimator-table .parameters-table tr:nth-child(odd) {\n",647       "    background-color: #fff;\n",648       "}\n",649       "\n",650       ".estimator-table .parameters-table tr:nth-child(even) {\n",651       "    background-color: #f6f6f6;\n",652       "}\n",653       "\n",654       ".estimator-table .parameters-table tr:hover {\n",655       "    background-color: #e0e0e0;\n",656       "}\n",657       "\n",658       ".estimator-table table td {\n",659       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",660       "}\n",661       "\n",662       ".user-set td {\n",663       "    color:rgb(255, 94, 0);\n",664       "    text-align: left;\n",665       "}\n",666       "\n",667       ".user-set td.value pre {\n",668       "    color:rgb(255, 94, 0) !important;\n",669       "    background-color: transparent !important;\n",670       "}\n",671       "\n",672       ".default td {\n",673       "    color: black;\n",674       "    text-align: left;\n",675       "}\n",676       "\n",677       ".user-set td i,\n",678       ".default td i {\n",679       "    color: black;\n",680       "}\n",681       "\n",682       ".copy-paste-icon {\n",683       "    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",684       "    background-repeat: no-repeat;\n",685       "    background-size: 14px 14px;\n",686       "    background-position: 0;\n",687       "    display: inline-block;\n",688       "    width: 14px;\n",689       "    height: 14px;\n",690       "    cursor: pointer;\n",691       "}\n",692       "</style><body><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[(&#x27;dictvectorizer&#x27;, DictVectorizer()),\n",693       "                (&#x27;logisticregression&#x27;, LogisticRegression(solver=&#x27;liblinear&#x27;))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" ><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>Pipeline</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.7/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",694       "        <div class=\"estimator-table\">\n",695       "            <details>\n",696       "                <summary>Parameters</summary>\n",697       "                <table class=\"parameters-table\">\n",698       "                  <tbody>\n",699       "                    \n",700       "        <tr class=\"user-set\">\n",701       "            <td><i class=\"copy-paste-icon\"\n",702       "                 onclick=\"copyToClipboard('steps',\n",703       "                          this.parentElement.nextElementSibling)\"\n",704       "            ></i></td>\n",705       "            <td class=\"param\">steps&nbsp;</td>\n",706       "            <td class=\"value\">[(&#x27;dictvectorizer&#x27;, ...), (&#x27;logisticregression&#x27;, ...)]</td>\n",707       "        </tr>\n",708       "    \n",709       "\n",710       "        <tr class=\"default\">\n",711       "            <td><i class=\"copy-paste-icon\"\n",712       "                 onclick=\"copyToClipboard('transform_input',\n",713       "                          this.parentElement.nextElementSibling)\"\n",714       "            ></i></td>\n",715       "            <td class=\"param\">transform_input&nbsp;</td>\n",716       "            <td class=\"value\">None</td>\n",717       "        </tr>\n",718       "    \n",719       "\n",720       "        <tr class=\"default\">\n",721       "            <td><i class=\"copy-paste-icon\"\n",722       "                 onclick=\"copyToClipboard('memory',\n",723       "                          this.parentElement.nextElementSibling)\"\n",724       "            ></i></td>\n",725       "            <td class=\"param\">memory&nbsp;</td>\n",726       "            <td class=\"value\">None</td>\n",727       "        </tr>\n",728       "    \n",729       "\n",730       "        <tr class=\"default\">\n",731       "            <td><i class=\"copy-paste-icon\"\n",732       "                 onclick=\"copyToClipboard('verbose',\n",733       "                          this.parentElement.nextElementSibling)\"\n",734       "            ></i></td>\n",735       "            <td class=\"param\">verbose&nbsp;</td>\n",736       "            <td class=\"value\">False</td>\n",737       "        </tr>\n",738       "    \n",739       "                  </tbody>\n",740       "                </table>\n",741       "            </details>\n",742       "        </div>\n",743       "    </div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" ><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>DictVectorizer</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.7/modules/generated/sklearn.feature_extraction.DictVectorizer.html\">?<span>Documentation for DictVectorizer</span></a></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"dictvectorizer__\">\n",744       "        <div class=\"estimator-table\">\n",745       "            <details>\n",746       "                <summary>Parameters</summary>\n",747       "                <table class=\"parameters-table\">\n",748       "                  <tbody>\n",749       "                    \n",750       "        <tr class=\"default\">\n",751       "            <td><i class=\"copy-paste-icon\"\n",752       "                 onclick=\"copyToClipboard('dtype',\n",753       "                          this.parentElement.nextElementSibling)\"\n",754       "            ></i></td>\n",755       "            <td class=\"param\">dtype&nbsp;</td>\n",756       "            <td class=\"value\">&lt;class &#x27;numpy.float64&#x27;&gt;</td>\n",757       "        </tr>\n",758       "    \n",759       "\n",760       "        <tr class=\"default\">\n",761       "            <td><i class=\"copy-paste-icon\"\n",762       "                 onclick=\"copyToClipboard('separator',\n",763       "                          this.parentElement.nextElementSibling)\"\n",764       "            ></i></td>\n",765       "            <td class=\"param\">separator&nbsp;</td>\n",766       "            <td class=\"value\">&#x27;=&#x27;</td>\n",767       "        </tr>\n",768       "    \n",769       "\n",770       "        <tr class=\"default\">\n",771       "            <td><i class=\"copy-paste-icon\"\n",772       "                 onclick=\"copyToClipboard('sparse',\n",773       "                          this.parentElement.nextElementSibling)\"\n",774       "            ></i></td>\n",775       "            <td class=\"param\">sparse&nbsp;</td>\n",776       "            <td class=\"value\">True</td>\n",777       "        </tr>\n",778       "    \n",779       "\n",780       "        <tr class=\"default\">\n",781       "            <td><i class=\"copy-paste-icon\"\n",782       "                 onclick=\"copyToClipboard('sort',\n",783       "                          this.parentElement.nextElementSibling)\"\n",784       "            ></i></td>\n",785       "            <td class=\"param\">sort&nbsp;</td>\n",786       "            <td class=\"value\">True</td>\n",787       "        </tr>\n",788       "    \n",789       "                  </tbody>\n",790       "                </table>\n",791       "            </details>\n",792       "        </div>\n",793       "    </div></div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" ><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.7/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"logisticregression__\">\n",794       "        <div class=\"estimator-table\">\n",795       "            <details>\n",796       "                <summary>Parameters</summary>\n",797       "                <table class=\"parameters-table\">\n",798       "                  <tbody>\n",799       "                    \n",800       "        <tr class=\"default\">\n",801       "            <td><i class=\"copy-paste-icon\"\n",802       "                 onclick=\"copyToClipboard('penalty',\n",803       "                          this.parentElement.nextElementSibling)\"\n",804       "            ></i></td>\n",805       "            <td class=\"param\">penalty&nbsp;</td>\n",806       "            <td class=\"value\">&#x27;l2&#x27;</td>\n",807       "        </tr>\n",808       "    \n",809       "\n",810       "        <tr class=\"default\">\n",811       "            <td><i class=\"copy-paste-icon\"\n",812       "                 onclick=\"copyToClipboard('dual',\n",813       "                          this.parentElement.nextElementSibling)\"\n",814       "            ></i></td>\n",815       "            <td class=\"param\">dual&nbsp;</td>\n",816       "            <td class=\"value\">False</td>\n",817       "        </tr>\n",818       "    \n",819       "\n",820       "        <tr class=\"default\">\n",821       "            <td><i class=\"copy-paste-icon\"\n",822       "                 onclick=\"copyToClipboard('tol',\n",823       "                          this.parentElement.nextElementSibling)\"\n",824       "            ></i></td>\n",825       "            <td class=\"param\">tol&nbsp;</td>\n",826       "            <td class=\"value\">0.0001</td>\n",827       "        </tr>\n",828       "    \n",829       "\n",830       "        <tr class=\"default\">\n",831       "            <td><i class=\"copy-paste-icon\"\n",832       "                 onclick=\"copyToClipboard('C',\n",833       "                          this.parentElement.nextElementSibling)\"\n",834       "            ></i></td>\n",835       "            <td class=\"param\">C&nbsp;</td>\n",836       "            <td class=\"value\">1.0</td>\n",837       "        </tr>\n",838       "    \n",839       "\n",840       "        <tr class=\"default\">\n",841       "            <td><i class=\"copy-paste-icon\"\n",842       "                 onclick=\"copyToClipboard('fit_intercept',\n",843       "                          this.parentElement.nextElementSibling)\"\n",844       "            ></i></td>\n",845       "            <td class=\"param\">fit_intercept&nbsp;</td>\n",846       "            <td class=\"value\">True</td>\n",847       "        </tr>\n",848       "    \n",849       "\n",850       "        <tr class=\"default\">\n",851       "            <td><i class=\"copy-paste-icon\"\n",852       "                 onclick=\"copyToClipboard('intercept_scaling',\n",853       "                          this.parentElement.nextElementSibling)\"\n",854       "            ></i></td>\n",855       "            <td class=\"param\">intercept_scaling&nbsp;</td>\n",856       "            <td class=\"value\">1</td>\n",857       "        </tr>\n",858       "    \n",859       "\n",860       "        <tr class=\"default\">\n",861       "            <td><i class=\"copy-paste-icon\"\n",862       "                 onclick=\"copyToClipboard('class_weight',\n",863       "                          this.parentElement.nextElementSibling)\"\n",864       "            ></i></td>\n",865       "            <td class=\"param\">class_weight&nbsp;</td>\n",866       "            <td class=\"value\">None</td>\n",867       "        </tr>\n",868       "    \n",869       "\n",870       "        <tr class=\"default\">\n",871       "            <td><i class=\"copy-paste-icon\"\n",872       "                 onclick=\"copyToClipboard('random_state',\n",873       "                          this.parentElement.nextElementSibling)\"\n",874       "            ></i></td>\n",875       "            <td class=\"param\">random_state&nbsp;</td>\n",876       "            <td class=\"value\">None</td>\n",877       "        </tr>\n",878       "    \n",879       "\n",880       "        <tr class=\"user-set\">\n",881       "            <td><i class=\"copy-paste-icon\"\n",882       "                 onclick=\"copyToClipboard('solver',\n",883       "                          this.parentElement.nextElementSibling)\"\n",884       "            ></i></td>\n",885       "            <td class=\"param\">solver&nbsp;</td>\n",886       "            <td class=\"value\">&#x27;liblinear&#x27;</td>\n",887       "        </tr>\n",888       "    \n",889       "\n",890       "        <tr class=\"default\">\n",891       "            <td><i class=\"copy-paste-icon\"\n",892       "                 onclick=\"copyToClipboard('max_iter',\n",893       "                          this.parentElement.nextElementSibling)\"\n",894       "            ></i></td>\n",895       "            <td class=\"param\">max_iter&nbsp;</td>\n",896       "            <td class=\"value\">100</td>\n",897       "        </tr>\n",898       "    \n",899       "\n",900       "        <tr class=\"default\">\n",901       "            <td><i class=\"copy-paste-icon\"\n",902       "                 onclick=\"copyToClipboard('multi_class',\n",903       "                          this.parentElement.nextElementSibling)\"\n",904       "            ></i></td>\n",905       "            <td class=\"param\">multi_class&nbsp;</td>\n",906       "            <td class=\"value\">&#x27;deprecated&#x27;</td>\n",907       "        </tr>\n",908       "    \n",909       "\n",910       "        <tr class=\"default\">\n",911       "            <td><i class=\"copy-paste-icon\"\n",912       "                 onclick=\"copyToClipboard('verbose',\n",913       "                          this.parentElement.nextElementSibling)\"\n",914       "            ></i></td>\n",915       "            <td class=\"param\">verbose&nbsp;</td>\n",916       "            <td class=\"value\">0</td>\n",917       "        </tr>\n",918       "    \n",919       "\n",920       "        <tr class=\"default\">\n",921       "            <td><i class=\"copy-paste-icon\"\n",922       "                 onclick=\"copyToClipboard('warm_start',\n",923       "                          this.parentElement.nextElementSibling)\"\n",924       "            ></i></td>\n",925       "            <td class=\"param\">warm_start&nbsp;</td>\n",926       "            <td class=\"value\">False</td>\n",927       "        </tr>\n",928       "    \n",929       "\n",930       "        <tr class=\"default\">\n",931       "            <td><i class=\"copy-paste-icon\"\n",932       "                 onclick=\"copyToClipboard('n_jobs',\n",933       "                          this.parentElement.nextElementSibling)\"\n",934       "            ></i></td>\n",935       "            <td class=\"param\">n_jobs&nbsp;</td>\n",936       "            <td class=\"value\">None</td>\n",937       "        </tr>\n",938       "    \n",939       "\n",940       "        <tr class=\"default\">\n",941       "            <td><i class=\"copy-paste-icon\"\n",942       "                 onclick=\"copyToClipboard('l1_ratio',\n",943       "                          this.parentElement.nextElementSibling)\"\n",944       "            ></i></td>\n",945       "            <td class=\"param\">l1_ratio&nbsp;</td>\n",946       "            <td class=\"value\">None</td>\n",947       "        </tr>\n",948       "    \n",949       "                  </tbody>\n",950       "                </table>\n",951       "            </details>\n",952       "        </div>\n",953       "    </div></div></div></div></div></div></div><script>function copyToClipboard(text, element) {\n",954       "    // Get the parameter prefix from the closest toggleable content\n",955       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",956       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",957       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",958       "\n",959       "    const originalStyle = element.style;\n",960       "    const computedStyle = window.getComputedStyle(element);\n",961       "    const originalWidth = computedStyle.width;\n",962       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",963       "\n",964       "    navigator.clipboard.writeText(fullParamName)\n",965       "        .then(() => {\n",966       "            element.style.width = originalWidth;\n",967       "            element.style.color = 'green';\n",968       "            element.innerHTML = \"Copied!\";\n",969       "\n",970       "            setTimeout(() => {\n",971       "                element.innerHTML = originalHTML;\n",972       "                element.style = originalStyle;\n",973       "            }, 2000);\n",974       "        })\n",975       "        .catch(err => {\n",976       "            console.error('Failed to copy:', err);\n",977       "            element.style.color = 'red';\n",978       "            element.innerHTML = \"Failed!\";\n",979       "            setTimeout(() => {\n",980       "                element.innerHTML = originalHTML;\n",981       "                element.style = originalStyle;\n",982       "            }, 2000);\n",983       "        });\n",984       "    return false;\n",985       "}\n",986       "\n",987       "document.querySelectorAll('.fa-regular.fa-copy').forEach(function(element) {\n",988       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",989       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",990       "    const paramName = element.parentElement.nextElementSibling.textContent.trim();\n",991       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",992       "\n",993       "    element.setAttribute('title', fullParamName);\n",994       "});\n",995       "</script></body>"996      ],997      "text/plain": [998       "Pipeline(steps=[('dictvectorizer', DictVectorizer()),\n",999       "                ('logisticregression', LogisticRegression(solver='liblinear'))])"1000      ]1001     },1002     "execution_count": 14,1003     "metadata": {},1004     "output_type": "execute_result"1005    }1006   ],1007   "source": [1008    "# Preprocessing using DictVectorizer and Training the model \n",1009    "categorical = ['lead_source']\n",1010    "numeric = ['number_of_courses_viewed', 'annual_income']\n",1011    "\n",1012    "df[categorical] = df[categorical].fillna('NA')\n",1013    "df[numeric] = df[numeric].fillna(0)\n",1014    "\n",1015    "train_dict = df[categorical + numeric].to_dict(orient='records')\n",1016    "\n",1017    "pipeline = make_pipeline(\n",1018    "    DictVectorizer(),\n",1019    "    LogisticRegression(solver='liblinear')\n",1020    ")\n",1021    "\n",1022    "pipeline.fit(train_dict, y_train)"1023   ]1024  },1025  {1026   "cell_type": "code",1027   "execution_count": 15,1028   "id": "80f2002c-433b-4e77-9df7-965839859d4a",1029   "metadata": {},1030   "outputs": [1031    {1032     "data": {1033      "text/plain": [1034       "{'lead_source': 'paid_ads',\n",1035       " 'number_of_courses_viewed': 1,\n",1036       " 'annual_income': 79450.0}"1037      ]1038     },1039     "execution_count": 15,1040     "metadata": {},1041     "output_type": "execute_result"1042    }1043   ],1044   "source": [1045    "train_dict[0]"1046   ]1047  },1048  {1049   "cell_type": "code",1050   "execution_count": 21,1051   "id": "7bbf2adb-11c4-4853-8f1b-fd22b5cf09b2",1052   "metadata": {},1053   "outputs": [1054    {1055     "data": {1056      "text/plain": [1057       "number_of_courses_viewed\n",1058       "1    417\n",1059       "2    388\n",1060       "3    269\n",1061       "0    181\n",1062       "4    109\n",1063       "5     67\n",1064       "6     22\n",1065       "7      6\n",1066       "8      2\n",1067       "9      1\n",1068       "Name: count, dtype: int64"1069      ]1070     },1071     "execution_count": 21,1072     "metadata": {},1073     "output_type": "execute_result"1074    }1075   ],1076   "source": [1077    "df.number_of_courses_viewed.value_counts()"1078   ]1079  },1080  {1081   "cell_type": "code",1082   "execution_count": 26,1083   "id": "5a613b8d-47bb-4e5a-8b80-117b49221d6c",1084   "metadata": {},1085   "outputs": [],1086   "source": [1087    "# sample customer data\n",1088    "customer = {\n",1089    "    'lead_source': 'organic_search',\n",1090    "    'number_of_courses_viewed': 3,\n",1091    "    'annual_income': 50450.0}"1092   ]1093  },1094  {1095   "cell_type": "code",1096   "execution_count": 28,1097   "id": "b91d20df-46a2-4580-9de0-f17d5bdc7f65",1098   "metadata": {},1099   "outputs": [1100    {1101     "data": {1102      "text/plain": [1103       "np.float64(0.6644010536277872)"1104      ]1105     },1106     "execution_count": 28,1107     "metadata": {},1108     "output_type": "execute_result"1109    }1110   ],1111   "source": [1112    "# probability of this customer to get converted\n",1113    "pipeline.predict_proba(customer)[0, 1] "1114   ]1115  },1116  {1117   "cell_type": "code",1118   "execution_count": 29,1119   "id": "96a4d3ac-d5e4-4890-a085-00298c231e28",1120   "metadata": {},1121   "outputs": [],1122   "source": [1123    "# save the model\n",1124    "import pickle\n",1125    "\n",1126    "with open('model.bin', 'wb') as f:\n",1127    "    pickle.dump(pipeline, f)"1128   ]1129  },1130  {1131   "cell_type": "code",1132   "execution_count": 31,1133   "id": "7f99bdbb-1304-49e1-9f6f-fdc1fdcdba54",1134   "metadata": {},1135   "outputs": [],1136   "source": [1137    "# load the model\n",1138    "\n",1139    "with open('model.bin', 'rb') as f_in:\n",1140    "    model = pickle.load(f_in)"1141   ]1142  },1143  {1144   "cell_type": "code",1145   "execution_count": 32,1146   "id": "0ac0af36-e4e8-475f-896d-645a63877aff",1147   "metadata": {},1148   "outputs": [1149    {1150     "data": {1151      "text/html": [1152       "<style>#sk-container-id-3 {\n",1153       "  /* Definition of color scheme common for light and dark mode */\n",1154       "  --sklearn-color-text: #000;\n",1155       "  --sklearn-color-text-muted: #666;\n",1156       "  --sklearn-color-line: gray;\n",1157       "  /* Definition of color scheme for unfitted estimators */\n",1158       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",1159       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",1160       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",1161       "  --sklearn-color-unfitted-level-3: chocolate;\n",1162       "  /* Definition of color scheme for fitted estimators */\n",1163       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",1164       "  --sklearn-color-fitted-level-1: #d4ebff;\n",1165       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",1166       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",1167       "\n",1168       "  /* Specific color for light theme */\n",1169       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",1170       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",1171       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",1172       "  --sklearn-color-icon: #696969;\n",1173       "\n",1174       "  @media (prefers-color-scheme: dark) {\n",1175       "    /* Redefinition of color scheme for dark theme */\n",1176       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",1177       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",1178       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",1179       "    --sklearn-color-icon: #878787;\n",1180       "  }\n",1181       "}\n",1182       "\n",1183       "#sk-container-id-3 {\n",1184       "  color: var(--sklearn-color-text);\n",1185       "}\n",1186       "\n",1187       "#sk-container-id-3 pre {\n",1188       "  padding: 0;\n",1189       "}\n",1190       "\n",1191       "#sk-container-id-3 input.sk-hidden--visually {\n",1192       "  border: 0;\n",1193       "  clip: rect(1px 1px 1px 1px);\n",1194       "  clip: rect(1px, 1px, 1px, 1px);\n",1195       "  height: 1px;\n",1196       "  margin: -1px;\n",1197       "  overflow: hidden;\n",1198       "  padding: 0;\n",1199       "  position: absolute;\n",1200       "  width: 1px;\n",

Showing the first 1,200 of 1987 lines. Download the file for the rest.