{
"cells": [
{
"cell_type": "markdown",
"id": "cec5d065",
"metadata": {},
"source": [
"# ONLINE APP RESTAURANT RATING PREDICTION"
]
},
{
"cell_type": "markdown",
"id": "8328fa2a",
"metadata": {},
"source": [
"The data from an online food app, which needs assistance in predicting the future success or failure of a business (restaurant), has been used in this case study. Such that they can choose whether to delete the restaurant from their app or keep it. They have provided information from 9551 eateries from across the world that are currently accessible on their app. It contains details about the restaurants, including the overall rating.\n",
"\n",
"I am planning to develop a machine learning model that can forecast a restaurant's rating based on its attributes.\n",
"\n",
"In the case study that follows, I'll go over the step-by-step process for developing a machine learning prediction model in such circumstances."
]
},
{
"cell_type": "markdown",
"id": "d628982b",
"metadata": {},
"source": [
"\n",
"### The flow of the case study is as below:\n",
"\n",
"\n",
"The flow of the case study is as below:\n",
"* Reading the data in python\n",
"* Defining the problem statement\n",
"* Identifying the Target variable\n",
"* Looking at the distribution of Target variable\n",
"* Basic Data exploration\n",
"* Rejecting useless columns\n",
"* Visual Exploratory Data Analysis for data distribution (Histogram and Barcharts)\n",
"* Outlier treatment\n",
"* Missing Values treatment\n",
"* Visual correlation analysis\n",
"* Statistical correlation analysis (Feature Selection)\n",
"* Converting data to numeric for ML\n",
"* Sampling and K-fold cross validation\n",
"* Trying multiple Regression algorithms\n",
"* Selecting the best Model\n",
"* Deploying the best model using streamlit"
]
},
{
"cell_type": "markdown",
"id": "c1562ae0",
"metadata": {},
"source": [
"## Data description\n",
" The business meaning of each column in the data is as below\n",
"\n",
"* Restaurant ID: The id for each restaurant\n",
"*Restaurant Name: The brand/restaurant name\n",
"*Country Code: In which country the restaurant is operating\n",
"*City: In which city the restaurant is operating\n",
"*Address: What is the address of the restaurant\n",
"*Locality: What is the locality of the restaurant\n",
"*Locality Verbose: Detailed locality description\n",
"*Longitude: GPS longitude location\n",
"*Latitude: GPS latitude location\n",
"*Cuisines: Various type of food offered\n",
"*Currency: The business currency\n",
"*Has Table booking: Is advance table booking facility available?\n",
"*Has Online delivery: Does they take online food orders?\n",
"*Is delivering now: Is is open now?\n",
"*Switch to order menu: Whether switch to order menu is available?\n",
"*Price range: The price range of the restaurant\n",
"*Votes: The number of people who voted for the rating\n",
"*Average Cost for two: The typical cost for two people\n",
"*Rating: The final rating of the restaurant"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "4bd0c1a9",
"metadata": {},
"outputs": [],
"source": [
"# Supressing the warning messages\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8da02445",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Shape before deleting duplicate values: (9551, 19)\n",
"Shape After deleting duplicate values: (9551, 19)\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Restaurant ID
\n",
"
Restaurant Name
\n",
"
Country Code
\n",
"
City
\n",
"
Address
\n",
"
Locality
\n",
"
Locality Verbose
\n",
"
Longitude
\n",
"
Latitude
\n",
"
Cuisines
\n",
"
Currency
\n",
"
Has Table booking
\n",
"
Has Online delivery
\n",
"
Is delivering now
\n",
"
Switch to order menu
\n",
"
Price range
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
Rating
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
6317637
\n",
"
Le Petit Souffle
\n",
"
162
\n",
"
Makati City
\n",
"
Third Floor, Century City Mall, Kalayaan Avenu...
\n",
"
Century City Mall, Poblacion, Makati City
\n",
"
Century City Mall, Poblacion, Makati City, Mak...
\n",
"
121.027535
\n",
"
14.565443
\n",
"
French, Japanese, Desserts
\n",
"
Botswana Pula(P)
\n",
"
Yes
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
3
\n",
"
314
\n",
"
1100
\n",
"
4.8
\n",
"
\n",
"
\n",
"
1
\n",
"
6304287
\n",
"
Izakaya Kikufuji
\n",
"
162
\n",
"
Makati City
\n",
"
Little Tokyo, 2277 Chino Roces Avenue, Legaspi...
\n",
"
Little Tokyo, Legaspi Village, Makati City
\n",
"
Little Tokyo, Legaspi Village, Makati City, Ma...
\n",
"
121.014101
\n",
"
14.553708
\n",
"
Japanese
\n",
"
Botswana Pula(P)
\n",
"
Yes
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
3
\n",
"
591
\n",
"
1200
\n",
"
4.5
\n",
"
\n",
"
\n",
"
2
\n",
"
6300002
\n",
"
Heat - Edsa Shangri-La
\n",
"
162
\n",
"
Mandaluyong City
\n",
"
Edsa Shangri-La, 1 Garden Way, Ortigas, Mandal...
\n",
"
Edsa Shangri-La, Ortigas, Mandaluyong City
\n",
"
Edsa Shangri-La, Ortigas, Mandaluyong City, Ma...
\n",
"
121.056831
\n",
"
14.581404
\n",
"
Seafood, Asian, Filipino, Indian
\n",
"
Botswana Pula(P)
\n",
"
Yes
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
4
\n",
"
270
\n",
"
4000
\n",
"
4.4
\n",
"
\n",
"
\n",
"
3
\n",
"
6318506
\n",
"
Ooma
\n",
"
162
\n",
"
Mandaluyong City
\n",
"
Third Floor, Mega Fashion Hall, SM Megamall, O...
\n",
"
SM Megamall, Ortigas, Mandaluyong City
\n",
"
SM Megamall, Ortigas, Mandaluyong City, Mandal...
\n",
"
121.056475
\n",
"
14.585318
\n",
"
Japanese, Sushi
\n",
"
Botswana Pula(P)
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
4
\n",
"
365
\n",
"
1500
\n",
"
4.9
\n",
"
\n",
"
\n",
"
4
\n",
"
6314302
\n",
"
Sambo Kojin
\n",
"
162
\n",
"
Mandaluyong City
\n",
"
Third Floor, Mega Atrium, SM Megamall, Ortigas...
\n",
"
SM Megamall, Ortigas, Mandaluyong City
\n",
"
SM Megamall, Ortigas, Mandaluyong City, Mandal...
\n",
"
121.057508
\n",
"
14.584450
\n",
"
Japanese, Korean
\n",
"
Botswana Pula(P)
\n",
"
Yes
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
4
\n",
"
229
\n",
"
1500
\n",
"
4.8
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Restaurant ID Restaurant Name Country Code City \\\n",
"0 6317637 Le Petit Souffle 162 Makati City \n",
"1 6304287 Izakaya Kikufuji 162 Makati City \n",
"2 6300002 Heat - Edsa Shangri-La 162 Mandaluyong City \n",
"3 6318506 Ooma 162 Mandaluyong City \n",
"4 6314302 Sambo Kojin 162 Mandaluyong City \n",
"\n",
" Address \\\n",
"0 Third Floor, Century City Mall, Kalayaan Avenu... \n",
"1 Little Tokyo, 2277 Chino Roces Avenue, Legaspi... \n",
"2 Edsa Shangri-La, 1 Garden Way, Ortigas, Mandal... \n",
"3 Third Floor, Mega Fashion Hall, SM Megamall, O... \n",
"4 Third Floor, Mega Atrium, SM Megamall, Ortigas... \n",
"\n",
" Locality \\\n",
"0 Century City Mall, Poblacion, Makati City \n",
"1 Little Tokyo, Legaspi Village, Makati City \n",
"2 Edsa Shangri-La, Ortigas, Mandaluyong City \n",
"3 SM Megamall, Ortigas, Mandaluyong City \n",
"4 SM Megamall, Ortigas, Mandaluyong City \n",
"\n",
" Locality Verbose Longitude Latitude \\\n",
"0 Century City Mall, Poblacion, Makati City, Mak... 121.027535 14.565443 \n",
"1 Little Tokyo, Legaspi Village, Makati City, Ma... 121.014101 14.553708 \n",
"2 Edsa Shangri-La, Ortigas, Mandaluyong City, Ma... 121.056831 14.581404 \n",
"3 SM Megamall, Ortigas, Mandaluyong City, Mandal... 121.056475 14.585318 \n",
"4 SM Megamall, Ortigas, Mandaluyong City, Mandal... 121.057508 14.584450 \n",
"\n",
" Cuisines Currency Has Table booking \\\n",
"0 French, Japanese, Desserts Botswana Pula(P) Yes \n",
"1 Japanese Botswana Pula(P) Yes \n",
"2 Seafood, Asian, Filipino, Indian Botswana Pula(P) Yes \n",
"3 Japanese, Sushi Botswana Pula(P) No \n",
"4 Japanese, Korean Botswana Pula(P) Yes \n",
"\n",
" Has Online delivery Is delivering now Switch to order menu Price range \\\n",
"0 No No No 3 \n",
"1 No No No 3 \n",
"2 No No No 4 \n",
"3 No No No 4 \n",
"4 No No No 4 \n",
"\n",
" Votes Average Cost for two Rating \n",
"0 314 1100 4.8 \n",
"1 591 1200 4.5 \n",
"2 270 4000 4.4 \n",
"3 365 1500 4.9 \n",
"4 229 1500 4.8 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Reading the dataset\n",
"import pandas as pd\n",
"import numpy as np \n",
"RtData = pd.read_csv('Restaurant_Data.csv', encoding='latin')\n",
"print('Shape before deleting duplicate values:', RtData.shape)\n",
"\n",
"# Removing duplicate rows if any\n",
"RtData=RtData.drop_duplicates()\n",
"print('Shape After deleting duplicate values:', RtData.shape)\n",
"\n",
"# Printing sample data\n",
"# Start observing the Quantitative/Categorical/Qualitative variables\n",
"RtData.head(5)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8d9f8c51",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" Restaurant ID Country Code Longitude Latitude Price range \\\n",
"count 8.643000e+03 8643.0 8643.000000 8643.000000 8643.000000 \n",
"mean 8.655738e+06 1.0 72.867896 26.426365 1.722434 \n",
"std 8.960763e+06 0.0 17.991596 6.968468 0.852669 \n",
"min 5.300000e+01 1.0 0.000000 0.000000 1.000000 \n",
"25% 3.007115e+05 1.0 77.098791 28.492260 1.000000 \n",
"50% 2.100861e+06 1.0 77.203351 28.569906 2.000000 \n",
"75% 1.836121e+07 1.0 77.285065 28.637950 2.000000 \n",
"max 1.850065e+07 1.0 91.806493 35.000000 4.000000 \n",
"\n",
" Votes Average Cost for two Rating \n",
"count 8643.000000 8643.000000 8643.000000 \n",
"mean 137.270045 624.019438 2.769374 \n",
"std 428.257651 595.646258 1.105049 \n",
"min 0.000000 50.000000 1.000000 \n",
"25% 4.000000 300.000000 2.100000 \n",
"50% 24.000000 450.000000 3.100000 \n",
"75% 100.000000 700.000000 3.600000 \n",
"max 10934.000000 8000.000000 4.900000 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RtData.describe()"
]
},
{
"cell_type": "markdown",
"id": "660a209f",
"metadata": {},
"source": [
"## Defining the problem statement:\n",
"#### Create a Predictive model which can predict the future Rating of a restaurant\n",
"\n",
"* Target Variable: Rating\n",
"* Predictors: location, menu, cost etc.\n",
" \n",
"* Rating=1 Worst\n",
"* Rating=5 Best"
]
},
{
"cell_type": "markdown",
"id": "38824774",
"metadata": {},
"source": [
"## Determining the type of Machine Learning\n",
"Based on the problem statement you can understand that we need to create a supervised ML Regression model, as the target variable is Continuous."
]
},
{
"cell_type": "markdown",
"id": "235825f2",
"metadata": {},
"source": [
"## Looking at the distribution of Target variable"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "b8a3c8bb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"#Creating Bar chart as the Target Variable is Continuous\n",
"RtData['Rating'].hist()"
]
},
{
"cell_type": "markdown",
"id": "33120446",
"metadata": {},
"source": [
"\n",
"The data distribution of the target variable is satisfactory to proceed further. There are sufficient number of rows for each type of values to learn from."
]
},
{
"cell_type": "markdown",
"id": "b129d10b",
"metadata": {},
"source": [
"## Basic Data Exploration"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "263f4523",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Int64Index: 8643 entries, 624 to 9275\n",
"Data columns (total 19 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Restaurant ID 8643 non-null int64 \n",
" 1 Restaurant Name 8643 non-null object \n",
" 2 Country Code 8643 non-null int64 \n",
" 3 City 8643 non-null object \n",
" 4 Address 8643 non-null object \n",
" 5 Locality 8643 non-null object \n",
" 6 Locality Verbose 8643 non-null object \n",
" 7 Longitude 8643 non-null float64\n",
" 8 Latitude 8643 non-null float64\n",
" 9 Cuisines 8643 non-null object \n",
" 10 Currency 8643 non-null object \n",
" 11 Has Table booking 8643 non-null object \n",
" 12 Has Online delivery 8643 non-null object \n",
" 13 Is delivering now 8643 non-null object \n",
" 14 Switch to order menu 8643 non-null object \n",
" 15 Price range 8643 non-null int64 \n",
" 16 Votes 8643 non-null int64 \n",
" 17 Average Cost for two 8643 non-null int64 \n",
" 18 Rating 8643 non-null float64\n",
"dtypes: float64(3), int64(5), object(11)\n",
"memory usage: 1.3+ MB\n"
]
}
],
"source": [
"#Looking at the summarized information of the data\n",
"RtData.info()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "fd38a5c2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Restaurant ID
\n",
"
Restaurant Name
\n",
"
Country Code
\n",
"
City
\n",
"
Address
\n",
"
Locality
\n",
"
Locality Verbose
\n",
"
Longitude
\n",
"
Latitude
\n",
"
Cuisines
\n",
"
Currency
\n",
"
Has Table booking
\n",
"
Has Online delivery
\n",
"
Is delivering now
\n",
"
Switch to order menu
\n",
"
Price range
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
Rating
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
8.643000e+03
\n",
"
8643
\n",
"
8643.0
\n",
"
8643
\n",
"
8643
\n",
"
8643
\n",
"
8643
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643
\n",
"
8643
\n",
"
8643
\n",
"
8643
\n",
"
8643
\n",
"
8643
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
\n",
"
\n",
"
unique
\n",
"
NaN
\n",
"
6595
\n",
"
NaN
\n",
"
43
\n",
"
8017
\n",
"
783
\n",
"
840
\n",
"
NaN
\n",
"
NaN
\n",
"
1389
\n",
"
1
\n",
"
2
\n",
"
2
\n",
"
2
\n",
"
1
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
top
\n",
"
NaN
\n",
"
Cafe Coffee Day
\n",
"
NaN
\n",
"
New Delhi
\n",
"
Dilli Haat, INA, New Delhi
\n",
"
Connaught Place
\n",
"
Connaught Place, New Delhi
\n",
"
NaN
\n",
"
NaN
\n",
"
North Indian
\n",
"
Indian Rupees(Rs.)
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
freq
\n",
"
NaN
\n",
"
83
\n",
"
NaN
\n",
"
5473
\n",
"
11
\n",
"
122
\n",
"
122
\n",
"
NaN
\n",
"
NaN
\n",
"
936
\n",
"
8643
\n",
"
7532
\n",
"
6220
\n",
"
8609
\n",
"
8643
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
mean
\n",
"
8.655738e+06
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
72.867896
\n",
"
26.426365
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
1.722434
\n",
"
137.270045
\n",
"
624.019438
\n",
"
2.769374
\n",
"
\n",
"
\n",
"
std
\n",
"
8.960763e+06
\n",
"
NaN
\n",
"
0.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
17.991596
\n",
"
6.968468
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.852669
\n",
"
428.257651
\n",
"
595.646258
\n",
"
1.105049
\n",
"
\n",
"
\n",
"
min
\n",
"
5.300000e+01
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000000
\n",
"
0.000000
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
1.000000
\n",
"
0.000000
\n",
"
50.000000
\n",
"
1.000000
\n",
"
\n",
"
\n",
"
25%
\n",
"
3.007115e+05
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
77.098791
\n",
"
28.492260
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
1.000000
\n",
"
4.000000
\n",
"
300.000000
\n",
"
2.100000
\n",
"
\n",
"
\n",
"
50%
\n",
"
2.100861e+06
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
77.203351
\n",
"
28.569906
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
2.000000
\n",
"
24.000000
\n",
"
450.000000
\n",
"
3.100000
\n",
"
\n",
"
\n",
"
75%
\n",
"
1.836121e+07
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
77.285065
\n",
"
28.637950
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
2.000000
\n",
"
100.000000
\n",
"
700.000000
\n",
"
3.600000
\n",
"
\n",
"
\n",
"
max
\n",
"
1.850065e+07
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
91.806493
\n",
"
35.000000
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
4.000000
\n",
"
10934.000000
\n",
"
8000.000000
\n",
"
4.900000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Restaurant ID Restaurant Name Country Code City \\\n",
"count 8.643000e+03 8643 8643.0 8643 \n",
"unique NaN 6595 NaN 43 \n",
"top NaN Cafe Coffee Day NaN New Delhi \n",
"freq NaN 83 NaN 5473 \n",
"mean 8.655738e+06 NaN 1.0 NaN \n",
"std 8.960763e+06 NaN 0.0 NaN \n",
"min 5.300000e+01 NaN 1.0 NaN \n",
"25% 3.007115e+05 NaN 1.0 NaN \n",
"50% 2.100861e+06 NaN 1.0 NaN \n",
"75% 1.836121e+07 NaN 1.0 NaN \n",
"max 1.850065e+07 NaN 1.0 NaN \n",
"\n",
" Address Locality \\\n",
"count 8643 8643 \n",
"unique 8017 783 \n",
"top Dilli Haat, INA, New Delhi Connaught Place \n",
"freq 11 122 \n",
"mean NaN NaN \n",
"std NaN NaN \n",
"min NaN NaN \n",
"25% NaN NaN \n",
"50% NaN NaN \n",
"75% NaN NaN \n",
"max NaN NaN \n",
"\n",
" Locality Verbose Longitude Latitude Cuisines \\\n",
"count 8643 8643.000000 8643.000000 8643 \n",
"unique 840 NaN NaN 1389 \n",
"top Connaught Place, New Delhi NaN NaN North Indian \n",
"freq 122 NaN NaN 936 \n",
"mean NaN 72.867896 26.426365 NaN \n",
"std NaN 17.991596 6.968468 NaN \n",
"min NaN 0.000000 0.000000 NaN \n",
"25% NaN 77.098791 28.492260 NaN \n",
"50% NaN 77.203351 28.569906 NaN \n",
"75% NaN 77.285065 28.637950 NaN \n",
"max NaN 91.806493 35.000000 NaN \n",
"\n",
" Currency Has Table booking Has Online delivery \\\n",
"count 8643 8643 8643 \n",
"unique 1 2 2 \n",
"top Indian Rupees(Rs.) No No \n",
"freq 8643 7532 6220 \n",
"mean NaN NaN NaN \n",
"std NaN NaN NaN \n",
"min NaN NaN NaN \n",
"25% NaN NaN NaN \n",
"50% NaN NaN NaN \n",
"75% NaN NaN NaN \n",
"max NaN NaN NaN \n",
"\n",
" Is delivering now Switch to order menu Price range Votes \\\n",
"count 8643 8643 8643.000000 8643.000000 \n",
"unique 2 1 NaN NaN \n",
"top No No NaN NaN \n",
"freq 8609 8643 NaN NaN \n",
"mean NaN NaN 1.722434 137.270045 \n",
"std NaN NaN 0.852669 428.257651 \n",
"min NaN NaN 1.000000 0.000000 \n",
"25% NaN NaN 1.000000 4.000000 \n",
"50% NaN NaN 2.000000 24.000000 \n",
"75% NaN NaN 2.000000 100.000000 \n",
"max NaN NaN 4.000000 10934.000000 \n",
"\n",
" Average Cost for two Rating \n",
"count 8643.000000 8643.000000 \n",
"unique NaN NaN \n",
"top NaN NaN \n",
"freq NaN NaN \n",
"mean 624.019438 2.769374 \n",
"std 595.646258 1.105049 \n",
"min 50.000000 1.000000 \n",
"25% 300.000000 2.100000 \n",
"50% 450.000000 3.100000 \n",
"75% 700.000000 3.600000 \n",
"max 8000.000000 4.900000 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Looking at the descriptive statistics of the data\n",
"RtData.describe(include='all')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "7dcadd76",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Restaurant ID 8643\n",
"Restaurant Name 6595\n",
"Country Code 1\n",
"City 43\n",
"Address 8017\n",
"Locality 783\n",
"Locality Verbose 840\n",
"Longitude 7224\n",
"Latitude 7784\n",
"Cuisines 1389\n",
"Currency 1\n",
"Has Table booking 2\n",
"Has Online delivery 2\n",
"Is delivering now 2\n",
"Switch to order menu 1\n",
"Price range 4\n",
"Votes 871\n",
"Average Cost for two 78\n",
"Rating 33\n",
"dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Finging unique values for each column\n",
"# T0 understand which column is categorical and which one is Continuous\n",
"# Typically if the numer of unique values are < 20 then the variable is likely to be a category otherwise continuous\n",
"RtData.nunique()"
]
},
{
"cell_type": "markdown",
"id": "672b6703",
"metadata": {},
"source": [
"## Basic Data Exploration Results\n",
"Based on the basic exploration above, you can now create a simple report of the data, noting down your observations regaring each column. Hence, creating a initial roadmap for further analysis.\n",
"\n",
"The selected columns in this step are not final, further study will be done and then a final list will be created\n",
"\n",
"* Restaurant ID: Qualitative. Rejected.\n",
"* Restaurant Name: Qualitative. Rejected.\n",
"* Country Code: Categorical. Selected.\n",
"* City: Categorical. Rejected. Too many unique levels, hence it will cause high dimensionality.\n",
"* Address: Qualitative. Rejected.\n",
"* Locality: Qualitative. Rejected.\n",
"* Locality Verbose: Qualitative. Rejected.\n",
"* Longitude: Continuous. Selected. This represents the location of restaurant\n",
"* Latitude: Continuous. Selected. This represents the location of restaurant\n",
"* Cuisines: Qualitative. Rejected.Too many unique levels, hence it will cause high dimensionality.\n",
"* Currency: Categorical. Selected.\n",
"* Has Table booking: Categorical. Selected.\n",
"* Has Online delivery: Categorical. Selected.\n",
"* Is delivering now: Categorical. Selected.\n",
"* Switch to order menu: Categorical. Selected.\n",
"* Price range: Categorical. Selected.\n",
"* Votes: Continuous. Selected.\n",
"* Average Cost for two: Continuous. Selected.\n",
"* Rating: Continuous. Selected. This is the Target Variable!"
]
},
{
"cell_type": "markdown",
"id": "0baf7182",
"metadata": {},
"source": [
"## Removing useless columns from the data"
]
},
{
"cell_type": "markdown",
"id": "b8973615",
"metadata": {},
"source": [
"\n",
"Dates, addresses, and other qualitative columns such as these cannot be used directly for machine learning. As a result, each row has a unique string value, making it impossible for machine learning algorithms to learn anything from them. Simply put, such columns cannot be used to derive any general rules.\n",
"\n",
"However, we are able to extract some data from these columns that can be applied to ML. For example, we can extract the month, week, quarter, etc. from a date column to create a category feature but it will not be that useful for this project.\n",
"\n",
"Similarly, we can extract certain repetitious data from addresses, such as zip codes, location, etc., but if the number of unique values is too high (more than 50), it causes problems for the ML algorithm later on as the data dimensionality rises while converting such columns to dummy variables.\n",
"\n",
"The \"Cuisines\" column in this set of data cannot be used directly because it will produce 1825 dummy variables! so, removing that as well.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "a391dd7c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Longitude
\n",
"
Latitude
\n",
"
Has Table booking
\n",
"
Has Online delivery
\n",
"
Is delivering now
\n",
"
Price range
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
Rating
\n",
"
\n",
" \n",
" \n",
"
\n",
"
624
\n",
"
78.011544
\n",
"
27.161661
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
3
\n",
"
140
\n",
"
850
\n",
"
3.9
\n",
"
\n",
"
\n",
"
625
\n",
"
0.000000
\n",
"
0.000000
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
2
\n",
"
71
\n",
"
700
\n",
"
3.5
\n",
"
\n",
"
\n",
"
626
\n",
"
78.011608
\n",
"
27.160832
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
2
\n",
"
94
\n",
"
500
\n",
"
3.6
\n",
"
\n",
"
\n",
"
627
\n",
"
77.998092
\n",
"
27.195928
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
2
\n",
"
87
\n",
"
400
\n",
"
4.0
\n",
"
\n",
"
\n",
"
628
\n",
"
78.007553
\n",
"
27.201725
\n",
"
No
\n",
"
No
\n",
"
No
\n",
"
3
\n",
"
177
\n",
"
1000
\n",
"
4.2
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Longitude Latitude Has Table booking Has Online delivery \\\n",
"624 78.011544 27.161661 No No \n",
"625 0.000000 0.000000 No No \n",
"626 78.011608 27.160832 No No \n",
"627 77.998092 27.195928 No No \n",
"628 78.007553 27.201725 No No \n",
"\n",
" Is delivering now Price range Votes Average Cost for two Rating \n",
"624 No 3 140 850 3.9 \n",
"625 No 2 71 700 3.5 \n",
"626 No 2 94 500 3.6 \n",
"627 No 2 87 400 4.0 \n",
"628 No 3 177 1000 4.2 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Deleting those columns which are not useful in predictive analysis because these variables are qualitative\n",
"UselessColumns = ['Restaurant ID', 'Restaurant Name','City','Address',\n",
" 'Locality', 'Locality Verbose','Cuisines','Country Code', 'Currency','Switch to order menu']\n",
"RtData = RtData.drop(UselessColumns,axis=1)\n",
"RtData.head()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "adf061f2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Longitude
\n",
"
Latitude
\n",
"
Price range
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
Rating
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
8643.000000
\n",
"
\n",
"
\n",
"
mean
\n",
"
72.867896
\n",
"
26.426365
\n",
"
1.722434
\n",
"
137.270045
\n",
"
624.019438
\n",
"
2.769374
\n",
"
\n",
"
\n",
"
std
\n",
"
17.991596
\n",
"
6.968468
\n",
"
0.852669
\n",
"
428.257651
\n",
"
595.646258
\n",
"
1.105049
\n",
"
\n",
"
\n",
"
min
\n",
"
0.000000
\n",
"
0.000000
\n",
"
1.000000
\n",
"
0.000000
\n",
"
50.000000
\n",
"
1.000000
\n",
"
\n",
"
\n",
"
25%
\n",
"
77.098791
\n",
"
28.492260
\n",
"
1.000000
\n",
"
4.000000
\n",
"
300.000000
\n",
"
2.100000
\n",
"
\n",
"
\n",
"
50%
\n",
"
77.203351
\n",
"
28.569906
\n",
"
2.000000
\n",
"
24.000000
\n",
"
450.000000
\n",
"
3.100000
\n",
"
\n",
"
\n",
"
75%
\n",
"
77.285065
\n",
"
28.637950
\n",
"
2.000000
\n",
"
100.000000
\n",
"
700.000000
\n",
"
3.600000
\n",
"
\n",
"
\n",
"
max
\n",
"
91.806493
\n",
"
35.000000
\n",
"
4.000000
\n",
"
10934.000000
\n",
"
8000.000000
\n",
"
4.900000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Longitude Latitude Price range Votes \\\n",
"count 8643.000000 8643.000000 8643.000000 8643.000000 \n",
"mean 72.867896 26.426365 1.722434 137.270045 \n",
"std 17.991596 6.968468 0.852669 428.257651 \n",
"min 0.000000 0.000000 1.000000 0.000000 \n",
"25% 77.098791 28.492260 1.000000 4.000000 \n",
"50% 77.203351 28.569906 2.000000 24.000000 \n",
"75% 77.285065 28.637950 2.000000 100.000000 \n",
"max 91.806493 35.000000 4.000000 10934.000000 \n",
"\n",
" Average Cost for two Rating \n",
"count 8643.000000 8643.000000 \n",
"mean 624.019438 2.769374 \n",
"std 595.646258 1.105049 \n",
"min 50.000000 1.000000 \n",
"25% 300.000000 2.100000 \n",
"50% 450.000000 3.100000 \n",
"75% 700.000000 3.600000 \n",
"max 8000.000000 4.900000 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RtData.describe()"
]
},
{
"cell_type": "markdown",
"id": "7fecea41",
"metadata": {},
"source": [
"# Visual Exploratory Data Analysis\n",
"* Categorical variables: Bar plot\n",
"* Continuous variables: Histogram"
]
},
{
"cell_type": "markdown",
"id": "767d6898",
"metadata": {},
"source": [
"## Visualizing the distribution of all the Categorical Predictor variables in the data using bar plots\n",
"\n",
"Categorical Predictors: 'Country Code', 'Currency', 'Has Table booking', 'Has Online delivery', 'Is delivering now', 'Switch to order menu','Price range'\n",
"\n",
"We use bar charts to see how the data is distributed for these categorical columns."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "c5794252",
"metadata": {},
"outputs": [],
"source": [
"# Plotting multiple bar charts at once for categorical variables\n",
"# Since there is no default function which can plot bar charts for multiple columns at once\n",
"# defining my own function for the same\n",
"\n",
"def PlotBarCharts(inpData, colsToPlot):\n",
" %matplotlib inline\n",
" \n",
" import matplotlib.pyplot as plt \n",
" \n",
" #Generating multiple subplots\n",
" fig, subPlot=plt.subplots(nrows=1, ncols=len(colsToPlot), figsize=(20,5))\n",
" fig.suptitle('Bar charts of:' + str(colsToPlot))\n",
" \n",
" for colName, plotNumber in zip(colsToPlot, range(len(colsToPlot))):\n",
" inpData.groupby(colName).size().plot(kind='bar', ax=subPlot[plotNumber])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "5835bbad",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#####################################################################\n",
"# Calling the function\n",
"PlotBarCharts(inpData=RtData, colsToPlot=['Has Table booking', 'Has Online delivery', 'Is delivering now','Price range'])"
]
},
{
"cell_type": "markdown",
"id": "063f43d0",
"metadata": {},
"source": [
"In this data, \"Country Code\", \"Currency\", \"is delivering now\" and \"Switch to order menu\" are too skewed. There is just one bar which is dominating and other categories have very less rows or there is just one value only. Such columns are not correlated with the target variable because there is no information to learn. The algorithms cannot find any rule like when the value is this then the target variable is that.\n",
"\n",
"Selected Categorical Variables: Only three categorical variables are selected for further analysis.\n",
"\n",
"'Has Table booking', 'Has Online delivery', 'Price range'"
]
},
{
"cell_type": "markdown",
"id": "5ebe0e11",
"metadata": {},
"source": [
"## Visualizing distribution of all the Continuous Predictor variables in the data using histograms\n",
"Based on the Basic Data Exploration, There are four continuous predictor variables ''Longitude', 'Latitude','Votes', and 'Average Cost for two'"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "75e6a92d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[,\n",
" ],\n",
" [,\n",
" ]],\n",
" dtype=object)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotting histograms of multiple columns together\n",
"RtData.hist(['Longitude', 'Latitude', \n",
" 'Votes', 'Average Cost for two'], figsize=(16,8))"
]
},
{
"cell_type": "markdown",
"id": "5dfd795e",
"metadata": {},
"source": [
"## Histogram Interpretation:\n",
"\n",
"The ideal outcome for histogram is a bell curve or slightly skewed bell curve. If there is too much skewness, then outlier treatment should be done and the column should be re-examined, if that also does not solve the problem then only reject the column.\n",
"\n",
"Selected Continuous Variables:\n",
"\n",
"* Longitude : Selected. The distribution is good.\n",
"* Latitude: Selected. The distribution is good.\n",
"* Average Cost for two: Selected. Outliers seen beyond 300000, need to treat them.\n",
"* Votes: Selected. Outliers seen beyond 4000, need to treat them."
]
},
{
"cell_type": "markdown",
"id": "facf6910",
"metadata": {},
"source": [
"## Outliers\n",
"\n",
"Outliers bias the training of machine learning models. As the algorithm tries to fit the extreme value, it goes away from majority of the data.\n",
"\n",
"There are below two options to treat outliers in the data.\n",
"\n",
"* Option-1: Delete the outlier Records. Only if there are just few rows lost.\n",
"* Option-2: Impute the outlier values with a logical business value\n",
"\n",
"Below we are finding out the most logical value to be replaced in place of outliers by looking at the histogram."
]
},
{
"cell_type": "markdown",
"id": "dbfdd016",
"metadata": {},
"source": [
"### Replacing outliers for 'Votes'"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "feb3fec7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7863 3986\n",
"821 3848\n",
"3992 3697\n",
"3119 3591\n",
"1861 3569\n",
" ... \n",
"6102 0\n",
"6099 0\n",
"6098 0\n",
"6091 0\n",
"5427 0\n",
"Name: Votes, Length: 8624, dtype: int64"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Finding nearest values to 4000 mark \n",
"RtData['Votes'][RtData['Votes']<4000].sort_values(ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "61bf5b31",
"metadata": {},
"outputs": [],
"source": [
"#Above result shows the nearest logical value is 3986, hence, replacing any value above 4000 with it.\n",
"# Replacing outliers with nearest possibe value\n",
"RtData['Votes'][RtData['Votes']>4000] =3986\n"
]
},
{
"cell_type": "markdown",
"id": "299fddb7",
"metadata": {},
"source": [
"### Replacing outliers for 'Average Cost for two'"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "777746a0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7543 8000\n",
"4088 7000\n",
"4087 6500\n",
"7499 6000\n",
"7538 6000\n",
" ... \n",
"5577 50\n",
"7775 50\n",
"7808 50\n",
"7830 50\n",
"7418 50\n",
"Name: Average Cost for two, Length: 8643, dtype: int64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Finding nearest values to 50000 mark\n",
"RtData['Average Cost for two'][RtData['Average Cost for two']<50000].sort_values(ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "166677a9",
"metadata": {},
"outputs": [],
"source": [
"#Above result shows the nearest logical value is 8000, hence, replacing any value above 50000 with it.\n",
"## Replacing outliers with nearest possibe value\n",
"RtData['Average Cost for two'][RtData['Average Cost for two']>50000] = 8000"
]
},
{
"cell_type": "markdown",
"id": "88a14236",
"metadata": {},
"source": [
"## Visualizing distribution after outlier treatment"
]
},
{
"cell_type": "markdown",
"id": "be501277",
"metadata": {},
"source": [
"The distribution has improved after the outlier treatment. There is still a tail but it is thick, that means there are many values in that range, hence, it is acceptable."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "b95a1acc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[,\n",
" ]],\n",
" dtype=object)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"RtData.hist(['Votes', 'Average Cost for two'], figsize=(18,5))"
]
},
{
"cell_type": "markdown",
"id": "7c84adf2",
"metadata": {},
"source": [
"## Missing values treatment"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "1a65122a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Longitude 0\n",
"Latitude 0\n",
"Has Table booking 0\n",
"Has Online delivery 0\n",
"Is delivering now 0\n",
"Price range 0\n",
"Votes 0\n",
"Average Cost for two 0\n",
"Rating 0\n",
"dtype: int64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Finding how many missing values are there for each column\n",
"RtData.isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "1898443a",
"metadata": {},
"source": [
"No missing values in this data."
]
},
{
"cell_type": "markdown",
"id": "1d68f401",
"metadata": {},
"source": [
"# Feature Selection\n",
"Now its time to finally choose the best columns(Features) which are correlated to the Target variable. This can be done directly by measuring the correlation values or ANOVA/Chi-Square tests. However, it is always helpful to visualize the relation between the Target variable and each of the predictors to get a better sense of data."
]
},
{
"cell_type": "markdown",
"id": "9adf0b1d",
"metadata": {},
"source": [
"In this case study the Target variable is Continuous, hence below two scenarios will be present\n",
"\n",
"* Continuous Target Variable Vs Continuous Predictor\n",
"* Continuous Target Variable Vs Categorical Predictor"
]
},
{
"cell_type": "markdown",
"id": "9922c5dc",
"metadata": {},
"source": [
"## Relationship exploration: Continuous Vs Continuous -- Scatter Charts"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "8cacda0b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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uBDYCBwE3pfD8YiIiJS8m5aeyCWNM/juIxvZtb+bd596lJanKFE5C8Kcc0/iPecrdh8HfCRXYxARERlrVjVv5RN3NdM/GH79xftfYOL4cVyyUHltpUYr5ouIiJSI9q5errt73VAABtA34PjU3S20d/UWbmCSEQVhIiIiJaKto5ugjbx0BwNGW0d3AUYko6EgTEREpETU11Qy4AZHtA8MOuprKgswIhkNBWEiIiIlora6nFsvX0BZzNU7FDRuvbyR2urywg1MMpLL7EgRERHJsksWzuSMhik8v20/4Dh+xiQFYCVKd8JERERKTG11OcfPmMikynGFHoqMgu6EiYiIlJhVzVu5/p4WQoEAfYOD3HJZo5aoKEG6EyYiIlJC2rt6uf6eFnr6Buns7aenb5Dr7tESFaVIQZiIiEgJaevoJhQYfvkOBQJaoqIEKQgTEREpIfU1lfQNDl+mom9wUEtUlCAFYSIiIiWktrqcWy5rpCIUYEJ5GRWhALdcpiUqSpEm5ouIiJSY6DIVbR3d1NdUKgArUQrCRERESlBtdbmCrxKnx5EiIiIiBaAgTERERKQAFISJiIiIFICCMBEREZECUBAmIiIiUgAKwkREREQKQEGYiIiISAEoCBMREREpAAVhIiIiIgWgIExERESkAHIWhJnZj81sl5k957P9bDPbZ2bNkZ/P52osIiIiIsUml7Ujfwp8D1iRYJ8nnHNLcjgGERERkaKUszthzrnHgVdzdX4RERGRUlboOWGLzWydmT1oZscXeCwiIiIieZPLx5HJrAWOcs51mdmFwEpgnteOZnY1cDXA7Nmz8zZAERERkVwp2J0w59x+51xX5PcHgJCZTfHZ9zbn3CLn3KK6urq8jlNEREQkFwoWhJnZNDOzyO+nRMbSXqjxiIiIiORTzh5HmtnPgbOBKWbWBnwBCAE4574PXA58yMz6gW7gSuecy9V4RERERIpJzoIw59y7kmz/HuElLEREREQOO4XOjhQRERE5LCkIExERESkABWEiIiIiBaAgTERERKQAFISJiIiIFICCMBEREZECUBAmIiIiUgAKwkREREQKQEGYiIiISAEoCBMREREpAAVhIiIiIgWgIExERESkABSEiYiIiBSAgjARERGRAlAQJiIiIlIACsJERERECkBBmIiIiEgBKAgTERERKQAFYSIiIiIFoCBMREREpAAU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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ContinuousCols=['Longitude', 'Latitude', 'Votes', 'Average Cost for two']\n",
"\n",
"# Plotting scatter chart for each predictor vs the target variable\n",
"for predictor in ContinuousCols:\n",
" RtData.plot.scatter(x=predictor, y='Rating', figsize=(10,5), title=predictor+\" VS \"+ 'Rating')"
]
},
{
"cell_type": "markdown",
"id": "78c2e273",
"metadata": {},
"source": [
"# Statistical Feature Selection (Continuous Vs Continuous) using Correlation value"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "2d3c371a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Rating
\n",
"
Longitude
\n",
"
Latitude
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Rating
\n",
"
1.000000
\n",
"
0.161800
\n",
"
0.065156
\n",
"
0.358131
\n",
"
0.366275
\n",
"
\n",
"
\n",
"
Longitude
\n",
"
0.161800
\n",
"
1.000000
\n",
"
0.926590
\n",
"
0.076411
\n",
"
0.059605
\n",
"
\n",
"
\n",
"
Latitude
\n",
"
0.065156
\n",
"
0.926590
\n",
"
1.000000
\n",
"
-0.035178
\n",
"
0.017787
\n",
"
\n",
"
\n",
"
Votes
\n",
"
0.358131
\n",
"
0.076411
\n",
"
-0.035178
\n",
"
1.000000
\n",
"
0.314376
\n",
"
\n",
"
\n",
"
Average Cost for two
\n",
"
0.366275
\n",
"
0.059605
\n",
"
0.017787
\n",
"
0.314376
\n",
"
1.000000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Rating Longitude Latitude Votes \\\n",
"Rating 1.000000 0.161800 0.065156 0.358131 \n",
"Longitude 0.161800 1.000000 0.926590 0.076411 \n",
"Latitude 0.065156 0.926590 1.000000 -0.035178 \n",
"Votes 0.358131 0.076411 -0.035178 1.000000 \n",
"Average Cost for two 0.366275 0.059605 0.017787 0.314376 \n",
"\n",
" Average Cost for two \n",
"Rating 0.366275 \n",
"Longitude 0.059605 \n",
"Latitude 0.017787 \n",
"Votes 0.314376 \n",
"Average Cost for two 1.000000 "
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating correlation matrix\n",
"ContinuousCols=['Rating','Longitude', 'Latitude', 'Votes', 'Average Cost for two']\n",
"\n",
"# Creating the correlation matrix\n",
"CorrelationData=RtData[ContinuousCols].corr()\n",
"CorrelationData"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "0fd7f7a7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Rating 1.000000\n",
"Votes 0.358131\n",
"Average Cost for two 0.366275\n",
"Name: Rating, dtype: float64"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Filtering only those columns where absolute correlation > 0.5 with Target Variable\n",
"# reducing the 0.5 threshold if no variable is selected like in this case\n",
"CorrelationData['Rating'][abs(CorrelationData['Rating']) > 0.3 ]\n"
]
},
{
"cell_type": "markdown",
"id": "4c343a14",
"metadata": {},
"source": [
"Final selected Continuous columns:\n",
"\n",
"'Votes', 'Average Cost for two'"
]
},
{
"cell_type": "markdown",
"id": "67ab87df",
"metadata": {},
"source": [
"# Relationship exploration: Categorical Vs Continuous -- Box Plots\n"
]
},
{
"cell_type": "markdown",
"id": "d5a1137f",
"metadata": {},
"source": [
"When the target variable is Continuous and the predictor variable is Categorical we analyze the relation using Boxplots and measure the strength of relation using Anova test"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "02cab522",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABDIAAAFYCAYAAACh/ty7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4oElEQVR4nO3de7hcZXnw/+9NCAcBoRYbFZC0ylujUVFTFc1bd0RIjVZa69uS17OpyEGq1VaCaQVemgq/IqWKJEJjAx7iWaqCQJSMGisqICAQW6mHgqCIVCAYkIT798dam042+zBr79mZefZ8P9c1V2bWetZa9zx7zZ3Z937WsyIzkSRJkiRJKsFOvQ5AkiRJkiSpUxYyJEmSJElSMSxkSJIkSZKkYljIkCRJkiRJxbCQIUmSJEmSimEhQ5IkSZIkFcNChiRJfSIiMiKe2Os4eikihiLilnHW96SPIuKdEfHPO/q4kiTp4SxkSJI0QkT8KCK2RMTmiPjviLgoIg7odVzDIuJ1EbGx13GUrO7DbfXP+O6IuCYiXjpW+8z8+8z88x0ZoyRJGp2FDEmSRveHmbkn8FjgZ8D7ehzPtImInXsdQ498o/4Z7wOsAT4REY8a2WhH9c8A/xwkSWrEQoYkSePIzPuATwFPHl4WEXtHxAUR8fOI+HFE/E1E7BQRj4qIWyLiD+t2e0bETRHxmvr12ohYHRHrI+KeiPhKRBw42nHHOcY8YDVwSD2a4JdjbP/bEfHV+jhfioj3R8SH63Vz60s0lkXEfwGX1/v+m/pYt9fH3rtu/7DLPepRKy+qn58cEZ+KiI/Xx7s6Ip7e1vZxEfHp+r38MCL+om3d7nW//HdE3Aj8Xgc/liUR8YOIuCMi/qGOfdeIuDMintq279+qR9Y8erydZeaDwAeB3YHfaXs/H46Iu4HX1cs+3LbvhRHxbxHxy4i4OSJeVy/fNSLOiIj/ioif1T/v3cf4Gb0uIr4eEf8YEXcCJ0fEEyLi8oj4Rf3+PhIR+4zo97+KiOsi4q66z3drW/+OiLgtIm6NiD+PtktxmsQmSVI/s5AhSdI4IuIRwJ8BV7Qtfh+wN/A7wAuA1wCvz8w7gTcA50XEbwH/CFyTmRe0bftK4FRgX+Aa4CNjHHqsY2wCjqYeTZCZ+4yx/UeBbwG/CZwMvHqUNi8A5gGLgdfVj0X1MfcEzh5j36M5Avgk8Kj62BdGxOyI2An4PHAtsB9wKPDWiFhcb3cS8IT6sRh4bQfH+mNgAfDM+rhvyMz7gY8Br2prtxT4Umb+fLydRTUS4s+BzcD3297Pp6hGa3xkRPvHA1+k+hk9GjiY6mcJcDrwv+plT6zf87vGOfxzgB8AvwWsBAJ4N/A4qp/NAVQ/v3Z/CvwB8NvA06h+bkTEHwBvA15UH/sFI7ZrGpskSX3JQoYkSaO7sB7tcDdwGPAPABExi6qwcWJm3pOZPwLeQ10oyMzLqH6h/zLwEuBNI/Z7UWZ+tf7FewXVyIrt5t+Y6BgTqX/R/j3gXZn568zcCHxulKYnZ+a9mbmFqsByZmb+IDM3AycCR0bnlztclZmfyswHgDOB3YDn1nE8OjP/Xx3LD4DzgCPr7f4UWJmZd2bmzcB7OzjW6XX7/wLOoipYAJwP/N+6eAJVf31onP08t/4Z/7Texx9n5l31um9k5oWZ+WDdP+1eSVUgWZeZD2TmLzLzmogI4I3AX9bx3QP8fdt7Hc2tmfm+zNyamVsy86bMXJ+Z99cFmDN5eEHivZl5a104+zxVYQKqvvyXzLwhM38FnDK8wSRjkySpL3ktpiRJo/ujzPxSXVQ4AvhKRDwZSGAX4MdtbX9M9dftYecCbwb+PjN/MWK/Nw8/yczN9SUFj2tfTjVaY6JjjOdxwJ31L7Ptxx05YWn7MR83yvF2BuZ0eMz29/VgfSnK46j663EjLoGZBXyt7bjtcbTHMOGx6vaPq4/7zYi4F3hBRNxGNepgtALOsCsyc2EHxxjpAOA/R1n+aOARwFVV3QCoRljMGmdf2x2nHsnzXuB/A3tR/dHpv0ds89O257+ifv/1v1eOse/JxCZJUl9yRIYkSePIzG2Z+RlgG7AQuAN4AGif2+LxwE/godEUHwAuAI6Jh98q9KFiQkTsSXUpxq0j2ox7DKriwHhuAx5VXxbzsOO2v72257eOcrytVBOd3kv1S/Bw3LOofjFu1/6+dgL2r/d5M/DDzNyn7bFXZi5pi7U9tsdP8N5GvpfHs33/nU91ecmrgU/Vc5xMxnh9fDPVpTAj3QFsAZ7S9l73ricU7fQ4766XPS0zH0n1XuJhW43uNqp+H9beT5OJTZKkvmQhQ5KkcUTlCOA3gE2ZuQ34BLAyIvaKarLOtwHDE0G+s/73DcAZwAX1L/7DltQTRe5CNVfGN+tLKh7SwTF+Buxf7+NhMvPHVH+ZPzkidomIQ4A/nOCtrgP+MqpJQvekuuzg45m5FfgPYLeIeElEzAb+Bth1xPbPioiX15eivBW4n2pekW8Bd0fECfXEnrMiYn5EDE/q+QngxIj4jYjYHzh+gjgB/rpufwDwFuDjbes+RDWHxquoiknT4SPAiyLiTyNi54j4zYg4uJ409DzgH+uRFUTEfm3zgXRiL6q5On4ZEfsBf91g208Ar4+IeXUR66H5L7oUmyRJfcFChiRJo/t8RGymmiNjJfDazLyhXnc81SiFHwAbqSa3/GBEPIuq4PCauhhxOtVf15e37fejVBNc3gk8i2q+hdGMeox63eXADcBPI+KOMbZ/JXAI8Avg76h+2b9/nPf7QaoiwFeBHwL31TFQzxtxLPDPVKNC7gVuGbH9v1LN6/HfVKMhXl7PH7GNqohycL3fO+r97F1vdwrV5SE/BC5j/Dkt2o91FdUEmxdR3TqVOtZbgKup+v1ro208VfXcHEuAt1P9HK8Bhu/ScgJwE3BFVHc8+RLwuw12fwrVJKZ3Ub23zzSI64tUl6VsqGP4Rr1q+Oc+1dgkSeoLkTnR6FRJktQNEbEWuCUz/6YHx/448L3MPGka9n0y8MTMfNVEbXeEiPgg1SSaO7yf+0lUt+q9Hti1HlkjSdKM4IgMSZJmoIj4vYh4QkTsVN+W8wjgwh6HNe0iYi7wctpGaQySiPjj+nKi36AaEfR5ixiSpJnGQoYkSTPTY4AW1XwL7wWOyczv9DSiaRYRp1KNQPiHzPxhr+PpkTcBP6e6q8o24JjehiNJUvd5aYlmrIhYDfwkM0/tdSySpImZtyWpLOZt9YqFDPWViPgRMIfqr0ibgUuAN2fm5gm2ex3w55m5cLpjlCT9D/O2JJXFvK2ZwEtL1I/+sL6v/cHAM4ATexuOJGkC5m1JKot5W0WzkKG+lZk/BS6lSrBExPKI+M+IuCciboyIP66XzwNWA4dExOaI+GW9fG1E/F39fCgibomIt0fE7RFxW0S8fvhYEfGbEfH5iLg7Ir4dEX8XERt37DuWpLKZtyWpLOZtlcpChvpWROwPvJjqnvdQTVz2v4G9gVOAD0fEYzNzE3A08I3M3DMz9xljl4+pt90PWAa8v57VHeD9wL11m9fWD0lSA+ZtSSqLeVulspChfnRhRNwD3AzcDpwEkJmfzMxbM/PBzPw48H3g2Q32+wDw/zLzgcy8mOqawN+NiFnAnwAnZeavMvNG4PxuviFJmuHM25JUFvO2imYhQ/3ojzJzL2AIeBKwL0BEvCYiromIX9bD2eYPr+vQLzJza9vrXwF7Ao8GdqZK5MPan0uSxmfelqSymLdVNAsZ6luZ+RVgLXBGRBwInAe8GfjNejjb9UAMN5/CoX4ObAX2b1t2wBT2J0kDybwtSWUxb6tUFjLU784CDqO6zi6pkiD1xEHz29r9DNg/InZpeoDM3AZ8Bjg5Ih4REU8CXjPFuCVpUJ2FeVuSSnIW5m0VxkKG+lpm/hy4AHg78B7gG1RJ9KnA19uaXg7cAPw0Iu6YxKHeTDUx0U+BDwHrgPsnH7kkDSbztiSVxbytEkXmVEYISTNTRJwOPCYznU1Zkgpg3pakspi3NRWOyJCAiHhSRDwtKs+mul3UZ3sdlyRpdOZtSSqLeVvdtHOvA5D6xF5Uw9seR3ULqvcA/9rTiCRJ4zFvS1JZzNvqGi8tkSRJkiRJxfDSEkmSJEmSVAwLGZIkSZIkqRg9myNj3333zblz5/bq8MW599572WOPPXodhmYwz7Fmrrrqqjsy89G9jmNHMm8342dK081zrBnzdv/w3G3G/mrOPmumX/trvLzds0LG3LlzufLKK3t1+OK0Wi2GhoZ6HYZmMM+xZiLix72OYUczbzfjZ0rTzXOsGfN2//Dcbcb+as4+a6Zf+2u8vN3RpSUR8aOI+G5EXBMRD8uG9S103hsRN0XEdRHxzKkELEmaGvO2JJXFvC1JnWsyImNRZt4xxroXAwfVj+cAq+p/JUm9Y96WpLKYtyWpA92a7PMI4IKsXAHsExGP7dK+JUndZ96WpLKYtyWp1mkhI4HLIuKqiDhqlPX7ATe3vb6lXiZJ6g3ztiSVxbwtSR3q9NKS52fmrRHxW8D6iPheZn61bX2Msk2OXFAn5aMA5syZQ6vVahrvwNq8ebP9pWnlOTbjmLd7zM+Uppvn2IwzMHnbc7cZ+6s5+6yZEvuro0JGZt5a/3t7RHwWeDbQnlhvAQ5oe70/cOso+zkXOBdgwYIF2Y8zo/arfp1JVjOH59jMYt7uPT9Tmm6eYzPLIOVtz91m7K/m7LNmSuyvCS8tiYg9ImKv4efA4cD1I5p9DnhNPZvyc4G7MvO2rkcrSZqQeVuSymLelqRmOhmRMQf4bEQMt/9oZl4SEUcDZOZq4GJgCXAT8Cvg9dMTriSpA+ZtSSqLeVuSGpiwkJGZPwCePsry1W3PEziuu6FJkibDvC1JZTFvS1Iz3br9qiRJkiRJ0rTr9K4l2oHqYYUdqwr0kqReMW9rOjU9v8BzTL01mXN2NINyHttfzdhfzczU/nJERh/KzIc9DjzhC6Mu77cTSpIGkXlb02ms88hzTP1qrPOyk3N3EM9j+6uZTvqikz4bFDO1vyxkSJIkSZKkYljIkCRJkiRJxbCQIUmSJEmSimEhQ5IkSZIkFcO7lkgDxtnvJUmSJJXMERnSgHH2e0mSJEkls5AhSZIkSZKKYSFDkiRJkiQVw0KGJEmSJEkqhoUMSZIkSZJUDAsZkiRJkiSpGBYyJEmSJElSMSxkSJIkSZKkYljIkCRJkiRJxbCQIUmSJEmSimEhQ5IkSZIkFcNChiRJkiRJKoaFDEmSJEmSVAwLGZIkSZIkqRgdFzIiYlZEfCcivjDKuqGIuCsirqkf7+pumJKkpszbklQOc7YkdW7nBm3fAmwCHjnG+q9l5kunHpIkqUvM25JUDnO2JHWooxEZEbE/8BLgn6c3HElSN5i3Jakc5mxJaqbTS0vOAt4BPDhOm0Mi4tqI+GJEPGXKkUmSpuIszNuSVIqzMGdLUscmvLQkIl4K3J6ZV0XE0BjNrgYOzMzNEbEEuBA4aJR9HQUcBTBnzhxardbkoh5Q9pemm+fYzGDe7h/2l6ab51j5upmz6/0Vkbf7Na5+ZX81Z581U1p/dTJHxvOBl9VJczfgkRHx4cx81XCDzLy77fnFEXFOROybmXe07ygzzwXOBViwYEEODQ114z0Mhksuwv7StPIcm0nM2/3Az5Smm+fYTNG1nF2v7/+87bnbjP3VnH3WTIH9NeGlJZl5Ymbun5lzgSOBy9sTK0BEPCYion7+7Hq/v5iGeCVJEzBvS1I5zNmS1FyTu5ZsJyKOBsjM1cArgGMiYiuwBTgyM7M7IUqSusG8LUnlMGdL0tgaFTIyswW06uer25afDZzdzcAkSVNn3pakcpizJakznd61RJIkSZIkqecsZEiSJEmSpGJYyJAkSZIkScWwkCFJkiRJkophIUOSJEmSJBXDQoYkSZIkSSqGhQxJkiRJklQMCxmSJEmSJKkYFjIkSZIkSVIxLGRIkiRJkqRiWMiQJEmSJEnFsJAhSZIkSZKKYSFDkiRJkiQVw0KGJEmSJEkqhoUMSZIkSZJUDAsZkiRJkiSpGBYyJEmSJElSMSxkSJIkSZKkYljIkCRJkiRJxbCQIUmSJEmSimEhQ5IkSZIkFcNChiRJkiRJKoaFDEmSJEmSVIyOCxkRMSsivhMRXxhlXUTEeyPipoi4LiKe2d0wJUlNmbclqRzmbEnqXJMRGW8BNo2x7sXAQfXjKGDVFOOSJE2deVuSymHOlqQOdVTIiIj9gZcA/zxGkyOAC7JyBbBPRDy2SzFKkhoyb0tSOczZktRMpyMyzgLeATw4xvr9gJvbXt9SL5Mk9cZZmLclqRRnYc6WpI7tPFGDiHgpcHtmXhURQ2M1G2VZjrKvo6iGwzFnzhxarVbHgQr7S9POc2xmMG/3D/tL081zrHzdzNn1/orI2/0aV78alP467sv3cu8D3dnX3OUXTWn7PWbD+w/dozvBTKNu9Vlp/TVhIQN4PvCyiFgC7AY8MiI+nJmvamtzC3BA2+v9gVtH7igzzwXOBViwYEEODQ1NNu7Bc8lF2F+aVp5jM4l5ux/4mdJ08xybKbqWs6GQvO2528wA9de9l1zEj057yZT302q1ptxnc5eX0e/d6LMS+2vCS0sy88TM3D8z5wJHApePSKwAnwNeU8+o/Fzgrsy8rfvhSpImYt6WpHKYsyWpuU5GZIwqIo4GyMzVwMXAEuAm4FfA67sSnSSpa8zbklQOc7Ykja1RISMzW0Crfr66bXkCx3UzMEnS1Jm3Jakc5mxJ6kyndy2RJEmSJEnquUlfWiKpvz39lMu4a0uzKYw7na14791nc+1Jh08mLEmSJEmaEgsZ0gx115YHGs1g3GS24qnenkmSJEmSJstLSyRJkiRJUjEsZEiSJEmSpGJYyJAkSZIkScWwkCFJkiRJkophIUOSJEmSJBXDQoYkSZIkSSqGhQxJkiRJklQMCxmSJEmSJKkYFjIkSZIkSVIxLGRIkiRJkqRiWMiQJEmSJEnF2LnXAUiSJAmefspl3LXlgUbbzF1+UUft9t59NteedPhkwpKkHWavect56vnLu7Oz86caC8BLuhHJtOpanxXWXxYyJEmS+sBdWx7gR6d1/iWw1WoxNDTUUdtOCx6S1Ev3bDqtUR4cS5P8OJZS8mY3+qzE/vLSEkmSJEmSVAwLGZIkSZIkqRgWMiRJkiRJUjEsZEiSJEmSpGI42ac0Q01qBuMOZysuZRZnSZKkXprM3YhG042JFL17kWYSCxnSDNV0BmNnv5ckSequpncjGk037igBfn/TzDLhpSURsVtEfCsiro2IGyLilFHaDEXEXRFxTf141/SEK0maiHlbkspi3pakZjoZkXE/8MLM3BwRs4GNEfHFzLxiRLuvZeZLux+iJKkh87YklcW8LUkNTFjIyMwENtcvZ9ePnM6gJEmTZ96WpLKYtyWpmY7uWhIRsyLiGuB2YH1mfnOUZofUw+G+GBFP6WaQkqRmzNuSVBbztiR1rqPJPjNzG3BwROwDfDYi5mfm9W1NrgYOrIfDLQEuBA4auZ+IOAo4CmDOnDm0Wq2pRV+44758L/c2mMS4yQQ9e8yG9x+6xySi0kzS5DO2efPmRu0H/fPb78zb/cH+UlPm7cE1aHm7X+OaDlN9r00/69MZy47QjRi71Wcl9Bf0zzm2Q/srMxs9gJOAv5qgzY+Afcdr86xnPSsH3YEnfKHjths2bJi2fWtmanoONDnHPL8ygSuzYf7s1cO83Rt+TtSUeXt6mbf7xyCdj914r01/DxhLCf3erRi70Wcl9Fdm/5xj09Ff4+XtTu5a8ui6MkxE7A68CPjeiDaPiYionz+b6pKVX0y6uiJJmjTztiSVxbwtSc10cmnJY4HzI2IWVcL8RGZ+ISKOBsjM1cArgGMiYiuwBTiyrqBIknY887YklcW8LUkNdHLXkuuAZ4yyfHXb87OBs7sbmiRpMszbklQW87YkNdPRXUskSZIkSZL6QUd3LZEkSfD0Uy7jri2d326qyd2m9t59NteedPhkwtIMsde85Tz1/OXNNjq/030DvKRpSJKkAjT5vjGmS6a2j713nz31GBqwkCFJUofu2vIAPzqts18GW60WQ0NDHe+7K19CVLR7Np3W8fkFzc4xzy9Jmpma/L8xlrnLL+rKfnYkLy2RJEmSJEnFsJAhSZIkSZKKYSFDkiRJkiQVw0KGJEmSJEkqhoUMSZIkSZJUDO9aIkmSJEnqC127y1JhtxNVMxYyJEmSJEk9161bgJZ4O1E146UlkiRJkiSpGBYyJEmSJElSMSxkSJIkSZKkYljIkCRJkiRJxXCyT2kGazzrc4ezOzuLsyRJg+npp1zGXVsemPJ+pnpnir13n821Jx0+5Tim217zlvPU85dPfUfndyMWACfA1MxgIUOaoZrO1OzszpIkaSJ3bXlgyt8XWq0WQ0NDU9pH127ROc3u2XRaX/QXlNNnUie8tESSJEmSJBXDQoYkSZIkSSqGhQxJkiRJklQMCxmSJEmSJKkYFjIkSZIkSVIxLGRIkiRJkqRiWMiQJEmSJEnFmLCQERG7RcS3IuLaiLghIk4ZpU1ExHsj4qaIuC4injk94UqSJmLelqSymLclqZmdO2hzP/DCzNwcEbOBjRHxxcy8oq3Ni4GD6sdzgFX1v5KkHc+8LUllMW9LUgMTjsjIyub65ez6kSOaHQFcULe9AtgnIh7b3VAlSZ0wb0tSWczbktRMR3NkRMSsiLgGuB1Yn5nfHNFkP+Dmtte31MskST1g3pakspi3JalznVxaQmZuAw6OiH2Az0bE/My8vq1JjLbZyAURcRRwFMCcOXNotVqNA55J9pq3nKeev7zzDc5vsm9otfZoHpQG2qB/JmcS8/b0MG9rujX5jG3evLlR+0H//Pa7kvL2VPfZ9Nydrjh2lH7pr27EUpJBeq/dUFp/dVTIGJaZv4yIFvAHQHtivQU4oO31/sCto2x/LnAuwIIFC3JoaKhhuDPLPctP40envaSjtq1Wiyb9NXf5RQy9tvP2Epdc1OgcUxnM291l3ta0apiHG51j5vhi9H3e7sK51DQ/TlccO0S/9FeXYinGIL3Xbiiwvzq5a8mj68owEbE78CLgeyOafQ54TT2b8nOBuzLztm4HK0mamHlbkspi3pakZjoZkfFY4PyImEVV+PhEZn4hIo4GyMzVwMXAEuAm4FfA66cpXknSxMzbklQW87YkNTBhISMzrwOeMcry1W3PEziuu6FJkibDvC1JZTFvS1IzHd21RJIkSZIkqR80muxTkiRJ02fu8ouabXBJZ+333n32JKKRJKk/WciQJEnqA53eEWfY3OUXNd5GkqSZwEtLJEmSJElSMSxkSJIkSZKkYljIkCRJkiRJxbCQIUmSJEmSiuFkn5IkSZI6ste85Tz1/OVT39H5U40DwMlupUFlIUOSJElSR+7ZdNqU75bTarUYGhqa0j4a36pY0ozipSWSJEmSJKkYFjIkSZIkSVIxLGRIkiRJkqRiWMiQJEmSJEnFsJAhSZIkSZKK4V1LJEmSJGmadOUOK5dMfR977z576nFIfcJChiRJkiRNg6neqhaqQkg39iPNJF5aIkmSJEmSimEhQ5IkSZIkFcNChiRJkiRJKoaFDEmSJEmSVAwLGZIkSZIkqRgWMiRJkiRJUjEmLGRExAERsSEiNkXEDRHxllHaDEXEXRFxTf141/SEK0maiHlbkspi3pakZnbuoM1W4O2ZeXVE7AVcFRHrM/PGEe2+lpkv7X6IkqSGzNuSVBbztiQ1MOGIjMy8LTOvrp/fA2wC9pvuwCRJk2PelqSymLclqZlGc2RExFzgGcA3R1l9SERcGxFfjIindCM4SdLUmLclqSzmbUmaWCeXlgAQEXsCnwbempl3j1h9NXBgZm6OiCXAhcBBo+zjKOAogDlz5tBqtSYZ9szRaR9s3ry5cX/Zv2rKc2ZmMW9PD/O2+onnzMxSSt6e6j4nkx+nI46SDNJ77Rb7rLJo0aKO2sXp46/fsGFDF6Lpno4KGRExmyqpfiQzPzNyfXuizcyLI+KciNg3M+8Y0e5c4FyABQsW5NDQ0FRiL98lF9FpH7RarY7bNt23BHjOzDDm7Wli3lY/8ZyZUYrJ21047xrnx2mKoxiD9F67xT57SGZO2KYrn8kdrJO7lgSwBtiUmWeO0eYxdTsi4tn1fn/RzUAlSZ0xb0tSWczbktRMJyMyng+8GvhuRFxTL3sn8HiAzFwNvAI4JiK2AluAI7OT0o8kaTqYtyWpLOZtSTvc4sWLWb9+PZlJRHDYYYdx6aWX9jqsjkxYyMjMjUBM0OZs4OxuBSVJmjzztiSVxbwtaUdbvHgxl112GccccwxLlizh4osvZtWqVSxevLiIYkbHk31KkiRJkqTyrV+/nmOOOYZzzjmHVqvFOeecA8Dq1at7HFlnGt1+VZIkSZIklS0zefe7373dsne/+90dTQ7aDyxkSJIkSZI0QCKCE088cbtlJ554IvWcwn3PS0skSZIkSRoghx12GKtWrQJgyZIlHHvssaxatYrDDz+8x5F1xkKGJEmSJEkD5NJLL2Xx4sWsXr2aVatWEREcfvjhRUz0CRYyJEmSJEkaOMNFi1arxdDQUG+Dacg5MiRJkiRJUjEsZEiSJEmSpGJ4aYkkSZIkqQid3lUjTh9/fSm3GdXoHJEhSZIkSSpCZk742LBhw4RtVDYLGZIkSZIkqRgWMiRJkiRJxVu3bh3z58/n0EMPZf78+axbt67XIfW1kvvLOTIkSZIkSUVbt24dK1asYM2aNWzbto1Zs2axbNkyAJYuXdrj6PpP6f3liAxJkiRJUtFWrlzJmjVrWLRoETvvvDOLFi1izZo1rFy5steh9aXS+8sRGdKAGW+m57Fmd3ZCJEmSJPWzTZs2sXDhwu2WLVy4kE2bNvUoov5Wen85IkMaMJOZ3VmSJEnqZ/PmzWPjxo3bLdu4cSPz5s3rUUT9rfT+spAhSZIkSSraihUrWLZsGRs2bGDr1q1s2LCBZcuWsWLFil6H1pdK7y8vLZEG3Lp161i5ciWbNm1i3rx5rFixoogJfiRJkqRhS5cuZe3atRx66KFkJhHBYYcd5vfaMQz3y/HHH//Q7wErV64spr8sZEgDrPTZiiVJkiSofiG//PLLOeOMM3jyk5/MjTfeyAknnMDxxx/P+973vl6H15eWLl3K0qVLabVaDA0N9TqcRry0RBpgpc9WLEmSJAGcd955nH766bztbW9jt912421vexunn3465513Xq9D0zSwkCENsNJnK5YkSZIA7r//fo4++ujtlh199NHcf//9PYpI08lChjTASp+tWJIkSQLYddddWb169XbLVq9eza677tqjiDSdnCNDGmDDsxUPz5ExPFuxl5ZIkiSpJG984xs54YQTAHjyk5/MmWeeyQknnPCwURqaGSYsZETEAcAFwGOAB4FzM/OfRrQJ4J+AJcCvgNdl5tXdD1dSN5U+W7FGZ96WpLKYt6WpG57Q853vfCf3338/u+66K0cffbQTfc5QnVxashV4e2bOA54LHBcRTx7R5sXAQfXjKGBVV6OUNG3Wrl3LjTfeyIMPPsiNN97I2rVrex2Sps68LUllMW9LXfC85z2PJz7xiey000488YlP5HnPe16vQ+pr69atY/78+Rx66KHMnz+fdevW9Tqkjk04IiMzbwNuq5/fExGbgP2AG9uaHQFckJkJXBER+0TEY+ttJfWpxYsXc9lll3HMMcewZMkSLr74YlatWsXixYu59NJLex2eJsm8LUllMW9LU7du3TpWrFjx0CXTs2bNYtmyZQCONh5F6f3VaLLPiJgLPAP45ohV+wE3t72+pV4mqY+tX7+eY445hnPOOYc999yTc845h2OOOYb169f3OjR1iXlbkspi3pYmZ+XKlaxZs4ZFixax8847s2jRItasWePcb2Movb86nuwzIvYEPg28NTPvHrl6lE1ylH0cRTUUjjlz5tBqtTqPdIbqtA82b97cuL/s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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Box plots for Categorical Target Variable \"Rating\" and continuous predictors\n",
"CategoricalColsList=['Has Table booking', 'Has Online delivery', 'Price range']\n",
"\n",
"import matplotlib.pyplot as plt\n",
"fig, PlotCanvas=plt.subplots(nrows=1, ncols=len(CategoricalColsList), figsize=(18,5))\n",
"\n",
"# Creating box plots for each continuous predictor against the Target Variable \"Rating\"\n",
"for PredictorCol , i in zip(CategoricalColsList, range(len(CategoricalColsList))):\n",
" RtData.boxplot(column='Rating', by=PredictorCol, figsize=(5,5), vert=True, ax=PlotCanvas[i])"
]
},
{
"cell_type": "markdown",
"id": "ca28926c",
"metadata": {},
"source": [
"In this data, all three categorical predictors looks correlated with the Target variable.\n",
"\n",
"We confirm this by looking at the results of ANOVA test below"
]
},
{
"cell_type": "markdown",
"id": "cea7660f",
"metadata": {},
"source": [
"## Statistical Feature Selection (Categorical Vs Continuous) using ANOVA test¶"
]
},
{
"cell_type": "markdown",
"id": "33258606",
"metadata": {},
"source": [
"Analysis of variance(ANOVA) is performed to check if there is any relationship between the given continuous and categorical variable\n",
"\n",
"Assumption(H0): There is NO relation between the given variables (i.e. The average(mean) values of the numeric Target variable is same for all the groups in the categorical Predictor variable)\n",
"ANOVA Test result: Probability of H0 being true"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "f165e879",
"metadata": {},
"outputs": [],
"source": [
"# Defining a function to find the statistical relationship with all the categorical variables\n",
"def FunctionAnova(inpData, TargetVariable, CategoricalPredictorList):\n",
" from scipy.stats import f_oneway\n",
"\n",
" # Creating an empty list of final selected predictors\n",
" SelectedPredictors=[]\n",
" \n",
" print('##### ANOVA Results ##### \\n')\n",
" for predictor in CategoricalPredictorList:\n",
" CategoryGroupLists=inpData.groupby(predictor)[TargetVariable].apply(list)\n",
" AnovaResults = f_oneway(*CategoryGroupLists)\n",
" \n",
" # If the ANOVA P-Value is <0.05, that means we reject H0\n",
" if (AnovaResults[1] < 0.05):\n",
" print(predictor, 'is correlated with', TargetVariable, '| P-Value:', AnovaResults[1])\n",
" SelectedPredictors.append(predictor)\n",
" else:\n",
" print(predictor, 'is NOT correlated with', TargetVariable, '| P-Value:', AnovaResults[1])\n",
" \n",
" return(SelectedPredictors)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "e8d32462",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"##### ANOVA Results ##### \n",
"\n",
"Has Table booking is correlated with Rating | P-Value: 1.0038500766899416e-107\n",
"Has Online delivery is correlated with Rating | P-Value: 3.4341981048863214e-164\n",
"Price range is correlated with Rating | P-Value: 0.0\n"
]
},
{
"data": {
"text/plain": [
"['Has Table booking', 'Has Online delivery', 'Price range']"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calling the function to check which categorical variables are correlated with target\n",
"CategoricalPredictorList=['Has Table booking', 'Has Online delivery', 'Price range']\n",
"FunctionAnova(inpData=RtData, \n",
" TargetVariable='Rating', \n",
" CategoricalPredictorList=CategoricalPredictorList)"
]
},
{
"cell_type": "markdown",
"id": "e9d9393f",
"metadata": {},
"source": [
"The results of ANOVA confirm our visual analysis using box plots above.\n",
"\n",
"All categorical variables are correlated with the Target variable. This is something we guessed by looking at the box plots!\n",
"\n",
"Final selected Categorical columns:\n",
"\n",
"'Has Table booking', 'Has Online delivery', 'Price range'"
]
},
{
"cell_type": "markdown",
"id": "4804593e",
"metadata": {},
"source": [
"# Selecting final predictors for Machine Learning"
]
},
{
"cell_type": "markdown",
"id": "48574116",
"metadata": {},
"source": [
"Based on the above tests, selecting the final columns for machine learning"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "5580036e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
Has Table booking
\n",
"
Has Online delivery
\n",
"
Price range
\n",
"
\n",
" \n",
" \n",
"
\n",
"
624
\n",
"
140
\n",
"
850
\n",
"
No
\n",
"
No
\n",
"
3
\n",
"
\n",
"
\n",
"
625
\n",
"
71
\n",
"
700
\n",
"
No
\n",
"
No
\n",
"
2
\n",
"
\n",
"
\n",
"
626
\n",
"
94
\n",
"
500
\n",
"
No
\n",
"
No
\n",
"
2
\n",
"
\n",
"
\n",
"
627
\n",
"
87
\n",
"
400
\n",
"
No
\n",
"
No
\n",
"
2
\n",
"
\n",
"
\n",
"
628
\n",
"
177
\n",
"
1000
\n",
"
No
\n",
"
No
\n",
"
3
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Votes Average Cost for two Has Table booking Has Online delivery \\\n",
"624 140 850 No No \n",
"625 71 700 No No \n",
"626 94 500 No No \n",
"627 87 400 No No \n",
"628 177 1000 No No \n",
"\n",
" Price range \n",
"624 3 \n",
"625 2 \n",
"626 2 \n",
"627 2 \n",
"628 3 "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"SelectedColumns=['Votes','Average Cost for two','Has Table booking',\n",
" 'Has Online delivery','Price range']\n",
"\n",
"# Selecting final columns\n",
"DataForML=RtData[SelectedColumns]\n",
"DataForML.head()"
]
},
{
"cell_type": "markdown",
"id": "c8a207a6",
"metadata": {},
"source": [
"## Data Pre-processing for Machine Learning"
]
},
{
"cell_type": "markdown",
"id": "2398894e",
"metadata": {},
"source": [
"In this data there is no Ordinal categorical variable."
]
},
{
"cell_type": "markdown",
"id": "085c49b0",
"metadata": {},
"source": [
"## Converting the binary nominal variable to numeric using 1/0 mapping"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "a74741c1",
"metadata": {},
"outputs": [],
"source": [
"# Converting the binary nominal variable sex to numeric\n",
"DataForML['Has Table booking'].replace({'Yes':1, 'No':0}, inplace=True)\n",
"DataForML['Has Online delivery'].replace({'Yes':1, 'No':0}, inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "ce49cb53",
"metadata": {},
"source": [
"## Converting the nominal variable to numeric using get_dummies()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "64a19fc0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Votes
\n",
"
Average Cost for two
\n",
"
Has Table booking
\n",
"
Has Online delivery
\n",
"
Price range
\n",
"
Rating
\n",
"
\n",
" \n",
" \n",
"
\n",
"
624
\n",
"
140
\n",
"
850
\n",
"
0
\n",
"
0
\n",
"
3
\n",
"
3.9
\n",
"
\n",
"
\n",
"
625
\n",
"
71
\n",
"
700
\n",
"
0
\n",
"
0
\n",
"
2
\n",
"
3.5
\n",
"
\n",
"
\n",
"
626
\n",
"
94
\n",
"
500
\n",
"
0
\n",
"
0
\n",
"
2
\n",
"
3.6
\n",
"
\n",
"
\n",
"
627
\n",
"
87
\n",
"
400
\n",
"
0
\n",
"
0
\n",
"
2
\n",
"
4.0
\n",
"
\n",
"
\n",
"
628
\n",
"
177
\n",
"
1000
\n",
"
0
\n",
"
0
\n",
"
3
\n",
"
4.2
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Votes Average Cost for two Has Table booking Has Online delivery \\\n",
"624 140 850 0 0 \n",
"625 71 700 0 0 \n",
"626 94 500 0 0 \n",
"627 87 400 0 0 \n",
"628 177 1000 0 0 \n",
"\n",
" Price range Rating \n",
"624 3 3.9 \n",
"625 2 3.5 \n",
"626 2 3.6 \n",
"627 2 4.0 \n",
"628 3 4.2 "
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Treating all the nominal variables at once using dummy variables\n",
"DataForML_Numeric=pd.get_dummies(DataForML)\n",
"\n",
"# Adding Target Variable to the data\n",
"DataForML_Numeric['Rating']=RtData['Rating']\n",
"\n",
"# Printing sample rows\n",
"DataForML_Numeric.head()"
]
},
{
"cell_type": "markdown",
"id": "61262704",
"metadata": {},
"source": [
"# Machine Learning: Splitting the data into Training and Testing sample"
]
},
{
"cell_type": "markdown",
"id": "41fdbfac",
"metadata": {},
"source": [
"Typically 70% of data is used as Training data and the rest 30% is used as Tesing data."
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "b98ed60d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Votes', 'Average Cost for two', 'Has Table booking',\n",
" 'Has Online delivery', 'Price range', 'Rating'],\n",
" dtype='object')"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Printing all the column names for our reference\n",
"DataForML_Numeric.columns\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "bebcb2a6",
"metadata": {},
"outputs": [],
"source": [
"# Separate Target Variable and Predictor Variables\n",
"TargetVariable='Rating'\n",
"Predictors=['Votes', 'Average Cost for two', 'Has Table booking',\n",
" 'Has Online delivery', 'Price range']\n",
"\n",
"X=DataForML_Numeric[Predictors].values\n",
"y=DataForML_Numeric[TargetVariable].values\n",
"\n",
"# Split the data into training and testing set\n",
"from sklearn.model_selection import train_test_split\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=428)"
]
},
{
"cell_type": "markdown",
"id": "bcbab952",
"metadata": {},
"source": [
"## Multiple Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "3b33245f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LinearRegression()\n",
"R2 Value: 0.2822477862429039\n",
"\n",
"##### Model Validation and Accuracy Calculations ##########\n",
" Rating PredictedRating\n",
"0 2.9 3.0\n",
"1 3.7 3.0\n",
"2 1.0 2.0\n",
"3 1.0 3.0\n",
"4 3.5 3.0\n",
"Mean Accuracy on test data: 54.27566840471535\n",
"Median Accuracy on test data: 73.17073170731707\n",
"\n",
"Accuracy values for 10-fold Cross Validation:\n",
" [63.29631315 55.34985851 65.91701358 54.61968483 61.68027359 28.73432509\n",
" 54.74405807 54.04180231 39.11057895 45.93544349]\n",
"\n",
"Final Average Accuracy of the model: 52.34\n"
]
}
],
"source": [
"# Multiple Linear Regression\n",
"from sklearn.linear_model import LinearRegression\n",
"RegModel = LinearRegression()\n",
"\n",
"# Printing all the parameters of Linear regression\n",
"print(RegModel)\n",
"\n",
"# Creating the model on Training Data\n",
"LREG=RegModel.fit(X_train,y_train)\n",
"prediction=LREG.predict(X_test)\n",
"\n",
"# Taking the standardized values to original scale\n",
"\n",
"\n",
"from sklearn import metrics\n",
"# Measuring Goodness of fit in Training data\n",
"print('R2 Value:',metrics.r2_score(y_train, LREG.predict(X_train)))\n",
"\n",
"###########################################################################\n",
"print('\\n##### Model Validation and Accuracy Calculations ##########')\n",
"\n",
"# Printing some sample values of prediction\n",
"TestingDataResults=pd.DataFrame(data=X_test, columns=Predictors)\n",
"TestingDataResults[TargetVariable]=y_test\n",
"TestingDataResults[('Predicted'+TargetVariable)]=np.round(prediction)\n",
"\n",
"# Printing sample prediction values\n",
"print(TestingDataResults[[TargetVariable,'Predicted'+TargetVariable]].head())\n",
"\n",
"# Calculating the error for each row\n",
"TestingDataResults['APE']=100 * ((abs(\n",
" TestingDataResults['Rating']-TestingDataResults['PredictedRating']))/TestingDataResults['Rating'])\n",
"\n",
"MAPE=np.mean(TestingDataResults['APE'])\n",
"MedianMAPE=np.median(TestingDataResults['APE'])\n",
"\n",
"Accuracy =100 - MAPE\n",
"MedianAccuracy=100- MedianMAPE\n",
"print('Mean Accuracy on test data:', Accuracy) # Can be negative sometimes due to outlier\n",
"print('Median Accuracy on test data:', MedianAccuracy)\n",
"\n",
"\n",
"# Defining a custom function to calculate accuracy\n",
"# Make sure there are no zeros in the Target variable if you are using MAPE\n",
"def Accuracy_Score(orig,pred):\n",
" MAPE = np.mean(100 * (np.abs(orig-pred)/orig))\n",
" #print('#'*70,'Accuracy:', 100-MAPE)\n",
" return(100-MAPE)\n",
"\n",
"# Custom Scoring MAPE calculation\n",
"from sklearn.metrics import make_scorer\n",
"custom_Scoring=make_scorer(Accuracy_Score, greater_is_better=True)\n",
"\n",
"# Importing cross validation function from sklearn\n",
"from sklearn.model_selection import cross_val_score\n",
"\n",
"# Running 10-Fold Cross validation on a given algorithm\n",
"# Passing full data X and y because the K-fold will split the data and automatically choose train/test\n",
"Accuracy_Values=cross_val_score(RegModel, X , y, cv=10, scoring=custom_Scoring)\n",
"print('\\nAccuracy values for 10-fold Cross Validation:\\n',Accuracy_Values)\n",
"print('\\nFinal Average Accuracy of the model:', round(Accuracy_Values.mean(),2))"
]
},
{
"cell_type": "markdown",
"id": "2fcffbde",
"metadata": {},
"source": [
"## Decision Trees"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "c97e5083",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"DecisionTreeRegressor(max_depth=6)\n",
"R2 Value: 0.9141248692925272\n",
"\n",
"##### Model Validation and Accuracy Calculations ##########\n",
" Rating PredictedRating\n",
"0 2.9 3.0\n",
"1 3.7 3.0\n",
"2 1.0 1.0\n",
"3 1.0 1.0\n",
"4 3.5 3.0\n",
"Mean Accuracy on test data: 91.8409214775786\n",
"Median Accuracy on test data: 93.75\n",
"\n",
"Accuracy values for 10-fold Cross Validation:\n",
" [91.95971012 92.92280961 92.51311639 93.48579176 93.36576699 95.2695392\n",
" 93.34562376 93.75536053 93.57415112 92.68280194]\n",
"\n",
"Final Average Accuracy of the model: 93.29\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"