训练样本是100组客户基础信息,包括职业,年龄,性别,手机入网时长,信用卡额度5个变量,其中信用卡额度有空值。是否涉案是因变量,即模型需要预测的结果。请选择合适的变量,建立逻辑回归模型,预测新客户的风险情况。请提供样例文件,并提供python代码,需要输出模型的查准率
时间: 2023-06-15 18:08:08 浏览: 114
样例文件中包含了100组客户基础信息,其中信用卡额度有空值。建立逻辑回归模型来预测新客户的风险情况,需要对数据进行预处理,填补空值并进行特征选择。
样例文件:
| 职业 | 年龄 | 性别 | 手机入网时长 | 信用卡额度 | 是否涉案 |
| :----: | :----: | :----: | :------------: | :----------: | :------: |
| 1 | 26 | 0 | 12.5 | 2000 | 0 |
| 0 | 36 | 1 | 24.0 | 3000 | 0 |
| 1 | 42 | 0 | 18.0 | 4000 | 1 |
| 2 | 28 | 1 | 6.0 | NaN | 0 |
| 0 | 31 | 0 | 9.0 | 5000 | 1 |
| ... | ... | ... | ... | ... | ... |
其中,职业、性别和是否涉案是离散变量,需要进行独热编码;年龄、手机入网时长和信用卡额度是连续变量,需要进行归一化处理。
处理后的样例文件:
| 职业_0 | 职业_1 | 职业_2 | 年龄 | 性别_0 | 性别_1 | 手机入网时长 | 信用卡额度 | 是否涉案 |
| :------: | :------: | :------: | :---: | :------: | :------: | :------------: | :----------: | :------: |
| 0 | 1 | 0 | 0.125 | 1 | 0 | 0.25 | 0.125 | 0 |
| 1 | 0 | 0 | 0.400 | 0 | 1 | 0.50 | 0.250 | 0 |
| 0 | 1 | 0 | 0.600 | 1 | 0 | 0.375 | 0.375 | 1 |
| 0 | 0 | 1 | 0.200 | 0 | 1 | 0.125 | NaN | 0 |
| 1 | 0 | 0 | 0.300 | 1 | 0 | 0.200 | 0.500 | 1 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
代码实现如下:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score
# 读取样例文件
data = pd.read_csv('data.csv')
# 划分特征和标签
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# 填补空值
imputer = SimpleImputer(strategy='mean')
X['信用卡额度'] = imputer.fit_transform(X[['信用卡额度']])
# 特征选择、处理
scaler = MinMaxScaler()
X[['年龄', '手机入网时长', '信用卡额度']] = scaler.fit_transform(X[['年龄', '手机入网时长', '信用卡额度']])
encoder = OneHotEncoder()
new_cols = encoder.fit_transform(X[['职业', '性别']]).toarray()
new_cols = pd.DataFrame(new_cols, columns=['职业_0', '职业_1', '职业_2', '性别_0', '性别_1'])
X = pd.concat([X, new_cols], axis=1)
X.drop(['职业', '性别'], axis=1, inplace=True)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
# 输出查准率
precision = precision_score(y_test, y_pred)
print('查准率为:', precision)
```
阅读全文