☆の推定について

 『第6回カクヨムWeb小説コンテスト』と『カクヨムWeb小説短編賞2020』の読者選考期間は、2020年12月1日(火) 00:00 〜 2021年2月7日(日) 23:59となっています。素朴に考えると、この期間内に発生したデータ――☆、♡、PVやフォロー数――がランキングの計算に使われると考えられます。


 なお、コメントは評価に含まれないのではと予想しています。なぜなら、作者側の方でコメント欄を非表示に設定することが出来るため、コメントを評価の対象に含めるとアンフェアと思われるからです。それでも評価に使われると言うのであれば、応募要項にしっかりと明記するべきでしょう。


 さて、話を本題に戻します。


 本作品最大の問題点は、データの取得を始めたのが2020年12月14日であったため、コンテスト開始時――2020年12月1日時点のデータが存在しないことです。これはかなりの痛手です。なにしろ、ランキング計算の起点となるべきデータがないのですから。


 1度は公開を諦めようとも思いましたが、なんとかならないものかと少し考えました。そこで思いついたのが、『☆の履歴を全て取得してしまえ』というものでした。


 実は、誰がいつ☆を付けたのかは、全て見ることができます。例えば、本作品の☆獲得履歴は以下のページから参照することが出来ます。


 https://kakuyomu.jp/works/1177354055253900094/reviews/all


 ☆を付けた時間が分かるのですから、ここから全ての情報を入手することでコンテスト開始前に付けられた☆を排除できる――と思っていた時期が私にもありました。


 すでにお気付きだと思いますが、文字付きのレビューで無い限り読者が☆を何個付けたのかは分からない仕様なんですね。なんて酷い仕様なんでしょう。嗚呼終わったな……と一旦は諦めました。


 数日後、よくよく考えるとある時点における☆の上限と下限を厳密に計算できることに気付きました。☆を付けた人数は分かっており、現在の☆も分かっている――と言うことは、作品の公開時点から2020年12月1日までに到達できる範囲と、☆を取得した日から☆を引き算していったときに12月1日で取り得る値の範囲を重ねれば、その範囲内に必ず☆が存在すると言うことです。


 分かりやすい例を挙げてみます。


 2020年12月1日より前に公開された作品があり、12月22日の時点で☆が20だとします。ここで、☆を付けた人数は9人、その内12月1日より前に☆を付けた人数は3人、文字付きレビューが12月1日以前に☆1が1人、以降に☆1が1人と☆3が1人だったとします。


 状況を整理すると、以下のようになります。


 ―――――――――――――――――――――――――――――――――――

 2020年12月1日まで:3人

     (文字なしレビュー2人+☆1レビュー1人)

 2020年12月1日以降:6人

     (文字なしレビュー4人+☆1レビュー1人+☆3レビュー1人)

 ―――――――――――――――――――――――――――――――――――

 2020年12月22日現在:☆20


 さて、12月1日時点における☆の範囲――☆tとおく――を作品の公開時点からまずは追っていきましょう。☆は1から3まで付けることが出来るため、文字なしレビューの3人によって増える☆の可能性は、次のようになります。


 ☆1×2人 ≦☆の範囲 ≦ ☆3×2人 → ☆2 ≦☆の範囲≦ ☆6


 これに文字付きレビューの☆1加わるので、最終的に☆3 ≦ ☆t ≦ ☆7となります。計算によって必ずこの範囲内に収まっていることが分かりました。つまり、12月1日時点で☆2だったり☆15だったりすることはあり得ません。


 次に、現時点から引き算することによって範囲を絞っていきましょう。先ほどと同様に計算すると、次のような範囲に絞れます。


 ☆20-(☆3×4人+固定☆4)≦☆t ≦ ☆20-(☆1×4人+固定☆4)

   → ☆4 ≦☆t≦ ☆12


 ここに2つの範囲が出そろいました。☆tはこの2つの範囲に必ず収まってないといけないため、最終的な制約は以下のようになります。


 ☆4 ≦ ☆t ≦☆6


 この例では、取り得る値が3つの範囲(誤差☆2)まで絞ることが出来ました。


 ここからは、☆tの推定値を考えます。問題は、☆を付けた人が☆1~☆3のどれを付けたかなのですが、1人平均でどれだけ☆を付けたかは簡単に計算することが出来ます。すなわち、単純に☆÷付けた人数をするだけですね。先ほどの例だと、☆20÷9人=☆2.22となります。これを適用すると、12月1日以前に3人が☆を付けていた訳なので、12月1日時点の推定値は☆2.22×3人 = ☆6.66となります。


 しかし、ちょっと待ってください。この推定値は☆4 ≦ ☆t ≦☆6の範囲に収まっていないので絶対にあり得ません。間違っています。と言うことは、別の方法を考えなければなりません。


 と言っても、やり方は先ほどとほとんど変わりません。違いは、固定☆を除外してやることだけです。つまり、次のような係数 f を計算します。


 f = (現在の☆20-固定☆(1+1+3))÷(文字なしで☆を付けた人の合計6人)

= ☆15÷6人 = ☆2.5


 これは、文字なしで☆を付けた人の平均を表しています。ここから、推定値☆fを次のように計算します。


 ☆f = f ×2人+固定☆1 = ☆2.5×2人+☆1 = ☆6

(もしくは、☆f = ☆20- (☆2.5×4人+☆1+☆3) = ☆6)


 これは☆4 ≦ ☆t ≦☆ 6の範囲内に収まっているので、理論的にはあり得る数値となっていることがお分かり頂けると思います。なお、今回挙げたのは説明用のかなり極端な例なので、一般的には範囲内の平均よりちょっと上寄りになっていることが多いかと思われます。


 本作品の☆の推定値と係数は、このように導出してます。疑問点などがあれば遠慮無く質問をお願いします。


 最後に、数式表記を記載しておきます。

 ――――――――――――――――――――――――――――――

 範囲 :max{C_a^l, C_b^l}≦ St ≦min{C_a^u, C_b^u}

 係数 :f = (S - S_a^r - S_b^o) / (n_a^o + n_b^o)

 推定値:Sf = f ×n_b^o + S_b^o


 ここで、C_a^l = S - (3 n_a^o + S_a^r),

     C_a^u = S - (n_a^o + S_a^r),

     C_b^l = n_b^o + S_b^r,

     C_b^u = 3 n_b^o + S_b^r,


 S: 現在の☆

 St: 12月1日時点の☆

 n_a^o: 12月1日以降に☆を付けた人数(文字付きレビュー除く)

 S_a^r: 12月1日以降の文字付きレビューによる☆の合計

 n_b^o: 12月1日より前に☆を付けた人数(文字付きレビュー除く)

 S_b^r: 12月1日より前の文字付きレビューによる☆の合計

 ――――――――――――――――――――――――――――――

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る