码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 机器学习:基于Python 机器学习进行医疗保险价格预测


    在这里插入图片描述

    机器学习:基于Python 机器学习进行医疗保险价格预测

    作者:i阿极

    作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页

    😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

    📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


    大家好,我i阿极。喜欢本专栏的小伙伴,请多多支持

    专栏案例:机器学习案例
    机器学习(一):线性回归之最小二乘法
    机器学习(二):线性回归之梯度下降法
    机器学习(三):基于线性回归对波士顿房价预测
    机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
    机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
    机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
    机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
    机器学习(八):基于PCA对人脸识别数据降维并建立KNN模型检验
    机器学习(十四):基于逻辑回归对超市销售活动预测分析
    机器学习(十五):基于神经网络对用户评论情感分析预测
    机器学习(十六):线性回归分析女性身高与体重之间的关系
    机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
    机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
    机器学习(十九):基于逻辑回归对某银行客户违约预测分析
    机器学习(二十):LightGBM算法原理(附案例实战)
    机器学习(二十一):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
    机器学习(二十二):基于逻辑回归(Logistic Regression)对股票客户流失预测分析

    文章目录

    • 机器学习:基于Python 机器学习进行医疗保险价格预测
    • 1、前言
    • 2、导入数据和模块
    • 3、探索性数据可视化分析
    • 4、模型开发
    • 总结


    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    现在让我们使用 panda 的数据框加载数据集并查看它的前五行。

    df = pd.read_csv('insurance.csv')
    df.head()
    
    • 1
    • 2

    在这里插入图片描述

    现在,让我们检查数据集的形状。

    df.shape
    
    • 1

    该数据集包含 1338 个数据点,具有 6 个独立特征和 1 个目标特征。

    df.info()
    
    • 1

    在这里插入图片描述

    从上面我们可以看到,数据集包含 2 列浮点值、3 列分类值,其余包含整数值。

    我们可以查看数据集中可用的连续数据的描述性统计度量。

    df.describe()
    
    • 1

    在这里插入图片描述

    3、探索性数据可视化分析

    EDA 是一种使用视觉技术分析数据的方法。它用于发现趋势和模式,或借助统计摘要和图形表示来检查假设。在执行此数据集的 EDA 时,我们将尝试查看独立特征之间的关系,即一个特征如何影响另一个特征。

    df.isnull().sum()
    
    • 1

    在这里插入图片描述

    在这里我们可以得出结论,给定的数据集中不存在空值。

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    提供给我们的数据在性别和地区列中均匀分布,但在吸烟者列中,我们可以观察到比例为 80:20。

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    现在让我们看看上图中显示的一些观察结果:
    与女性相比,男性的费用较高,但差异并不大。
    吸烟者收取的保费大约是非吸烟者收取的三倍。
    给定四个区域的费用大致相同。

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    这里可以观察到吸烟者必须支付的费用之间的明显区别。同样在这里,我们也可以观察到,随着一个人年龄的增加,保费也会上涨。

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    年龄和 BMI 列中的数据大致遵循正态分布,这对于模型的学习来说是一个很好的点。

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    给定数据集的 BMI 列中存在异常值。让我们检查一下,如果删除这些异常值,我们将丢失数据集的多少行。

    df.shape, df[df['bmi']<45].shape
    
    • 1

    我们只会丢失 20 个数据点,并且数据集将不再有任何异常值,因此我们可以做出这样的牺牲。

    df = df[df['bmi']<45]
    
    • 1

    为了分析该数据集特征之间的相关性,我们必须对分类列执行 LabelEncoding。

    for col in df.columns:
        if df[col].dtype == object:
            le = LabelEncoder()
            df[col] = le.fit_transform(df[col])
    
    • 1
    • 2
    • 3
    • 4

    我们画一个热图来分析数据集变量之间的相关性

    plt.figure(figsize=(7, 7))
    sb.heatmap(df.corr() > 0.8,
               annot=True,
               cbar=False)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    从上面的热图可以肯定,里面不存在高度相关的特征。

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    将数据划分为训练数据和验证数据后,被认为是实现模型稳定快速训练的更好实践。

    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_val = scaler.transform(X_val)
    
    
    • 1
    • 2
    • 3
    • 4

    现在,让我们在训练数据上训练一些最先进的机器学习模型,然后使用验证数据来选择其中最好的模型进行预测。

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    在这里,我们使用 MAPE(平均绝对百分比误差指标)来评估模型的性能。MAPE 值为 0.1 意味着预测值与实际值的误差约为 10%。

    总结

    在所有模型中,RandomForestModel给出了平均绝对百分比误差的最小值,这意味着与其他模型相比,该模型做出的预测更接近真实值。

    我们在这里使用的数据集很小,但我们从中得出的结论与现实生活场景中观察到的结果非常相似。如果我们拥有更大的数据集,那么我们将能够了解独立特征与买家收取的溢价之间关系的更深层次模式。


    📢文章下方有交流学习区!一起学习进步!💪💪💪
    📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
    📢你的支持和鼓励是我创作的动力❗❗❗

  • 相关阅读:
    【Linux】[gdb]Linux环境下如何调试代码
    QMake中的预变量和库链接方式
    仿牛客网项目---社区首页的开发实现
    mybatis对查询的数据手动分页
    构建基于 Ingress 的全链路灰度能力
    OpenLayers构建4490坐标系地图解决方案
    go 命令行框架cobra
    c++ 标准库
    如何理解Python中的self变量?
    Python&C++相互混合调用编程全面实战-31完成扩展库中打开ffmpeg解码器
  • 原文地址:https://blog.csdn.net/AOAIYI/article/details/131391152
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号