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 形成一对多的关系:一个催收案件对应多条触达日志。理解这一关系是后续进行聚合分析与异常检测的基础。
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 环境验证与数据预览
完成加载后,通过以下步骤快速验证环境与数据:
- 版本检查: 使用
print(pd.__version__)确认pandas版本符合要求。 - 数据形状: 使用
.shape属性查看行数与列数。 - 缺失值统计: 使用
.isnull().sum()快速定位缺失字段。 - 时间范围: 检查
contact_time的最小值与最大值,确认数据覆盖周期。
至此,Python环境与数据源已准备就绪,下一阶段将进入数据清洗与特征工程环节。