赛题背景
保险是重要的金融体系,对社会发展,民生保障起到重要作用。但是,保险欺诈近些年层出不穷,在某些险种上保险欺诈的金额已经占到了理赔金额的20%甚至更多。对保险欺诈的识别成为保险行业中的关键应用场景。
数据分析流程
本文将按照以下步骤进行数据分析:
目录
1.数据导入和预处理
首先,我们需要导入一些常用的库,并读取训练集和测试集的数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score, f1_score, confusion_matrix, classification_report
from xgboost import XGBClassifier
import shap
train = pd.read_csv("/train.csv")
test = pd.read_csv("/testA.csv")
然后,我们可以查看一下数据的基本信息,包括数据类型、缺失值、重复值、目标变量比例等:
# 查看数据类型和缺失值
print(train.info())
print(test.info())
# 输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 700 entries, 0 to 699
Data columns (total 39 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 policy_id 700 non-null int64
1 age 700 non-null int64
2 customer_months 700 non-null int64
3 policy_bind_date 700 non-null object
4 policy_state 700 non-null object
5 policy_csl 700 non-null object
6 policy_deductable 700 non-null int64
7 policy_annual_premium 700 non-null float64
8 umbrella_limit 700 non-null int64
9 insured_zip 700 non-null int64
10 insured_sex 700 non-null object
11 insured_education_level 700 non-null object
12 insured_occupation 700 non-null object
13 insured_hobbies 700 non-null object
14 insured_relationship 700 non-null object
15 capital-gains 700 non-null int64
16 capital-loss 700 non-null int64
17 incident_date 700 non-null object
...
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 300 entries, 0 to 299
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
...
None
# 查看重复值
print(train.duplicated().sum())
print(test.duplicated().sum())
# 输出
0
0
# 查看目标变量比例
print(train['fraud'].value_counts())
print(train['fraud'].value_counts(normalize=True))
# 输出
0 518
1 182
Name: fraud, dtype: int64
0 0.74
1 0.26
Name: fraud, dtype: float64
从上面的输出可以看出,数据集没有缺失值和重复值,数据类型主要是数值型和对象型,目标变量是二分类变量,其中正例(欺诈)占26%,负例(非欺诈)占74%,存在一定的类别不平衡。
2.数据探索性分析
数据探索性分析(EDA)是指对数据进行初步的观察和分析,以了解数据的基本特征和规律,为后续的特征工程和模型训练提供依据。我们可以从以下几个方面进行EDA:
数据分布和异常值
我们可以使用describe方法查看数值型变量的基本统计量,包括均值、标准差、最小值、最大值、四分位数等:
# 查看数值型变量的基本统计量
print(train.describe())
print(test.describe())
# 输出
policy_id age customer_months policy_deductable \
count