基于机器学习的酒店数据分析及流失预测系统

发布时间:2026/11/5 7:59:04
基于机器学习的酒店数据分析及流失预测系统

基于机器学习的酒店数据分析及流失预测系统

项目简介

本系统是一个面向酒店行业的客户数据分析与流失预测平台,基于 Antonio et al. (2019) 公开的酒店预订需求数据集,采用 Flask + SQLite + ECharts + scikit-learn 技术栈,实现数据可视化分析、机器学习流失预测、模型管理等功能,帮助酒店管理者识别流失风险客户并制定针对性挽留策略。


功能模块

模块功能说明
用户认证用户登录、注册、角色权限管理(管理员/普通用户)
数据概览核心KPI仪表盘(总预订量、取消率、流失率、平均ADR)、月度预订与流失趋势折线图、酒店类型分布环形图、Top10客源国柱状图、市场细分占比环形图
数据分析城市酒店与度假酒店对比、膳食类型分布、客户类型分析、提前预订天数分布、ADR价格区间分布、市场细分取消率、市场细分详细数据表格
流失分析押金类型与流失率、流失关键因素分析、提前预订天数与流失率关系、ADR区间与流失率关系、客户类型流失对比、流失因素统计表
流失预测单条客户流失预测(输入预订信息,输出流失概率与风险等级)、批量预测验证(最近50条数据验证)、预测历史记录
模型管理支持随机森林/梯度提升/逻辑回归三种算法训练、混淆矩阵热力图、ROC曲线、特征重要性Top10排名、训练历史记录
数据管理多条件筛选查询(酒店类型/流失状态/取消状态/关键词)、分页浏览、CSV数据导出
报表中心综合数据报表、流失分析报表、模型评估报表(支持打印)
用户管理管理员专属页面,用户列表查看与删除

数据来源

数据集文件记录数说明
Hotel Booking Demandhotels.csv~119,390 条来源于 Antonio, Almeida and Nunes (2019),包含城市酒店和度假酒店的预订数据

数据集下载地址:TidyTuesday - Hotel Booking Demand


流失定义

客户流失标签(churn_label)定义规则:

  • 流失(1):预订取消(is_canceled = 1),或非回头客且有历史取消记录
  • 未流失(0):不符合上述条件的客户

标准版目录结构

python-hotel-booking-fenxi-liushi/ ├── app.py # Flask 应用主入口,路由定义与API接口 ├── config.py # 应用配置(数据库路径、密钥、分页参数) ├── database.py # SQLite 数据库连接管理、建表、数据导入 ├── init_system.py # 系统初始化脚本(建库、导入数据、训练模型) ├── requirements.txt # Python 依赖包清单 ├── data/ │ └── hotels.csv # 酒店预订数据集 ├── database/ │ └── hotel.db # SQLite 数据库文件(自动生成) ├── ml/ │ ├── __init__.py │ ├── preprocess.py # 数据预处理(特征工程、编码) │ ├── train.py # 模型训练(随机森林/梯度提升/逻辑回归) │ └── predict.py # 预测服务(单条预测、批量预测) ├── models/ │ ├── churn_model.pkl # 训练好的模型文件(自动生成) │ ├── model_metrics.json # 模型评估指标(自动生成) │ └── feature_importance.json # 特征重要性(自动生成) ├── services/ │ ├── __init__.py │ ├── auth_service.py # 认证服务(登录、注册、用户管理) │ └── analysis_service.py # 数据分析服务(统计、检索、导出) ├── static/ │ ├── css/ │ │ └── custom.css # 自定义样式 │ └── js/ │ ├── common.js # 全局工具函数与ECharts封装 │ ├── dashboard.js # 数据概览页图表 │ ├── analysis.js # 数据分析页图表 │ ├── churn_analysis.js # 流失分析页图表 │ ├── model.js # 模型管理页图表 │ ├── predict.js # 流失预测页交互 │ ├── data.js # 数据管理页交互 │ └── reports.js # 报表中心页交互 ├── templates/ │ ├── base.html # 基础模板(导航栏、CDN引用) │ ├── login.html # 登录页 │ ├── register.html # 注册页 │ ├── dashboard.html # 数据概览页 │ ├── analysis.html # 数据分析页 │ ├── churn_analysis.html # 流失分析页 │ ├── predict.html # 流失预测页 │ ├── model.html # 模型管理页 │ ├── data.html # 数据管理页 │ ├── reports.html # 报表中心页 │ └── admin/ │ └── users.html # 用户管理页 ├── 运行步骤必看/ │ └── window.md # Windows 运行步骤说明 ├── mac_run.sh # macOS/Linux 一键启动脚本 ├── window_run.bat # Windows 一键启动脚本 ├── 训练手册.md # 模型训练手册 ├── 项目说明.md # 本文档 └── README.md # 项目简介

技术栈

类别技术
后端Python 3.12 + Flask 3.0
数据库SQLite 3
前端HTML5 + Bootstrap 5.3 + ECharts 5.5
机器学习scikit-learn 1.5(随机森林 / 梯度提升 / 逻辑回归)
数据处理pandas 2.2 + numpy 1.26
模型持久化joblib 1.4
密码安全SHA-256 哈希

环境要求

项目要求
Python3.12
操作系统Windows / macOS / Linux
内存建议 2GB 以上(模型训练时使用)
磁盘约 300MB(含依赖和数据库)
浏览器Chrome / Firefox / Safari / Edge 现代版本

账号信息

角色用户名密码
管理员adminadmin123
普通用户analystanalyst123

管理员拥有用户管理页面访问权限,可删除普通用户。新注册用户默认为普通用户角色。


模型评估

系统默认使用随机森林分类器,典型指标:

  • 准确率 (Accuracy): ~87%
  • F1 分数: ~80%
  • AUC: ~93%

实际指标取决于数据集导入和训练结果。