保险反欺诈预测

目录

赛题背景

赛题任务

 一,利用import pandas as pd 来进行对train.csv和test.svc的数据进行加载入

 1.2,读取另外一数据

 二,进行合并train, test

 三,数据探索

 3.1,设置唯一值个数

 四,单独看某个字段

4.1, 查看最大日期,最小日期

4.2,  转换为date_diff

4.3,去掉原始日期字段 policy_bind_date incident_date

 五,设置标签编码

5.1, 数据集切分

5.2, 模型训练

5.3,AUC评测: 以proba进行提交,结果会更好

 5.4计算出25.8%

5.5,在read_csv中设置保存路径然后提交结果。

总结:



赛题背景

赛题以保险风控为背景,保险是重要的金融体系,对社会发展,民生保障起到重要作用。保险欺诈近些年层出不穷,在某些险种上保险欺诈的金额已经占到了理赔金额的20%甚至更多。对保险欺诈的识别成为保险行业中的关键应用场景。

赛题任务

数据集提供了之前客户索赔的车险数据,希望你能开发模型帮助公司预测哪些索赔是欺诈行为
To DO:预测用户的车险是否为欺诈行为。

天池项目链接:【教学赛】金融数据分析赛题2:保险反欺诈预测_学习赛_天池大赛-阿里云天池 (aliyun.com)

 一,利用import pandas as pd 来进行对train.csv和test.svc的数据进行加载入

import pandas as pd
train = pd.read_csv('./train.csv')
train

运行结果:

 1.2,读取另外一数据

test = pd.read_csv('./test.csv')
test

 运行结果:

 二,进行合并train, test

data = pd.concat([train, test], axis=0)
data

运行结果:

data.index = range(len(data))
data

 三,数据探索

data.isnull().sum()

运行结果:

 3.1,设置唯一值个数

for col in data.columns:
    print(col, data[col].nunique())

运行结果:

cat_columns = data.select_dtypes(include='O').columns
cat_columns

column_name = []
unique_value = []
for col in cat_columns:
    #print(col, data[col].nunique())
    column_name.append(col)
    unique_value.append(data[col].nunique())

df = pd.DataFrame()
df['col_name'] = column_name
df['value'] = unique_value
df = df.sort_values('value', ascending=False)
df

 

data[cat_columns]

 四,单独看某个字段

data['property_damage'].value_counts()
data['property_damage'] = data['property_damage'].map({'NO': 0, 'YES': 1, '?': 2})
data['property_damage'].value_counts()

运行结果:

data['police_report_available'].value_counts()
data['police_report_available'] = data['police_report_available'].map({'NO': 0, 'YES': 1, '?': 2})
data['police_report_available'].value_counts()

 

4.1, 查看最大日期,最小日期

data['policy_bind_date'].min() # 1990-01-08
data['policy_bind_date'].max() # 2015-02-22

data['incident_date'].min() # 2015-01-01
data['incident_date'].max() # 2015-03-01

运行结果:

4.2,  转换为date_diff

base_date = data['policy_bind_date'].min()
data['policy_bind_date_diff'] = (data['policy_bind_date'] - base_date).dt.days
data['incident_date_diff'] = (data['incident_date'] - base_date).dt.days
data['incident_date_policy_bind_date_diff'] = data['incident_date_diff'] - data['policy_bind_date_diff']
data[['policy_bind_date', 'incident_date', 'policy_bind_date_diff', 'incident_date_diff', 'incident_date_policy_bind_date_diff']]

运行结果:

4.3,去掉原始日期字段 policy_bind_date incident_date

data.drop(['policy_bind_date', 'incident_date'], axis=1, inplace=True)
data

 运行结果:

data.drop(['policy_id'], axis=1, inplace=True)
data.columns

 

 五,设置标签编码

from sklearn.preprocessing import LabelEncoder
cat_columns = data.select_dtypes(include='O').columns
for col in cat_columns:
    le = LabelEncoder()
    data[col] = le.fit_transform(data[col])
data[cat_columns]

运行结果:

5.1, 数据集切分

train = data[data['fraud'].notnull()]
test = data[data['fraud'].isnull()]
import lightgbm as lgb
model_lgb = lgb.LGBMClassifier(
            num_leaves=2**5-1, reg_alpha=0.25, reg_lambda=0.25, objective='binary',
            max_depth=-1, learning_rate=0.005, min_child_samples=3, random_state=2022,
            n_estimators=2000, subsample=1, colsample_bytree=1,
        )

5.2, 模型训练

model_lgb.fit(train.drop(['fraud'], axis=1), train['fraud'])

5.3,AUC评测: 以proba进行提交,结果会更好

y_pred = model_lgb.predict_proba(test.drop(['fraud'], axis=1))
y_pred

运行结果:

 5.4计算出25.8%

train['fraud'].mean()

 运行结果:

y_pred[:, 1]

 运行结果:

5.5,在read_csv中设置保存路径然后提交结果。

result = pd.read_csv('./submission.csv')
result['fraud'] = y_pred[:, 1]
result.to_csv('./baseline.csv', index=False)

总结:

        把数据集切分为train,test这两个数据集。然后建立模型训练,model_lgb,AUC评测: 以proba进行提交,结果会更好插入AUC评测: 以proba进行提交,结果会更好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值