用Python“科學(xué)”預(yù)測下《哪吒》票房
最近幾天,朋友圈和微博被《哪吒之魔童降世》刷屏了。不少看過的朋友都成為“自來水”,力薦此片。
而它的市場表現(xiàn)也很給力,上映首日即破億,5天超10億,目前已成為國產(chǎn)動(dòng)畫片最高票房。
于是很多人開始猜測,最終的票房會(huì)達(dá)到多少?一開始有人預(yù)測十幾億,后來普遍認(rèn)為超20億,到現(xiàn)在甚至有人給出了40億的預(yù)測。
今天我嘗試用“科學(xué)”一點(diǎn)的方法也來預(yù)測一下。
事先說明,我還沒有去看《哪吒》,所以在預(yù)測中并無個(gè)人偏好。對于純數(shù)據(jù)分析來說,這是個(gè)好事,讓我可以做一個(gè)沒有感情的殺手分析師。
相關(guān)的代碼、數(shù)據(jù)、原圖已上傳,獲取方式見文末。(還有小彩蛋)
截至發(fā)稿時(shí)(8月2日)是《哪吒》上映第8天,實(shí)時(shí)票房15億多,前7日票房14.68億。
一種粗糙的預(yù)測方式就是:找一找之前類似電影這個(gè)時(shí)間的票房是多少,按倍數(shù)乘一下。
但這里有個(gè)問題,不同電影的票房走勢是不一樣的。以下是我們從貓眼票房上隨手找的幾部大片或類似電影,他們的票房走勢:
注:零點(diǎn)首映場的數(shù)據(jù)被算在了首映前一天,這里我們做了個(gè)人工處理,把它合并到了首映日。并且沒計(jì)算之前的電影數(shù)據(jù)。這是為了后面的預(yù)測分析做準(zhǔn)備。
從圖上可以看出,有的電影在上線后會(huì)有一小波增長,并且在之后的周末和假日都會(huì)向上波動(dòng),這通常是上映后口碑較好,吸引到更多觀眾并且排片增加的影片;而有的電影,則是上映即巔峰,之后一路下落,甚至沒啥反彈,這其中不乏票房很高的大片,一般是陣容強(qiáng)大/題材吸引人/早期宣發(fā)做得好,但觀影感受卻低于預(yù)期的影片。
這里發(fā)現(xiàn)一個(gè)特別的案例:《白蛇:緣起》,它是少有的上映后票房持續(xù)呈上漲趨勢的影片。然而卻在春節(jié)檔到來之際突然下線,票房戛然而止,實(shí)在可惜。
所以拿不同的電影來比較,結(jié)果也會(huì)差很多。比如常用來作對比的《大圣歸來》,前7日票房累計(jì)為2.99億,總票房9.56億,按比例算一下《哪吒》票房就是近47億;而拿《流浪地球》來作為參考,前7日票房累計(jì)為23.6億,總票房46.55億,結(jié)果就是28.9億。若是再換做《白蛇》或者《愛情公寓》,那更是相去甚遠(yuǎn)。
所以我想到的方法是:通過對歷史票房數(shù)據(jù)進(jìn)行多項(xiàng)式曲線擬合,建立一個(gè)票房走勢的“模型”,再把現(xiàn)有的票房套進(jìn)模型里做計(jì)算。
這里用到的是 numpy 庫 polyfit 和 poly1d 方法,根據(jù)已有數(shù)據(jù),利用最小二乘法得到擬合曲線的方程和系數(shù)。
- np.poly1d(np.polyfit(x, y, n))
對于上述9部電影的擬合效果(紅線為擬合結(jié)果):
對于新上映的電影,數(shù)據(jù)還太少,直接擬合沒有意義。所以我們選擇其他電影擬合出的曲線,進(jìn)行“縮放”,讓它適合現(xiàn)有的數(shù)據(jù)。
這里用 scipy 庫的最小二乘函數(shù) leastsq,將其他電影擬合出的曲線作為基礎(chǔ)(而非通用的多項(xiàng)式),對《哪吒》的已有數(shù)據(jù)進(jìn)行擬合。
- def func(x, p): # 擬合函數(shù)
- A, k = p
- # return A * z(k * x) # 增加x
- return A * z(x) # z為其他電影算出的模型
- def residuals(p, y, x):
- #實(shí)驗(yàn)數(shù)據(jù)x, y和擬合函數(shù)之間的差,p為擬合需要找到的系數(shù)
- return y - func(x, p)
- plsq = leastsq(residuals, p, args=(y, x))
如果用《大圣歸來》的曲線,同時(shí)假設(shè)上映60天,算出來結(jié)果是 41.3 億。
或許那個(gè) 41 億的預(yù)測就是這么出來的。不過《大圣》的票房量級要相對少很多,所以走勢曲線也相對更“平緩”。直接套用在《哪吒》上,系數(shù)是 4.4 倍,我覺得這個(gè)誤差是比較大的。實(shí)際票房不出意外的話,應(yīng)該達(dá)不到這么高。
換做《流浪地球》再試下,結(jié)果 27.6 億。
這個(gè)結(jié)果我覺得更合理些。因?yàn)椋?/p>
- 都是預(yù)算緊缺情況下完成的高質(zhì)量作品
- 上映后都有比較好的口碑傳播,形成現(xiàn)象級話題
- 都有知名度較高的題材(劉慈欣/哪吒)
- 都在熱門檔期(春節(jié)/暑期)
如果在現(xiàn)有數(shù)據(jù)上,加上這個(gè)這周末的三天猜測數(shù)據(jù)(2億/2.5億/2.5億,我覺得這個(gè)數(shù)據(jù)算是比較保守了),再次進(jìn)行擬合。那么結(jié)果就會(huì)達(dá)到 29.9 億。
考慮到《哪吒》的題材相對《地球》更適合全家觀影,并且暑期檔的時(shí)間更長,同期競爭較小,所以我覺得,它的曲線應(yīng)當(dāng)比《地球》更樂觀,破 30 億問題不大。
因此,就目前的狀況來看,我的預(yù)測是介于 30~40 億之間(比《地球》擬合的高,但比《大圣》擬合的低),取個(gè)折中就是略高于 35 億吧。
當(dāng)然,也不排除后續(xù)有變數(shù)。再過幾天,有新的數(shù)據(jù)之后再跑一下這個(gè)預(yù)測程序,應(yīng)該會(huì)更準(zhǔn)確。
相關(guān)代碼、數(shù)據(jù)、結(jié)果圖已上傳,并附有說明,獲取請?jiān)诠娞?Crossin的編程教室)里回復(fù)關(guān)鍵字 哪吒
簡單說明下,代碼分幾部分,可單獨(dú)運(yùn)行:
- get_boxoffice.py 從貓眼票房獲取幾部參考影片的歷史票房數(shù)據(jù)
- get_nezha.py 從貓眼票房獲取《哪吒》票房數(shù)據(jù)
- plot.py 繪制歷史票房走勢圖
- nezha.py 對歷史票房進(jìn)行曲線擬合,并對《哪吒》票房進(jìn)行預(yù)測
說點(diǎn)題外話,不管是30億還是40億,《哪吒》都是鐵定進(jìn)入歷史總票房top10的,并很有希望進(jìn)top5(34億)。
我個(gè)人覺得這是個(gè)好現(xiàn)象。哪怕像《大圣歸來》、《流浪地球》,包括《白蛇》這樣的電影還多不足的地方,但它們的出現(xiàn)和市場表現(xiàn)讓人覺得,還是有人在認(rèn)真做電影,并且觀眾也會(huì)認(rèn)可這樣的電影。這樣的良性循環(huán)會(huì)讓以后出現(xiàn)更多類型更優(yōu)質(zhì)的國產(chǎn)電影,而不是只有喜劇片,只能靠流量明星的單一市場。
雖然劣幣驅(qū)逐良幣的現(xiàn)象在很多領(lǐng)域始終存在,但總會(huì)有人愿意去做良幣。有什么樣的受眾就有什么樣的創(chuàng)作者。我愿意為這些出現(xiàn)的良幣鼓掌和付費(fèi),這樣它們的出現(xiàn)才會(huì)多一些、久一些。不然,好團(tuán)隊(duì)好作品生存不了,我們以后就只能“吃垃圾”了。