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. 【从零学习OpenCV 4】安装过程中问题解决方案
  2. ThinkPHP简单的基础
  3. 计算机考研只有数据结构,【择校必看】十三所计算机专业课只考数据结构的985院校!...
  4. JAVA传入一个字符串,返回一个字符串中的大写字母
  5. Python time localtime()方法
  6. 【数据结构与算法】字符串匹配 BF算法 RK算法
  7. python教程很详细_Python编程入门教程:从入门到高级,非常详细
  8. 第六节:框架搭建之EF的Fluent Api模式的使用流程
  9. centos卸载不必要的程序_在RHEL / CentOS 7上禁用和删除不需要的服务最小安装
  10. echarter: ECharts的R语言接口(一)
  11. 强制打开BIOS中禁用的I/OAT DCA(一)
  12. 如何使用使用PS批量制作字幕
  13. Windows10下载到U盘怎么安装?
  14. 经典解读商业智能BI、大数据、数据中台三者关系
  15. Java设置小数点位数小妙招
  16. 云课堂智慧职教答案python_2020智慧职教云课堂Python编程基础答案完整满分单元测试答案...
  17. oracle新建一个自增列,sequence的使用
  18. ORA-04021导致oracle11gADG备库宕机问题处理
  19. FBTFT driver St7789v LCD 移植简介
  20. 网站建设推广的几个绝招

热门文章

  1. .NET(C#、VB)APP开发——Smobiler平台控件介绍:PDFView
  2. python遗传算法模块
  3. iOS不能下载迅雷怎么办
  4. 泛娱乐头脑风暴年初上演,网易MCtalk解析科技与创意
  5. 最优控制中极小值原理及其应用
  6. monkey 命令详解
  7. 2019常用NLP标注工具简单介绍
  8. Itext图层合并/分离
  9. 【九天教您南方cass 9.1】 07 绘制与标注圆曲线和细部点的方法
  10. 600w播放,80w涨粉,B站UP主恰饭B站粉丝竟刷屏感谢甲方!