【PJSK】一種基于少量數(shù)據(jù)點(diǎn)的檔線預(yù)測方法
寫在前面
????????2023年2月末,隨著PJSK的一次大更,官方關(guān)閉了PJSK日服的大部分查分接口,導(dǎo)致大量bot的實(shí)時檔線預(yù)測功能無法正常使用。
????????從此,獲取實(shí)時檔線的方法只剩下稀疏的人工上報,對100名及以下的活動最終檔線進(jìn)行統(tǒng)計也變得極為困難。基于這一現(xiàn)狀,需要開發(fā)一種基于少量數(shù)據(jù)點(diǎn)即可進(jìn)行檔線預(yù)測的方法。
????????本文基于以往發(fā)現(xiàn)的檔線增長規(guī)律,提出了一種新的檔線預(yù)測方法。該方法在有2~3組檔線數(shù)據(jù)上報時即可使用,且較傳統(tǒng)的線性回歸預(yù)測法有波動小、誤差小的優(yōu)點(diǎn)。

預(yù)測原理
????????這種預(yù)測方法的原理其實(shí)很簡單,用一句話就能講明白:基于過往活動檔線的變化趨勢,估算“活動結(jié)束時的檔線應(yīng)該是現(xiàn)在的檔線的幾倍”。
????? ? 之前的專欄CV20489092系統(tǒng)地論述了檔線時速在活動期間的增減趨勢。以下只摘錄該專欄最重要的一些結(jié)論,有興趣的讀者可以自行點(diǎn)擊鏈接閱讀詳情。
每天凌晨4點(diǎn)的檔線增速最慢??梢砸悦刻斓牧璩?點(diǎn)為界,把一次活動分成若干個“天”。其中,活動開始日有15時~28時共13個小時,活動中間日有4時~28時共24個小時,活動結(jié)束日有4時~21時共17個小時。
活動進(jìn)行中的每一天可以按“是開始日(S) / 中間日(M) / 結(jié)束日(F)”“是休息日(H) / 寒暑春假的工作日(V) / 學(xué)生上課期間的工作日(W)”這兩項(xiàng)指標(biāo),分為3×3=9類。
9類日期中的每一類都有自己獨(dú)特的檔線增長規(guī)律。比如在活動開始日,檔線增速由極快逐漸變慢;在活動結(jié)束日,檔線增速逐漸變快。寒暑假期間與上課期間檔線增速出現(xiàn)峰值的時刻不一樣。等等。對于5000線而言,如果把活動中間日4時~28時的檔線增量看作是1,則“是活動中間日的休息日(MH)”的下午16點(diǎn)時,檔線增量是0.4329;“是活動中間日的工作日(MW)”的下午16點(diǎn)時,檔線增量是0.3532;等等。
不同類別的日期,檔線增量也不一樣。比如對于5000線而言,如果“是活動中間日的休息日(MH)”的檔線增量是1的話,那“是活動中間日的工作日(MW)”的檔線增量就是0.8753,“是活動結(jié)束日的寒暑春假期間(FV)”的檔線增量就是2.1581,等等。
????????基于這些結(jié)論,即可根據(jù)活動期間的作息情況,推測對于其中任意一個時刻,最終檔線相對于即時檔線的倍數(shù)。

參數(shù)測算
????????首先基于過往完整的活動數(shù)據(jù),推算每一類活動日相當(dāng)于幾個“是活動中間日的休息日”。根據(jù)截至第85期活動“ほどかれた糸の その先に”(MMJ箱活,雫三箱,舉辦時間2023年2月10~17日,最后一次有完整數(shù)據(jù)的活動)的數(shù)據(jù),計算結(jié)果如下:

????????然后我們要計算在每一類日期中,檔線是如何隨時刻變化的。也就是說,我們希望知道以下“檔線增長曲線”中每一段的形狀如何,至少是它們的平均形狀如何。

????????以下是對于5000線的計算結(jié)果,每種日期的結(jié)果以一個從0開始,到1結(jié)束的數(shù)列(在Python中叫做列表)呈現(xiàn),分別表示這一天的第0,1,2…個小時開始時,檔線增加到了當(dāng)天檔線增量的多少占比。

性能測試
????????現(xiàn)以第85期活動的4個5000線數(shù)據(jù)點(diǎn)為例來模擬預(yù)測,Python代碼如下,其中涉及到的“holidayParameters.txt”和“aveShapeOf5000.txt”里就存放著前文中代碼框里的內(nèi)容。
????????輸出結(jié)果如下:
? ? ? ? 第85期活動的5000線實(shí)際數(shù)值為2707288pt,和預(yù)測線的偏差很小,可見這是一種有參考價值的檔線預(yù)測方法。■