⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️
🐴作者:秋无之地🐴简介:CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作,主要擅长领域有:python全栈、爬虫、大数据开发、人工智能等。
🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、留言💬、关注🤝,关注必回关
前言:
上一篇讲到采用AI识别技术实现图像转文字(OCR技术),不仅详细地介绍了OCR技术的概述、应用场景以及技术原理,还深入讲解如何接入OCR技术,实现通过票证图片的识别。
今天继续探索AI之路,通过AI大模型预测春节电影票房。
一、春节电影哪部最火
2025年春节档电影总票房为95.10亿元。
2025年春节档(1月28日至2月4日)电影市场表现出色,根据国家电影专资办统计以及多个权威媒体发布的数据,档期内的电影总票房达到了95.10亿元,观影人次为1.87亿,创造了中国电影史上春节档的新纪录。
更有《哪吒之魔童闹海》以48.39亿元的票房成绩领跑!截止目前票房已超百亿,成为中国历史上唯一一部也是第一部超百亿的电影。
接下来,我们通过AI建立预测模型来预测一下《哪吒之魔童闹海》的总票房
二、随机森林模型
1、模型概述
随机森林属于集成学习,是多个决策树组成的。每个决策树用不同的数据子集和特征来训练,最后结果综合起来,比如分类问题就投票,回归问题就取平均。这样能减少过拟合,提高模型的泛化能力。
2、示例说明
想象你要判断一个水果是苹果还是橙子,如果只问一个人(单个决策树),他可能因为经验不足而犯错。但如果问100个人(森林),每人随机观察水果的不同特征(颜色、形状、重量等),最后统计大家的答案,结果就会更可靠——这就是随机森林的核心思想。
简单示例:
1️⃣ 场景:用3个特征判断水果
特征:颜色(红/橙)、形状(圆形/椭圆)、重量(轻/重)
目标:判断是苹果🍎还是橙子🍊
2️⃣ 训练过程:
-
随机选10个水果样本(允许重复选择同一个样本)
-
随机选2个特征(比如颜色+重量)
-
用这组数据训练一棵决策树
-
重复上述过程训练100棵不同的树(每棵树用不同样本和特征组合)
3️⃣ 预测新水果:
一个新水果:红色🔴、圆形⚪️、重量轻
-
第1棵树根据颜色+重量 → 判断为苹果
-
第2棵树根据形状+重量 → 判断为苹果
-
第3棵树根据颜色+形状 → 判断为橙子
-
...(其他97棵树继续判断)
4️⃣ 最终结果:
统计100棵树的结果,比如78票苹果🍎,22票橙子🍊 → 判定为苹果
为什么有效?
-
🌳 单棵树可能犯错,但多数树正确的概率更高
-
🔀 随机选择样本和特征,让每棵树关注不同角度
-
🛡️ 避免过拟合(不像单棵树死记硬背训练数据)
三、预测模型
1、 数据准备
有想建立模型并训练成你想要的模样,首先得收集数据
# 假设已有电影历史数据集(需自行收集真实数据)
# 示例数据结构:
data = {
'电影名称': ['哪吒之魔童降世', '流浪地球', '复仇者联盟4', '红海行动', '唐人街探案3'],
'导演知名度': [7, 8, 9, 7, 8], # 评分制(1-10)
'主演知名度': [8, 8, 9, 7, 8], # 评分制(1-10)
'类型_动画': [1, 0, 0, 0, 0], # 独热编码
'类型_科幻': [0, 1, 1, 0, 0],
'上映月份': [7, 2, 4, 2, 2], # 月份数值
'评分': [8.4, 7.9, 8.5, 8.3, 7.9], # 豆瓣评分
'宣传费用(万)': [5000, 8000, 15000, 6000, 12000], # 宣传投入
'前作票房(亿)': [0, 0, 23.7, 0, 8.23], # 系列电影前作票房
'票房(亿)': [50.35, 46.86, 42.5, 36.51, 45.23] # 目标变量
}
df = pd.DataFrame(data)
2、 数据预处理
一般收集到的数据都需要经过预处理才能继续使用
# 处理分类变量(示例处理,实际需根据数据情况调整)
le = LabelEncoder()
df['导演编码'] = le.fit_transform(df['电影名称']) # 将导演名称转换为数字编码
# 特征选择
features = ['导演知名度', '主演知名度', '类型_动画', '类型_科幻',
'上映月份', '评分', '宣传费用(万)', '前作票房(亿)']
X = df[features]
y = df['票房(亿)']
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.2, random_state=42)
3、 模型构建
数据有了,这时候就可以构建模型
# 使用随机森林回归器
rf = RandomForestRegressor(random_state=42)
# 网格搜索优化参数
param_grid = {
'n_estimators': [100, 200],
'max_depth': [None, 5, 10],
'min_samples_split': [2, 5]
}
grid_search = GridSearchCV(rf, param_grid, cv=3, scoring='r2')
grid_search.fit(X_train, y_train)
# 获取最佳模型
best_model = grid_search.best_estimator_
4、 模型评估
一个模型建立好后,需要导入数据做训练并针对某些特征作为评估指标来评判模型的准确度
# 预测测试集
y_pred = best_model.predict(X_test)
# 评估指标
print(f"最佳参数:{grid_search.best_params_}")
print(f"R²分数:{r2_score(y_test, y_pred):.2f}")
print(f"MAE:{mean_absolute_error(y_test, y_pred):.2f}亿")
print(f"MSE:{mean_squared_error(y_test, y_pred):.2f}")
# 特征重要性可视化
importances = best_model.feature_importances_
plt.barh(features, importances)
plt.title('特征重要性分析')
plt.show()
5、 票房预测
测试完后可以实践预测
# 需要输入哪吒2的特征数据(示例数据,需根据实际情况调整)
nezha2_features = {
'导演知名度': 9, # 假设饺子导演知名度提升
'主演知名度': 8, # 动画电影通常没有真人主演
'类型_动画': 1,
'类型_科幻': 0,
'上映月份': 7, # 假设暑期档上映
'评分': 8.5, # 假设口碑与第一部持平
'宣传费用(万)': 15000, # 假设加大宣传投入
'前作票房(亿)': 50.35 # 哪吒1的票房
}
# 转换为DataFrame并预处理
X_nezha2 = pd.DataFrame([nezha2_features])
X_nezha2_scaled = scaler.transform(X_nezha2)
# 进行预测
prediction = best_model.predict(X_nezha2_scaled)
print(f"\n《哪吒2》票房预测结果:{prediction[0]:.2f}亿")
四、完整代码
# -*- coding: utf-8 -*-
"""
电影票房预测模型(示例代码)
适用场景:基于历史数据的回归预测
"""
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import matplotlib.pyplot as plt
# ==================== 数据准备 ====================
# 假设已有电影历史数据集(需自行收集真实数据)
# 示例数据结构:
data = {
'电影名称': ['哪吒之魔童降世', '流浪地球', '复仇者联盟4', '红海行动', '唐人街探案3'],
'导演知名度': [7, 8, 9, 7, 8], # 评分制(1-10)
'主演知名度': [8, 8, 9, 7, 8], # 评分制(1-10)
'类型_动画': [1, 0, 0, 0, 0], # 独热编码
'类型_科幻': [0, 1, 1, 0, 0],
'上映月份': [7, 2, 4, 2, 2], # 月份数值
'评分': [8.4, 7.9, 8.5, 8.3, 7.9], # 豆瓣评分
'宣传费用(万)': [5000, 8000, 15000, 6000, 12000], # 宣传投入
'前作票房(亿)': [0, 0, 23.7, 0, 8.23], # 系列电影前作票房
'票房(亿)': [50.35, 46.86, 42.5, 36.51, 45.23] # 目标变量
}
df = pd.DataFrame(data)
# ==================== 数据预处理 ====================
# 处理分类变量(示例处理,实际需根据数据情况调整)
le = LabelEncoder()
df['导演编码'] = le.fit_transform(df['电影名称']) # 将导演名称转换为数字编码
# 特征选择
features = ['导演知名度', '主演知名度', '类型_动画', '类型_科幻',
'上映月份', '评分', '宣传费用(万)', '前作票房(亿)']
X = df[features]
y = df['票房(亿)']
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.2, random_state=42)
# ==================== 模型构建 ====================
# 使用随机森林回归器
rf = RandomForestRegressor(random_state=42)
# 网格搜索优化参数
param_grid = {
'n_estimators': [100, 200],
'max_depth': [None, 5, 10],
'min_samples_split': [2, 5]
}
grid_search = GridSearchCV(rf, param_grid, cv=3, scoring='r2')
grid_search.fit(X_train, y_train)
# 获取最佳模型
best_model = grid_search.best_estimator_
# ==================== 模型评估 ====================
# 预测测试集
y_pred = best_model.predict(X_test)
# 评估指标
print(f"最佳参数:{grid_search.best_params_}")
print(f"R²分数:{r2_score(y_test, y_pred):.2f}")
print(f"MAE:{mean_absolute_error(y_test, y_pred):.2f}亿")
print(f"MSE:{mean_squared_error(y_test, y_pred):.2f}")
# 特征重要性可视化
importances = best_model.feature_importances_
plt.barh(features, importances)
plt.title('特征重要性分析')
plt.show()
# ==================== 哪吒2预测 ====================
# 需要输入哪吒2的特征数据(示例数据,需根据实际情况调整)
nezha2_features = {
'导演知名度': 9, # 假设饺子导演知名度提升
'主演知名度': 8, # 动画电影通常没有真人主演
'类型_动画': 1,
'类型_科幻': 0,
'上映月份': 7, # 假设暑期档上映
'评分': 8.5, # 假设口碑与第一部持平
'宣传费用(万)': 15000, # 假设加大宣传投入
'前作票房(亿)': 50.35 # 哪吒1的票房
}
# 转换为DataFrame并预处理
X_nezha2 = pd.DataFrame([nezha2_features])
X_nezha2_scaled = scaler.transform(X_nezha2)
# 进行预测
prediction = best_model.predict(X_nezha2_scaled)
print(f"\n《哪吒2》票房预测结果:{prediction[0]:.2f}亿")
版权声明
本文章版权归作者所有,未经作者允许禁止任何转载、采集,作者保留一切追究的权利。