レーティングシステム

本番付の根拠であるレーティングシステムは、チェスの世界に由来する。

プレイヤーAとBの対戦成績が3 - 5(Aの3勝5敗)、B vs Cが2 - 6であるとき、AとCは対戦するまでもなくCのほうが強いといえる。 B vs Dが5 - 3なら、AとDはおそらく互角である。

この理屈を延長していくと、プレイヤー間の相対的な棋力を数字で示すことができる。 チェスのレーティングシステムは、そのような数字を得ることを目指して発展してきた。

レーティングシステムの基本的な性質を以下に示す。

プレイヤーのそれぞれが持ち点を与えられ、勝敗によって増減する

勝てば持ち点が増え、負ければ減る。

順当な結果では持ち点の移動が少なく、番狂わせでは大きい

つまり、金星と白星の重みが違う。ザコを何匹倒しても、大物を仕留めたプレイヤーには敵わない。

勝負の重み付けの方法

金星と白星の重みが違うといっても、点数としては具体的にどうなるのか。このシステムでは点差だけが意味を持つので、これは次式で表現される。

d' = f(d)

ただしdは対戦前の(勝者の持ち点 - 敗者の持ち点)、d'は対戦後の(勝者の持ち点 - 敗者の持ち点)とする。

チェスでは現在は関数fに一次関数を用いているが、これはあまりにも点差の開いている相手とは対戦しないとの前提にもとづいている。このため、本番付では、関数fを独自に定義した。

作家の人気にいつまでも変化が生じない世界を想定し、これを「理想世界」と表記することにする。理想世界では、無限に多くの測定(週間ベストセラーリスト発表)が行えるので、人気を一意に反映する「人気度」という値を想定することができる。理想世界においては、持ち点=人気度であるとし、理想世界のdをDと表記する。

D > 0のとき、その対戦は順当な結果が出たことになる。Dが大きければ大きいほど、結果の順当さは増す。逆にD < 0なら番狂わせで、Dが小さいほど大番狂わせだ。D = 0なら勝負は五分五分である。

このような勝率を表すものとして、関数rを考える。r(D)が確率を表す。

関数rは以下の性質を備える。

r(D) + r(-D) = 1

r(0) = 0.5

D' > D のとき r(D') > r(D)

D→∞のとき r(D)→1

さらに、r(1) = 2/3と定義する。

理想世界における3人のプレイヤーx, y, zを考える。持ち点はx > y > zとする。(xの持ち点 - yの持ち点)をDxy、(yの持ち点 - zの持ち点)をDyzとする。そして、Dxy = Dyz = 1とする。当然、Dxz = 2となる。では、r(2)はどんな値になるか?

それは統計的データによってのみ決定できる。

チェスのように豊富な統計的データがあれば、関数rは決定できる。しかし本番付では、そのようなデータは望むべくもない。このため、関数rを法外でない範囲で勝手に決めた。

本番付では、関数rを次のように定義した。

r(x) = (tan-1(x tan(30°)))/π + 0.5

関数rが定義されたことで、Dの意味が決まった。次は関数fである。

コインを投げて裏表のどちらが出るか、その確率を調べれば、たいていのコインでは表も裏も同じ0.5だろう。しかしここに、どういう仕掛けか知らないが、一方に偏って出るコインがあるとする。このコインを一度だけ投げたら、表が出た。では、このコインをもう一度投げたとき、表を出す確率はどんなものか、このたった一つの結果から推定せよ。

小学生でも「100パーセント」とは答えないだろう。少なくとも0.5以上であることは確かだ。しかしなにをいうにも、たった一度の試行で「推定せよ」とはナンセンスではないか?

ところが統計学というのは実に謎めいた学問なので、こういう問いにもちゃんと答えられる。正解は2/3である。

なんの履歴もないプレイヤー同士が対戦したとしよう。このときの勝者が次の対戦でも勝つ確率は、もちろん2/3と推定される。

とすると、持ち点の等しいプレイヤー同士が対戦したら(つまりd = 0)、d'はr(d') = 2/3になるように決める(つまりd' = 1)べきなのか?

しかし、もしその「持ち点が等しい」というのが、過去100回の対戦を50勝50敗したあとのことだとしたら、どうか。過去の実績から見れば、2/3という値が無茶なのは一目瞭然だ。2/3という値は、履歴がない(あるいは無視する)、という条件での話で、履歴をみるなら、r(d')は2/3よりも小さな値でなければならない。もちろん、0.5を切るわけがないので、0.5 < r(d') < 2/3(つまり0 < d' < 1)となる。d'が小さいほど履歴の重みが大きいことになる。

さて、レーティングシステムの「持ち点」という概念のなかには、履歴の重みの大小が含まれていない。初めてゲームに参加するプレイヤーも、100回の戦歴を持つプレイヤーも、履歴に対して同じ重みを与えなければならないわけだ。ちょっと理不尽なようだが、いずれにしろ履歴の重みを制限しないと、人気の変化に追随できなくなる。

履歴の重みを表現する値として、f(0)を考えることができる。本番付では、f(0)=0.5と定めた。

理想世界においては、対戦後の持ち点の期待値は、対戦前の持ち点と等しくなければならない。よって次式が成り立つ。

f(d)・r(d) - f(-d)・r(-d) = d

また、d > 0におけるd’- dは単調に減少しなければならない。

以上の条件を満たすように、関数fを勝手に定義した。

d ≧ 0 のとき、f(d) = d + (f(0) / ((d + 1)^0.5)

d < 0 のとき、f(d) = (f(-d)・r(-d) + d) / r(d)

履歴の重みは、3連敗のあとの2連勝、7連敗のあとの3連勝、13連敗のあとの4連勝、22連敗のあとの5連勝で、持ち点をタイに戻すことができるようになっている。

対戦の構成と処理

週間ベストセラーリストから、同一条件で販売された本を抜き出し、対戦を構成する。以下の要件が満たされたとき、同一条件であるとする。

  • 発売日が同じ
  • レーベルが同じ

対戦が構成されると、条件に一致する本を出しているプレイヤーがリストアップされ、対戦の参加者となる。 これには、週間ベストセラーリストにランクインしていないプレイヤーも含まれる。

このように構成された対戦は、多対多のものになりうる。多対多の対戦を処理する方法は以下のとおり。

1. 勝敗のある組み合わせを列挙する

ランク内のプレイヤー同士には勝敗があるので、すべての組み合わせを列挙する。ランク外のプレイヤー同士には勝敗がないので列挙しない。 ランク内のプレイヤーは全員、ランク外のプレイヤー全員に勝っているので、その組み合わせを列挙する。

2. 持ち点の変動が最大になる組み合わせを選び出して処理する

番狂わせのとき、順位が上がりやすいほうが楽しい。

3. まだ処理していない組み合わせがあれば2に戻る

複数回の同一対戦

同じ対戦が複数の週間ベストセラーリストにまたがる場合がある。映画化された作品などは数ヶ月にわたってランクインしつづけることがある。 このため、同一対戦の2度目以降は、持ち点の移動量を前回対戦の半分とする。

プレイヤーの参入と脱落

本番付のレーティングシステムではプレイヤーは固定していないので、参入と脱落を処理する必要がある。

ベストセラーリストに登場した時点で初めてプレイヤーとなり、持ち点0が与えられる

2年以上連続してベストセラーリストに登場しなかったプレイヤーは登録を抹消される

登録が抹消されると、週間ベストセラーリストにランクインしていないプレイヤーとなることがなくなる。

例外的な処理

原作つきの作品、合作、アンソロジーについては、「合作」「アンソロジー」という特別なプレイヤーを割り当てる。 これらの特別なプレイヤーは対戦に加わらない。

精度・標準化

持ち点を扱いやすい形で示すために、持ち点を100倍し1000を加えて四捨五入した値を「R」とする。Rの精度と持ち点の精度を一致させるため、持ち点は対戦後に小数点以下2桁に四捨五入する。

週間ベストセラーリストの出典

2000年までのノベルスについてはトーハン調べ、それ以外については日販調べである。