训练样本是100组客户基础信息,包括职业,年龄,性别,手机入网时长,信用卡额度5个变量, 职业包含,房地产服务人员,工程技术人员,企事业单位负责人,有空值。 年龄包含,从18岁到60岁,有空值。 性别包含,M和F。 手机入网时长包含,半年至一年,二至六个月,两年至三年,三年以上,一个月以内,一年至两年,一至两个月。 信用卡额度包含,0-6K,6K-10K,10K-20K,20K-30K,30K-50K,50K以上,有空值。 是否涉案是因变量,1代表是,0代表否。即模型需要预测的结果。 请选择合适的变量,建立逻辑回归模型,将数据集拆分为训练集和测试集,预测新客户的风险情况。 提交python代码,需要输出模型的KS
时间: 2023-06-17 09:02:49 浏览: 91
为了建立逻辑回归模型,我们需要对数据进行预处理,包括空值填充、编码等操作。
首先,我们可以将职业和手机入网时长两个变量进行独热编码,将年龄和信用卡额度进行分箱处理。对于空值,可以采用均值填充的方法。
代码如下:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve, confusion_matrix, accuracy_score, f1_score
# 读取数据
data = pd.read_csv('data.csv')
# 对职业和手机入网时长进行独热编码
data = pd.get_dummies(data, columns=['职业', '手机入网时长'])
# 对年龄和信用卡额度进行分箱处理
data['年龄'] = pd.cut(data['年龄'], bins=[0, 18, 30, 40, 50, 60], labels=['18岁以下', '18-30岁', '30-40岁', '40-50岁', '50-60岁'])
data['信用卡额度'] = pd.cut(data['信用卡额度'], bins=[-1, 0, 6000, 10000, 20000, 30000, 50000, np.inf], labels=['0', '0-6K', '6K-10K', '10K-20K', '20K-30K', '30K-50K', '50K以上'])
# 对空值进行均值填充
data.fillna(data.mean(), inplace=True)
# 将是否涉案转换为0和1
data['是否涉案'] = data['是否涉案'].map({'否': 0, '是': 1})
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.drop(columns=['是否涉案']), data['是否涉案'], test_size=0.3, random_state=42)
# 建立逻辑回归模型
model = LogisticRegression(random_state=42, max_iter=1000)
model.fit(X_train, y_train)
# 预测测试集结果
y_pred = model.predict(X_test)
# 计算模型的KS值
fpr, tpr, thresholds = roc_curve(y_test, model.predict_proba(X_test)[:,1])
ks = max(tpr-fpr)
# 输出模型的KS值
print('模型的KS值为:', ks)
```
其中,我们使用了sklearn库中的LogisticRegression模型建立逻辑回归模型,并使用train_test_split函数将数据集拆分为训练集和测试集。在预测测试集结果时,我们使用了predict函数,计算模型的KS值时,我们使用了roc_curve函数计算ROC曲线,并找到最大的tpr-fpr值即为KS值。
需要注意的是,模型的KS值越大越好,一般认为KS值大于0.2时,模型的预测效果比较好。
阅读全文