閒來無事做的純前端畫面,載入速度及搜尋功能可能有點慢,畢竟沒有後端而且沒有用資料庫,本想串Firebase,但50000筆的免費額度有點微妙。
所有資料基於 myanimelist ID 為主。
目前作業流程是分成三部分:
如果覺得排名有問題請不要找我,因為這只是個野雞榜單。
至少要有四個分數來源網站才會放進來此處,里番則為兩個分數來源網站。
1. 各網站的作品投票數至少需要 50 票,低於 50 票則不計算分數(視情況未來會上升調整到100)。
2. 至少有 4 個網站的作品計算出分數(里番只需 2 個),才計算最終分數。
這只是大概說明,畢竟後續可能會調整,而且久久可能才改一次邏輯,有些計算錯誤的,可能臨時重改的邏輯的早就忘得差不多了...
簡單的說是,拿各網站所有分數及票數來取得標準化分數、各作品投票資料取得 Bayesian 分數並根據各網站權重、票數後得出最終分數(前提是運算邏輯正確)。
首先計算混合在一起的所有分數的總體平均值 (μ) 和總體標準差 (σ)。接著,對於每個網站 i,計算該網站的平均值 (μi) 和標準差 (σi)。最後,來自網站 i 的分數將通過以下公式進行標準化處理:
(單標準 /總標準) * (分數 -單平均) + 總平均
對於特定網站、無投票細節的網站其分數可能會不計算或者存在誤差。公式使用自 https://imagasaikou.cn/animeratingdb/wiki#bayesian-estimation
則網站的權重 * (0.5 / (票數 / 總票數))^3。這條主因是各種極端值,以及某些原因,嚴重影響排名。
未來如有發現錯誤邏輯,都會再調整,因此就不解釋了,反正目前程式碼大概長這樣:
vote_threshold = 0.5 if (site == "gamer" or site == "bgm") and total_site_votes > 0 and votes / total_site_votes > vote_threshold: adjustment_factor = vote_threshold / (votes / total_site_votes) weight *= adjustment_factor ** 3 weighted_score_sum += Bayesian_score * votes * weight total_votes += votes * weight final_normalized_score += normalized_score * weight total_weight += weight if total_weight > 0: final_normalized_score /= total_weight weighted_avg_score = weighted_score_sum / total_votes final_score = (weighted_avg_score * w_b) + (final_normalized_score * w_adj)
有任何建議可至巴哈小屋回饋: 巴哈小屋