赞
踩
相关代码下载:SPSS保险数据分析.rar_运用spss对银行客户进行分类-互联网文档类资源
数据分析完整流程:保险行业数据分析
宏观
中国是世界第二大保险市场,但在保险密度上与世界平均水平仍有明显差距。
业界
保险行业2018年保费规模为38万亿,同比增长不足4%,过去“短平快“的发展模式已经不能适应新 时代的行业发展需求,行业及用户长期存在难以解决的痛点,限制了行业发展。
社会
互联网经济的发展,为保险行业带来了增量市场,同时随着网民规模的扩大,用户的行为习惯已发生转变,这些都需要互联网的方式进行触达。
保险科技:当前沿科技不断应用于保险行业,互联网保险的概念将会与保险科技概念高度融合。
中国保险市场持续高速增长。 根据保监会数据, 2011~2018年,全国保费收入从1.4万亿增长至3.8万亿,年复合增长率17.2%。 2014年,中国保费收入突破2万亿,成为全球仅次于美国、日本的第三大新兴保险市场市场; 2016年,中国整体保费收入突破3万亿,超过日本,成为全球第二大保险市场; 2019年,中国保费收⼊有望突破4万亿。
针对保险公司的健康险产品的用户,制作用户画像,然后进行精准保险营销。
美国某保险公司,和本公司合作多年。现在该公司有一款新的医疗险产品准备上市。
这一款新的医疗产品主要是针对65岁以上的人群推出的医疗附加险,销售渠道是直邮。
为保险公司某种健康险产品做用户画像,找出最具有购买倾向的人群以进行保险营销。
本次案例数据共有76个字段,字段繁多,在处理数据时,需要先将数据按照类别进行归类,方便理解查看。
- import numpy as np
- import pandas as pd
- import warnings
- warnings.filterwarnings('ignore')
- df=pd.read_csv(r'D:\liwork\a\data\ma_resp_data_temp.csv')
- pd.set_option('max_columns',100) #显示100列数据
- df.head()
- df.shape
- df.info()
- #将id转化为object
- df['KBM_INDV_ID']=df['KBM_INDV_ID'].astype('object')
- df.dtypes
- df.describe().T
- describe = df.describe().T
- describe.to_excel('output/describe_var.xlsx')
- #统计空值
- len(df.columns)
- #空值的列
- len(df.columns)-df.dropna(axis=1).shape[1]
- NA=df.isnull().sum() # 统计各个列空值的数量
- NA
- #重置索引
- NA=NA.reset_index()
- NA
- `#修改列名
- NA.columns=['Var','NA_count']
- NA``
- #过滤出有缺失的数据,过滤出大于0的数据
- NA=NA[NA.NA_count>0].reset_index(drop=True)
- NA
- #统计空值比例
- NA.NA_count/df.shape[0]
- import matplotlib.pyplot as plt
- import seaborn as sns
-
- plt.style.use('seaborn')
-
- #支持中文输出
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.rcParams['axes.unicode_minus']=False
-
- # plt.rcParams['font.family']='Arial Unicode MS' # OS系统
- df.resp_flag.value_counts()
-
- plt.figure(figsize=(10,3))
- sns.countplot(y='resp_flag',data=df)
- plt.show()
-
- #比例关系
- df.resp_flag.sum()/df.resp_flag.shape[0]
- #直方图+密度曲线
- sns.distplot(df['age'],bins=20)
-
- df['age'].min() #查看年龄
- df['age'].max()
- x = np.random.randn(100)
- sns.kdeplot(x)
-
- #填充颜色
- sns.kdeplot(x,shade=True,color='y')
-
- sns.kdeplot(df.age[df.resp_flag==0],label='0',shade=True)
- sns.kdeplot(df.age[df.resp_flag==1],label='1',shade=True)
- plt.xlabel('Age')
- plt.ylabel('Density')
- #学历的分布
- plt.figure(figsize=(10,3))
- sns.countplot(y='c210mys',data=df)
- plt.show()
-
- sns.countplot(x='c210mys',hue='resp_flag',data=df)
sns.countplot(x='N2NCY',hue='resp_flag',data=df)
含空值的列,每一列的数据类型统计出来,并加在NA的表中
- temp=[]
- for i in NA.Var:
- temp.append(df[i].dtypes)
-
- NA['数据类型']=temp
-
- NA
- NA[NA.Var!='age']
-
- df.AASN.mode()[0]
-
- #用众数填充
- for i in NA[NA.Var!='age'].Var:
- df[i].fillna(df[i].mode()[0],inplace=True)
-
- #对年龄用均值进行填充
- df.age.fillna(df.age.mean(),inplace=True)
-
- #验证结果 全是0就代表都已填充完毕
- df.isnull().sum()
变量编码
- df.head()
-
- #删除ID
- del df['KBM_INDV_ID']
-
- #筛选object
- df_object=df.select_dtypes('object')
-
- df_object.shape
-
- from sklearn.preprocessing import OrdinalEncoder
-
- df_object=OrdinalEncoder().fit_transform(df_object)
- df_object
-
- #字符转数值
- for i in df.columns:
- if df[i].dtypes=='object':
- df[i]=OrdinalEncoder().fit_transform(df[[i]])
- df.head()
建模
- from sklearn import tree
- from sklearn.model_selection import train_test_split
-
- #切分数据集
- X=df.iloc[:,1:]
- y=df['resp_flag']
-
- Xtrain,Xtest,Ytrain,Ytest=train_test_split(X,y,test_size=0.3,random_state=420)
-
- #建模
- clf = tree.DecisionTreeClassifier().fit(Xtrain,Ytrain)
- clf.score(Xtest,Ytest)
模型优化
- from sklearn.model_selection import GridSearchCV
-
- #网格搜索
- param_grid={'max_depth':range(3,8),
- 'min_samples_leaf':range(1000,3000,100)}
- GR = GridSearchCV(tree.DecisionTreeClassifier(),param_grid,n_jobs=-1,cv=5)
-
- GR.fit(Xtrain,Ytrain)
-
- #求出tree.DecisionTreeClassifier里面参数的值
- GR.best_params_
-
- GR.best_score_
-
- clf=tree.DecisionTreeClassifier(max_depth=7,min_samples_leaf=1000).fit(Xtrain,Ytrain)
- clf.score(Xtest,Ytest)
画决策树
- features=list(df.columns[1:])
-
- import graphviz #要提前安装哦
-
- dot_data = tree.export_graphviz(clf,
- feature_names=features,
- class_names=['No Purchase','Purchase'],
- filled=True,
- rounded=True)
-
- graph = graphviz.Source(dot_data)
- graph
-
- #输出图片
- graph.render('model1')
我们来看一下购买比例最高的两类客户的特征是什么:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。