《机器学习在车险定价中的应用》实验报告

 

目录

一、实验题目

        机器学习在车险定价中的应用

二、实验设置

1. 操作系统:

2. IDE:

3. python:

4. 库:

三、实验内容

实验前的猜想:

四、实验结果

1. 数据预处理及数据划分

独热编码处理结果(以地区为例)

2. 模型训练

3. 绘制初始决策树

4. 模型评价

5. 模型优化

绘制优化后的决策树

6. 修改样本、网格搜索参数进一步优化模型

五、实验分析


 

 

一、实验题目

        机器学习在车险定价中的应用

二、实验设置

1. 操作系统:

        Windows 11 Home

2. IDE:

        PyCharm 2022.3.1 (Professional Edition)

3. python

        3.8.0

4. 库:

numpy

1.20.0

 

matplotlib

3.7.1

 

pandas

1.1.5

 

scikit-learn

0.24.2

 

 

conda create -n ML python==3.8 pandas scikit-learn numpy matplotlib

三、实验内容

        本次实验使用决策树模型进行建模,实现对车险 数据的分析,车险数据为如下MTPLdata.csv数据集:

f2dccf851f8245909e63b5e927fd0e01.png

        该车险数据集包含了50万个样本,每个样本有8个特征和1个标签。其中,标签是一个二元变量,值为0或1,表示车主是否报告过车险索赔(clm,int64);特征包括车主的年龄(age,int64),车辆的年限(ac,int64)、功率(power,int64)、燃料类型(gas,object)、品牌(brand,object),车主所在地区(area,object)、居住地车辆密度(dens,int64)、以及汽车牌照类型(ct,object)。

实验前的猜想

        详见实验报告

四、实验结果

1. 数据预处理及数据划分

        将数据读入并进行数据预处理,包括哑变量处理和划分训练集和测试集

MTPLdata = pd.read_csv('MTPLdata.csv')
# 哑变量处理-独热编码
# 将clm列的数据类型转换为字符串
MTPLdata['clm'] = MTPLdata['clm'].map(str)
# 选择包括第1、2、3、4、5、6、7、8列的数据作为特征输入
# ac、brand、age、gas、power
X_raw = MTPLdata.iloc[:, [0, 1, 2, 3, 4]]
# X_raw = MTPLdata.iloc[:, [0, 1, 2, 3, 4, 5, 6, 7]]
# 对X进行独热编码
X = pd.get_dummies(X_raw)
# 选择第9列作为标签y
y = MTPLdata.iloc[:, 8]# 将数据划分为训练集和测试集,测试集占总数据的20%
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.2, random_state=1)

 

独热编码处理结果(以地区为例)

bca076c069c04a629d08ec60ca4b6d9d.png

2. 模型训练

        我们使用决策树分类器模型进行训练(设定树的最大深度为2,使用平衡的类权重,并默认使用基尼系数检验准确度)。

model = DecisionTreeClassifier(max_depth=2, class_weight='balanced', random_state=123)
model.fit(X_train, y_train)     # 数据拟合
model.score(X_test, y_test)     # 在测试集上评估模型

3. 绘制初始决策树

        为了更好地解读决策树模型,调用plot_tree函数绘制决策树。

plt.figure(figsize=(11, 11))
plot_tree(model, feature_names=X.columns, node_ids=True, rounded=True, precision=2)
plt.show()

e3ef80d6c242491193ea5a23b4866f78.png

 

4. 模型评价

pred = model.predict(X_test)
table = pd.crosstab(y_test, pred, rownames=['Actual'], colnames=['Predicted'])
# table# 计算模型的准确率、错误率、召回率、特异度和查准率
table = np.array(table)  # 将pandas DataFrame转换为numpy array
Accuracy = (table[0, 0] + table[1, 1]) / np.sum(table)      # 准确率
Error_rate = 1 - Accuracy  # 错误率
Sensitivity = table[1, 1] / (table[1, 0] + table[1, 1])     # 召回率
Specificity = table[0, 0] / (table[0, 0] + table[0, 1])     # 特异度
Recall = table[1, 1] / (table[0, 1] + table[1, 1])          # 查准率

5. 模型优化

        为了寻找更优的模型,我们使用cost_complexity_pruning_path函数计算不同的ccp_alpha对应的决策树的叶子节点总不纯度,并绘制ccp_alpha与总不纯度之间的关系图。

model = DecisionTreeClassifier(class_weight='balanced', random_state=123)
path = model.cost_complexity_pruning_path(X_train, y_train)
plt.plot(path.ccp_alphas, path.impurities, marker='o', drawstyle='steps-post')
plt.xlabel('alpha (cost-complexity parameter)')
plt.ylabel('Total Leaf Impurities')
plt.title('Total Leaf Impurities vs alpha for Training Set')
plt.show()

                                        1w样本                                                             50w样本

74fe13bc704a4a1c9f27b316cd7fd8c6.png

         接着,我们通过交叉验证选择最优的ccp_alpha,并使用最优的ccp_alpha重新训练模型。

 

绘制优化后的决策树

rangeccpalpha = np.linspace(0.000001, 0.0001, 10, endpoint=True)
param_grid = {'max_depth':  np.arange(3, 7, 1),# 'ccp_alpha': rangeccpalpha,'min_samples_leaf': np.arange(1, 5, 1)
}
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=1)
model = GridSearchCV(DecisionTreeClassifier(class_weight='balanced', random_state=123),param_grid, cv=kfold)
model.fit(X_train, y_train)

8a1af918529548a9b3d2294700c4d59d.png

 

此外,还计算了各个特征的重要性,并绘制了特征重要性图。

plt.figure(figsize=(20, 20))
sorted_index = model.feature_importances_.argsort()
plt.barh(range(X_train.shape[1]), model.feature_importances_[sorted_index])
plt.yticks(np.arange(X_train.shape[1]), X_train.columns[sorted_index])
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.title('Decision Tree')
plt.tight_layout()
plt.show()

d24a68bc5d2242bd9b054d558b1c8567.png

6. 修改样本、网格搜索参数进一步优化模型

 

   详见实验报告

 

五、实验分析

        请下载本实验对应的代码及实验报告资源(其中实验分析部分共2页、1162字)

      

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地部署 Stable Diffusion(Windows 系统)

相对于使用整合包,手动在 Windows 系统下本地部署 Stable Diffusion Web UI(简称 SD-WebUI),更能让人了解一些事情的来龙去脉。 一、安装前置软件:Python 和 Git 1、安装 Python for windows。 下载地址 https://www.p…

数字化、智能化的酒店固定资产管理系统

酒店固定资产管理系统是一种专门为酒店行业定制的管理软件,可以帮助酒店管理者全面、准确地管理固定资产。该系统具有以下实际功能和特点:  资产库存功能:通过扫描二维码或手动输入条形码,完成酒店固定资产的有效总结&#xff0…

浅谈Java中的观察者模式

观察者模式是软件开发中常用的一种设计模式,它通过定义一对多的依赖关系,使得一个对象(主题)的状态变化可以通知多个其他对象(观察者)。 这种模式的优点是解耦和增加扩展性,用于实现对象之间的…

pdf.js构建时,报Cannot read property ‘createChildCompiler‘ of undefined #177的解决方法

在本地和CI工具进行构建时,报如下错误。 Cannot read property createChildCompiler of undefined #177解决方法: 找到vue.config.js,在 module.exports {parallel: false, //新增的一行chainWebpack(config) {....config.module.rule(&…

《自动驾驶与机器人中的SLAM技术》之GNSS相关基础知识总结

简介 本篇基于对《自动驾驶与机器人中的SLAM技术》中的GNSS定位相关基础知识进行总结用于备忘 知识点整理 GNSS(全球卫星导航系统)定位原理 GNSS 通过测量自身与地球周围各卫星的距离来确定自身的位置 , 而与卫星的距离主要是通过测量时间间隔来确定的 GNSS与GPS的关系 GPS(…

15. 查看开源项目

15.1 parser.add_argument ① 像运行Tensorboar一样,在Terminal终端,可以命令运行.py文件。 ② 如下图所示,Terminal终端运行.py文件时,--变量 后面的值是给变量进行赋值,赋值后再在.py文件中运行。例如 ./datasets/…

vue2 element 踩坑爬坑

动态增减表单项 这个其实官网有demo,但是自己也调试了好久,记录下,具体写法自己查看文档:https://element.eleme.cn/#/zh-CN/component/form 关键地方在于key,新增数组时,要在数据里增加个key,…

如何在 Kubernetes 中借助Ingress 实现灰度发布和蓝绿发布

前言 部署在 Kubernetes 集群中的应用,在升级发布时可能会存在的问题: 1,由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的,在升级时如果没有处理好应用优雅退出的问题,就很容易导致 http 访问请…

FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装

FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装 0. 界面预览1. Docker安装1.1 下载docker镜像1.2 启动docker镜像1.3 登录 2. 脚本安装2.1 下载2.2 安装2.3 登录2.4 卸载程序 3. 镜像安装3.1 下载镜像3.2 安装镜像3.3 登录 0. 界面预览 http://myfs.f3322.net…

building and deploying a single-Master RocketMQ cluster

building and deploying a single-Master RocketMQ cluster 1 、下载RocketMQ安装包(这里是通过源码安装)2、安装3、启动nameserver4、启动borkerStart the broker serviceVerify that the broker service is started successfully, for example, the brokers ip is 192.168.1.…

Python爬虫逆向实战案例(五)——YRX竞赛题第五题

题目:抓取全部5页直播间热度,计算前5名直播间热度的加和 地址:https://match.yuanrenxue.cn/match/5 cookie中m值分析 首先打开开发者工具进行抓包分析,从抓到的包来看,参数传递了查询参数m与f,同时页面中…

手机自动无人直播,实景无人直播真的有用吗?

继数字人直播之后,手机自动直播开始火热了起来,因为其门槛低,成本低,一部手机一个账号就可以实现直播,一时深受广大商家的好评。那么,手机自动无人直播究竟是如何实现自动直播的呢? 在传统的直…

什么是数据中心IP,优缺点是什么?

如果根据拥有者或者说发送地址来分类的话,可以将代理分为三类:数据中心ip,住宅ip,移动ip 本文我们来了解数据中心ip的原理以及他们的优势劣势,才能选择适合自己的代理。 一、什么是数据中心ip代理? 数据中心ip是由数据中心拥有…

浏览器输入一个URL之后发生了什么?

URL解析DNS解析TCP连接TSL连接HTTP请求TCP挥手接收并解析响应 URL 解析 主要分为: 协议,eg http,https域名或者ip地址,eg www.baidu.com 域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址 端…

widnows 制作winpe启动盘

下载 官网 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 点击装机版,进行下载,等待下载完成 安装 解压 双击exe运行 插入u盘 识别到的u盘 点击【一键制作成usb启动盘】 点击确定,等待制作完成 重启电脑,选择从…

机器学习深度学习——NLP实战(自然语言推断——微调BERT实现)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——针对序列级和词元级应用微调BERT 📚订阅专栏:机器学习&&深度学习 希望文…

Module not found: Error: Can‘t resolve ‘vue-pdf‘ in ‘xxx‘

使用命令npm run serve时vue项目报错: Module not found: Error: Cant resolve vue-pdf in xxx 解决方案: 运行命令: npm install vue-pdf --save --legacy-peer-deps 即可解决。 再次顺利执行npm run serve

Linux系统USB摄像头测试程序(四)_视频旋转及缩放

下面的程序实现了视频的旋转及缩放,窗口中点击鼠标左键视频向左旋转,点击鼠标右键视频向右旋转并且视频缩小了二分之一。程序中首先把yvyv422转换成了RGB24,然后利用opencv进行了旋转和缩放,其后用sdl2进行了渲染。使用了ffmpeg、…

问道管理:市盈率市净率两个指标含义怎么算?

市盈率和市净率是出资领域常用的两个目标,用于评价公司的估值和出资的报答状况。本文将从多个视点剖析这两个目标的含义和计算方法,帮助读者更好地了解和运用它们。首先,市盈率(P/E ratio)是用来衡量公司股票价格与每股…

程序运行的马甲:进程(1/7)

一个可执行文件被加载到内存中运行时,它在内存空间的分布如图所示: 在内存中有专门的堆栈空间,函数的局部变量是保存在栈中的,使用 malloc 申请的动态内存是在堆空间中分配的,它们是程序运行时比较特殊的两块内存区域&…