机器学习:基于Python 机器学习进行医疗保险价格预测
大家好,我i阿极。喜欢本专栏的小伙伴,请多多支持
专栏案例:机器学习案例 |
---|
机器学习(一):线性回归之最小二乘法 |
机器学习(二):线性回归之梯度下降法 |
机器学习(三):基于线性回归对波士顿房价预测 |
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测 |
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析 |
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析 |
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析 |
机器学习(八):基于PCA对人脸识别数据降维并建立KNN模型检验 |
机器学习(十四):基于逻辑回归对超市销售活动预测分析 |
机器学习(十五):基于神经网络对用户评论情感分析预测 |
机器学习(十六):线性回归分析女性身高与体重之间的关系 |
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测 |
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析 |
机器学习(十九):基于逻辑回归对某银行客户违约预测分析 |
机器学习(二十):LightGBM算法原理(附案例实战) |
机器学习(二十一):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 |
机器学习(二十二):基于逻辑回归(Logistic Regression)对股票客户流失预测分析 |
文章目录
1、前言
您一定听说过一些有关医疗保险的广告,这些广告承诺在发生任何医疗紧急情况时提供经济帮助。购买此类保险的人必须每月缴纳保费,保费金额根据各种因素变化很大。
在本文中,我们将尝试使用 Python 中的机器学习从数据集中提取一些见解,该数据集包含有关购买医疗保险的人的背景以及向这些人收取的保费金额的详细信息。
2、导入数据和模块
Python 库使我们可以非常轻松地使用一行代码处理数据并执行典型且复杂的任务。
Pandas – 该库有助于以 2D 数组格式加载数据帧,并具有多种功能来一次性执行分析任务。
Numpy – Numpy 数组非常快,可以在很短的时间内执行大量计算。
Matplotlib / Seaborn – 该库用于绘制可视化效果。
Sklearn – 该模块包含多个具有预实现功能的库,用于执行从数据预处理到模型开发和评估的任务。
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')
现在让我们使用 panda 的数据框加载数据集并查看它的前五行。
df = pd.read_csv('insurance.csv')
df.head()
现在,让我们检查数据集的形状。
df.shape
df.info()
我们可以查看数据集中可用的连续数据的描述性统计度量。
df.describe()
3、探索性数据可视化分析
EDA 是一种使用视觉技术分析数据的方法。它用于发现趋势和模式,或借助统计摘要和图形表示来检查假设。在执行此数据集的 EDA 时,我们将尝试查看独立特征之间的关系,即一个特征如何影响另一个特征。
df.isnull().sum()
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()
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()
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()
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()
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()
df.shape, df[df['bmi']<45].shape
df = df[df['bmi']<45]
为了分析该数据集特征之间的相关性,我们必须对分类列执行 LabelEncoding。
for col in df.columns:
if df[col].dtype == object:
le = LabelEncoder()
df[col] = le.fit_transform(df[col])
我们画一个热图来分析数据集变量之间的相关性
plt.figure(figsize=(7, 7))
sb.heatmap(df.corr() > 0.8,
annot=True,
cbar=False)
plt.show()
4、模型开发
学术界有很多最先进的机器学习模型,但有些模型更适合某些问题,而有些模型则比其他模型更适合。因此,为了做出这个决定,我们将数据分为训练数据和验证数据。然后我们使用验证数据来选择性能最高的模型。
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.2,
random_state=22)
X_train.shape, X_val.shape
将数据划分为训练数据和验证数据后,被认为是实现模型稳定快速训练的更好实践。
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
现在,让我们在训练数据上训练一些最先进的机器学习模型,然后使用验证数据来选择其中最好的模型进行预测。
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()
总结
在所有模型中,RandomForestModel给出了平均绝对百分比误差的最小值,这意味着与其他模型相比,该模型做出的预测更接近真实值。
我们在这里使用的数据集很小,但我们从中得出的结论与现实生活场景中观察到的结果非常相似。如果我们拥有更大的数据集,那么我们将能够了解独立特征与买家收取的溢价之间关系的更深层次模式。