Home Credit Default Risk(2) —初步探索

本文深入探讨Home Credit Default Risk问题,通过加载和预览数据,分析了不同目标变量的风险分布,检查了缺失值情况,并讨论了非数值特征的编码策略,包括LabelEncoder和one-hot Encoder的应用及其可能带来的维数问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  上篇中已经给出了application_{train|test}.csv数据表字段的基本含义,本篇对其进行基本的数据分析,包活异常数据处理,特征变换等,最后给出仅考虑此数据文件,应用logistic回归和random forest两种模型分别训练模型的方式。

加载数据并初步预览

# 导入需要的依赖包
import os
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
import numpy as np
from sklearn.preprocessing import LabelEncoder, MinMaxScaler, Imputer
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

dir_path = 'XXX/dataset'#替换为数据文件所在目录
print(os.listdir(dir_path))

结果如下:
[‘application_test.csv’, ‘application_train.csv’, ‘bureau.csv’, ‘bureau_balance.csv’, ‘credit_card_balance.csv’, ‘HomeCredit_columns_description.csv’, ‘installments_payments.csv’, ‘POS_CASH_balance.csv’, ‘previous_application.csv’, ‘sample_submission.csv’]

# 加载训练数据和测试数据
application_train_file = dir_path + '/application_train.csv'
application_test_file = dir_path + '/application_test.csv'
app_train = pd.read_csv(application_train_file)
app_test = pd.read_csv(application_test_file)
# 初步预览
print('Training data shape: ', app_train.shape)
app_train.head()

结果如下:
Training data shape: (307511, 122)

SK_ID_CURR TARGET NAME_CONTRACT_TYPE CODE_GENDER FLAG_OWN_CAR FLAG_OWN_REALTY CNT_CHILDREN AMT_INCOME_TOTAL AMT_CREDIT AMT_ANNUITY ... FLAG_DOCUMENT_18 FLAG_DOCUMENT_19 FLAG_DOCUMENT_20 FLAG_DOCUMENT_21 AMT_REQ_CREDIT_BUREAU_HOUR AMT_REQ_CREDIT_BUREAU_DAY AMT_REQ_CREDIT_BUREAU_WEEK AMT_REQ_CREDIT_BUREAU_MON AMT_REQ_CREDIT_BUREAU_QRT AMT_REQ_CREDIT_BUREAU_YEAR
0 100002 1 Cash loans M N Y 0 202500.0 406597.5 24700.5 ... 0 0 0 0 0.0 0.0 0.0 0.0 0.0 1.0
1 100003 0 Cash loans F N N 0 270000.0 1293502.5 35698.5 ... 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
2 100004 0 Revolving loans M Y Y 0 67500.0 135000.0 6750.0 ... 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
3 100006 0 Cash loans F N Y 0 135000.0 312682.5 29686.5 ... 0 0 0 0 NaN NaN NaN NaN NaN NaN
4 100007 0 Cash loans M N Y 0 121500.0 513000.0 21865.5 ... 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0

5 rows × 122 columns

1.根据TARGET在不同分类下的数量绘制整体风险直方图
# 1.根据TARGET在不同分类下的数量绘制整体风险直方图
app_train.TARGET.value_counts().plot(kind='bar')
plt.title("是否有偿还风险(1-有风险,0- 无风险)")
plt.ylabel("人数")
plt.show()

在这里插入图片描述

2.检查缺失数据整体情况(对于缺失值的处理可以舍弃,补中位数,补均值,RF预测,XGBoost预测等)
# 2.检查缺失数据整体情况
def examine_missing_data(df):
    missing = df.isnull().sum().sort_values(ascending=False)
    missing_percent = (100 * df.isnull().sum() / len(df)).sort_values(ascending=False)
    missing_table = pd.concat([missing, missing_percent], axis=1)
    missing_table = missing_table.rename(columns={
   
   0: '缺失值数量', 1: '缺失值占比(%)'})
    missing_table = missing_table[missing_table.iloc[:, 1] != 0]
    print("数据总共有%d个特征,其中存在缺失值的特征数为%d" % (df.shape[1], missing_table.shape[0]))
    return missing_table


missing_values = examine_missing_data(app_train)
missing_values.head(10)

结果如下:

数据总共有122个特征,其中存在缺失值的特征数为67

缺失值数量 缺失值占比(%)
### 处理 Home Credit Default Risk 数据集中的 `application_train` 和 `application_test` 在机器学习项目中,处理像 Home Credit Default Risk 这样的数据集通常涉及多个步骤。以下是关于如何加载、预处理以及导出模型来处理这些文件的具体方法。 #### 加载数据 首先需要使用 Pandas 来读取 CSV 文件: ```python import pandas as pd train_data = pd.read_csv('application_train.csv') test_data = pd.read_csv('application_test.csv') ``` 这一步会将训练和测试数据分别存储到两个 DataFrame 中[^1]。 #### 数据探索与清洗 对于任何机器学习任务来说,理解并清理数据是非常重要的。可以先查看一些基本信息: ```python print(train_data.info()) print(test_data.describe()) ``` 接着识别缺失值,并决定填充策略或者删除含有过多缺失值得列/行: ```python missing_values = train_data.isnull().sum() / len(train_data) high_missing_columns = missing_values[missing_values > 0.6].index.tolist() train_data.drop(columns=high_missing_columns, inplace=True) for col in test_data.columns: if test_data[col].isnull().mean() > 0.6: test_data.drop(col, axis=1, inplace=True) ``` 这里我们移除了超过60%的数据为空白的特征[^2]。 #### 特征工程 为了提高模型性能,可能还需要创建新的特性或转换现有的一些类别型变量成为数值形式: ```python from sklearn.preprocessing import LabelEncoder categorical_features = [col for col in train_data.columns if train_data[col].dtype == 'object'] label_encoder = LabelEncoder() for feature in categorical_features: if train_data[feature].nunique(dropna=False) < 2: continue label_encoder.fit(list(train_data[feature].values.astype(str)) + list(test_data[feature].values.astype(str))) train_data[feature] = label_encoder.transform(list(train_data[feature].values.astype(str))) test_data[feature] = label_encoder.transform(list(test_data[feature].values.astype(str))) ``` 上述代码片段展示了怎样利用标签编码(Label Encoding)技术把分类属性转化为整数表示[^3]。 #### 构建与评估模型 假设采用XGBoost作为预测工具,则可按如下方式操作: ```python from xgboost import XGBClassifier from sklearn.model_selection import KFold, cross_val_score target_variable = 'TARGET' features = [f for f in train_data.columns if f != target_variable] model = XGBClassifier(n_estimators=1000, max_depth=7, eta=0.1, subsample=0.9, colsample_bytree=0.8) kfolds = KFold(n_splits=5, shuffle=True, random_state=42) scores = cross_val_score(model, train_data[features], train_data[target_variable], cv=kfolds, scoring='roc_auc') average_score = scores.mean() std_deviation = scores.std() ``` 通过交叉验证计算AUC分数以衡量模型表现[^4]。 #### 导出最终模型 一旦完成调参并且满意于当前版本的表现之后就可以保存下来供以后部署用途: ```python import joblib joblib.dump(model, 'home_credit_default_model.pkl') ``` 以上就是针对该特定竞赛所推荐的一套完整流程概述[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值