DS #12 Medical Insurance Cost Prediction

Raj Parmar
3 min readOct 29, 2021

--

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.

Unlisted

--

--