2. 数据准备:Python环境搭建与数据源说明

在开始催收触达异常波动的复盘分析之前,必须搭建一个稳定、可复现的Python分析环境,并充分理解原始数据源的结构与字段含义。本章将指导你完成环境配置,并详细说明催收记录表与触达日志表两张核心数据表。

2.1 Python环境搭建

推荐使用 Python 3.9+ 版本,并通过虚拟环境管理依赖。以下为本次课程所需的核心库及其用途:

库名 版本建议 核心用途
pandas ≥ 1.5.0 数据加载、清洗、聚合与透视
numpy ≥ 1.24.0 数值计算、数组操作与统计函数
matplotlib ≥ 3.7.0 基础静态图表绘制(折线图、柱状图)
seaborn ≥ 0.12.0 高级统计图表与样式美化
plotly ≥ 5.14.0 交互式图表与时间序列可视化
快速安装命令: 在终端执行以下命令即可一键安装所有依赖库。
pip install pandas numpy matplotlib seaborn plotly

2.2 数据源说明

本次复盘实战基于两张核心业务表:催收记录表 与 触达日志表。两张表通过 case_id(案件ID)进行关联。

2.2.1 催收记录表

该表记录了每个催收案件的基本信息与当前状态,是分析的基础维度表。

字段名 数据类型 字段说明
case_id 字符串 案件唯一标识
customer_id 字符串 客户唯一标识
product_type 字符串 产品类型(如:消费贷、信用卡)
overdue_days 整数 逾期天数
principal_amount 浮点数 本金金额(元)
collection_stage 字符串 催收阶段(M1/M2/M3+)
assign_date 日期 案件分配日期

2.2.2 触达日志表

该表记录了每一次催收触达的详细日志,是分析触达行为与异常波动的核心事实表。

字段名 数据类型 字段说明
log_id 字符串 触达日志唯一标识
case_id 字符串 关联的案件ID
contact_time 日期时间 触达发生时间
contact_channel 字符串 触达渠道(电话/短信/IVR)
contact_result 字符串 触达结果(成功/无人接听/拒接/空号)
collector_id 字符串 催收员ID
duration_seconds 整数 通话时长(秒),仅电话渠道有效
数据质量注意: 触达日志表中的 duration_seconds 字段在非电话渠道下为空值,分析前需进行缺失值处理。同时,contact_result 字段可能存在大小写不一致问题,建议统一转换为小写或大写。

2.3 数据关联与架构

两张表通过 case_id 形成一对多的关系:一个催收案件对应多条触达日志。理解这一关系是后续进行聚合分析与异常检测的基础。

数据关联架构图 催收记录表 case_id (PK) customer_id product_type overdue_days collection_stage 触达日志表 log_id (PK) case_id (FK) contact_time contact_channel contact_result 一对多关系

2.4 数据加载示例

环境搭建完成后,使用pandas加载CSV格式的数据文件是标准操作。以下为加载示例:

import pandas as pd

# 加载催收记录表
df_cases = pd.read_csv('data/collection_cases.csv', parse_dates=['assign_date'])

# 加载触达日志表
df_logs = pd.read_csv('data/contact_logs.csv', parse_dates=['contact_time'])

# 查看数据基本信息
print(df_cases.info())
print(df_logs.info())
关键检查点: 加载后务必检查 df_cases['case_id'] 是否唯一,以及 df_logs['case_id'] 是否能与催收记录表完全匹配。数据完整性是后续分析的前提。

2.5 环境验证与数据预览

完成加载后,通过以下步骤快速验证环境与数据:

  1. 版本检查: 使用 print(pd.__version__) 确认pandas版本符合要求。
  2. 数据形状: 使用 .shape 属性查看行数与列数。
  3. 缺失值统计: 使用 .isnull().sum() 快速定位缺失字段。
  4. 时间范围: 检查 contact_time 的最小值与最大值,确认数据覆盖周期。

至此,Python环境与数据源已准备就绪,下一阶段将进入数据清洗与特征工程环节。