鬼滅之刃真的好看嗎?透過貝式統計與Python分析臺灣電影市場數據

source : 木棉花(https://www.e-muse.com.tw/node/712)

拖了接近兩個月左右沒更新QQ,主要是因為前兩個月在忙期末專題與升學的東西、同時又有臺大國企跟BCG的課程SCAP專案、一些比賽討論接著期中考,最近事情剛告一段落,終於有時間更新~~

最近上映的「鬼滅之刃-無限列車」電影大受好評,身邊的朋友超級多人在看相關的作品,我記得有天早上上經濟數學的時候,還有幾個人穿著角色的扮裝在教室聽課(真的太搶眼) 後來回宿舍才聽到室友說那天是電影首映會,看朋友限時也有看到首映會的盛況。然後出去玩聽到有小朋友在路上一直喊岩之呼吸… 等等,也因為這些事情實在讓我太印象深刻了,就開始對這部電影產生好奇:

「真的有大家說得那麼好看嗎?」

當然要回答這個疑問可以很直接去電影院看再給予評價就好 XDD

只是腦袋剛有了這個疑問產生,我馬上就想到有一個很棒的數據分析方法可以回答這個問題,而且不是基於自己主觀判斷的,這個方法就是本文的主角:貝葉斯。

資料放在這裡,有興趣的讀者可以一起實做看看:連結

為什麼會紅?怎麼衡量「好看」這件事情?

Google上的目前上映電影資料

通常很多排名都是狂熱的粉絲衝出來的,真正高品質的作品很多都會在接近滿分,卻又不會落在最高分的地方。而通常大受好評的作品往往都是先透過排名口碑急速竄起的,也因此排行榜的評價可以做為市場的觀察變數,而好評、壞評的分數就可以表示「好看」這件事情。

聽起來只要把平均評分排序,就可以知道好不好看了,對吧?但事情有這麼簡單嗎?首先我們可以思考在一般網站中「好」這件事情是怎麼定義的,就拿「好看排名」來說.目前每一種排名方法都有對應的問題:

  • 熱度:用熱度排名,問題就是比如是雖然很多人看,但是差評非常多,這通常體現在高期待的作品上
  • 差數:用好評減去壞評排名,但這會受到聲量影響,連帶受到影響,具體來說偏好的聲量逐漸累積會使得聲量高的電影在這裡有優勢,而這也反映在時間上,如果用這種方式排名可以預期早推出的電影會排在最前面。
  • 時間:直接用上映時間排名,有時效性,通常只用在新片推出的排行上,但對於「品質、好看度」基本上沒有什麼關聯
  • 好評比率:好評除以壞評排名,但很明顯(1好評 , 0 差評) 的電影會高於 (999好評, 1差評)的電影,難以克服數據代表性的問題,單純用數量加權也會遭遇上面「差數排名」的問題。

貝葉斯方法:透過觀察變數來找到隱藏變數

Photo by Joshua Reddekopp on Unsplash

我們來看看維基百科對貝式統計的描述:

貝氏推論將後驗概率(考慮相關證據或數據後,某一事件的條件機率)作為先驗概率(考慮相關證據或數據前,某一事件不確定性的機率)和似然函數(由觀測數據的統計模型(概率模型)推導而得)這兩個前因導出的結果。貝氏推論根據貝氏定理計算後驗概率:

大名鼎鼎的貝式定理

我們可以這樣假設:倘若說我們有一把尺可以絕對衡量每個人的好評度,這把尺是隱性的,而我們所觀察到的就是「好評」這個東西,如果這樣思考以及對貝式推論不陌生的話,透過觀察值來建構隱藏變數的模型,在發想概念時聽起來就是一個非常適合用貝葉斯方法處理,透過MCMC求解的問題。

也因此我們原本的問題是「鬼滅之刃好看嗎?」變成了一道數學問題:「一個觀影者認為鬼滅之刃好看(給予好評)的機率是多少呢?」而因為我們觀察到的是好評數據,也因此建立一個模型來捕捉「真滴好看」的想法就出來了,有了建模的想法,那麼問題就來了:「我們怎麼決定先驗分佈呢?」

資料收集與定義好評

首先去電影網站把評論資料抓下來,這裡面比較麻煩是評分資料會是圖片,所以需要透過CSS的屬性來知道每一筆評論的好評程度,另外就是要統計不同評論的好評程度,定義大於三顆星為好評,小於三顆星為壞評,好評數為good,壞評數為bad。

當然貝葉斯是可以直接用5星評分的資料來解的,但是因為我想到的是二項分配(真實好評率 p 與總票數N,類似於參數p與N的二項分配),N次試驗中正好得到k次成功的機率由機率質量函數給出

所以我就把資料定義為好評 x 壞評的形式,如果要用五星評價也只要稍微轉化模型的數學公式即可。

分析之前:思考資料與先驗分佈的關係

右偏分佈還是疊兩層常態分佈?

那麼我們就需要先驗機率來分析這個問題,但是光憑觀察電影的好評壞評分佈就分析先驗是比較難的,舉個例子,如果是卡通片其實比較難得到差評,因為小孩子比較不會對電影、動畫產生「顯性」負面的評價,但是對於有爭議的題材,壞評就會比較容易出現。

加上我們看到分佈圖,可以發現數據是偏斜的,因此在建構評分的先驗機率時,考量到資料的結構我會挑選均勻分布作為先驗分佈。注意到在資料科學的思考中單純考量算法是不夠的,如果我今天也能夠收集到小孩子的數據,那麼我就會考慮用探索性資料分析的方式挑選先驗分佈,但是考量了資料收集的前提是小孩子比較不會上網給差評,進而使得兒童片與其他片子產生差異的情況下就有必要對模型給予其他假設。

於是我們就可以帶入資料囉,因為貝式其實很吃運算資源,因此我們先隨機挑選幾部電影來觀察後驗分佈:

執行sampling
隨機挑選電影畫出後驗分佈

這裡可以看到大部分評價的後驗分佈都是類似於常態分佈,這是因為貝葉斯推斷如果樣本量小,會有很大的隨機性,此時的形狀是分散而不是集中的,同理可證深紅色的分佈就明顯相對窄一些,使得真實的好評率是比較難知道的。

使用95百分位數來建立排序清單

回到我們的目標是排序,因為分佈是不會拿來排序的,因此在這樣的前提之下我們必須找到一個統計量來分析這件事情,比如說平均值、期望值就是最常使用的,但是因為我們並不曉得實際的分佈長什麼樣子,所以比較好的作法就是透過統計特性與「排序」的特性來執行。

95百分位數就很適合處理這樣的問題,因為我們這邊想要分析的是「好評」,所以依照實際好評機率就可以排序出「實際好評」。

結果會如下圖,可以看到鬼滅之刃在其中的確是顯著比其他隨機挑選的電影好看的。

可以觀察標竿來初步探索電影「真的好看」的排名

但是這麼做的效率並不好,畢竟不太可能幫每一條數據都一個個計算後驗機率,就我在Mac上試跑前五筆資料,平均跑一筆資料就要花費18 sec,這是非常沒有效率的事情:

不過呢,我們可以引入公式來計算分數下界來加速運算效率,並且遵從這個分數來排序資料:

其中 a= 1 + u ,b = 1 + d

其中的數學推導比較複雜,簡單來說這是透過Beta先驗與二項似然的結果推出的(Beta先驗機率參數為a , b 均勻分布,且二項式進行n次實驗,N = u + d)

這樣寫好了式子,我們可以將每一筆電影資料的好看程度分數算出來:

有了分數,我們將平均數與下界值都排出來,可以觀察到如果使用平均排序,那麼結果會跟使用下界均值不同:

截圖
排序分數圖,點圖放大

在目前的排行榜中,可以看到其實鬼滅之刃的好看度大概是落在第九名,不過鬼滅之刃的分數也是相當高(0.9)以上, 所以很有趣的是這部分的競爭還蠻激烈的,高分電影在喜歡的人眼中就是比較容易受到好評,也不可否認的是會有對電影很期待,但是看完覺得還好、過譽的人留下差評使得鬼滅之刃的排名下降。

有一部電影「紫羅蘭永恆花園電影版」是真的非常受到好評的,這一點對照到平均評分基本上也是如此:

平均評分排序圖,點圖放大
source : https://www.4gamers.com.tw/news/detail/45081/violet-evergarden-film-the-last-episode

而透過平均評分的第一名則是「可不可以,你也剛好喜歡我」,但是它在好看這一點其實並不是最高的,至少用貝式的方法位於鬼滅之刃後面,排名也不是說特別高。

source : https://www.youtube.com/watch?v=KUJFy5Vmkcc

那麼如果我們把排名倒數過來會怎麼樣呢?真的是很有趣,有興趣的朋友可以自己畫圖來看看:

( x : ?? , y : ?? )

結論:值得一看

鬼滅之刃作品

雖然說用排名的結果來看鬼滅之刃也許不是第一,但是在爬資料的過程中看到鬼滅之刃連續霸榜了週熱門電影,分數跟其他熱門電影如前陣子很紅的天能相比也高出不少,這讓我相信在觀察到的數據中,認真覺得這部作品好看的觀眾絕對不在少數,有趣的是我們同樣能注意到「紫羅蘭永恆花園」在平均分數、真的好看分數的一致性,反觀「可不可以,你也剛好喜歡我」的平均分數雖然高,但是真心認為好看的人也許不是那麼多。

當然電影本身的詮釋角度有很多種,比如「鬼滅之刃-無限列車」就是電影版,可能看過原作的人可以更好感受到它的差別,或者有看過、沒看過原本劇情的人也會有不一樣的感受,但是的確大多數人都認為這部電影真的好看,數據結果有時候也不是結論,至少我自己覺得藝術、娛樂方面的評價都是很難透過一個變數去衡量的,更重要的還是能不能享受其中,找到自己適合的娛樂與放鬆方式。

那麼以上,就是這次的鬼滅之刃真的好看嗎?透過貝式統計與Python分析臺灣電影市場數據,歡迎對數據分析、商業策略有興趣的讀者追蹤,下一篇文章見!

歡迎想學習Python資料科學、商業分析、金融知識的人一起交流!本部落格的內容全部都是基於「分享」的實作、理論兼顧文章,希望能夠幫助到所有對資料科學領域有興趣的人們,長期關注可按左手邊的Follow!若喜歡我在 Medium 的內容,可以拍個手(Claps)這邊想做個實驗,好讓我知道你/妳喜不喜歡這篇文章:
拍 10 下:簽個到,表示支持(謝謝鼓勵!)
拍 20 下:想要我多寫「商管相關」
拍 30 下:想要我多寫「資科相關」
拍 50 下:我有你這讀者寫這篇也心滿意足了!

敬請期待下一篇!或是您也可以逛逛我的其他資料科學文章,到我的主頁置頂文章獲得良好的目錄體驗。

數據分析系列

Python資料科學系列:

看我用金融的概念解釋AI:

人工智慧商務系列:

如果想跟著我實作資料科學,開始寫程式必知必會基礎系列:

--

--

戴士翔 | Dennis Dai
Finformation當資料科學遇上財務金融

外商分析顧問,Ex- Apple Data Scientist,曾在FMCG巨頭/日商管顧/MBB管顧/高成長電商從事商業分析與數位轉型,專注分享管顧、商業、數據分析的思考。分析/演講/合作歡迎來信:dennis.dai.1011@gmail.com