使用 Python 进行学生学业成绩预测

2025年3月17日 | 阅读13分钟

使用监督线性回归 (SLR) 训练和评估机器学习模型,以预测学生在课堂上的学业成绩。

引言

Student Academic Performance Prediction Using Python

机器学习是利用数据和经验自动学习算法的研究。它是计算智能的一个子集,其前提是机器可以通过从数据中学习并识别潜在趋势和模式,在很少或没有人工干预的情况下做出判断。根据预期的目标和可用数据,可以说人工智能 (AI) 是一种数据分析技术,它允许从业者协助管理层做出更好的决策。

机器学习算法有多种形式。最流行的分类是无监督学习、监督学习和强化学习。

Student Academic Performance Prediction Using Python

算法学习的类型及其可能的分支。

  1. 该模型使用带标签的数据通过监督学习技术进行训练。所有材料都经过手动注释和标记,以向计算机提供必要的值,从而预测具有准确值的新未知数据。
  2. 无监督训练是一种使用未标记数据训练模型的技术。通过识别数据的属性,系统自动对项目进行分类。由于此方法不使用手动分类,因此最终预测包含更多错误。无监督学习需要结合强化教学才能达到特定的准确度。
  3. 该模型使用在与环境交互过程中产生的强化观察,来学习如何执行能最大化回报或降低风险的动作。尽管缺少带标签的数据,但模型会收到关于哪个步骤正确哪个步骤错误的反馈。机器根据反馈逐渐修改其分类,从而获得正确答案。

应用

A. 用例目标

教育领域的机器学习相关研究最近经历了快速增长。一种名为“教育数据挖掘”的新概念应运而生,它指的是在教育环境中使用数据挖掘方法来发现学生表现中未被注意到的趋势和模式。

本研究旨在建立一个基于机器学习的学生学业成功预测模型。任何学生在给定主题中的表现都可以使用该模型来确定。

目标是根据学生的学习时间估算其预期成绩。

B. 数据描述

为了便于广泛理解,原始数据经过清理、调整并赋予了美观的外观。如上所示,有两个列,每列包含 25 个值:小时和分数。根据对该数据集的检查和常识的帮助,我们提出的假设是,我们的两个因素之间确实存在正相关关系。让我们继续并确定我们的假设是否成立。

C. 有用的库

Python 模块是实用功能的集合,它们可以为您完成所有编写新代码的工作。目前,Python 大约有 137,000 个可用库。但是,此任务将仅使用 Scikit-Learn、Pandas、NumPy、sklearn 和 Matplotlib。

  • Panda 是一个开源软件库,专为 Python 中卓越的耐用数据处理和分析而设计。它提供强大的数据结构和操作,尤其适用于处理时间序列和数值表。许多行业,包括银行、经济学和其他商业部门,都使用带有 Pandas 的 Python。
  • NumPy 是一个库,它支持大型多维数组和矩阵,并提供了一系列用于处理此类数组的函数。此外,NumPy 还提供了大量复杂的数学和逻辑运算,可以应用于这些数组。
  • Matplotlib 是最受欢迎的 Python 数据可视化工具之一,是一个图表框架。它提供了一个面向对象的编程接口,用于从数据数组创建 2D 图表。
  • Sk-learn 是一个用于构建模型的学习包,因为它包含许多分析和预测建模工具。它包括多种方法,包括随机森林、支持向量机和 k 近邻。

数据科学家可以在这个项目中利用他们在数据科学方面的专业知识,经历许多阶段。定义业务问题、收集需求、从外部来源获取和使用原始数据、清理和解析数据,以及使用机器学习技术进行分析评估。学术顾问、教授和家长只是少数可以利用最终分析的评估来做出判断的利益相关者。由于有几个因素需要考虑,这个项目开放讨论,旨在面向商人和利益相关者。

正在构建预测模型

分析策略

监督机器学习将预测和评估学生的成绩。首先,我们使用一种称为“简单线性回归模型”的方法来解决当前的问题。该统计模型中广泛使用一条线来估计两个定量变量之间的关系,其中一个变量是因变量,一个或多个变量是自变量。这种方法对于中小型数据库来说快速有效,并且可能有助于快速得出带标签数据的结论。

我们的两个定量因素如下

  1. 每个学生在某个主题中获得的分数比例。
  2. 每个学生花在学习某个主题上的时间。

数据分析

1. 加载数据和导入库

将导入相关库。Scikit-Learn 将在稍后加载,请注意。

源代码片段

现在必须将提供的数据加载到我在 Jovian 上使用的 Python 解释器中,以继续模型的训练。Pandas 用于导入 CSV 文件,并在数据成功导入时提供一些验证。

我已将文件放在我的计算机上,与此特定解释器位于同一文件夹中。

源代码片段

2. 可视化数据和获取洞察

在继续之前,我们将简要回顾一下数据的技术细节。info() 方法打印给定 DataFrame 的简洁描述。此函数提供有关 DataFrame 的详细信息,例如但不限于以下内容

  • 非空值;列数据类型
  • 使用内存

源代码片段

一个使用 info() 方法显示 DataFrame 信息的示例。我们可以重申,根据前面提供的信息,有两个列,分别称为“小时”和“分数”,每列有 25 个数字。因此,提供给算法学习的数据有 25 个组成部分。

“小时”数据 (dtype) 是浮点类型,而“分数”数据 (dtype) 是整数类型。为了将来使用,两列应包含相同类型的数据。

如果两个数据类型相同,则简要描述数据帧的元数据。

源代码片段

输出

<class 'pandas.core.frame.DataFrame'> RangeIndex: 25 entries, 0 to 24 Data columns (total two columns): 
# Column Non-Null Count Dtype 
- - - - - - - - - - - - - - - - - - - - - - - - - - - 
0 Hours 25 non-null float64 1 
Scores 25 non-null float64 
dtypes: float64(2)
memory usage: 528.0 bytes

一段预览数据的代码。最后,收到一条确认消息。

请注意,默认情况下,head() 方法仅显示前五个组件的预览。在括号内添加要显示的组件数量以进行自定义。

成功导入并将两列的数据类型转换为相同类型后,可以使用 head() 方法查看数据。

源代码片段

输出

0	2.5	 21.0
1	5.1	 47.0
2	3.2	 27.0
3	8.5	 75.0
4	3.5	 30.0
5	1.5	 20.0
6	9.2	 88.0
7	5.5	 60.0
8	8.3	 81.0
9	2.7	 25.0

一个示例显示了数据集的前十个项目。

成为数据科学家需要多种能力。可以将其分为三类:技术技能、实践能力和软技能。拥有强大的数字能力是最重要的功能技能之一。应该能够解释和分析数据试图告诉你的内容。这需要坚实的统计基础和解释空间。幸运的是,describe() 方法提供了一组重要的值,可用于进一步的统计分析。

输出

Hours	Scores
count	25.000000	25.000000
mean	5.012000	51.480000
std	    2.525094	25.286887
min	    1.100000	17.000000
25%	    2.700000	30.000000
50%	    4.800000	47.000000
75%	    7.400000	75.000000
max	    9.200000	95.00000

显示数据集统计信息的代码行。

3. 绘制数据

然后必须根据规范输入并绘制分布分数。为了可视化数据集并确定数据之间是否存在任何关系,数据点显示在 2D 图形上。以下脚本用于构建图表

源代码片段

输出

Student Academic Performance Prediction Using Python

一段代码用于绘制 2D 图形,以查找数据集中的相关性。

从上面的图表中可以看出,这两个变量具有正线性关系,这意味着学习小时数和分数比例直接相关。

4. 为机器学习算法准备数据

数据以各种形式、结构和来源涌入。清理、组织和优化这些数据以供最终用户使用是数据科学家工作中的关键组成部分。业务利益相关者、专家和程序员是最终用户的例子。然后使用“准备好的”数据解释结果,并将信息传达给管理层,以帮助他们做出更明智的决策。

源代码片段

输出

Hours     0
Scores    0
dtype: int64

源代码片段

输出

Hours	Scores
0	2.5	21.0
1	5.1	47.0
2	3.2	27.0
3	8.5	75.0
4	3.5	30.0

确定我们的数据集没有空值后,下一步是将数据分成特征(也称为输入)和标签(也称为输出)。

一段代码将数据分成属性和标签。

在确定了特征和标签之后,下一步是将这些数据分成训练集和测试集。为此,我们使用 Scikit-Learn 的内置 train_test_split() 方法。

当数据成功划分为测试集和训练集后,就该训练算法了。如前所述,必须使用简单的线性回归模型。

C. 使用机器学习算法进行训练

一段代码演示了我们的算法是如何训练的。最后,收到一条确认消息。

现在训练已完成,我们将绘制回归线。

2D 图的一部分显示了这两个变量的正相关关系。

2D 图上的回归线显示了我们的两个变量之间存在正相关关系。这加强了我们早期理论的有效性,该理论现在已被广泛认可。

D. 做出预测

现在是使用我们系统训练好的版本进行预测的时候了。

我们的机器学习模型生成的预测样本。

一个示例,展示了我们的机器学习模型如何比较实际结果与预测分数。

我们的机器学习模型的结果表明,我们的两个因素直接相关。预测分数表现出一些高估和低估。

E. 使用自定义数据进行测试

一段代码使用一个随机整数进行预测。

如您所见,在 9.25 小时内,预期分数为 93.692,而实际分数为 100(四舍五入到小数点后两位)。

F. 评估机器学习算法

评估算法的性能是最后阶段。这个最后阶段对于评估各种算法在给定数据集上的性能至关重要。可以使用许多指标。但我们将使用均方误差。

结果与讨论

  • 寻找两个定量测量之间的联系是这项研究的主要目标。如果情况属实,我们必须创建一个模型来预测孩子的学业成绩。回顾结果,我们可以说我们的机器学习模型提供了足够的证据来支持我们的假设。因此,花在某个主题上的学习时间量与该主题的考试成绩之间存在联系。
  • 利益相关者如何从我们的发现中获益?
  • 教授可以对学生进行分类,并迅速干预以提高他们的表现。所有得分低于或高于中位数的学生都可以由学科专家监督,他们可以确保成功。
  • 由于早期预测和解决方案,期末考试可能会取得更好的结果。利用学生以前的表现对学生的学业成功做出了独立的预测。这些结果使利益相关者——家长和讲师——能够完全专注于那些缺乏投入必要时间来理解某个主题的承诺的学生。
  • 与大学有联系的知名企业可能会寻找符合其需求的学生。教授可以招募学业优异的学生来帮助那些成绩不佳的学生。
  • 随着时间的推移,可以通过系统方法提高性能。可以实施带有 SCRUM 方法的敏捷方法来提高产出。这些孩子可以分组,每组至少包含一名学业成绩高于平均水平的成员。

使用 Python 预测学生学业表现的综合代码

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total two columns):
 #   Column  Non-Null Count  Dtype  
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 0   Hours   25 non-null     float64
 1 Score 25 non-null     float64
dtypes: float64(2)
memory usage: 528.0 bytes

输入

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 0   Hours   25 non-null     float64
 1 Score 25 non-null     float64
dtypes: float64(2)
memory usage: 528.0 bytes

输入

输出

	Hours	Scores
0	2.5	   21.0
1	5.1	   47.0
2	3.2	   27.0
3	8.5	   75.0
4	3.5	   30.0

输入

输出

	Hours	Scores
0	2.5	   21.0
1	5.1	   47.0
2	3.2	   27.0
3	8.5	   75.0
4	3.5	   30.0
5	1.5	   20.0
6	9.2	   88.0
7	5.5	   60.0
8	8.3	   81.0
9	2.7	   25.0

成为数据科学家需要掌握一些功能技能,例如对数字有很好的感觉。一个人应该能够分析和翻译数字所表达的含义。这需要对统计学有扎实的掌握。幸运的是,describe() 函数提供了一组重要的值,可用于进一步的统计分析。

输入

输出

	    Hours          Scores
count   25.000000     25.000000
mean    5.012000      51.480000
std     2.525094      25.286887
min     1.100000      17.000000
25%     2.700000      30.000000
50%     4.800000      47.000000
75%     7.400000      75.000000
max     9.200000      95.000000

输入


Student Academic Performance Prediction Using Python

输入

输出

Hours     0
Scores    0
dtype: int64

输入

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 0   Hours   25 non-null     float64
 1 Score 25 non-null     float64
dtypes: float64(2)
memory usage: 528.0 bytes

输入

输出

	Hours	Scores
0	2.5	   21.0
1	5.1	   47.0
2	3.2	   27.0
3	8.5	   75.0
4	3.5	   30.0

输入

输出

Algorithm's training has been completed.

输入


Student Academic Performance Prediction Using Python

输入

输出

 [3.2]
 [7.4]
 [2.5]
 [5.9]]
[[1.5]
 [3.2]
 [7.4]
 [2.5]
 [5.9]]

输入

输出

	Actual Scores	Predicted Scores
0	20.0           16.88414
1	27.0           33.73226
2	69.0           75.35701
3	30.0           26.79480
4	62.0           60.49103

输入

输出

	Hours	Actual Scores	Predicted Scores
0	1.5	    20.0	        16.88414
1	3.2	    27.0	        33.73226
2	7.4	    69.0	        75.35701
3	2.5	    30.0	        26.79480
4	5.9	    62.0	        60.49103

输入

输出

Mean Absolute Error: 4.18385989902982

结论

由于多种变量,选择和投入最佳实践和环境来改善学生的学业表现可能是一个困难而艰巨的斗争。但在当今时代,随着如此多的人类活动在线进行,丰富的数据和先进的机器学习算法使我们更容易理解我们选择的主题和相关实体。这使利益相关者、企业主和企业家都能够做出由数据和研究支持的合理决策。