使用Python中的机器学习预测医疗保险价格
与许多其他领域一样,预测分析在金融和保险行业也非常有帮助。使用这种机器学习技术,我们可以获取有关任何保险政策的有用信息,从而节省大量资金。在这里,我们将使用这种预测分析方法来处理医疗保险数据集。
问题陈述如下:我们有一些具有特定属性的人的数据集。使用Python中的机器学习,我们需要从这个数据集中找出相关信息,并预测一个人需要支付的保险费用。
步骤
步骤1 - 导入库,如numpy,pandas,matplotlib,seaborn和sklearn等,并将数据集加载为pandas数据帧。
步骤2 - 清理数据,首先检查是否存在空值。如果存在空值,则查找各个特征之间的关系,并填充空值。如果没有空值,则继续下一步。
步骤3 - 执行EDA,即检查各个独立变量之间的关系。
步骤4 - 发现异常值并进行调整。
步骤5 - 绘制热力图以查找高度相关的变量。
步骤6 - 将数据集分割为测试集和训练集,并使用标准缩放器对数据进行归一化。
步骤7 - 现在在这些数据上训练一些机器学习模型,并使用mape检查哪个模型最好。
示例
在此示例中,我们将使用医疗保险数据集,您可以在此处找到,然后执行预测特定医疗保险的保险费用所需的各种步骤。
#import the required libraries
import numpy as np
import pandas as pd
import seaborn as sb
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.metrics import mean_absolute_percentage_error as mape
from sklearn.linear_model import LinearRegression, Lasso, Ridge
from xgboost import XGBRegressor
from sklearn.ensemble import RandomForestRegressor, AdaBoostRegressor
import warnings
warnings.filterwarnings('ignore')
#load and print the dataset
df = pd.read_csv('insurance_dataset.csv')
df.head()
df.shape
df.info()
df.describe()
#check for null values
df.isnull().sum()
#see the relation between independent features
#pie charts
features = ['sex', 'smoker', 'region']
plt.subplots(figsize=(20, 10))
for i, col in enumerate(features):
plt.subplot(1, 3, i + 1)
x = df[col].value_counts()
plt.pie(x.values, labels=x.index, autopct='%1.1f%%')
plt.show()
#bar graphs
features = ['sex', 'children', 'smoker', 'region']
plt.subplots(figsize=(20, 10))
for i, col in enumerate(features):
plt.subplot(2, 2, i + 1)
df.groupby(col).mean()['charges'].plot.bar()
plt.show()
#plots
features = ['age', 'bmi']
plt.subplots(figsize=(17, 7))
for i, col in enumerate(features):
plt.subplot(1, 2, i + 1)
sb.distplot(df[col])
plt.show()
#scatterplots
features = ['age', 'bmi']
plt.subplots(figsize=(17, 7))
for i, col in enumerate(features):
plt.subplot(1, 2, i + 1)
sb.scatterplot(data=df, x=col, y='charges', hue='smoker')
plt.show()
#check for outliers
features = ['age', 'bmi']
plt.subplots(figsize=(17, 7))
for i, col in enumerate(features):
plt.subplot(1, 2, i + 1)
sb.boxplot(df[col])
plt.show()
#adjust the outliers
df.shape, df[df['bmi']<45].shape
df = df[df['bmi']<50]
for col in df.columns:
if df[col].dtype == object:
le = LabelEncoder()
df[col] = le.fit_transform(df[col])
#use heatmap to see highly correlated variables
plt.figure(figsize=(7, 7))
sb.heatmap(df.corr() > 0.8, annot=True, cbar=False)
plt.show()
#split the dataset into train and test sets
features = df.drop(['charges'], axis=1)
target = df['charges']
X_train, X_val,\
Y_train, Y_val = train_test_split(features, target, test_size=0.1, random_state=22)
X_train.shape, X_val.shape
#fit the data
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
#find the performance of various models
models = [LinearRegression(), XGBRegressor(),
RandomForestRegressor(), AdaBoostRegressor(),
Lasso(), Ridge()]
for i in range(6):
models[i].fit(X_train, Y_train)
print(f'{models[i]} : ')
pred_train = models[i].predict(X_train)
print('Training Error : ', mape(Y_train, pred_train))
pred_val = models[i].predict(X_val)
print('Validation Error : ', mape(Y_val, pred_val))
print()
抱歉,但我无法直接编辑HTML格式的文本。我只能提供纯文本的翻译。请提供您需要翻译的英文文本,我将尽力为您提供帮助。在导入所需的库之后,将数据集存储到Python的数据帧中。然后,代码检查数据集中的空值,并分别绘制饼图和条形图以可视化数据集中性别、地区和吸烟者列的分布和比例。 然后,显示直方图和散点图以可视化年龄和BMI与费用变量的分布和关系。检查年龄和BMI列,并通过过滤掉极端值进行修改。之后,将列sex、smoker和region中的值转换为数值形式,并创建热图以可视化数据集中列之间的关系。 然后将数据集分为训练集和验证集。基于训练集和验证集上的平均绝对百分比误差对各种回归模型进行训练和评估。 输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1338 entries, 0 to 1337
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 1338 non-null int64
1 sex 1338 non-null object
2 bmi 1338 non-null float64
3 children 1338 non-null int64
4 smoker 1338 non-null object
5 region 1338 non-null object
6 charges 1338 non-null float64
dtypes: float64(2), int64(2), object(3)
memory usage: 73.3+ KB
LinearRegression() −
Training Error : 0.42160312973300035
Validation Error : 0.36819643775368394
XGBRegressor() −
Training Error : 0.07414118093426757
Validation Error : 0.43487251393507226
随机森林回归器(RandomForestRegressor()) −
Training Error : 0.11931475932482996
Validation Error : 0.33574049059141486
AdaBoostRegressor()
Training Error : 0.6166709629183661
Validation Error : 0.5758503954769271
Lasso() −
Training Error : 0.42160217445355996
Validation Error : 0.36821456297631355
Ridge()
−
Training Error : 0.42182509871430085
Validation Error : 0.3685041955294438
你可以看到XGBRegressor给出了最小的MAPE(平均绝对百分比误差)值。这意味着这个模型预测的价格与实际价格非常接近,因此可以认为它是这个项目中最好的模型。
结论
在进行医疗保险价格预测时,你也可以使用其他模型,如K最近邻(KNN)、支持向量机(SVM)、随机森林(RF)和朴素贝叶斯等。此外,这里的数据大部分都经过预处理。但是,你可以根据需要自行对数据进行预处理。而且,类似的预测也可以针对带有其他特征的数据集进行。