给我一份完整的基于spark的MLlib机器学习库包括数据预处理和探索性数据分析,并生成可视化图表以及建模评估的信用卡逾期数据处理与分析案例代码
时间: 2024-03-25 13:40:33 浏览: 179
基于Spark的信用卡评分数据分析
5星 · 资源好评率100%
好的,以下是一份基于Spark的MLlib机器学习库包括数据预处理和探索性数据分析,并生成可视化图表以及建模评估的信用卡逾期数据处理与分析案例代码。请注意,这只是一个示例代码,您需要根据具体情况进行修改。
```python
from pyspark.sql import SparkSession
from pyspark.ml.feature import VectorAssembler, StringIndexer, StandardScaler
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
import matplotlib.pyplot as plt
# 创建SparkSession
spark = SparkSession.builder.appName('credit_card').getOrCreate()
# 读取数据集
data = spark.read.csv('credit_card.csv', header=True, inferSchema=True)
# 数据预处理
# 删除无用列
data = data.drop('ID')
# 特征工程
# 将特征变量转换为特征向量
assembler = VectorAssembler(inputCols=data.columns[:-1], outputCol='features')
data = assembler.transform(data)
# 将标签变量转换为数值编码
label_indexer = StringIndexer(inputCol='default_payment_next_month', outputCol='label')
data = label_indexer.fit(data).transform(data)
# 数据集分割
train, test = data.randomSplit([0.8, 0.2])
# 模型训练
# 创建逻辑回归模型
lr = LogisticRegression(featuresCol='features', labelCol='label')
# 设置参数网格
param_grid = ParamGridBuilder() \
.addGrid(lr.regParam, [0.01, 0.1, 1]) \
.addGrid(lr.elasticNetParam, [0.0, 0.5, 1.0]) \
.build()
# 创建交叉验证器
cv = CrossValidator(estimator=lr, estimatorParamMaps=param_grid, evaluator=BinaryClassificationEvaluator(), numFolds=3)
# 训练模型
model = cv.fit(train)
# 模型评估
# 在测试集上进行预测
predictions = model.transform(test)
# 计算AUC指标
evaluator = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction', labelCol='label', metricName='areaUnderROC')
auc = evaluator.evaluate(predictions)
print('AUC:', auc)
# 可视化分析
# 统计不同性别的违约率
gender_counts = data.groupBy('SEX', 'default_payment_next_month').count().orderBy('SEX', 'default_payment_next_month').collect()
gender_counts = [(row['SEX'], row['default_payment_next_month'], row['count']) for row in gender_counts]
gender_counts = [[(row[0], row[1]), row[2]] for row in gender_counts]
gender_default = [row[1] for row in gender_counts if row[0][1] == 1]
gender_no_default = [row[1] for row in gender_counts if row[0][1] == 0]
plt.bar([0, 1], gender_default, color='r', alpha=0.5, width=0.4, label='default')
plt.bar([0.4, 1.4], gender_no_default, color='g', alpha=0.5, width=0.4, label='no default')
plt.xticks([0.2, 1.2], ['male', 'female'])
plt.legend()
plt.show()
# 统计不同年龄段的违约率
age_counts = data.groupBy('AGE', 'default_payment_next_month').count().orderBy('AGE', 'default_payment_next_month').collect()
age_counts = [(row['AGE'], row['default_payment_next_month'], row['count']) for row in age_counts]
age_counts = [[(row[0], row[1]), row[2]] for row in age_counts]
age_default = [row[1] for row in age_counts if row[0][1] == 1]
age_no_default = [row[1] for row in age_counts if row[0][1] == 0]
plt.plot(range(len(age_default)), age_default, 'r-', label='default')
plt.plot(range(len(age_no_default)), age_no_default, 'g-', label='no default')
plt.xticks(range(len(age_default)), [row[0][0] for row in age_counts], rotation=90)
plt.legend()
plt.show()
```
请注意,上述代码只是一个示例,您需要根据实际情况进行修改,比如修改文件名、特征变量、标签变量、模型选择和参数网格等。此外,也需要注意数据集的特点和分布,以选择合适的模型和评估指标。
阅读全文