社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用 Python“科学”预测下《哪吒》票房

Python之禅 • 7 年前 • 615 次点击  

最近几天,朋友圈和微博被《哪吒之魔童降世》刷屏了。不少看过的朋友都成为“自来水”,力荐此片。


而它的市场表现也很给力,上映首日即破亿,5天超10亿,目前已成为国产动画片最高票房。


于是很多人开始猜测,最终的票房会达到多少?一开始有人预测十几亿,后来普遍认为超20亿,到现在甚至有人给出了40亿的预测。



今天我尝试用“科学”一点的方法也来预测一下。如果最终结果有幸言中,还望大家帮忙转发点赞支持一下。


事先说明,我还没有去看《哪吒》,所以在预测中并无个人偏好。对于纯数据分析来说,这是个好事,让我可以做一个没有感情的杀手分析师。


相关的代码、数据、原图已上传,获取方式见文末。(还有小彩蛋)




截至发稿时(8月2日)是《哪吒》上映第8天,实时票房15亿多,前7日票房14.68亿。


一种粗糙的预测方式就是:找一找之前类似电影这个时间的票房是多少,按倍数乘一下。


但这里有个问题,不同电影的票房走势是不一样的。以下是我们从猫眼票房上随手找的几部大片或类似电影,他们的票房走势:

注:零点首映场的数据被算在了首映前一天,这里我们做了个人工处理,把它合并到了首映日。并且没计算之前的电影数据。这是为了后面的预测分析做准备。


从图上可以看出,有的电影在上线后会有一小波增长,并且在之后的周末和假日都会向上波动,这通常是上映后口碑较好,吸引到更多观众并且排片增加的影片;而有的电影,则是上映即巅峰,之后一路下落,甚至没啥反弹,这其中不乏票房很高的大片,一般是阵容强大/题材吸引人/早期宣发做得好,但观影感受却低于预期的影片。


这里发现一个特别的案例:《白蛇:缘起》,它是少有的上映后票房持续呈上涨趋势的影片。然而却在春节档到来之际突然下线,票房戛然而止,实在可惜。


所以拿不同的电影来比较,结果也会差很多。比如常用来作对比的《大圣归来》,前7日票房累计为2.99亿,总票房9.56亿,按比例算一下《哪吒》票房就是近47亿;而拿《流浪地球》来作为参考,前7日票房累计为23.6亿,总票房46.55亿,结果就是28.9亿。若是再换做《白蛇》或者《爱情公寓》,那更是相去甚远。


所以我想到的方法是:通过对历史票房数据进行多项式曲线拟合,建立一个票房走势的“模型”,再把现有的票房套进模型里做计算。


这里用到的是 numpy 库 polyfit 和 poly1d 方法,根据已有数据,利用最小二乘法得到拟合曲线的方程和系数。

np.poly1d(np.polyfit(x, y, n))


对于上述9部电影的拟合效果(红线为拟合结果):



对于新上映的电影,数据还太少,直接拟合没有意义。所以我们选择其他电影拟合出的曲线,进行“缩放”,让它适合现有的数据。


这里用 scipy 库的最小二乘函数 leastsq,将其他电影拟合出的曲线作为基础(而非通用的多项式),对《哪吒》的已有数据进行拟合。


def func(x, p):  # 拟合函数    A, k = p#     return A * z(k * x) # 增加x    return A * z(x)  # z为其他电影算出的模型
def residuals(p, y, x): #实验数据x, y和拟合函数之间的差,p为拟合需要找到的系数 return y - func(x, p)
plsq = leastsq(residuals, p, args=(y, x))

如果用《大圣归来》的曲线,同时假设上映60天,算出来结果是 41.3 亿。



或许那个 41 亿的预测就是这么出来的。不过《大圣》的票房量级要相对少很多,所以走势曲线也相对更“平缓”。直接套用在《哪吒》上,系数是 4.4 倍,我觉得这个误差是比较大的。实际票房不出意外的话,应该达不到这么高。


换做《流浪地球》再试下,结果 27.6 亿。



这个结果我觉得更合理些。因为:

  1. 都是预算紧缺情况下完成的高质量作品

  2. 上映后都有比较好的口碑传播,形成现象级话题

  3. 都有知名度较高的题材(刘慈欣/哪吒)

  4. 都在热门档期(春节/暑期)


如果在现有数据上,加上这个这周末的三天猜测数据(2亿/2.5亿/2.5亿,我觉得这个数据算是比较保守了),再次进行拟合。那么结果就会达到 29.9 亿。



考虑到《哪吒》的题材相对《地球》更适合全家观影,并且暑期档的时间更长,同期竞争较小,所以我觉得,它的曲线应当比《地球》更乐观,破 30 亿问题不大。


因此,就目前的状况来看,我的预测是介于 30~40 亿之间(比《地球》拟合的高,但比《大圣》拟合的低),取个折中就是略高于 35 亿吧。


当然,也不排除后续有变数。再过几天,有新的数据之后再跑一下这个预测程序,应该会更准确。




相关代码、数据、结果图已上传,并附有说明,获取请在公众号(Crossin的编程教室)里回复关键字 哪吒


简单说明下,代码分几部分,可单独运行:

  • get_boxoffice.py 从猫眼票房获取几部参考影片的历史票房数据

  • get_nezha.py 从猫眼票房获取《哪吒》票房数据

  • plot.py 绘制历史票房走势图

  • nezha.py 对历史票房进行曲线拟合,并对《哪吒》票房进行预测




说点题外话,不管是30亿还是40亿,《哪吒》都是铁定进入历史总票房top10的,并很有希望进top5(34亿)。


我个人觉得这是个好现象。哪怕像《大圣归来》、《流浪地球》,包括《白蛇》这样的电影还多不足的地方,但它们的出现和市场表现让人觉得,还是有人在认真做电影,并且观众也会认可这样的电影。这样的良性循环会让以后出现更多类型更优质的国产电影,而不是只有喜剧片,只能靠流量明星的单一市场。


虽然劣币驱逐良币的现象在很多领域始终存在,但总会有人愿意去做良币。有什么样的受众就有什么样的创作者。我愿意为这些出现的良币鼓掌和付费,这样它们的出现才会多一些、久一些。不然,好团队好作品生存不了,我们以后就只能“吃垃圾”了。


推荐阅读:

程序员是不是青春饭

谁偷偷删了你的微信?别慌!Python 帮你都揪出来了


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37497