返回作品

基于机器学习的居民消费数据分析及可视化实现

创建于 2026 年 4 月 12 日

标签
  • Python
  • Streamlit
  • Pandas
  • NumPy
  • scikit-learn
  • Plotly
  • SQLite
  • uv

项目介绍

本项目是课程设计《基于机器学习的居民消费数据分析及可视化实现》的落地软件原型,按”一体化分析系统”而非零散脚本设计,覆盖从数据接入、数据治理、特征工程、建模预测到交互式可视化的完整链路。系统以 Streamlit 提供 Web 交互界面,同时配套 Jupyter Notebook 分析流程,兼顾课程设计展示、论文写作截图与后续扩展真实数据三类需求。

项目默认内置一份”报告版结构数据集”:它不是纯随机演示表,而是以真实省级居民收支面板为校准基础生成的模拟结构数据集,字段已覆盖开题报告对消费结构分类的全部要求。真实参考面板整理自国家统计局公开数据,包含 31 个地区 1978—2021 年的 1274 条年度记录,可供消费水平预测与城乡差异分析使用。

项目架构

系统按四层结构组织:数据层负责内置报告版数据、SQLite 数据库、整合单表、多源三表四种接入方式,统一字段映射校验并按 date + region 自动完成多源合并;分析层完成清洗、缺失值处理、异常值裁剪,并构造消费结构占比、环比增速、滞后与滚动统计特征;模型层完成消费水平回归预测与消费结构分类两个任务,自动输出模型排行榜与特征重要性;展示层提供趋势分析、结构分析、区域对比、模型评估与情景推演等视图。

代码采用 src 布局,核心逻辑封装在 src/resident_consumption/ 包中:processing.py 负责数据治理与特征工程,modeling.py 负责回归与分类实验,database.py 负责 SQLite 持久化,visualization.pyapp.py 负责可视化与交互界面。数据文件、建模脚本与测试代码彼此分离,环境由 uv 统一管理并锁定依赖版本。

核心功能

  • 多源数据接入与治理:支持 CSV / XLSX / XLS 单表或多源三表(消费支出、宏观经济、人口统计)上传,兼容”日期""地区""人均可支配收入”等中文字段别名;按地区分组插值填补缺失值、1% / 99% 分位数裁剪异常值,重算总消费与八大类消费占比。
  • 特征工程:自动构造恩格尔系数、服务型消费占比、消费升级指数、收入与消费环比增速、滞后 1 期消费、近 3 期消费均值、近 6 期收入均值及月份周期正弦 / 余弦等模型特征。
  • 消费水平预测:线性回归、随机森林、梯度提升、MLP 四类回归模型在同一时间切分(后 20% 期数作为测试集)下对比 MAE、RMSE、R²,自动选出最优模型并展示特征重要性。
  • 消费结构分类:基于恩格尔系数、食品居住占比、服务型消费占比、医疗占比与老龄化比重,将消费结构划分为基础保障型、均衡发展型、服务升级型、健康关怀型四类,用逻辑回归、随机森林、梯度提升、MLP 建模并输出准确率、Macro F1 与混淆矩阵。
  • 情景推演:在界面上调整收入增速、CPI 与数字消费指数,即可即时输出下一期消费支出预测值与消费结构类型。
  • 结果持久化:一键将地区维表、消费事实表、模型结果表、情景推演结果表和处理日志表同步到 SQLite,数据库也可反向作为系统数据源。

功能截图

暂无运行截图。

快速上手

推荐使用 uv 管理环境,项目已在 pyproject.toml 中配置清华镜像源。进入 code 目录后执行:

uv sync --extra notebook
uv run python tests/smoke_test.py

烟雾测试覆盖数据加载、多源合并、预处理、回归、分类、情景推演与 SQLite 同步全链路,输出 smoke test passed 即说明环境与程序正常。随后启动系统界面:

uv run streamlit run app.py

浏览器访问 http://localhost:8501,在侧边栏选择数据接入方式与筛选条件,主区域按”系统总览 / 结构分析 / 消费预测 / 结构分类”四个标签页查看结果。需要演示分析流程时可执行 uv run jupyter notebook,按顺序运行 notebooks/开题报告实现流程.ipynb 中的各单元。

总结

项目将”数据分析”与”预测决策”合成到同一界面,形成一套可运行的完整解决方案:真实数据参考面板保证分析有据可依,报告版结构数据集让消费结构分类任务开箱即用,四类回归与分类模型自动对比降低了建模门槛,SQLite 持久化让全过程可留痕、可回放。后续可接入国家统计局或地方统计年鉴真实数据,替换为 CFPS、CHFS 等微观调查数据,并扩展 XGBoost、LightGBM、LSTM 等模型与区域地图联动。