计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统功能介绍

54 阅读7分钟

💖💖作者:计算机编程小央姐 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜

💕💕文末获取源码

@TOC

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统功能介绍

基于Hadoop+Spark的用户贷款行为数据分析系统是一套专门针对金融机构贷款业务设计的大数据分析平台。该系统采用Hadoop分布式存储架构和Spark大数据处理引擎作为核心技术栈,能够高效处理海量用户贷款申请数据和历史行为记录。系统前端采用Vue+ElementUI构建现代化的可视化界面,通过Echarts图表组件实现数据的直观展示,后端基于Django框架提供RESTful API服务。在数据处理层面,系统运用Spark SQL进行复杂查询分析,结合Pandas和NumPy进行数据清洗与特征工程,最终通过机器学习算法构建贷款风险预测模型。整个系统涵盖从原始数据采集、存储到分析、建模的完整数据处理链路,能够为金融机构提供用户画像分析、风险评估和贷款决策支持等功能,是一个集数据仓库、分析挖掘和可视化展示于一体的综合性大数据应用平台。

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统技术介绍

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统背景意义

随着金融科技的快速发展和消费金融市场的不断扩张,银行和金融机构面临着日益复杂的贷款风险管理挑战。传统的贷款审批流程主要依赖人工经验判断和简单的规则引擎,难以有效处理和分析大量的用户行为数据。在数字化转型的浪潮中,金融机构积累了包括用户基本信息、收入状况、职业背景、资产情况等在内的海量多维度数据。然而这些宝贵的数据资源往往缺乏有效的分析工具和处理手段,无法充分挖掘其中蕴含的风险模式和用户行为特征。现有的数据分析方法多数停留在传统统计分析层面,缺少对大数据技术的深度应用,特别是在分布式计算和实时数据处理方面存在明显不足。面对越来越庞大的数据规模和越来越复杂的业务场景,传统分析方法已经难以满足现代金融风控的实际需求。

构建基于大数据技术的用户贷款行为分析系统具有重要的理论探索价值和实际应用意义。从技术角度来看,该系统将Hadoop分布式存储与Spark计算引擎相结合,为处理大规模金融数据提供了可行的技术方案,同时验证了大数据技术在金融风控领域的应用效果。从业务角度来说,通过深入分析用户的多维度特征数据,能够帮助金融机构更准确地识别潜在风险客户,提升贷款审批的科学性和准确性。该系统可以为金融从业者提供数据驱动的决策支持,减少人为判断的主观性和随意性。虽然作为毕业设计项目在规模和复杂度上相对有限,但它为学习者提供了一个完整的大数据项目实践机会,涵盖了从数据预处理到模型构建的全流程。通过这个项目的实施,能够加深对大数据技术栈的理解和掌握,特别是Hadoop生态系统和Spark计算框架的实际应用能力,为今后从事数据科学和金融科技相关工作奠定基础。

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统演示视频

演示视频

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统演示图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-系统部分代码

from pyspark.sql import SparkSession

from pyspark.sql.functions import *

from pyspark.ml.feature import StringIndexer, VectorAssembler

from pyspark.ml.classification import LogisticRegression

from pyspark.ml.evaluation import BinaryClassificationEvaluator

import pandas as pd

import numpy as np

spark = SparkSession.builder.appName("LoanBehaviorAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()

def data_cleaning_and_preprocessing():

    df = spark.read.csv("基于用户行为的贷款预测训练集.csv", header=True, inferSchema=True)

    df = df.withColumnRenamed("Married/Single", "Marital_Status")

    df = df.withColumn("CITY", regexp_replace(col("CITY"), "\\[\\d+\\]", ""))

    numeric_cols = ["Age", "Experience", "Income", "CURRENT_JOB_YRS"]

    for col_name in numeric_cols:

        df = df.fillna({col_name: 0})

    string_cols = ["Marital_Status", "House_Ownership", "Car_Ownership", "Profession", "STATE"]

    for col_name in string_cols:

        df = df.fillna({col_name: "未知"})

    df = df.filter((col("Age") >= 18) & (col("Age") <= 80))

    df = df.filter(col("Experience") <= col("Age"))

    df = df.filter(col("CURRENT_JOB_YRS") <= col("Experience"))

    df = df.withColumn("Age_Group", when(col("Age") < 30, "青年").when(col("Age") < 50, "中年").otherwise("老年"))

    df = df.withColumn("Income_Level", when(col("Income") < 50000, "低收入").when(col("Income") < 100000, "中等收入").otherwise("高收入"))

    df = df.withColumn("Job_Stability", col("CURRENT_JOB_YRS") / col("Experience"))

    cleaned_data = df.toPandas()

    cleaned_data.to_csv("cleaned_loan_data.csv", index=False)

    return df

def user_profile_analysis():

    df = spark.read.csv("cleaned_loan_data.csv", header=True, inferSchema=True)

    marital_analysis = df.groupBy("Marital_Status").agg(

        count("*").alias("用户数量"),

        avg("Income").alias("平均收入"),

        sum(when(col("Risk_Flag") == 1, 1).otherwise(0)).alias("违约人数"),

        (sum(when(col("Risk_Flag") == 1, 1).otherwise(0)) / count("*") * 100).alias("违约率")

    ).orderBy(desc("用户数量"))

    marital_pandas = marital_analysis.toPandas()

    marital_pandas.to_csv("marital_status_analysis.csv", index=False)

    house_analysis = df.groupBy("House_Ownership").agg(

        count("*").alias("用户数量"),

        avg("Income").alias("平均收入"),

        sum(when(col("Risk_Flag") == 1, 1).otherwise(0)).alias("违约人数"),

        (sum(when(col("Risk_Flag") == 1, 1).otherwise(0)) / count("*") * 100).alias("违约率")

    ).orderBy(desc("违约率"))

    house_pandas = house_analysis.toPandas()

    house_pandas.to_csv("house_ownership_analysis.csv", index=False)

    profession_analysis = df.groupBy("Profession").agg(

        count("*").alias("用户数量"),

        avg("Income").alias("平均收入"),

        avg("Experience").alias("平均工作经验"),

        sum(when(col("Risk_Flag") == 1, 1).otherwise(0)).alias("违约人数"),

        (sum(when(col("Risk_Flag") == 1, 1).otherwise(0)) / count("*") * 100).alias("违约率")

    ).filter(col("用户数量") >= 10).orderBy(desc("违约率"))

    profession_pandas = profession_analysis.toPandas()

    profession_pandas.to_csv("profession_analysis.csv", index=False)

    return marital_analysis, house_analysis, profession_analysis

def loan_risk_prediction_model():

    df = spark.read.csv("cleaned_loan_data.csv", header=True, inferSchema=True)

    categorical_cols = ["Marital_Status", "House_Ownership", "Car_Ownership", "Profession", "STATE"]

    indexers = [StringIndexer(inputCol=col, outputCol=col+"_indexed", handleInvalid="keep") for col in categorical_cols]

    indexed_df = df

    for indexer in indexers:

        indexed_df = indexer.fit(indexed_df).transform(indexed_df)

    feature_cols = ["Age", "Experience", "Income", "CURRENT_JOB_YRS"] + [col+"_indexed" for col in categorical_cols]

    assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")

    final_df = assembler.transform(indexed_df).select("features", "Risk_Flag")

    train_data, test_data = final_df.randomSplit([0.8, 0.2], seed=42)

    lr = LogisticRegression(featuresCol="features", labelCol="Risk_Flag", maxIter=100)

    lr_model = lr_model.fit(train_data)

    predictions = lr_model.transform(test_data)

    evaluator = BinaryClassificationEvaluator(rawPredictionCol="rawPrediction", labelCol="Risk_Flag")

    auc_score = evaluator.evaluate(predictions)

    accuracy = predictions.filter(col("prediction") == col("Risk_Flag")).count() / predictions.count()

    feature_importance = lr_model.coefficients.toArray()

    importance_df = pd.DataFrame({

        "特征名称": feature_cols,

        "重要性得分": feature_importance,

        "绝对重要性": np.abs(feature_importance)

    }).sort_values("绝对重要性", ascending=False)

    model_metrics = pd.DataFrame({

        "评估指标": ["AUC值", "准确率", "训练样本数", "测试样本数"],

        "数值": [auc_score, accuracy, train_data.count(), test_data.count()]

    })

    importance_df.to_csv("feature_importance.csv", index=False)

    model_metrics.to_csv("model_evaluation.csv", index=False)

    return lr_model, auc_score, accuracy

计算机毕业设计推荐:基于Hadoop+Spark的用户贷款行为数据分析系统实现-结语

💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。