3. 数据加载与探索:使用 Pandas 读取贷后数据集

在构建贷后风控模型之前,第一步是正确加载数据并完成初步探索。本节将演示如何使用 Pandas 读取贷后数据集,并快速掌握数据的基本形态、字段类型及缺失情况,为后续的特征筛选奠定基础。

3.1 数据加载:从 CSV 到 DataFrame

贷后数据集通常以 CSV 格式存储,包含客户还款行为、逾期记录、催收动作等字段。使用 Pandas 的 read_csv() 函数加载数据,并指定常见参数以提升加载效率与解析准确性。

import pandas as pd

# 加载贷后数据集
df = pd.read_csv(
    'post_loan_data.csv',
    encoding='utf-8',
    parse_dates=['report_date', 'due_date', 'payment_date'],
    dtype={
        'customer_id': 'str',
        'loan_id': 'str',
        'overdue_days': 'int32',
        'principal_balance': 'float32'
    },
    low_memory=False
)

print('数据加载完成')
加载要点:
  • parse_dates:将日期字段解析为 datetime 类型,便于后续时间序列分析。
  • dtype:显式指定字段类型,减少内存占用并避免类型推断错误。
  • low_memory=False:确保混合类型字段被正确读取,避免数据截断。

3.2 数据形状:行数与列数

使用 df.shape 查看数据集的维度,快速了解样本量与特征数量。

rows, cols = df.shape
print(f'数据集包含 {rows} 条记录,{cols} 个字段')

贷后风控数据集通常具有以下特征:

指标 典型范围 说明
样本量 10万 ~ 500万 取决于业务规模与观察窗口
特征数 50 ~ 300 包含基础信息、行为特征、衍生特征
正样本占比 1% ~ 10% 逾期/坏账标签通常稀疏

3.3 数据类型概览

使用 df.dtypes 或 df.info() 查看每个字段的数据类型,识别数值型、类别型、时间型字段。

# 查看数据类型概览
print(df.dtypes.value_counts())

# 详细字段类型信息
df.info(verbose=True, null_counts=True)

贷后数据集中常见的字段类型分布:

数据类型 常见字段示例 处理建议
float64 本金余额、利息、已还金额 检查异常值,考虑对数变换
int64 逾期天数、催收次数、分期期数 确认是否为离散型,是否需要编码
object 客户ID、产品类型、渠道来源 转为 category 类型以节省内存
datetime64 报告日期、到期日、还款日 提取年、月、周、距今天数等特征

3.4 缺失值概览

缺失值处理是贷后风控特征筛选的关键前置步骤。使用 df.isnull().sum() 统计每个字段的缺失数量与比例。

# 计算缺失值数量与比例
missing = df.isnull().sum()
missing_pct = (missing / len(df)) * 100

# 合并为 DataFrame 并排序
missing_df = pd.DataFrame({
    '缺失数量': missing,
    '缺失比例(%)': missing_pct.round(2)
}).sort_values('缺失比例(%)', ascending=False)

# 筛选缺失比例大于 0 的字段
missing_df = missing_df[missing_df['缺失数量'] > 0]
print(missing_df.head(20))
缺失值处理原则:
  • 缺失率 > 50%:通常直接删除该特征,信息量过低。
  • 缺失率 5% ~ 50%:根据业务含义选择填充或构造缺失指示变量。
  • 缺失率 < 5%:可使用均值、中位数或众数填充。
  • 时间序列字段:缺失可能代表未发生事件,需谨慎处理。

3.5 数据探索流程总览

以下 SVG 图展示了贷后数据集加载与探索的完整流程,从原始文件到可建模的干净数据集。

贷后数据集加载与探索流程 原始 CSV 文件 Pandas 加载 (read_csv) 数据形状 (shape) 数据类型 (dtypes) 缺失值统计 (isnull) 关键输出 • 行数 / 列数 • 字段类型分布 • 缺失数量与比例 • 日期范围与样本分布

3.6 快速探索代码模板

以下代码模板整合了上述所有探索步骤,可直接用于贷后数据集的初步分析:

def explore_post_loan_data(df):
    """贷后数据集快速探索函数"""
    print("=" * 50)
    print("1. 数据形状")
    print(f"   行数: {df.shape[0]:,}, 列数: {df.shape[1]}")
    print()

    print("2. 字段类型分布")
    print(df.dtypes.value_counts())
    print()

    print("3. 前5行数据预览")
    print(df.head())
    print()

    print("4. 缺失值概览(缺失率 > 0%)")
    missing = df.isnull().sum()
    missing_pct = (missing / len(df)) * 100
    missing_df = pd.DataFrame({
        '缺失数量': missing,
        '缺失比例(%)': missing_pct.round(2)
    })
    missing_df = missing_df[missing_df['缺失数量'] > 0]
    missing_df = missing_df.sort_values('缺失比例(%)', ascending=False)
    print(missing_df)
    print()

    print("5. 数值型字段基本统计")
    print(df.describe())
    print("=" * 50)

# 调用探索函数
explore_post_loan_data(df)
实践建议: 在加载数据后立即执行上述探索函数,将输出结果保存为日志文件,作为特征筛选的基线参考。重点关注缺失率超过 30% 的字段,以及数据类型与业务预期不一致的字段。