《Python 数据分析》课程作业仓库,用于整理每周理论作业、Python 实验代码与数据分析结果。
- 学生:赵鑫亿
- 学期:2026 秋季学期
- 课程:Python 数据分析
- 仓库用途:按周整理并提交课程作业,方便查看、运行与后续复习
| 周次 | 目录 | 主要内容 | 状态 |
|---|---|---|---|
| Week 1 | homework-week1 | Python 基础:输出 helloworld |
已完成 |
| Week 2 | homework-week2 | OLS 理论证明、调整后 (R^2)、Carseats 多元线性回归与 VIF | 已完成 |
| Week 3 | homework-week3 | Ridge、Lasso、Elastic Net 理论与 Hitters 实战 | 已完成 |
| Week 4 | homework-week4 | Netflix 数据 Elastic Net 分析 | 已完成 |
| Week 5 | homework-week5 | German Credit 数据 SVM 分类(RBF 核 + 类别权重) | 已完成 |
python-data-analysis-homework/
├── README.md
├── homework-week1/
│ └── hello.py
└── homework-week2/
├── theory.md
└── code/
└── carseats_regression.py
├── homework-week3/
│ ├── theory.md
│ └── code/
│ └── regularized_regression_comparison.py
└── homework-week4/
├── analysis.md
└── code/
└── netflix_elastic_net.py
└── homework-week5/
├── analysis.md
├── code/
│ └── credit_svm.py
└── results/
第一周用于验证 Python 基础运行环境。
运行:
python homework-week1/hello.py输出:
helloworld
第二周作业包含理论题与 Python 实践题两部分。
主要内容:
- 在线性回归中证明 OLS 残差满足 [ \sum_{i=1}^{n} e_i = 0 ] 以及 [ \sum_{i=1}^{n} x_i e_i = 0 ]
- 从 RSS 与 自由度 的角度解释:
- 为什么加入无关特征后普通 (R^2) 只会上升或保持不变;
- 为什么调整后的 (R^2_{adj}) 可能下降。
文件:homework-week2/code/carseats_regression.py
使用 Carseats 数据集,以 Sales 为响应变量,选取:
PriceIncomeAdvertisingShelveLoc
建立多元线性回归模型。
程序会自动完成:
- 加载 Carseats 数据集;
- 建立 OLS 多元线性回归模型;
- 输出完整模型拟合报告;
- 判断
ShelveLoc的基准组; - 解释
ShelveLoc[Good]的实际商业含义; - 计算各解释变量的 VIF;
- 判断是否存在明显多重共线性风险。
当前数据下的关键结果约为:
| 指标 | 结果 |
|---|---|
| (R^2) | 0.627 |
| ShelveLoc 基准组 | Bad |
| ShelveLoc[Good] 系数 | 4.836 |
| 最大 VIF | 约 1.50 |
| 多重共线性 | 无明显风险 |
其中 ShelveLoc[Good] 系数约为 4.836,表示在其他解释变量保持不变时,货架位置为 Good 的商店相较于 Bad 的商店,模型预测销量平均高约 4.836 千件。
建议使用 Python 3.x。
安装依赖:
pip install pandas statsmodels运行:
python homework-week2/code/carseats_regression.py程序会直接在终端输出模型摘要、系数解释和 VIF 检验结果。
第五周学习分类算法支持向量机(SVM),作业要求使用课件描述的数据集完成数据分类。本周选用课件案例②的 Statlog (German Credit Data) 数据集(OpenML data_id=31,1000 条贷款记录 × 20 个特征,好坏比 7:3)。
- 几何间隔 (\gamma_i = y_i(w^Tx_i+b)/|w|),原始问题 (\min \frac{1}{2}|w|^2);
- 软间隔引入松弛变量,参数 (C) 权衡间隔宽度与违规数量;
- 核技巧将内积替换为 (K(x_a,x_b)),RBF 核可学习非线性边界;
- 类别不平衡时用
class_weight='balanced'给少数类更大的惩罚。
文件:homework-week5/code/credit_svm.py
- 数值特征标准化、类别特征独热编码,全部封装在
Pipeline内防止数据泄漏; - 对比 RBF 核 SVM(class_weight balanced)、线性 SVM 与决策树,5 折分层交叉验证评估 AUC;
- 指标:CV AUC、测试 AUC、准确率、违约类召回率/精确率、AUC-PR。
本次运行的关键结果约为:
| 指标 | RBF SVM | 线性 SVM | 决策树 |
|---|---|---|---|
| 测试 AUC | 0.812 | 0.807 | 0.599 |
| 测试 AUC-PR | 0.685 | 0.633 | 0.376 |
| 违约召回率 | 0.567 | 0.800 | 0.667 |
结论:小样本 + 独热后高维稀疏的场景下,RBF 核 SVM 排序能力最强,决策树接近随机;不平衡数据应看 AUC 与少数类召回,而不是准确率。
详细分析见 homework-week5/analysis.md。
- Python 3
- pandas
- statsmodels
- OLS Multiple Linear Regression
- Variance Inflation Factor (VIF)
- Ridge / Lasso / Elastic Net
- scikit-learn Pipeline 与 10 折交叉验证
- Netflix 数据 Elastic Net 分析
- SVM 分类(线性核 / RBF 核、GridSearchCV、class_weight、ROC / AUC)
安装全部依赖:
pip install -r requirements.txt本仓库将按照课程进度持续更新,每周作业统一放入对应的
homework-weekN目录中。