某金融机构计划引入智能信用评估系统,通过分析客户的历史交易数据和信用记录,使用机器学习算法预测客户的信用风险等级,从而辅助贷款审批和风险控制。为了确保数据的准确性和可靠性,该机构需要设计并实现一套全面的业务数据审核流程,确保数据在进入信用评估系统之前经过严格的审核和清洗。
我们提供一个客户信用数据集(credit_data.csv),包含以下字段:
CustomerID: 客户ID
Name: 客户姓名
Age: 年龄
Income: 收入
LoanAmount: 贷款金额
LoanTerm: 贷款期限(月)
CreditScore: 信用评分
Default: 是否违约(0: 否,1: 是)
TransactionHistory: 历史交易记录(JSON格式)
- 数据完整性审核:检查数据集中的每个字段是否存在缺失值和重复值。将上述审核结果截图以jpg的格式保存,命名为“1.1.3-1”。
- 数据合理性审核:对不合理的数据进行标记,并将审核结果截图以jpg的格式保存,命名为“1.1.3-2”。
- 年龄:应在18到70岁之间。
- 收入:应大于2000。
- 贷款金额:应小于收入的5倍。
- 信用评分:应在300到850之间。
- 对数据进行清洗,处理异常值。具体要求如下:将不合理的数据进行标记,并对异常值所在行进行删除;清洗后的数据保存为新文件cleaned_credit_data.csv。
import pandas as pd
import numpy as np
# import matplotlib.pyplot as plt
# 读取数据集
data = pd.read_csv('credit_data.csv')
# 1. 数据完整性审核
missing_values = data.isnull().sum() #数据缺失值统计 2分
duplicate_values = data.duplicated().sum() #数据重复值统计 2分
# 输出结果
print("缺失值统计:")
print(missing_values)
print("重复值统计:")
print(duplicate_values)
# 2. 数据合理性审核
data['is_age_valid'] = data['Age'].between(18, 70) #Age数据的合理性审核 2分
data['is_income_valid'] = data['Income'] > 2000 #Income数据的合理性审核 2分
data['is_loan_amount_valid'] = data['LoanAmount'] < (data['Income'] * 5) #LoanAmount数据的合理性审核 2分
data['is_credit_score_valid'] = data['CreditScore'].between(300, 850) #CreditScore数据的合理性审核 2分
# 合理性检查结果
validity_checks = data[['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid']].all(axis=1)
data['is_valid'] = validity_checks
# 输出结果
print("数据合理性检查:")
print(data[['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid', 'is_valid']].describe())
# 3. 数据清洗和异常值处理
# 标记不合理数据
invalid_rows = data[~data['is_valid']]
# 删除不合理数据行
cleaned_data = data[data['is_valid']]
# 删除标记列
cleaned_data = cleaned_data.drop(columns=['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid', 'is_valid'])
# 保存清洗后的数据
cleaned_data.to_csv('cleaned_credit_data.csv', index=False)
print("数据清洗完成,已保存为 'cleaned_credit_data.csv'")