Kaggle竞赛入门——学生考试成绩分析

自己做的第一份入门级数据分析项目,完成了数据预处理,数据清洗,EDA,特征工程,模型预测等步骤,流程相对完整,但是各方面具体做的还是过于粗糙了些。

Student_test.ipynb

顺便贴一下gemini对我的这份项目的总结:

在 Student_test.ipynb 以及大多数数据科学项目中,采用 “线性回归做 Baseline(基准) -> XGBoost 做进阶模型” 的策略,是一种非常经典且符合工程逻辑的做法。

这背后的逻辑并不是随意的,而是为了解决**可解释性、性能评估和模型选择**这几个核心问题。

### 1. 为什么要用线性回归作为 Baseline(基准)?

Baseline 的意思是“**及格线**”或“**参照物**”。在还没开始“精装修”之前,你需要先搭个“毛坯房”看看地基稳不稳。

* 确立下限(Sanity Check)

* 线性回归(Linear Regression)是最简单、计算最快、假设最少的模型。

如果后续复杂的 XGBoost 模型跑出来的分数(RMSE)比线性回归还差,或者只是一样好,那就说明你的复杂模型*配置错了**,或者出现了**过拟合**。

* Baseline 告诉你:“如果你连简单的线性关系都拟合不好,就别折腾复杂的了。”

* 可解释性强

线性回归能直接告诉你特征的*正负相关性**。比如系数是正的,说明该特征对成绩是正面影响。这能帮你快速验证数据的逻辑是否正确(例如:如果发现“缺勤率”系数是正的,那数据肯定有问题)。

* 低成本验证数据质量

* 线性回归对特征工程(如归一化、共线性)很敏感。如果在 Baseline 阶段分数极低,说明数据预处理(Preprocessing)阶段就有大问题,比如特征没洗干净。

### 2. 为什么要用 XGBoost 做实际预测模型?

一旦确立了 Linear Regression 的基准分数,XGBoost 的任务就是**突破上限**。

* 捕捉非线性关系

* 现实世界(尤其是教育数据)通常不是线性的。

* 例子:每天学习 10 小时可能成绩很好,但学习 20 小时可能导致过劳,成绩反而下降。线性回归只能画一条直线,无法理解这种“过犹不及”的抛物线关系,而 XGBoost(基于树的模型)可以轻松切割出这种非线性逻辑。

* 自动处理特征交互

你在代码里手动造了一个特征 有效学习时长 = 学习时长 睡眠时长

* XGBoost 的决策树结构天生就能通过分叉发现这种组合特征(Interaction),它能自动发现“当家庭收入低 且 没上网课 时,成绩会显著下降”这样的复杂规则,而不需要你一个个手动去乘。

* 对表格数据的统治力

* 在结构化数据(Tabular Data,即像 Excel 这种有行有列的数据)竞赛中,XGBoost / LightGBM / CatBoost 等梯度提升树模型(GBDT)几乎是垄断地位,它们的预测精度通常远高于线性模型和简单的神经网络。

### 3. 常规数据分析项目是如何做的?(标准流程)

在工业界或 Kaggle 竞赛中,模型演进通常遵循 “哑巴模型 -> 简单模型 -> 复杂模型 -> 融合模型” 的金字塔路径:

第一层:哑巴模型 (Dummy Baseline)

* 做法:不看任何输入特征,直接永远预测**平均数**(如果是回归问题)或**众数**(如果是分类问题)。

* 目的:确定数据的最低底线。如果你的模型跑不过“瞎猜平均分”,那是完全失败的。

第二层:白盒模型 (Simple Benchmark) -> 你的 LinearRegression 在这

* 模型:线性回归、逻辑回归、简单的单棵决策树。

* 目的

* 获得一个 decent(体面)的分数。

* 理解特征权重(Feature Importance):向业务部门解释哪些因素最重要。

第三层:黑盒/强力模型 (SOTA Model) -> 你的 XGBoost 在这

* 模型:XGBoost, LightGBM, CatBoost, 随机森林。

* 做法

1. 使用 GridSearch 或 Optuna 进行**超参数调优**(你目前的 XGBoost 参数是写死的,常规做法是要搜索最优参数)。

2. 处理复杂的分布(如你代码中用到的 TransformedTargetRegressor 处理偏态分布)。

* 目的:不惜一切代价提高预测精度,哪怕牺牲模型的可解释性。

第四层:模型融合 (Ensemble)

* 做法:将 Linear Regression 的预测结果和 XGBoost 的预测结果,按一定比例加权(例如 0.1 Linear + 0.9 XGB)。

* 目的:集百家之长,减少模型的方差(Variance),让预测更稳健。

### 总结你的代码:

你目前的做法非常标准且正确:

1. 先用 Linear Regression 跑通流程,确保 Pipeline 没有代码报错,并拿到了一个 RMSE(比如 3.0)。

2. 再上 XGBoost,通过更强的拟合能力,试图将 RMSE 降到更低(比如 2.2)。

这证明了引入复杂模型带来的“收益”(Lift)是真实的,而不仅仅是运气的成分。

评论