diff --git a/Notebooks/modelling.ipynb b/Notebooks/modelling.ipynb
new file mode 100644
index 0000000..c5282b5
--- /dev/null
+++ b/Notebooks/modelling.ipynb
@@ -0,0 +1,1161 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Importing Pandas an Numpy Libraries to use on manipulating our Data\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "# To Preproccesing our data\n",
+ "from sklearn.preprocessing import LabelEncoder\n",
+ "\n",
+ "# To fill missing values\n",
+ "from sklearn.impute import SimpleImputer\n",
+ "\n",
+ "# To Split our train data\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "# To Visualize Data\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "\n",
+ "# To Train our data\n",
+ "from xgboost import XGBClassifier\n",
+ "from sklearn.utils import shuffle\n",
+ "from sklearn.tree import DecisionTreeClassifier\n",
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "from sklearn.neighbors import KNeighborsClassifier\n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.naive_bayes import BernoulliNB, GaussianNB\n",
+ "\n",
+ "# To evaluate end result we have \n",
+ "from sklearn.metrics import accuracy_score, confusion_matrix,mean_squared_error, r2_score, mean_absolute_error\n",
+ "from sklearn.model_selection import LeaveOneOut\n",
+ "from sklearn.model_selection import cross_val_score"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " auction_id | \n",
+ " experiment | \n",
+ " date | \n",
+ " hour | \n",
+ " device_make | \n",
+ " platform_os | \n",
+ " browser | \n",
+ " yes | \n",
+ " no | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0008ef63-77a7-448b-bd1e-075f42c55e39 | \n",
+ " exposed | \n",
+ " 2020-07-10 | \n",
+ " 8 | \n",
+ " Generic Smartphone | \n",
+ " 6 | \n",
+ " Chrome Mobile | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 000eabc5-17ce-4137-8efe-44734d914446 | \n",
+ " exposed | \n",
+ " 2020-07-07 | \n",
+ " 10 | \n",
+ " Generic Smartphone | \n",
+ " 6 | \n",
+ " Chrome Mobile | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0016d14a-ae18-4a02-a204-6ba53b52f2ed | \n",
+ " exposed | \n",
+ " 2020-07-05 | \n",
+ " 2 | \n",
+ " E5823 | \n",
+ " 6 | \n",
+ " Chrome Mobile WebView | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 00187412-2932-4542-a8ef-3633901c98d9 | \n",
+ " control | \n",
+ " 2020-07-03 | \n",
+ " 15 | \n",
+ " Samsung SM-A705FN | \n",
+ " 6 | \n",
+ " Facebook | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 001a7785-d3fe-4e11-a344-c8735acacc2c | \n",
+ " control | \n",
+ " 2020-07-03 | \n",
+ " 15 | \n",
+ " Generic Smartphone | \n",
+ " 6 | \n",
+ " Chrome Mobile | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " auction_id experiment date hour \\\n",
+ "0 0008ef63-77a7-448b-bd1e-075f42c55e39 exposed 2020-07-10 8 \n",
+ "1 000eabc5-17ce-4137-8efe-44734d914446 exposed 2020-07-07 10 \n",
+ "2 0016d14a-ae18-4a02-a204-6ba53b52f2ed exposed 2020-07-05 2 \n",
+ "3 00187412-2932-4542-a8ef-3633901c98d9 control 2020-07-03 15 \n",
+ "4 001a7785-d3fe-4e11-a344-c8735acacc2c control 2020-07-03 15 \n",
+ "\n",
+ " device_make platform_os browser yes no \n",
+ "0 Generic Smartphone 6 Chrome Mobile 0 0 \n",
+ "1 Generic Smartphone 6 Chrome Mobile 0 0 \n",
+ "2 E5823 6 Chrome Mobile WebView 0 1 \n",
+ "3 Samsung SM-A705FN 6 Facebook 0 0 \n",
+ "4 Generic Smartphone 6 Chrome Mobile 0 0 "
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "sys.path.append('../Scripts')\n",
+ "from eda_Read_data import ReadData\n",
+ "loader = ReadData()\n",
+ "data= loader.read_csv('../Data/AdSmartABdata.csv')\n",
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Data Preprocessing for modelling"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " auction_id | \n",
+ " experiment | \n",
+ " date | \n",
+ " hour | \n",
+ " device_make | \n",
+ " platform_os | \n",
+ " browser | \n",
+ " yes | \n",
+ " no | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2 | \n",
+ " 0016d14a-ae18-4a02-a204-6ba53b52f2ed | \n",
+ " exposed | \n",
+ " 2020-07-05 | \n",
+ " 2 | \n",
+ " E5823 | \n",
+ " 6 | \n",
+ " Chrome Mobile WebView | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " 008aafdf-deef-4482-8fec-d98e3da054da | \n",
+ " exposed | \n",
+ " 2020-07-04 | \n",
+ " 16 | \n",
+ " Generic Smartphone | \n",
+ " 6 | \n",
+ " Chrome Mobile | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 00a1384a-5118-4d1b-925b-6cdada50318d | \n",
+ " exposed | \n",
+ " 2020-07-06 | \n",
+ " 8 | \n",
+ " Generic Smartphone | \n",
+ " 6 | \n",
+ " Chrome Mobile | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " 00b6fadb-10bd-49e3-a778-290da82f7a8d | \n",
+ " control | \n",
+ " 2020-07-08 | \n",
+ " 4 | \n",
+ " Samsung SM-A202F | \n",
+ " 6 | \n",
+ " Facebook | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 27 | \n",
+ " 00ebf4a8-060f-4b99-93ac-c62724399483 | \n",
+ " control | \n",
+ " 2020-07-03 | \n",
+ " 15 | \n",
+ " Generic Smartphone | \n",
+ " 6 | \n",
+ " Chrome Mobile | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " auction_id experiment date hour \\\n",
+ "2 0016d14a-ae18-4a02-a204-6ba53b52f2ed exposed 2020-07-05 2 \n",
+ "16 008aafdf-deef-4482-8fec-d98e3da054da exposed 2020-07-04 16 \n",
+ "20 00a1384a-5118-4d1b-925b-6cdada50318d exposed 2020-07-06 8 \n",
+ "23 00b6fadb-10bd-49e3-a778-290da82f7a8d control 2020-07-08 4 \n",
+ "27 00ebf4a8-060f-4b99-93ac-c62724399483 control 2020-07-03 15 \n",
+ "\n",
+ " device_make platform_os browser yes no \n",
+ "2 E5823 6 Chrome Mobile WebView 0 1 \n",
+ "16 Generic Smartphone 6 Chrome Mobile 1 0 \n",
+ "20 Generic Smartphone 6 Chrome Mobile 0 1 \n",
+ "23 Samsung SM-A202F 6 Facebook 1 0 \n",
+ "27 Generic Smartphone 6 Chrome Mobile 0 1 "
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from eda_cleaning_data import Cleaning_excel_data\n",
+ "cleaner = Cleaning_excel_data()\n",
+ "clean_data= cleaner.drop_rows(data, 'yes', 'no')\n",
+ "clean_data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " row_id | \n",
+ " device_make | \n",
+ " platform_os | \n",
+ " browser | \n",
+ " day_of_week | \n",
+ " experiment | \n",
+ " result | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 5221 | \n",
+ " 5221 | \n",
+ " 41 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 6053 | \n",
+ " 6053 | \n",
+ " 43 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 5531 | \n",
+ " 5531 | \n",
+ " 47 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 6171 | \n",
+ " 6171 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4719 | \n",
+ " 4719 | \n",
+ " 47 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " row_id device_make platform_os browser day_of_week experiment \\\n",
+ "5221 5221 41 6 7 0 0 \n",
+ "6053 6053 43 6 2 4 0 \n",
+ "5531 5531 47 6 7 0 0 \n",
+ "6171 6171 13 6 1 0 0 \n",
+ "4719 4719 47 6 2 6 1 \n",
+ "\n",
+ " result \n",
+ "5221 1 \n",
+ "6053 1 \n",
+ "5531 1 \n",
+ "6171 0 \n",
+ "4719 0 "
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "## generating a day of the week column from the date\n",
+ "clean_data['date'] = pd.to_datetime(df['date'], errors='coerce')\n",
+ "clean_data['day_of_week'] = clean_data['date'].dt.day_name()\n",
+ "\n",
+ "\n",
+ "#drop the no column\n",
+ "clean_data.drop(['no'], axis=1,inplace=True)\n",
+ "clean_data.rename(columns={'yes': 'result'},inplace=True)\n",
+ "\n",
+ "#Combining the control and exposed group \n",
+ "exposed_group = clean_data[clean_data['experiment'] == 'exposed']\n",
+ "control_group = clean_data[clean_data['experiment'] == 'control']\n",
+ "\n",
+ "#dropping nulls and indexing the data\n",
+ "clean_data['row_id'] = clean_data.index\n",
+ "clean_data.dropna(inplace=True)\n",
+ "clean_data = shuffle(clean_data)\n",
+ "\n",
+ "#encoding the data in categorical data into 0s and 1s\n",
+ "lb = LabelEncoder()\n",
+ "clean_data['experiment'] = lb.fit_transform(clean_data['experiment'])\n",
+ "clean_data['browser'] = lb.fit_transform(clean_data['browser'])\n",
+ "clean_data['device_make'] = lb.fit_transform(clean_data['device_make'])\n",
+ "clean_data['day_of_week'] = lb.fit_transform(clean_data['day_of_week'])\n",
+ "\n",
+ "#eliminating nwanted colmns\n",
+ "clean_data = clean_data[['row_id', 'device_make', 'platform_os', 'browser' ,'day_of_week', 'experiment','result']]\n",
+ "\n",
+ "\n",
+ "clean_data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " row_id | \n",
+ " device_make | \n",
+ " platform_os | \n",
+ " browser | \n",
+ " day_of_week | \n",
+ " experiment | \n",
+ " result | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 5221 | \n",
+ " 5221 | \n",
+ " 41 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 6053 | \n",
+ " 6053 | \n",
+ " 43 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 5531 | \n",
+ " 5531 | \n",
+ " 47 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 6171 | \n",
+ " 6171 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4719 | \n",
+ " 4719 | \n",
+ " 47 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 5624 | \n",
+ " 5624 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3854 | \n",
+ " 3854 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2347 | \n",
+ " 2347 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 5014 | \n",
+ " 5014 | \n",
+ " 69 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 6297 | \n",
+ " 6297 | \n",
+ " 64 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 5 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2598 | \n",
+ " 2598 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 4463 | \n",
+ " 4463 | \n",
+ " 48 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 7267 | \n",
+ " 7267 | \n",
+ " 80 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4701 | \n",
+ " 4701 | \n",
+ " 13 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3056 | \n",
+ " 3056 | \n",
+ " 46 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 6410 | \n",
+ " 6410 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1595 | \n",
+ " 1595 | \n",
+ " 36 | \n",
+ " 6 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 7944 | \n",
+ " 7944 | \n",
+ " 112 | \n",
+ " 6 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2631 | \n",
+ " 2631 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1966 | \n",
+ " 1966 | \n",
+ " 12 | \n",
+ " 6 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 7274 | \n",
+ " 7274 | \n",
+ " 72 | \n",
+ " 6 | \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4494 | \n",
+ " 4494 | \n",
+ " 48 | \n",
+ " 6 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 7856 | \n",
+ " 7856 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1097 | \n",
+ " 1097 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4871 | \n",
+ " 4871 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4749 | \n",
+ " 4749 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 6905 | \n",
+ " 6905 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2531 | \n",
+ " 2531 | \n",
+ " 18 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 7465 | \n",
+ " 7465 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 901 | \n",
+ " 901 | \n",
+ " 18 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4706 | \n",
+ " 4706 | \n",
+ " 114 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " row_id device_make platform_os browser day_of_week experiment \\\n",
+ "5221 5221 41 6 7 0 0 \n",
+ "6053 6053 43 6 2 4 0 \n",
+ "5531 5531 47 6 7 0 0 \n",
+ "6171 6171 13 6 1 0 0 \n",
+ "4719 4719 47 6 2 6 1 \n",
+ "5624 5624 13 6 1 2 1 \n",
+ "3854 3854 13 6 1 0 1 \n",
+ "2347 2347 13 6 1 0 0 \n",
+ "5014 5014 69 6 2 2 1 \n",
+ "6297 6297 64 6 7 5 0 \n",
+ "2598 2598 13 6 1 0 1 \n",
+ "4463 4463 48 6 7 2 1 \n",
+ "7267 7267 80 6 2 0 0 \n",
+ "4701 4701 13 6 2 0 1 \n",
+ "3056 3056 46 6 7 3 1 \n",
+ "6410 6410 114 5 5 2 0 \n",
+ "1595 1595 36 6 4 0 0 \n",
+ "7944 7944 112 6 4 0 0 \n",
+ "2631 2631 114 5 6 0 0 \n",
+ "1966 1966 12 6 4 0 0 \n",
+ "7274 7274 72 6 4 4 0 \n",
+ "4494 4494 48 6 4 0 0 \n",
+ "7856 7856 114 5 6 5 0 \n",
+ "1097 1097 114 5 5 0 1 \n",
+ "4871 4871 114 5 5 1 0 \n",
+ "4749 4749 114 5 5 2 0 \n",
+ "6905 6905 114 5 5 4 1 \n",
+ "2531 2531 18 6 0 3 1 \n",
+ "7465 7465 114 5 3 2 0 \n",
+ "901 901 18 6 0 0 0 \n",
+ "4706 4706 114 5 6 0 0 \n",
+ "\n",
+ " result \n",
+ "5221 1 \n",
+ "6053 1 \n",
+ "5531 1 \n",
+ "6171 0 \n",
+ "4719 0 \n",
+ "5624 1 \n",
+ "3854 0 \n",
+ "2347 0 \n",
+ "5014 1 \n",
+ "6297 1 \n",
+ "2598 1 \n",
+ "4463 0 \n",
+ "7267 0 \n",
+ "4701 1 \n",
+ "3056 0 \n",
+ "6410 0 \n",
+ "1595 1 \n",
+ "7944 1 \n",
+ "2631 0 \n",
+ "1966 0 \n",
+ "7274 0 \n",
+ "4494 1 \n",
+ "7856 0 \n",
+ "1097 0 \n",
+ "4871 0 \n",
+ "4749 0 \n",
+ "6905 0 \n",
+ "2531 1 \n",
+ "7465 1 \n",
+ "901 0 \n",
+ "4706 0 "
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "browser_groups= clean_data.groupby('browser')\n",
+ "#exposed_dropped_group= experiment_dropped_groups.get_group('exposed')\n",
+ "browser_groups.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(1243, 7)"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "clean_data.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set aside 20% of train and test data for evaluation\n",
+ "X_train, X_test, y_train, y_test = train_test_split(clean_data.loc[:, clean_data.columns != 'result'], clean_data['result'],\n",
+ " test_size=0.1)\n",
+ "\n",
+ "# Use the same function above for the validation set\n",
+ "X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, \n",
+ " test_size=0.2) # 0.25 x 0.8 = 0.2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(894, 6)\n",
+ "(125, 6)\n",
+ "(224, 6)\n",
+ "(894,)\n",
+ "(125,)\n",
+ "(224,)\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(X_train.shape)\n",
+ "print(X_test.shape)\n",
+ "print(X_val.shape)\n",
+ "print(y_train.shape)\n",
+ "print(y_test.shape)\n",
+ "print(y_val.shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Logistic Regression"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Predicted: [0 0 0 0 0 0 1 0 0 0]\n",
+ "Actual: 6250 1\n",
+ "3372 0\n",
+ "3722 1\n",
+ "5579 0\n",
+ "3473 1\n",
+ "5831 0\n",
+ "6836 1\n",
+ "4901 0\n",
+ "2791 0\n",
+ "7375 1\n",
+ "Name: result, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Define Logistic Regression Model\n",
+ "log = LogisticRegression()\n",
+ "# We fit our model with our train data\n",
+ "log.fit(X_train, y_train)\n",
+ "# Then predict results from X_test data\n",
+ "pred_log = log.predict(X_test)\n",
+ "\n",
+ "# See First 10 Predictions and They Actual Values\n",
+ "print(\"Predicted:\", pred_log[0:10])\n",
+ "print(\"Actual:\", y_test[0:10])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Decision Tree"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Predicted: [1 1 1 1 0 0 1 0 0 0]\n",
+ "Actual: 6250 1\n",
+ "3372 0\n",
+ "3722 1\n",
+ "5579 0\n",
+ "3473 1\n",
+ "5831 0\n",
+ "6836 1\n",
+ "4901 0\n",
+ "2791 0\n",
+ "7375 1\n",
+ "Name: result, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Define Decision Tree Model\n",
+ "dt = DecisionTreeClassifier()\n",
+ "# We fit our model with our train data\n",
+ "dt.fit(X_train, y_train)\n",
+ "# Then predict results from X_test data\n",
+ "pred_dt = dt.predict(X_test)\n",
+ "\n",
+ "# See First 10 Predictions and Their Actual Values\n",
+ "print(\"Predicted:\", pred_dt[0:10])\n",
+ "print(\"Actual:\", y_test[0:10])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### XGBoost"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\Stella\\anaconda3\\lib\\site-packages\\xgboost\\sklearn.py:793: UserWarning: `early_stopping_rounds` in `fit` method is deprecated for better compatibility with scikit-learn, use `early_stopping_rounds` in constructor or`set_params` instead.\n",
+ " warnings.warn(\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Actual: 6250 1\n",
+ "3372 0\n",
+ "3722 1\n",
+ "5579 0\n",
+ "3473 1\n",
+ "5831 0\n",
+ "6836 1\n",
+ "4901 0\n",
+ "2791 0\n",
+ "7375 1\n",
+ "Name: result, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Define XGBoost Model\n",
+ "xgb = XGBClassifier(n_estimators=1000, learning_rate=0.05)\n",
+ "# We fit our model with our train data\n",
+ "xgb.fit(\n",
+ " X_train, y_train,\n",
+ " # That means if model don't improve it self in 5 rounds, it will stop learning\n",
+ " # So you can save your time and don't overtrain your model.\n",
+ " early_stopping_rounds=5,\n",
+ " # We provide Test data's to evaluate model performance\n",
+ " eval_set=[(X_test, y_test)],\n",
+ " verbose=False\n",
+ " )\n",
+ "# Then predict results from X_test data\n",
+ "pred_xgb = xgb.predict(X_test)\n",
+ "\n",
+ "# See First 10 Predictions and They Actual Values\n",
+ "# print(\"Predicted:\", pred_xgb[0:10])\n",
+ "print(\"Actual:\", y_test[0:10])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sklearn.model_selection as model_selection\n",
+ "X_train, X_test, y_train, y_test = model_selection.train_test_split(clean_data.loc[:, clean_data.columns != 'result'], clean_data['result'], train_size=0.7,test_size=0.1, random_state=101)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(870, 6)\n",
+ "(125, 6)\n",
+ "(224, 6)\n",
+ "(870,)\n",
+ "(125,)\n",
+ "(224,)\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(X_train.shape)\n",
+ "print(X_test.shape)\n",
+ "print(X_val.shape)\n",
+ "print(y_train.shape)\n",
+ "print(y_test.shape)\n",
+ "print(y_val.shape)"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "81aff91296dac732a5adb56959044b4ffd2034639e84788241dd0350f5c69226"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.9.12 ('base')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.12"
+ },
+ "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}