德鲁周记09--Kaggle比赛 TMDB Box Office Prediction
Kaggle TMDB Box Office Prediction 报告
- 一.问题定义:
- 二.获取数据:
- 三.研究数据:
- 四.准备数据
- 五.模型研究
- 六.模型微调和模型融合
一.问题定义:
该问题来源于kaggle,在这个世界上,2018年电影收入估计达到417亿美元,电影业比以往任何时候都更受欢迎。但是什么电影票房收入最高?一个导演有多重要?还是预算?
本题将通过电影数据库中7000多部电影的数据,以尝试预测它们在全球的总票房收入。提供的数据点包括演员、剧组、剧情关键词、预算、海报、发行日期、语言、制作公司和国家。该问题实际上还是一道回归问题。
从kaggle上获取数据后,为了更好的训练,每个样本的特征属性和标签需要进行相关处理(包括取出异常值,填充缺省值,特征转换,数据转换等),然后构建多种误差较小的模型(SVR,Ridge,Lasso,ElasticNet,Xgboost,ExtraTree,Lightbgm,AdaBoost,KernelRidge,BayesianRidge,LogisticRegression,RandomForestRegressor),找到最佳参数后将模型Averaging融合,获取更小的误差,达到更好的预测效果,然后将模型保存起来。本次题目使用MSE根均方误差作为衡量模型的标准,最终降到2左右。
二.获取数据:
TMDB票房预测中提供了两组数据:train.csv和test.csv,分别是训练集和测试集。Sample_submission.csv为提交样本示例。本实验为练手项目,所以数据就直接给了,不过有缺失的数据,需要我们来处理一下。
打开kaggle对应项目的数据栏
下载数据
Train.csv
Test.csv
sample_submission.csv
导入numpy,pandas,matplotlib,seaborn包
导入train.csv和test.csv,并显示两个数据文件的尺寸
显示两个数据文件的相关信息
训练数据
测试数据
预览训练集
了解数据特征含义:
Index([‘id’,‘belong_to_collection’,‘budget’,‘genres’,‘homepage’,‘imdb_id’,‘original_language’,‘original_title’,‘overview’,‘popularity’,‘poster_path’,‘production_companies’,‘production_countries’,‘release_date’,‘runtime’,‘spoken_languages’,‘status’,‘tagline’,‘title’,‘Keywords’,‘cast’,‘crew’, ‘revenue’],dtype=‘object’)
id:序号
belong_to_collection:系列电影
budget:预算
genres:题材
homepage:主页
imdb_id:IMDB序号
original_language:原语言
original_title:原片名
overview:剧情简介
popularity:流行系数
poster_path:海报
production_companies:制作公司
production_countries:制作国家
release_date:发布日期
runtime:电影时长
spoken_languages:翻译成的语言
status:电影是否已上映
tagline:宣传标语
title:电影名
Keywords:关键词
cast:演员
crew:剧组
revenue:票房
其中revenue为预测目标值。
三.研究数据:
- 了解数据基本情况
经过观察我们可知,特征belongs_to_collection,generes, homepage, overview,poster_path,production_companies,production_countries,runtime,spoken_language,tagline,Keyword,cast,crew缺少数据;cast、crew是json的格式,需要将演员、导演读取出来,以字符串格式显示。数据中genres、keywords、production_companies也是json格式,需要转化成字符串。
这了使用ast.literal_eval将字符串型的json数据转化成字典列表。
再将这些不规则数据转化成特征,分为标签与编码,如关键演员、题材、分类、系列、发行方等,以及标签数量统计,如分类数量、演员数量、主题长度等。这里需要注意,因为数据集不多,为避免模型过拟合,应仅对TOP的标签进行编码:
预览一下处理之后的效果(这里只截取了部分)
达到预期的效果,但是日期还是字符串格式,再转化一下日期为标准格式
再看一下处理日期之后的效果
- 可视化分析
①观察预算的分布情况,发现现大部分值比较小,数据不平衡,应做log处理,增加数值较小时的区分度,顺便将票房也一样的处理:
②是否有主页对票房票房的影响
这里把homepage转换成布尔值
有主页可以作为电影实力的象征,我们可以观察到票房高的电影一般都有主页。
③各个语言的电影票房票房情况
我们知道由于英文的使用范围更广,所以市场上的英文电影最多,导致高票房和低票房的英文电影都很多。由图可知票房最高的电影通常使用英语,但也有其他语言的高票房电影。
④展示电影标题中的常见词
绘制一个矩形词云图,可以看到电影标题中最常见的词为Man、Love、Last等。
⑤展示电影剧情摘要中的常见词
绘制一个矩形词云图,可以看到电影剧情摘要中最常见的词为Life、Find、Love、One等。
⑥预算对票房的影响
从上图可以看出预算和票房有一定的正相关性。通常预算越高的电影票房也越高。
⑦流行系数对票房的影响
从上图可以看出流行系数和电影票房的相关度较低。
⑧电影时长对票房的影响
从上图可以看出大部分电影的时长都是一个半小时到两个小时左右,而票房收入高的电影时长也集中在这个区域。这可能是由于在此区间内电影基数大,并不能说明它们之间有强相关性。
⑨剧组人数对票房的影响
由上图可以看出剧组人数和电影票房之间关系不是很大。小剧组高票房的电影和大剧组高票房的电影都有很多。
⑩演员人数对票房的影响
由上图可以看出演员人数和电影票房之间关系不是很大。
我们可以建立一个相关矩阵,来观察时长、流行度、预算、剧组人数、演员人数之间的相关性。
可以观察到在这几项中,对票房影响最大是预算和流行度
⑾是否是系列电影对票房的影响
发现系列电影的平均票房更高,可能是由于系列电影能积累粉丝,拥有更大的粉丝基础。
⑿电影题材数量对票房的影响
可以发现电影题材数量为三个时往往有更高的票房,多了或者少了都会使票房降低。
⒀电影上映日期对票房的影响
用箱线图看一下:
可以观察到周一到周三发行的电影很多是高票房的,而周五到周日发行的低票房的电影多。
四.准备数据
- 删除一些相关性低的特征
- 删除特征值唯一的特征
对分类标签进行编码,LabelEncoder会给每个标签分配一个0—n_classes-1之间的编码
对文本变量构造新变量:总共有多少字符,有多少个单词
- 修正一些有错误的数据
五.模型研究
5.1 验证方法我们采用k-折交叉验证, k = 5
5.2 评价标准是根均方误差(mean_squared_error)
5.3 可能的模型有如下16个:SVC,SVR, LinearRegression, Ridge, Lasso, ElasticNet, ExtraTree, AdaBoost, KernelRidge, BayesianRidge, LogisticRegression, DecisionTreeRegressor, RandomForestRegressor, LGBMRegressor, BaggingClassifer, KNeighborsClassifier。
5.4 分别测试了它们在训练集上的均分误差,5-折交叉验证集上的均方误差的平均值和方差。得到的数据如下图所示。
关键代码如下所示(以LinearRegression模型举例):
5.5 最终结合这三种数据(训练集上的RMSE, 验证集上的RMSE, 验证集上的方差)我们最终选则了4种模型,分别是LinearRegression, Ridge, BayesianRidge, LGBMRegressor。
六.模型微调和模型融合
6.1 选择最佳超参数,找到最好的模型
我们发现需要调节超参数的模型有LGBMRegressor,我们最初的模型参数为{learning_rate=0.01, max_depth=5,num_leaves=20}和训练结果分别如下图所示:
用网格搜索最佳超参数,关键代码如下所示:
不同参数组合得到结果如下所示:
得到的最佳参数为:{‘learning_rate’: 0.05, ‘max_depth’: 5, ‘num_leaves’: 30}
结论:可以看出模型微调后训练损失值从2.3577降到了2.1375。得到了超参数参数最佳的模型。
6.2 集成模型:将表现最好的模型组合起来
采用平均法将模型融合。关键代码如下:
结论:融合得到的训练损失可以看到降到了2.0264。
6.3 分析最佳模型和它们的误差
最佳模型的误差已经降到了2.0264, 可以看出比选出的4种模型(分别是LinearRegression, Ridge, BayesianRidge, LGBMRegressor)中最好的模型表现还要好。因此最佳模型已经达到了理想的效果。
6.4 用测试集评估系统
用测试集来评估我们的最佳模型,可以看出这个模型的根均方误差是要差一点。但是在预期之内,因为测试集上的评估结果通常要比训练集上的效果差一点。总体来说效果是令人满意的。
关键代码如下所示:
德鲁周记09--Kaggle比赛 TMDB Box Office Prediction相关推荐
- kaggle TMDB Box Office Prediction
点这传送kaggle原作者 点这传送数据源&比赛 首先是常规的读数 import numpy as np # linear algebra import pandas as pd # data ...
- Kaggle常用函数总结 原创 2017年07月03日 21:47:34 标签: kaggle 493 kaggle比赛也参加了好几次,在这里就把自己在做比赛中用到的函数汇总到这,方便自己以后查阅
Kaggle常用函数总结 原创 2017年07月03日 21:47:34 标签: kaggle / 493 编辑 删除 kaggle比赛也参加了好几次,在这里就把自己在做比赛中用到的函数汇总到这,方便 ...
- Kaggle比赛源代码和讨论的收集整理
Kaggle比赛源代码和讨论的收集整理. Algorithmic Trading Challenge25 Solution whitepaper26. Solution thread19. Allst ...
- kaggle比赛流程(转)
kaggle比赛流程(转) 一.比赛概述 不同比赛有不同的任务,分类.回归.推荐.排序等.比赛开始后训练集和测试集就会开放下载. 比赛通常持续 2 ~ 3 个月,每个队伍每天可以提交的次数有限,通常为 ...
- 简单介绍一些关于 Kaggle 比赛的知识
简单介绍一些关于 Kaggle 比赛的知识 转自: https://www.zhihu.com/question/23987009/answer/29371981 作者:匿名用户 链接:https:/ ...
- Kaggle比赛分类与winner资料汇总(更新中)
Kaggle比赛分类与winner资料汇总(更新中) 1.介绍 把比赛分为四类,Data Mining.Images.NLP.Speech Recognition,举几个例子: Data Mining ...
- 竞赛老陪跑怎么办?来自一位Kaggle比赛失败者的含泪总结
大数据文摘出品 来源:medium 编译:zeroInfinity.笪洁琼 Kaggle比赛应该是数据竞赛中公认含金量最高的那个.每场比赛,参加的队伍至少上千人,也并非每次都次都能脱引而出,一不小心就 ...
- 在参加了39场Kaggle比赛之后,有人总结了一份图像分割炼丹的「奇技淫巧」
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心 一个经历了 39 场 Kaggle 比赛的团队 ...
- 通俗理解kaggle比赛大杀器xgboost + XGBOOST手算内容 转
通俗理解kaggle比赛大杀器xgboost 转 https://blog.csdn.net/v_JULY_v/article/details/81410574 XGBOOST有手算内容 htt ...
最新文章
- 2020 AI DEBATE即将召开, Judea Pearl、李飞飞等10多位顶级科学家参与 | AI日报
- linux下删除带特殊符号文件的方法
- MultiByteToWideChar和WideCharToMultiByte用法详解
- pytorch笔记——autograd和Variable
- Python实现多行数据读入
- ptmalloc、tcmalloc与jemalloc内存分配器对比分析
- MySQL实习训练1
- 高效的css命名约定
- 你朋友圈里原来这些文章最火
- 机器视觉 计算机专业,机器视觉属于什么专业
- 计算机系统内部存储器的存储单元,内部存储器练习
- NYOJ 137 取石子(三)(教主神题)
- 给迷茫的计算机系大学生的一封信 JAVA
- 磨金石教育摄影技能干货分享|世界顶级的手机摄影作品欣赏
- Android实现真心话大冒险App(多线程,音乐播放)
- 计算机储存配置信息,怎么看电脑配置信息
- 【陈曲写作】考研英语写作
- Unable to simultaneously satisfy constraints.这一问题
- 雷达信道化接收算法及论证(持续更新)
- 论语.八佾之绘事后素
热门文章
- Java加密体系-java.security包
- Linux创建空白文件,ubuntu添加右键新建文本文档
- Linux命令·ps
- 安装rtx时报错因计算机中丢失lo,RTX登录时提示“please install msxml5 or later”问题怎么解决...
- linux设置操作系统安装盘的iso文件为安装源安装mysql服务_Linux 操作系统安装盘的定制...
- 游戏中的常见概率设计分析
- 最长递增子序列的长度(编程之美)
- 专访央美陈抱阳:艺术家眼中的 AI ,有何不同?
- Cocos Creator经典游戏制作之:信使(The Messenger)
- 我与CSDN--如白开水般纯净