DS #12 Medical Insurance Cost Prediction
--
In this blog, we will see the mini-project about Medical Insurance Cost Prediction
Dataset ( insurance.csv) for ‘Medical Insurance’ can be downloaded from Kaggle.
Columns Description :
- Age: Age of primary beneficiary
- Sex: Primary beneficiary’s gender
- BMI: Body mass index (providing an understanding of the body, weights that are relatively high or low relative to height)
- Children: Number of children covered by health insurance / Number of dependents
- Smoker: Smoking (yes, no)
- Region: Beneficiary’s residential area in the US (northeast, southeast, southwest, northwest)
- Charges: Individual medical costs billed by health insurance
Importing Dependencies :
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics
import io
Uploading Dataset :
from google.colab import files
uploaded = files.upload()
insurance_dataset = pd.read_csv(io.BytesIO(uploaded['insurance.csv']))
Understanding the data :
insurance_dataset.head()
insurance_dataset.shape
insurance_dataset.info()
Checking for missing values
insurance_dataset.isnull().sum()
Exploratory Data Analysis
Statistical Measures of the dataset
insurance_dataset.describe
Distribution of age value
sns.set()
plt.figure(figsize=(6,6))
sns.distplot(insurance_dataset['age'])
plt.title('Age Distribution')
plt.show()
Gender column
plt.figure(figsize=(6,6))
sns.countplot(x='sex', data=insurance_dataset)
plt.title('Sex Distribution')
plt.show()
Bmi distribution
plt.figure(figsize=(6,6))
sns.distplot(insurance_dataset['bmi'])
plt.title('BMI Distribution')
plt.show()
Children column
plt.figure(figsize=(6,6))
sns.countplot(x='children', data=insurance_dataset)
plt.title('Children')
plt.show()
Smoker column
plt.figure(figsize=(6,6))
sns.countplot(x='smoker', data=insurance_dataset)
plt.title('smoker')
plt.show()
Region column
plt.figure(figsize=(6,6))
sns.countplot(x='region', data=insurance_dataset)
plt.title('region')
plt.show()
Distribution of charges value
plt.figure(figsize=(6,6))
sns.distplot(insurance_dataset['charges'])
plt.title('Charges Distribution')
plt.show()
Data Pre-Processing
Encoding the categorical features
# encoding sex columninsurance_dataset.replace({'sex':{'male':0,'female':1}}, inplace=True)# encoding 'smoker' columninsurance_dataset.replace({'smoker':{'yes':0,'no':1}}, inplace=True)# encoding 'region' columninsurance_dataset.replace({'region':{'southeast':0,'southwest':1,'northeast':2,'northwest':3}}, inplace=True)
Splitting the Features and Target
X = insurance_dataset.drop(columns='charges', axis=1)
Y = insurance_dataset['charges']
Splitting the data into Training data & Testing Data
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=2)
Model Training
Linear Regression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
Model Evaluation
training_data_prediction =regressor.predict(X_train)
r2_train = metrics.r2_score(Y_train, training_data_prediction)
print('R squared vale : ', r2_train)
test_data_prediction =regressor.predict(X_test)
r2_test = metrics.r2_score(Y_test, test_data_prediction)
print('R squared vale : ', r2_test)
Building a Predictive System
input_data = (31,1,25.74,0,1,0)
#changing input_data to a numpy array
input_data_as_numpy_array = np.asarray(input_data)
# reshape the array
input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)
prediction = regressor.predict(input_data_reshaped)
print(prediction)
print('The insurance cost is USD ', prediction[0])
Conclusion
In this article, we have predicted insurance cost using Linear Regression and done some analysis using given data.