本次用于PSI模拟计算的数据来自于天池零基础入门金融风控-贷款违约预测使用其中的train.csv数据集,个字段的含义见原网页地址。
有关PSI指标是如何计算的请见风控模型—群体稳定性指标(PSI)深入理解应用
在理解了如何计算PSI指标后,那么对train.csv的处理可大致划分为用于训练模型的开发样本和用于计算PSI指标的月度进件数据。
import pandas as pd
from datetime import datetime, timedelta
def splitDate(data):
# 计算结束日期
issueDate = pd.to_datetime(data['issueDate'])
endDate = []
for i in range(len(issueDate)):
days = data['term'][i]*365
deltaDays = timedelta(int(days))
end = issueDate[i] + deltaDays
endDate.append(end)
endDate = pd.Series(endDate)
# 按endDate对数据集进行划分
data['endDate'] = endDate
data['endDate_month'] = data.endDate.apply(lambda x: datetime.strftime(x, '%Y-%m'))
# 以5W条数据作为划分依据确定划分时间为2016年,分析过程略
# endDate在2016年之前的数据用于训练,issueDate从2016年开始
train = data.loc[data['endDate_month'] < '2016-01', :]
data_after_2016 = data.loc[data.issueDate >= '2016-01-01', :]
# 提取issuDate的年-月作为之后的划分依据
data_after_2016['issueDate_month'] = data_after_2016['issueDate'].apply(lambda x: x[:7])
return train, data_after_2016
if __name__ == "__main__":
import_path = input("Please enter the path of the data:")
export_path = input("Please enter the data output path:")
data = pd.read_csv(import_path, index_col=0)
train, data_after_2016 = splitDate(data)
# 存储数据
train.to_csv(export_path+'\\train.csv')
# 拆分文件
dict_ = {}
for year_month in set(data_after_2016['issueDate_month']):
dict_[year_month] = data_after_2016.loc[data_after_2016['issueDate_month']==year_month, :]
# 保存数据
for key in dict_.keys():
dict_[key].index = range(len(dict_[key]))
dict_[key].to_csv(export_path+'\\%s.csv' % (key))