项目案例之决策树在保险行业的应用
项目案例之决策树在保险行业的应用
文章目录
- 项目案例之决策树在保险行业的应用
- 业务背景——保险行业
- 业务环境
- 发展现状
- 发展趋势
- 衡量指标
- 业务目标
- 数据分析
- 分析流程框架
- 导入数据
- 数据探索性分析
- 描述性统计
- 缺失值处理
- 处理分类型变量
- 建模
- 验证输出结果
- 画出决策树
- 输出规则
- 业务应用
前提知识基础:
- 信息熵
- 信息增益
- 信息增益比
- 决策树基本介绍
- 决策树原理介绍
- ID3算法
- C4.5算法
- CART树
- 决策树应用基础
- 分类模型的性能度量
- 混淆矩阵
- ROC曲线
- AUC面积
- 模型选择
- 交叉验证
- 超参数调参
- 对于保险行业的认知
业务背景——保险行业
业务环境
- 宏观
中国是世界第二大保险市场,但在保险密度上与世界平均水平仍有明显差距
- 业界
保险行业2018年保费规模为38万亿,同比增长不足4%,过去“短平快“的发展模式已经不能适应新时代的行业发展需求,行业及用户长期存在难以解决的痛点,限制了行业发展发展环境。
- 社会
互联网经济的发展,为保险行业带来了增量市场,同时随着网民规模的扩大,用户的行为习惯已发生转变,这些都需要互联网的方式进行触达。
保险科技:当前沿科技不断应用于保险行业,互联网保险的概念将会与保险科技概念高度融合。
(资料来源: 艾瑞研究院自主研究及绘制C2019.6 iResearch www.iresearch.com.cn)
**中国保险市场持续高速增长。**根据银保监会数据,2011~2018年,全国保费收入从1.4万亿增长至3.8万亿,年复合增长率17.2%。2014年,中国保费收入突破2万亿,成为全球仅次于美国、日本的第三大新兴保险市场市场;2016年,中国整体保费收入突破3万亿,超过日本,成为全球第二大保险市场;2019年,中国保费收入有望突破4万亿。
发展现状
- 概览
受保险行业结构转型时期影响,互联网保险整体发展受阻,2018年行业保费收入为1889亿元,
较去年基本持平,不同险种发展呈现分化格局,其中健康险增长迅猛,2018年同比增长108%,主要
由短期医疗险驱动
- 格局
供给端专业互联网保险公司增长迅速,但过高的固定成本及渠道费用使得其盈利问题凸显,加
发展现状强自营渠道建设及科技输出是未来的破局方法,渠道端形成第三方平台为主,官网为辅的格局,第三
方平台逐渐发展出B2C、B2A、B2B2C等多种创新业务模式。
- 模式
互联网保险不仅仅局限于渠道创新,其核心优势同样体现在产品设计的创新和服务体验的提升
竟合格局:随着入局企业増增多,流量争夺更加激烈,最终保险公司与第三方平台深度合作将成为常态
发展趋势
发展趋势
- 竞合格局
随着入局企业增多,流量争夺更加激烈,最终保险公司与第三方平台深度合作将成为常态。
发展趋势
- 保险科技
当前沿科技不断应用于保险行业,互联网保险的概念将会与保险科技概念高度融合。
衡量指标
图片来源:《聚焦客户体验,数据驱动重塑保险行业》白皮书
业务目标
针对保险公司的健康险产品的用户,制作用户画像,然后进行精准保险营销。
数据分析
分析流程框架
本次案例的数据数据的字段含义如下
导入数据
(特殊原因,无法分享数据)
import pandas as pd
df = pd.read_csv(r'data.csv', sep=',', header = 0)
df.shape
(5000000, 50)
在这里我们可以看到我们的数据是有5000000条记录和19个特征
数据探索性分析
描述性统计
在我们正式建模型之前,我们需要对我们的数据进行描述性统计,这样我们就能知道整个数据的大致分布是什么样的,做到心里有数,然后能够数据大致的全貌有一定的了解。
type_0=df.dtypes
type_0.to_excel( 'original.xlsx')#将 KBM_INDV_ID 的int64转化为object
df['KBM_INDV_ID']=df['KBM_INDV_ID'].astype('object')describe=df.describe().T
type(describe)
describe.to_excel( '../output/describe_var.xlsx')# 引入画图模块
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 为分类型变量:所处区的大小,创建直方图plt.subplot(1, 2, 1)
sns.countplot(x='N2NCY', hue='resp_flag', data=df); #设置 x,y 以及颜色控制的变量,以及画图的数据
plt.xlabel('N2NCY');
plt.ylabel('Frequency');#了解因变量的分布
Resp_count=df['KBM_INDV_ID'].groupby(df['resp_flag']).count()
print(Resp_count)
str(round(Resp_count[1]/len(df)*100,2))+str('%') #查看购买了
从这个图片我们可以看到,买了保险的用户和未买保险的人所处县的情况。
缺失值处理
我们需要对数据进行缺失值检查,先对每一条记录查看是否有缺失,然后查看一下每一个特征是否有缺失,然后进行相应的缺失值处理。
Next Step:
# 检查是否有缺失的行
df.shape[0]-df.dropna().shape[0] #### 检查是否有缺失的列
len(df.columns)-df.dropna(axis =1).shape[1] #626NA=df.isnull().sum()
print('orginal NA=',NA)
NA=NA.reset_index()NA.columns=['Var','NA_count']NA=NA[NA.NA_count>0].reset_index(drop=True)
print(NA)
NA.to_excel( '../output/var_incl_na.xls',index=False)####处理缺失值
var_char_na=[]
# 我们对连续型数据进行中位数填补,然后对离散型数据进行特殊值填补,我们这里利用的是N
for i in range(len(NA)):if NA['NA_count'][i]/len(df)>0.75 or len(df[NA['Var'][i]].unique())<=2 :del df[NA['Var'][i]]elif df[NA['Var'][i]].dtypes!="object":# 填充缺失值-中位数for_na_value = df[NA['Var'][i]].quantile(0.5)# for_na_valuedf[NA['Var'][i]] = df[NA['Var'][i]].fillna(for_na_value)elif df[NA['Var'][i]].dtypes=="object" and len(df[NA['Var'][i]].unique())<=3:df[NA['Var'][i]] = df[NA['Var'][i]].fillna('N', inplace=True)else:var_char_na.append(NA['Var'][i])
var_char_na
处理分类型变量
#Drop Variables that are not necessary
drop_list=['STATE_NAME','KBM_INDV_ID']for var in drop_list:del df[var]## 检查数据集中数值型变量和字符型变量
var_num = []
var_char_uniq2 = []
var_char_mul= []
for var in list(df):if df[var].dtypes=="object" and len(df[var].unique())>2:var_char_mul.append(var)elif df[var].dtypes!="object" :var_num.append(var)else:var_char_uniq2.append(var)##处理多值型字符变量
for var in var_char_mul:temp= pd.get_dummies(df[var], prefix=var, prefix_sep='_')print(temp)for var2 in list(temp):if var2 in '_nan':del temp[var2]del df[var]df = pd.concat([df,temp], axis=1)
del temp
len(df.columns) ##88
df.head(5)
df.to_excel( '../output/data.xls',index=False)##处理二值型的字符变量import numpy as np
from sklearn.preprocessing import LabelEncoder
def integer_encode(var):values = np.array(df[var])label_encoder = LabelEncoder()df[var] = label_encoder.fit_transform(values)for var in var_char_uniq2:if len(df[var].unique())<2:del df[var]else: integer_encode(var)
建模
当我们发现,我们的数据中分类变量比较多,我们尝试采取决策树进行建模,
具体理由:我们做出来的模型需要指导业务人员进行使用,那么要求做出来的模型的可解释要高,而决策树模型的解释性就很强,那么业务人员理解起来就会很容易,那么之后进行应用就不用再专门进行对业务人员的培训,直接让他按照模型做出来的结果进行后续的业务,会提升效率。
# 引用sklearn 模块
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
#from sklearn import cross_validation, metrics
from sklearn import metrics
from sklearn.model_selection import cross_val_score
#from sklearn.grid_search import GridSearchCV
from sklearn.model_selection import GridSearchCV
import matplotlib.pylab as plt
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 12, 4
##在模型样本内将数据集7:3分,70%用来建模,30%用来测试# 定义特征变量和目标变量
features= list(df.columns[1:])
X = df[features]
y = df['resp_flag']
# 将数据集7:3分,70%用来建模,30%用来测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)
clf = tree.DecisionTreeClassifier()param_test={'min_samples_leaf':list(range(1000,6000,100)),'min_samples_split':list(range(4000,6000,100))}
gsearch = GridSearchCV(estimator=clf,param_grid = param_test, scoring='roc_auc',n_jobs=1,iid=False, cv=5)
gsearch.fit(X_train,y_train)
#gsearch.grid_scores_, gsearch.best_params_, gsearch.best_score_
gsearch.cv_results_, gsearch.best_params_, gsearch.best_score_
验证输出结果
clf = tree.DecisionTreeClassifier(class_weight=None, criterion='gini',max_features=None,max_leaf_nodes=8,min_samples_leaf=2000,min_samples_split=5000,min_weight_fraction_leaf=0.0, splitter='best' )
results=modelfit(clf, X_train, y_train, X_test,y_test)
画出决策树
import os
import pydotplus
from IPython.display import Image
from sklearn.externals.six import StringIO
#os.environ["PATH"] += os.pathsep + 'C:/Users/yacao/Downloads/graphviz-2.38/release/bin'dot_data = StringIO()
tree.export_graphviz(clf, #决策树分类器out_file = dot_data)
输出规则
if (df['meda'][i] <= 56.5 ):if (df['age'][i] <= 70.5 ):if (df['c210hva'][i] <= 312.5 ):if (df['ilor'][i] <= 10.5 ):temp=11segment.append(temp)else:temp=12segment.append(temp)else:temp=8segment.append(temp)else:if (df['tins'][i] <= 5.5 ):temp=9segment.append(temp)else:temp=10segment.append(temp)else:if (df['pdpe'][i] <= 46.5 ):if (df['MOBPLUS_M'][i] <= 0.5 ):temp=13segment.append(temp)else:temp=14segment.append(temp)else:temp=4segment.append(temp)
业务应用
我们来看一下购买比例最高的两类客户的特征是什么:
第一类:
- 处于医疗险覆盖率比例较低区域
- 居住年限小于7年
- 65-72岁群体
那么我们对业务人员进行建议的时候就是,建议他们在医疗险覆盖率比例较低的区域进行宣传推广,然后重点关注那些刚到该区域且年龄65岁以上的老人,向这些人群进行保险营销,成功率应该会更高。
第二类:
- 处于医疗险覆盖率比例较低区域
- 居住年限大于7年
- 居住房屋价值较高
这一类人群,是区域内常住的高端小区的用户。这些人群也同样是我们需要重点进行保险营销的对象。
除此之外,我们还可以做什么呢?
了解客户需求
我们需要了解客户的需求,并根据客户的需求举行保险营销。PIOS数据:向客户推荐产品,并利用个人的数据(个人特征)向客户推荐保险产品。旅行者:根据他们自己的数据(家庭数据),生活阶段信息推荐的是财务保险、人寿保险、保险、旧保险和用户教育保险。外部数据、资产保险和人寿保险都提供给高层人士,利用外部数据,我们可以改进保险产品的管理,增加投资的收益和收益。
开发新的保险产品
72岁群体
那么我们对业务人员进行建议的时候就是,建议他们在医疗险覆盖率比例较低的区域进行宣传推广,然后重点关注那些刚到该区域且年龄65岁以上的老人,向这些人群进行保险营销,成功率应该会更高。
第二类:
- 处于医疗险覆盖率比例较低区域
- 居住年限大于7年
- 居住房屋价值较高
这一类人群,是区域内常住的高端小区的用户。这些人群也同样是我们需要重点进行保险营销的对象。
除此之外,我们还可以做什么呢?
了解客户需求
我们需要了解客户的需求,并根据客户的需求举行保险营销。PIOS数据:向客户推荐产品,并利用个人的数据(个人特征)向客户推荐保险产品。旅行者:根据他们自己的数据(家庭数据),生活阶段信息推荐的是财务保险、人寿保险、保险、旧保险和用户教育保险。外部数据、资产保险和人寿保险都提供给高层人士,利用外部数据,我们可以改进保险产品的管理,增加投资的收益和收益。
开发新的保险产品
保险公司还应协助外部渠道开发适合不同商业环境的保险产品,例如新的保险类型,如飞行延误保险、旅行时间保险和电话盗窃保险。目的是提供其他保险产品,而不是从这些保险中受益,而是寻找潜在的客户。此外,保险公司将通过数据分析与客户联系,了解客户。外部因素将降低保险的营销成本,并直接提高投资回报率。
项目案例之决策树在保险行业的应用相关推荐
- 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
来自公众号:五分钟学算法 今天分享四个代码量很少,但很牛逼很经典的算法或项目案例. 1.no code 项目地址: https://github.com/kelseyhightower/nocode ...
- 大数据项目开发案例_大数据分析技术——项目案例2(房价数据分析上)
1 二手房房价分析简述 在现在这个社会,房子成为绝大多数人心中难以抹去的痛:不仅在于它的价格高不可攀,也在于我们多少有些囊中羞涩.若不是得益于亲朋好友相助.父母相帮,估计依靠着我们这点微薄的薪水去购房 ...
- python小项目案例-拯救Python新手的几个项目实战
原标题:拯救Python新手的几个项目实战 Python 做小游戏 实例一:24点游戏 项目名称:经典趣味24点游戏程序设计(python) 实例二:五子棋游戏 python学习关注我们企鹅qun: ...
- python项目开发实战网盘-《Python项目案例开发从入门到实战》PDF版百度网盘
「教程分享:Python项目开发从入门到实列」 本书例子具有实用性,20个不同类型的完整列子,600分钟高品质配套教学视频,完整的源码和教学课件,让你对枯燥的Python语言学习充满乐趣. 编辑推荐 ...
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...
- 近期北京动点软件发现XXX公司盗用我公司WPF项目案例
近期北京动点软件发现XXX公司盗用我公司WPF企业级项目案例! 请尽快停止侵权行为,我方将视情况启动法律程序! 转载于:https://blog.51cto.com/dotfun/1604417
- Interview:算法岗位面试—11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知、计算机视觉算法的理解、目标检测相关项目案例
ML岗位面试:11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知.计算机视觉算法的理解.目标检测相关项目案例 Interview:算法岗位面试-11.15下午上海某航天***公司(国企 ...
- opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...
" 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...
- Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
1.disconf介绍 Distributed Configuration Management Platform(分布式配置管理平台)专注于各种 分布式系统配置管理 的通用组件 / 通用平台,提供统 ...
- 用两个使用Caffe的小项目案例演示迁移学习的实用性
近年来随着深度学习的急剧升温,不管是学术界还是工业界都把大量资源投入了深度学习.作为一个普通的工程师或者程序员,也想对机器学习,尤其是深度学习有所了解,应当如何入手?最好的回答当然是"get ...
最新文章
- ASP.NET 缓存与SQL Server结合使用
- Ubuntu安装apt出现报错如何操作(简单记录)
- python as_Python with as的用法
- C语言高级编程:指针变量p指向的地址与p自身的地址
- 利用python提取网站曲线图数据
- pmp知识点详解-项目大牛整理_PMP核心知识点—第四章:项目整合管理(一)
- VC++ 多线程同步实例
- olap 多维分析_将关系数据库与OLAP多维数据集链接
- 以太网接入设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 低学历、文科出身,我如何从月薪不到 3000 逆袭为大厂高薪程序员?
- 程序员面试 IT 公司,这些地方你要注意!
- InfoGAN详细介绍及特征解耦图像生成
- WLAN/WIFI信道列表 2020-11-23
- 马云请不动郭盛华的原因?原来背后还有更神秘的人物
- 华夏相机开发/臻识相机开发/车牌识别器开发对接使用总结
- 必修三计算机选修三知识点总结,高二必修三物理知识点总结
- C语言,数组的类型,大小
- Java8 - Streams flatMap()
- 照片拼图什么软件好?试试Design Your Collage mac
- 杰理AP之PO声处理【篇】
热门文章
- 自动驾驶最全基础知识、课程、论文、数据集、开源软件等资源整理分享
- 计算机工作键是开声音的,笔记本电脑原来加声音要按两个键,现在只按一个键了,怎么调呢?...
- Python实用技巧 使用pillow库批量修改文件夹下所有PNG图片透明度
- 南大小百合 计算机,是我从南大小百合里搜集的。已经编辑过了
- 利用WireShark下载视频网站的流媒体视频
- 笔记本电脑分区后怎么恢复?3个方法
- 单号自动识别查询 支持一键复制导出
- 通过文件流转加密压缩文件并下载
- 支付宝营销策略效果分析 A/Btest
- 初一计算机知识点都教啥,10分钟试讲几个知识点?初中信息技术教师招聘面试试讲教案真题:补间动画...