基于机器学习算法的电影票房预测系统
目录
有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主
1 项目简介
这个项目做的是一个电影票房预测系统。最开始的想法很直接:票房不是单靠经验就能判断的,它会受到档期、上座率、排片、场均人次、退票、网售渠道、累计票房、上映天数等多种因素影响。把这些数据整理出来,再用机器学习模型去学习其中的规律,就可以做出一个既能展示市场趋势,又能在线预测票房的完整系统。
项目整体分成三条线:第一条是数据线,负责把公开票房数据收集、清洗、转换、入库;第二条是分析线,围绕春节档、城市等级、影片类型、票价、退票率、上映天数、场均人次等维度做可视化;第三条是系统线,把随机森林、XGBoost、CatBoost模型接入Flask后台,让用户可以在网页中输入电影特征并获得预测结果。
相比只训练一个模型,这个项目更适合拿来做课程设计或毕业设计展示,因为它不是孤立的算法脚本,而是把“数据分析 + 机器学习 + Web系统 + 后台管理”串起来了。前端能看到图表,后台能维护数据,模型能在线预测,管理员还能对用户和票房数据做增删改查,整体完成度比较高。
2 数据来源与字段设计
数据主要来自CSDN、和鲸数据、Kaggle等公开渠道,最终整理出国内电影票房数据。核心数据集包含79042条记录,字段数量约20个,既有日期、上座率、场均人次、综合票价、综合票房、电影片名、网售占比、大盘退票率、上映天数信息、排座占比、场次、排片占比,也有分账票价、分账票房、累计分账票房、累计综合票房、人次等指标。
这些字段基本覆盖了电影票房预测中最常用的运营变量。比如上座率反映座位利用效率,场均人次反映单场吸引力,排片占比反映影院资源倾斜程度,网售占比体现线上购票渠道影响,退票率则能侧面反映观众预期和口碑波动。把这些维度放在一起,可以更完整地描述一部电影在市场中的表现。
除了建模数据,项目还额外整合了春节档相关数据,包括日度汇总数据、影片级运营数据、城市分级数据。这样做的好处是分析内容不会局限在模型训练,还能展示春节档市场规律,例如不同城市等级的票房差异、国产电影的票房集中度、头部影片对档期大盘的拉动效果。

图2-1 票房数据源与原始数据展示
3 数据清洗与入库处理
原始票房数据最麻烦的地方不是字段少,而是格式不统一。很多百分比字段在数据中是字符串,比如“10.8%”“<0.1%”这类内容,不能直接参与模型训练。项目中先把百分号去掉并转为数值,对于小于0.1%的特殊值,采用近似处理保留其相对含义。
金额字段也需要统一单位。部分累计票房中既有“亿”,也有“万”,如果不转换,数值量级会出现明显错误。这里统一把金额转成万元单位;上映天数信息则通过正则表达式提取数字,把“上映9天”这类文本变成可训练的数值字段;日期字段也从整数形式转换为标准时间格式,方便后续做趋势分析。
清洗过程中发现,网售占比、大盘退票人次等字段缺失比例较高。为了保证模型训练数据完整,最终删除包含缺失值的记录,样本量从79042条压缩到18303条。虽然数量减少了,但换来的是更干净、统一、可建模的数据。预处理后保留14个核心特征,随后写入MySQL数据库,方便系统页面读取、查询和维护。

图3-1 数据预处理代码与处理结果

图3-2 清洗后数据写入MySQL数据库
4 电影票房多维度分析
4.1 春节档市场表现
春节档是电影市场里最典型的高峰场景,所以项目先对2024年春节档做了多角度展示。城市等级票房图中可以看到,四线城市票房表现非常突出,说明电影消费已经不只集中在一线城市,下沉市场同样具备很强的观影活力。对于电影发行来说,这一点很重要,宣传和排片不能只盯着大城市。
影片类型和头部影片表现也很明显。国产影片在春节档占据主导,头部影片如《热辣滚烫》《飞驰人生2》等在票房和观影人次上形成明显领先。这样的数据很适合用来说明档期效应和头部效应:节日、口碑、话题度、线上传播共同放大了强势影片的市场优势。

图4-1 春节档城市等级、影片类型与头部影片表现
4.2 票价、网售与时间走势
网售占比与综合票房占比之间存在较明显的关系,高票房影片往往拥有更高的线上购票比例。对现在的电影市场来说,线上平台已经不是简单售票入口,而是重要的流量分发渠道。越热门的影片,越容易被平台推荐,也越容易形成临时购票转化。
票价与票房之间并不是简单的正相关。高票价不一定带来高票房,中低票价如果能够带来更高人次,同样可能形成不错的票房收入。时间走势中,春节关键节点前后,票房、人次、场次和平均票价同时上扬,说明节日窗口对电影市场有明显拉动作用。

图4-2 网售占比、票价关系与春节档时间走势
4.3 上座率、退票率与上映周期
上座率分布呈现明显右偏,大多数场次集中在较低上座区间,说明大量放映场次并没有被充分利用。对影院来说,这类图可以帮助判断排片是否过于分散,是否需要把资源向更高热度影片集中。
退票率与票房的关系更直观:退票率越高,票房往往越低。退票行为可能来自口碑落差、排片调整、临时计划变化等因素,它不仅影响票房,也会影响平台推荐和影院排片信心。上映天数与票房的关系也很符合电影生命周期规律,影片在首周最容易达到高峰,随后热度快速下降。

图4-3 上座率、退票率与上映周期分析
4.4 关联性与影响趋势
进一步看人次、场均人次、分账票房占比与综合票房之间的关系,可以发现票房并不是由单一变量决定的。人次代表观众规模,但如果票价偏低,票房未必高;场均人次代表单场效率,高场均人次通常对应更强市场热度;分账票房占比和综合票房占比接近线性关系,说明票房收入仍主要依赖正常售票渠道。
相关性排序中,累计分账票房、上映天数、网售占比、大盘退票人次、场次、排片占比等变量都具有较强参考价值。这些变量共同说明,票房预测要同时看市场热度、影院资源、渠道分发和时间周期,不能只拿某一个指标下结论。

图4-4 人次、场均人次、分账占比与影响趋势
5 特征选择与模型训练
建模阶段没有直接把所有字段都丢进模型,而是结合业务逻辑、相关性分析和可视化结果做特征选择。最终重点保留上座率、场均人次、综合票价、网售占比、大盘退票率、上映天数、排座占比、场次、排片占比、分账票价、分账票房、分账票房占比、累计分账票房、人次等字段。
模型部分主要训练三类回归算法:随机森林、XGBoost、CatBoost。随机森林适合处理非线性关系,并且天然支持特征重要性分析;XGBoost对结构化数据表现稳定,适合挖掘复杂特征交互;CatBoost对类别特征友好,调参成本相对较低。三类模型同时训练,可以更直观看到不同算法在票房预测任务中的差异。

图5-1 特征选择与模型训练代码展示
表5-1 三类票房预测模型对比
|
模型 |
主要用途 |
项目中的表现 |
|
随机森林 |
票房回归预测、特征重要性解释 |
R²约0.885,综合效果最好 |
|
XGBoost |
结构化数据回归预测 |
R²约0.873,稳定性较好 |
|
CatBoost |
梯度提升回归预测 |
R²约0.873,预测效果接近XGBoost |
6 模型结果展示
6.1 随机森林模型
随机森林是这个项目里表现最好的模型,R²分数达到0.885左右,说明模型能够解释约88.5%的票房变化。预测散点图中,大部分点分布在对角线附近,说明预测值与真实值比较接近。对于票房这种受多因素影响的回归任务,这个效果已经比较适合做系统演示。
随机森林的另一个优势是解释性。特征重要性图显示,上映天数和场次对票房预测贡献最大,其中上映天数的重要性最高,场次紧随其后。这也符合行业规律:影片处在生命周期的哪个阶段、影院给了多少场次,基本决定了它还能获得多少票房空间。

图6-1 随机森林模型预测效果与特征重要性
6.2 XGBoost与CatBoost模型
XGBoost模型的预测效果同样不错,R²分数约为0.873。它的特征重要性排序显示,场次和上映天数是最关键的两个变量。相比随机森林,XGBoost在处理结构化数据时训练速度快、泛化能力好,非常适合做模型对照。
CatBoost模型的R²同样约为0.873,结果和XGBoost接近。特征重要性图中,上映天数、场次、分账票房等字段仍然排在前列。这说明不同模型虽然算法原理不同,但对核心影响因素的判断比较一致,模型结论具有一定稳定性。

图6-2 XGBoost模型预测效果与特征重要性

图6-3 CatBoost模型预测效果与特征重要性
7 系统功能实现
模型训练完成后,项目没有停留在Notebook结果,而是用Flask搭建了一个Web系统。系统前端采用LayUI风格组件,后端通过Flask路由处理不同页面请求,数据库使用MySQL存储票房数据和用户信息。用户端可以注册、登录、查看首页、进入机器学习预测页面、浏览可视化图表。
预测页面是系统的核心功能。用户输入上座率、场均人次、综合票价、网售占比、上映天数、场次、排片占比等特征后,系统调用训练好的模型返回票房预测值。这样一来,模型就从实验结果变成了可以交互使用的工具,展示效果比单纯贴几张模型图更完整。

图7-1 用户端登录、首页、预测与可视化页面
系统还加入了个人信息、全屏显示、主题切换等页面功能,让整体体验更像一个完整平台。管理员端支持登录后台、查看数据列表、按条件查询、编辑记录、新增记录、删除记录和用户管理。对于项目展示来说,后台管理模块非常加分,因为它能体现数据库、权限角色、页面交互和业务维护能力。

图7-2 个人中心、全屏、主题切换与管理员登录

图7-3 管理员后台与票房数据管理页面

图7-4 数据新增、删除与用户管理功能
8 项目亮点
从实现路线看,项目先用Pandas完成数据读取、字段转换和缺失值处理,再把清洗后的结果写入MySQL;分析阶段通过Matplotlib等工具生成多类图表;建模阶段使用scikit-learn、XGBoost、CatBoost等库训练回归模型;系统阶段由Flask负责路由和接口,前端页面负责参数录入、图表展示和后台管理。这个流程比较清楚,答辩时可以按照“数据从哪里来、怎么处理、怎么分析、怎么预测、怎么上线”这一条线去讲。
在实际演示时,可以先展示可视化页面,让观众看到春节档和票房影响因素;再打开预测页面输入一组电影运营数据,直接得到预测票房;最后进入管理员后台展示数据查询、新增、编辑和删除。这样的演示顺序比直接讲算法更容易让人理解,也更能体现项目不是停留在论文层面,而是已经做成了可操作的系统。
第一,数据维度比较完整。项目不只用了综合票房,还加入上座率、排片占比、网售占比、退票率、上映天数、场次、人次等变量,能够从影院运营、观众行为和渠道分发三个角度解释票房变化。
第二,可视化内容丰富。春节档城市票房、国产片占比、头部影片、人次排名、票价关系、退票率关系、上映周期、场均人次、特征相关性都做了展示,读者打开页面后能很快看到市场规律。
第三,模型对比清晰。随机森林、XGBoost、CatBoost三类算法同时训练,通过R²和MAE评估效果,再结合特征重要性解释结果,最后得出随机森林表现较优、上映天数和场次最关键的结论,逻辑链条完整。
第四,系统落地完整。前端页面、用户登录、在线预测、可视化展示、主题切换、管理员后台、数据增删改查、用户管理都有对应实现,适合做答辩演示,也适合继续扩展成更完整的数据分析平台。
9 可扩展方向
后续可以继续接入实时票房数据,让系统从静态展示升级为动态预测;也可以补充导演、演员、电影类型、评分、想看人数、短评数量、社交媒体热度等外部变量,提高首映前预测能力。
模型层面可以增加LightGBM、Stacking融合模型或深度学习模型,也可以引入SHAP解释,让每一次预测都能看到“为什么会预测成这个票房”。系统层面可以增加数据上传、模型重新训练、预测记录保存、模型版本管理和报表导出功能,让它更接近真实业务系统。
如果用于课程设计或毕业设计展示,建议重点突出四个点:数据量达到7万多条,清洗后进入数据库;有春节档多维度可视化;有三类机器学习模型对比;有Flask在线预测和管理员后台。把这四点讲清楚,项目的完整度和工程感就比较明显了。
10 每文一语
把数据整理清楚,把模型跑通,把系统做出来,很多复杂问题都会变得有迹可循。
更多推荐



所有评论(0)