项目案例之决策树在保险行业的应用

文章目录

  • 项目案例之决策树在保险行业的应用
  • 业务背景——保险行业
    • 业务环境
    • 发展现状
    • 发展趋势
    • 衡量指标
    • 业务目标
  • 数据分析
    • 分析流程框架
    • 导入数据
    • 数据探索性分析
      • 描述性统计
      • 缺失值处理
      • 处理分类型变量
    • 建模
    • 验证输出结果
    • 画出决策树
    • 输出规则
  • 业务应用

前提知识基础:

  1. 信息熵
  2. 信息增益
  3. 信息增益比
  4. 决策树基本介绍
  5. 决策树原理介绍
    1. ID3算法
    2. C4.5算法
    3. CART树
  6. 决策树应用基础
  7. 分类模型的性能度量
    1. 混淆矩阵
    2. ROC曲线
    3. AUC面积
  8. 模型选择
    1. 交叉验证
    2. 超参数调参
  9. 对于保险行业的认知

业务背景——保险行业

业务环境

  • 宏观

中国是世界第二大保险市场,但在保险密度上与世界平均水平仍有明显差距

  • 业界

保险行业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. 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?

    来自公众号:五分钟学算法 今天分享四个代码量很少,但很牛逼很经典的算法或项目案例. 1.no code 项目地址: https://github.com/kelseyhightower/nocode ...

  2. 大数据项目开发案例_大数据分析技术——项目案例2(房价数据分析上)

    1 二手房房价分析简述 在现在这个社会,房子成为绝大多数人心中难以抹去的痛:不仅在于它的价格高不可攀,也在于我们多少有些囊中羞涩.若不是得益于亲朋好友相助.父母相帮,估计依靠着我们这点微薄的薪水去购房 ...

  3. python小项目案例-拯救Python新手的几个项目实战

    原标题:拯救Python新手的几个项目实战 Python 做小游戏 实例一:24点游戏 项目名称:经典趣味24点游戏程序设计(python) 实例二:五子棋游戏 python学习关注我们企鹅qun: ...

  4. python项目开发实战网盘-《Python项目案例开发从入门到实战》PDF版百度网盘

    「教程分享:Python项目开发从入门到实列」 本书例子具有实用性,20个不同类型的完整列子,600分钟高品质配套教学视频,完整的源码和教学课件,让你对枯燥的Python语言学习充满乐趣. 编辑推荐 ...

  5. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...

  6. 近期北京动点软件发现XXX公司盗用我公司WPF项目案例

    近期北京动点软件发现XXX公司盗用我公司WPF企业级项目案例! 请尽快停止侵权行为,我方将视情况启动法律程序! 转载于:https://blog.51cto.com/dotfun/1604417

  7. Interview:算法岗位面试—11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知、计算机视觉算法的理解、目标检测相关项目案例

    ML岗位面试:11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知.计算机视觉算法的理解.目标检测相关项目案例 Interview:算法岗位面试-11.15下午上海某航天***公司(国企 ...

  8. opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...

    " 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...

  9. Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

    1.disconf介绍 Distributed Configuration Management Platform(分布式配置管理平台)专注于各种 分布式系统配置管理 的通用组件 / 通用平台,提供统 ...

  10. 用两个使用Caffe的小项目案例演示迁移学习的实用性

    近年来随着深度学习的急剧升温,不管是学术界还是工业界都把大量资源投入了深度学习.作为一个普通的工程师或者程序员,也想对机器学习,尤其是深度学习有所了解,应当如何入手?最好的回答当然是"get ...

最新文章

  1. ASP.NET 缓存与SQL Server结合使用
  2. Ubuntu安装apt出现报错如何操作(简单记录)
  3. python as_Python with as的用法
  4. C语言高级编程:指针变量p指向的地址与p自身的地址
  5. 利用python提取网站曲线图数据
  6. pmp知识点详解-项目大牛整理_PMP核心知识点—第四章:项目整合管理(一)
  7. VC++ 多线程同步实例
  8. olap 多维分析_将关系数据库与OLAP多维数据集链接
  9. 以太网接入设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. 低学历、文科出身,我如何从月薪不到 3000 逆袭为大厂高薪程序员?
  11. 程序员面试 IT 公司,这些地方你要注意!
  12. InfoGAN详细介绍及特征解耦图像生成
  13. WLAN/WIFI信道列表 2020-11-23
  14. 马云请不动郭盛华的原因?原来背后还有更神秘的人物
  15. 华夏相机开发/臻识相机开发/车牌识别器开发对接使用总结
  16. 必修三计算机选修三知识点总结,高二必修三物理知识点总结
  17. C语言,数组的类型,大小
  18. Java8 - Streams flatMap()
  19. 照片拼图什么软件好?试试Design Your Collage mac
  20. 杰理AP之PO声处理【篇】

热门文章

  1. 自动驾驶最全基础知识、课程、论文、数据集、开源软件等资源整理分享
  2. 计算机工作键是开声音的,笔记本电脑原来加声音要按两个键,现在只按一个键了,怎么调呢?...
  3. Python实用技巧 使用pillow库批量修改文件夹下所有PNG图片透明度
  4. 南大小百合 计算机,是我从南大小百合里搜集的。已经编辑过了
  5. 利用WireShark下载视频网站的流媒体视频
  6. 笔记本电脑分区后怎么恢复?3个方法
  7. 单号自动识别查询 支持一键复制导出
  8. 通过文件流转加密压缩文件并下载
  9. 支付宝营销策略效果分析 A/Btest
  10. 初一计算机知识点都教啥,10分钟试讲几个知识点?初中信息技术教师招聘面试试讲教案真题:补间动画...