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为预测目标值。

三.研究数据:

  1. 了解数据基本情况

经过观察我们可知,特征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的标签进行编码:





预览一下处理之后的效果(这里只截取了部分)

达到预期的效果,但是日期还是字符串格式,再转化一下日期为标准格式

再看一下处理日期之后的效果

  1. 可视化分析

①观察预算的分布情况,发现现大部分值比较小,数据不平衡,应做log处理,增加数值较小时的区分度,顺便将票房也一样的处理:


②是否有主页对票房票房的影响

这里把homepage转换成布尔值

有主页可以作为电影实力的象征,我们可以观察到票房高的电影一般都有主页。

③各个语言的电影票房票房情况


我们知道由于英文的使用范围更广,所以市场上的英文电影最多,导致高票房和低票房的英文电影都很多。由图可知票房最高的电影通常使用英语,但也有其他语言的高票房电影。

④展示电影标题中的常见词

绘制一个矩形词云图,可以看到电影标题中最常见的词为Man、Love、Last等。

⑤展示电影剧情摘要中的常见词

绘制一个矩形词云图,可以看到电影剧情摘要中最常见的词为Life、Find、Love、One等。

⑥预算对票房的影响

从上图可以看出预算和票房有一定的正相关性。通常预算越高的电影票房也越高。

⑦流行系数对票房的影响


从上图可以看出流行系数和电影票房的相关度较低。

⑧电影时长对票房的影响

从上图可以看出大部分电影的时长都是一个半小时到两个小时左右,而票房收入高的电影时长也集中在这个区域。这可能是由于在此区间内电影基数大,并不能说明它们之间有强相关性。

⑨剧组人数对票房的影响

由上图可以看出剧组人数和电影票房之间关系不是很大。小剧组高票房的电影和大剧组高票房的电影都有很多。

⑩演员人数对票房的影响

由上图可以看出演员人数和电影票房之间关系不是很大。

我们可以建立一个相关矩阵,来观察时长、流行度、预算、剧组人数、演员人数之间的相关性。

可以观察到在这几项中,对票房影响最大是预算和流行度

⑾是否是系列电影对票房的影响

发现系列电影的平均票房更高,可能是由于系列电影能积累粉丝,拥有更大的粉丝基础。

⑿电影题材数量对票房的影响

可以发现电影题材数量为三个时往往有更高的票房,多了或者少了都会使票房降低。

⒀电影上映日期对票房的影响

用箱线图看一下:

可以观察到周一到周三发行的电影很多是高票房的,而周五到周日发行的低票房的电影多。

四.准备数据

  1. 删除一些相关性低的特征

  1. 删除特征值唯一的特征

  1. 对分类标签进行编码,LabelEncoder会给每个标签分配一个0—n_classes-1之间的编码

  2. 对文本变量构造新变量:总共有多少字符,有多少个单词

  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相关推荐

  1. kaggle TMDB Box Office Prediction

    点这传送kaggle原作者 点这传送数据源&比赛 首先是常规的读数 import numpy as np # linear algebra import pandas as pd # data ...

  2. Kaggle常用函数总结 原创 2017年07月03日 21:47:34 标签: kaggle 493 kaggle比赛也参加了好几次,在这里就把自己在做比赛中用到的函数汇总到这,方便自己以后查阅

    Kaggle常用函数总结 原创 2017年07月03日 21:47:34 标签: kaggle / 493 编辑 删除 kaggle比赛也参加了好几次,在这里就把自己在做比赛中用到的函数汇总到这,方便 ...

  3. Kaggle比赛源代码和讨论的收集整理

    Kaggle比赛源代码和讨论的收集整理. Algorithmic Trading Challenge25 Solution whitepaper26. Solution thread19. Allst ...

  4. kaggle比赛流程(转)

    kaggle比赛流程(转) 一.比赛概述 不同比赛有不同的任务,分类.回归.推荐.排序等.比赛开始后训练集和测试集就会开放下载. 比赛通常持续 2 ~ 3 个月,每个队伍每天可以提交的次数有限,通常为 ...

  5. 简单介绍一些关于 Kaggle 比赛的知识

    简单介绍一些关于 Kaggle 比赛的知识 转自: https://www.zhihu.com/question/23987009/answer/29371981 作者:匿名用户 链接:https:/ ...

  6. Kaggle比赛分类与winner资料汇总(更新中)

    Kaggle比赛分类与winner资料汇总(更新中) 1.介绍 把比赛分为四类,Data Mining.Images.NLP.Speech Recognition,举几个例子: Data Mining ...

  7. 竞赛老陪跑怎么办?来自一位Kaggle比赛失败者的含泪总结

    大数据文摘出品 来源:medium 编译:zeroInfinity.笪洁琼 Kaggle比赛应该是数据竞赛中公认含金量最高的那个.每场比赛,参加的队伍至少上千人,也并非每次都次都能脱引而出,一不小心就 ...

  8. 在参加了39场Kaggle比赛之后,有人总结了一份图像分割炼丹的「奇技淫巧」

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心 一个经历了 39 场 Kaggle 比赛的团队 ...

  9. 通俗理解kaggle比赛大杀器xgboost + XGBOOST手算内容 转

    通俗理解kaggle比赛大杀器xgboost    转 https://blog.csdn.net/v_JULY_v/article/details/81410574 XGBOOST有手算内容 htt ...

最新文章

  1. 2020 AI DEBATE即将召开, Judea Pearl、李飞飞等10多位顶级科学家参与 | AI日报
  2. linux下删除带特殊符号文件的方法
  3. MultiByteToWideChar和WideCharToMultiByte用法详解
  4. pytorch笔记——autograd和Variable
  5. Python实现多行数据读入
  6. ptmalloc、tcmalloc与jemalloc内存分配器对比分析
  7. MySQL实习训练1
  8. 高效的css命名约定
  9. 你朋友圈里原来这些文章最火
  10. 机器视觉 计算机专业,机器视觉属于什么专业
  11. 计算机系统内部存储器的存储单元,内部存储器练习
  12. NYOJ 137 取石子(三)(教主神题)
  13. 给迷茫的计算机系大学生的一封信 JAVA
  14. 磨金石教育摄影技能干货分享|世界顶级的手机摄影作品欣赏
  15. Android实现真心话大冒险App(多线程,音乐播放)
  16. 计算机储存配置信息,怎么看电脑配置信息
  17. 【陈曲写作】考研英语写作
  18. Unable to simultaneously satisfy constraints.这一问题
  19. 雷达信道化接收算法及论证(持续更新)
  20. 论语.八佾之绘事后素

热门文章

  1. Java加密体系-java.security包
  2. Linux创建空白文件,ubuntu添加右键新建文本文档
  3. Linux命令·ps
  4. 安装rtx时报错因计算机中丢失lo,RTX登录时提示“please install msxml5 or later”问题怎么解决...
  5. linux设置操作系统安装盘的iso文件为安装源安装mysql服务_Linux 操作系统安装盘的定制...
  6. 游戏中的常见概率设计分析
  7. 最长递增子序列的长度(编程之美)
  8. 专访央美陈抱阳:艺术家眼中的 AI ,有何不同?
  9. Cocos Creator经典游戏制作之:信使(The Messenger)
  10. 我与CSDN--如白开水般纯净