使用 ML.NET 进行保险价格预测

此前通过多篇文章已充分介绍过,ML.NET是一个开源的跨平台机器学习框架,特别适合 .NET 开发人员。它允许将机器学习集成到 .NET 应用中,而无需离开 .NET 生态系统,甚至拥有 ML 或数据科学背景。ML.NET 现有的各种内置模型训练器可用于图像检测、音频检测、基于文本的场景、情绪分析、销售预测、电影推荐、异常检测等等。随着 ML.NET 的普及,越来越多的案例也证明了它走进了实际生产环境,能够解决丰富的机器学习场景问题了。本文的案例来自 Chandra Kudumula 的工作分享,Chandra Kudumula 是一名高级程序员兼分析师,拥有超过十二年的 IT 经验。他成功地在金融、博彩和保险服务等多个领域设计并开发了各种高可扩展和高可用的企业应用程序。本文跳过机器学习基础知识和算法类型,以一个控制台程序的完整代码编写过程为案例,重点展示他如何使用 ML.NET 来预测保险价格。

大多数传统保险公司是雇用精算师来计算保险费。精算师是商业专业人士,他们使用数学和统计数据来评估财务损失的风险,并根据年龄和性别等因素/特征预测保险费和索赔的可能性。它们通常会生成一种称为精算表的东西,提供给保险公司的承保部门,该部门通过输入条件数据来设置保险费。保险公司相当一部分工作是依赖专业人士计算和编写所有程序,但使用机器学习变得更加简单。机器学习允许程序从一组数据中学习,以找出特定的问题特征。ML 会关注性别、吸烟、儿童人数和地区等不同因素,以找到总体最高的医疗费用,并根据需求使用特定算法确定价格,比如吸烟者和孩子较多的客户往往医疗费用较高,因此这些群体的保费将更多。随着 ML 训练越来越多的数据,ML 程序在预测确切价格方面变得更加聪明和敏感。最后,您需要调用一个交互程序,根据提供的输入因素为特定人员计算保险费,而不需要自己编写所有这些程序。ML 程序查看提供的所有数据集以及训练学习,最终将提供一个机器学习模型,您可以在应用程序中使用。例如模型会认为保险价格取决于各种特征,如年龄、保险类型、所需保险金额、性别、体重指数 (BMI)、地区以及吸烟等特殊因素,如果您想要预测保险价格,在应用程序中输入这些因素的值就能获得结果。

机器学习工作流程

ML 工作流有三个关键步骤:

  • 准备数据。加载数据库或CSV文件的数据。提取/识别与您将要解决或预测结果的问题相关的关键特征(输入和输出参数)。

  • 构建和训练ML模型。在这里,您可以评估不同的算法、设置参数并查看哪个模型最适合您的方案。

  • 模型准备好后,请在应用程序中使用模型。

 

 

 

预测保险价格/保费的 ML.NET

价格预测根据一些输入数据(如年龄、性别、吸烟、体重指数 (BMI)、儿童数量和地区)确定保险价格。价格预测是机器学习回归任务的一个例子,该任务可以预测数字相关的问题。

对保险费的预测如下。你有一些特征输入(年龄,性别,吸烟等),进入训练过程。这些特征可以确定溢价金额的高或低。例如,年轻人不太可能需要医疗照顾,所以他们的保费通常更便宜,吸烟者的保费也更高。标签输出是您想要预测的价格,这是调用机器学习模型的结果。

下图是保险数据的示例,该示例是模型的输入和输出:

如何开始与 ML.NET

从 ML.NET 开始有三种方法

  • API 模型:您可以通过API开始 ML.NET,并以 C# 或 F# 编写代码

  • GUI 模型:在 Visual Studio 中使用 ML.NET模型构建器

  • CLI 模型:对于像 Mac 和 Linux 这样的跨平台开发,请使用 ML.NET CLI。

让我们开始以 API 模型使用 ML.NET 框架预测保险费。

我使用 Visual Studio 2019 创建一个控制台应用程序。请确保您拥有最新版本的VS,并且安装了 .NET 5 SDK。

打开 Visual Studio 创建一个新项目->选择C#控制台应用程序。

提供项目名称

 

 

从下拉中选择目标框架并按下"创建"按钮。

 

 

创建控制台应用程序。

 

 

需要ML模型的样本/测试保险数据。从 https://www.kaggle.com/mirichoi0218/insurance 下载insurance.csv文件数据,并将文件复制到控制台项目中。您可以使用列标题(年龄、性别、BMI 等)查看数据,并在打开文件时通过逗号将其分离。

 

 

从NuGet安装所需的ML包。在"解决方案资源管理器"中,右键单击项目并选择"Manage  NuGet 包"。

 

 

安装 Microsoft.ML 包。

 

 

还要安装Microsoft.ML.AutoML包。此包通过自动定位最佳功能工程、模型和超参数来优化数据集的 ML 管道。

注意:我使用此包来找出价格预测的最佳算法。如果您熟悉或决定转到特定算法,则不需要此包。

 

 

添加代码

已完成的Program.cs文件可以在这里找到。首先添加所需使用语句:

 

 

 

添加ModelInputModelOutput类Program.cs。该类包含与输入数据文件insurance.csv的标题匹配的属性。

 

 

在程序类中,添加两个常数,和 H。第一个包含数据集的路径:后者包含在培训完成后保存模型的路径。TRAIN_DATA_FILEPATHMODEL_FILEPAT

 

 

创建实例是所有 ML.NET 操作的初始化步骤。它提供加载和准备数据、训练、评估和模型预测的所有所需组件。有一个可选参数称为种子。默认情况下,种子值为空,MLContext环境不确定,输出会跨多个运行时变更。如果您提供固定数值,则MLContext环境将保持变化是确定的,结果在多个MLContext运行中是一致的。

 

 

创建MLContext实例后,您需要使用此类加载数据,以创建在数据、加载、保存、缓存、筛选、随机和拆分输入数据上的DataOperationsCatalog组件。但这不是模型训练管道的一部分。

从CSV文件加载数据。提供所需的输入参数,如 CSV 文件是否有标题、使用什么符号来分离数据等。

 

 

数据已加载,但需要清理或转换模型可以理解的输入数据。

 

 

输入数据是分类数据。分类数据只不过是包含标签值的变量,而不是数字值。输入数据"性别"和"区域"具有标签值,您需要将其转换为数字值,并且可能的值数通常仅限于固定集。例如,区域数据只有两个值,即东南或西北。

此外,吸烟者列包含"是"或"否",但这些数据需要转换为真或假。

以下是使用"TransformsCatalog"转换吸烟者列和分类数据列的代码:性别和区域。最后,将所有输入列串联在一起。

 

 

ConversionTransforms:提供操作列表,将数据从一种类型转换为另一种类型。包括是对真,否对假。

Append:通过将另一个估计器附加到此估计器的末尾创建一个新的估算链。

CategoricalTransforms创建分类数据转换组件的实例,您将使用它们转换分类数据,如性别和区域。

ColumnConcatenate这将将一个或多个输入列串联到新的输出列中。

您需要在 AutoML 的帮助下找到性能最好的模型。以下是探索多个模型的代码。更长的训练时间使 AutoML 能够探索更多,并为机器学习模型提供更高的精度。

 

 

 

运行实验

运行实验后,AutoML 探索了不同的模型。以下是显示评估模型并建议最佳模型的控制台输出窗口:基于输入数据的价格预测的LightGbm 回归

 

 

 

要打印平均指标,添加此功能:

 

 

构建模型

现在,我有最好的价格预测算法,我会使用这个算法的代码,并建立模型。以下是创建、训练、交叉验证和保存模型的代码片段。

测试模型

现在,模型被创建、训练并保存到 Zip 文件中。通过传递样本数据测试训练好的模型。以下是使用预测引擎加载模型并预测结果的代码片段。

 

 

运行模型后,以下是控制台窗口上的预测输出。

 

 

总结

您已经看到使用 ML.NET 使用 API 框架进行价格预测是多么容易。同样,您可以使用GUI(模型构建器)或CLI模型来获得相同的结果。

引用

https://dotnet.microsoft.com/apps/machinelearning-ai/ml-dotnet

https://www.kaggle.com/mirichoi0218/insurance

https://www.investopedia.com/ask/answers/09/calculating-premium.asp

https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/

https://github.com/jwood803/MLNetExamples/blob/master/MLNetExamples/AutoML/Program.cs

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

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

相关文章

送礼物给女生,她哭了是怎么回事?

全世界只有3.14 % 的人关注了青少年数学之旅中秋节快要到了,超模君说要给我准备个惊喜,what?结果我在桌面上发现了一个盒子和一大堆 垃圾 零件,清洁阿姨你在哪?我需要你。不过仔细一看,我去?&am…

oracle+11g+rda,Oracle RDA 4.20 初体验

RDA 全名RemoteDiagnostic Agent,是Oracle用来收集、分析数据库的工具,但统计信息远远大于只是数据库的,也可以说是现在一个Oracle dba 角色需要掌握的Oracle DB SERVER的信息,包含数据库安装、配置、性能、备份等信息、操作系统各…

室内设计品牌网站搭建的作用是什么

随着人们生活质量日益提升,对其自身的居住环境也有了较高要求,每个人审美不一样,无论自己居住的房屋还是公司办公/商场等场景都需要设计不同的内容,还有各种设施的摆放及类别等都有讲究,尤其对公司及商场等环境&#x…

面向.NET开发人员的Dapr- actors 构建块

原文地址:https://docs.microsoft.com/en-us/dotnet/architecture/dapr-for-net-developers/actors The actor model originated in 1973. It was proposed by Carl Hewitt as a conceptual model of concurrent computation, a form of computing in which several…

史上最严重的忘拿钥匙事件 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(视频源网络,侵权删)难搞噢↓ ↓ ↓

magicAjax问题

如果web.config是requestEncoding"gb2312" responseEncoding"gb2312" 这样使用起来就会卡在loading...那里大家遇到过吗? 但是如果改成requestEncoding"utf-8" ,那在搜索里面就不能搜索中文了,汗~…

oracle经常开关好吗,频繁开关机对电脑有什么影响吗?

2005-08-03 08:01:45没关系的哦,一天五六次正常,只要是正常开关机就OK。全部2005-08-03 08:01:452005-08-03 07:49:392005-08-03 05:21:09影响不大完全在合理范围内,等到坏的时候也应该淘汰了全部2005-08-03 05:21:092005-08-03 04:09:04原则上经常性的开…

老是担心数学学不好?这些基础是时候正视了!

我们都知道,数学是学生生涯的一门重要学科,与其担心三年级掉队,不如从小培养良好的学习兴趣和数感直觉,之后的学习就是水到渠成的事了,这可不是报个奥数班就万事大吉了,最关键的,还得从培养孩子…

在 .NET 应用中使用 ANTLR

什么是 ANTLR ?ANTLR 是功能强大的解析器生成器,用于读取,处理,执行或翻译结构化文本或二进制文件。它被广泛用于构建语言,工具和框架。ANTLR从语法中生成一个解析器,该解析器可以构建和遍历解析树。ANTLR …

GDB调试程序实例演示

GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功…

ASP.NET程序中常用的三十三种代码(二)

21.读取DataGrid控件TextBox值 foreach(DataGrid dgi in yourDataGrid.Items){ TextBox tb (TextBox)dgi.FindControl("yourTextBoxId"); tb.Text....} 23.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE(金额)分别在5.6…

oracle crontab e,Linux运维知识之通过crontab -e编辑生成的定时任务,写在哪个文件中...

本文主要向大家介绍了Linux运维知识之通过crontab -e编辑生成的定时任务,写在哪个文件中,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。环境描述:操作系统:Red Hat Enterprise Linux Server releas…

video.js html5 视频播放器

1 我个人感觉很不错2 https://github.com/videojs/video.js3 <head>4 <title>Video.js | HTML5 Video Player</title>5 6 <!-- Chang URLs to wherever Video.js files will be hosted -->7 <link href"video-js.css" rel"sty…

老师“鬼话”全曝光!哈哈哈哈哈哈全国的老师都这样吗?

老师您辛苦了明天就是教师节啦今天超模君有幸采访到一位从教多年的数学老师01请问您教的科目是&#xff1f;数学收到&#xff0c;over02您从教多久了&#xff1f;唔…快10年了您当过班主任吗&#xff1f;当过&#xff0c;现在也是班主任工作日常是怎样的&#xff1f;备课、改作…

单体系统如何拆分为微服务

当单体系统越来越大&#xff0c;并难于维护时&#xff0c;很多企业开始有意把单体系统拆分为微服务风格架构。这么做很有意义&#xff0c;但不容易。要做好这件事情我们必须学习&#xff0c;我们从一个简单的服务开始&#xff0c;另一方面拉出以垂直功能为基础的服务&#xff0…

Wiki及其他

大概是2年多以前&#xff0c;我几乎是和blog一起听到wiki的概念的。当时blog正备受推崇&#xff0c;而个性色彩稍逊一筹、讲究严肃协作的wiki则没怎么受公众注意。我也一样。后来进入行业之后&#xff0c;我一直想有一套知识库(Knowledge Base)系统&#xff0c;多分类、复杂查找…

linux服务器管理公司用户,在Linux服务器Jenkins中管理用户和角色的方法

下面将教你如何在Linux服务器Jenkins中管理用户和角色&#xff0c;它需要创建角色并分配给用户&#xff0c;你需要运行Jenkins服务器才能操作接下来的工作。安装Jenkins参考文章在Jenkins中管理用户和角色默认情况下&#xff0c;当你在Jenkins中创建用户时&#xff0c;它几乎可…

还在用Excel做数据分析?两大方法5分钟完成别人一天的工作

全世界只有3.14 % 的人关注了青少年数学之旅我是个只会用Excel的数据分析工作者。有一天&#xff0c;我和同事大鹏约好晚上一起喝酒&#xff0c;离下班还有5分钟&#xff0c;老板突然Q我&#xff1a;我怀着忐忑的心情打开了一个神秘的压缩包&#xff1a;912个CSV表格&#xff0…

poj1033

模拟题&#xff0c;注意不需要移动的情况要特殊输出 #include <cstdio> #include <cstring> #include <cstdlib> using namespace std;#define MAX_CLUSTER_NUM 10005int cluster_num, file_num; int link[MAX_CLUSTER_NUM]; bool is_free[MAX_CLUSTER_NUM];…

ABP Framework V4.4 RC 新增功能介绍

新增功能概述•启动模板删除 EntityFrameworkCore.DbMigrations 项目•CMS-Kit 模块新增 动态菜单管理 功能•对象扩展管理系统新增两个扩展方法&#xff1a;MapEfCoreDbContext MapEfCoreEntity&#xff0c;分别对 数据上下文和实体 自定义映射配置。•文本模板系统新增 Razor…