ランキング設計はどうあるべきか? その2
前エントリで論じられた、正しいランキング設計の考察の続き。第2回は、ランキングの収奪性、格差の固定性を軽減する手段を、具体的に論じてみる。
前回の記事へのTwitter上のフィードバックは、Togetterにまとめてある。こちらもご興味があれば、一読の価値がある。いくつか被ってしまったものもあるけれど、諸々の後半記事。
「ランキング」以外の名称を用いる
これはほぼ確定。ランキングという名前は、「noteとして競争原理を推奨する」という強いメッセージを発する。noteの全てのユーザーが、競争原理で動いているわけではないので、これは望ましくない。
おそらく最終的には「注目」「人気」などの名称を使うことになるかと思われる(「オススメ」はパーソナライズ用にとっておく)。また、「ランキング」という名称やスタンスをやめることで、後述するようないくつかの公平性のための施策を行う余地が生まれる。
時間による重力的な減衰モデルを用いる
ランキングにおけるコンテンツの固定化、滞在時間のコントロール手法としては、「投稿されてからの経過時間」を利用した減衰モデルがメジャーである。
投稿からの時間に重力係数のようなものを掛け合わせ、それをマイナスのスコアとする。これにより時間経過とともに、コンテンツは急速にランキング順位を下げることになる。
はてなブックマークから、HackerNewsまで幅広く利用されている手法である。このアルゴリズムを搭載すれば、最低限の循環性を保ったランキングは実装できる。
読了率を加味する
「ちゃんと記事を最後まで読んだ数」を評価パラメータに加えると、本当に面白い記事だけが加点の対象となる。逆に、派手なタイトルで注目を集めるだけの記事は、評価が低くなる。
この手法は、汎用的にランキングの歪みを軽減できる。一方で、ランキングの階層固定性そのものは解決しない。このため重力モデルなど、他の手法と組み合わせることが必要となる。
順位をシャッフルする
単純に1位〜100位を表示する代わりに、シャッフルした順位を出すとどうなるであろうか。「人気の記事」など優劣を明示しないタイトルなら、そのようなアプローチも可能となる。
データをシャッフルした場合、ランキング上位コンテンツでは収奪性が低下する。100位までのコンテンツが、均等に注目を享受するためだ。確かにこの施策は、ランカー間の格差を是正する。だが、「ランカーであること」そのものから発生する収奪性は是正できない。
上位500位からランダムに100件を抽出する
シャッフルをより進めた手法として、「足切り」と組み合わせてみよう。今度は、ランキング範囲を500位や1000位など大きく拡大し、その中からランダムに100件を抽出して表示する。
この方法は、ランキングの収奪性、階層の固定性、どちらも大きく軽減することができる。ただし、格差を完全にフラットにしすぎてはいけない。良い記事へのアドバンテージやインセンティブを消滅させてしまうと、良い記事を書くクリエイターが他サービスへと移動してしまうためである。
あくまでデータを見ながら、全員の満足度とサービスの持続性を最大化する、格差と平等の均衡地点を探さなければならない。
ランダム抽出時に、スコアに応じた重さを与える
ランダムに記事を抽出するときに、記事に重みを与えたらどうなるだろうか?例えば、スコアが1位の記事は100%でる。スコアが100位の記事は1%、スコアが1000位の記事は0.1%…といった具合に出現率が変化する。総体としてはランダムだが、上位の記事ほどピックアップされる確率が高くなる。
この手法の優れた点は、1つのパラメーターにより、ランキングの格差・収奪性・固定性を柔軟にコントロールできる点である。
小選挙区制を導入する
現実の選挙のように、ランキングに小選挙区制を加えたらどうなるだろうか?「エッセイ」のトップ10、「デザイン」のトップ10、そして「料理」のトップ10…といった具合に、複数のカテゴリの上位ランキングを集め、それを束ねて1つのランキングにする考え方だ。
このような考え方を導入したリストは、より新聞や雑誌に近い構成になる。ただし、全体の回遊性や平等性は解決する一方で、個々のカテゴリの問題は解決していない。予選段階で何かしらの、格差対策を用意する必要があるだろう。
比例代表制を導入する
現実の選挙の比例代表制のように、そのカテゴリのユーザー人口(あるいは読者の趣味嗜好のスコア)をランキングの選出に加味する方法である。メジャージャンルの記事ほど多く、マイナージャンルの記事ほど少なく、ランキング掲載のチャンスを与えられる。
例えば、note全体でエッセイ好きな読者が多ければ、エッセイがランキングに多めに掲載される。しかしランキング全体がエッセイに占領されることはなく、音楽や写真などその他のカテゴリも、ランキングに顔を出すことも保証される。
2つ以上のスコアをブレンドする
複数の評価点をブレンドすることで、より包括的な評価を行うことができる。例えば、読了率ランキング100と、バズ率ランキング100をブレンドしたらどうなるだろうか。この場合、読みふける記事が50%、バズりやすい記事が50%ブレンドされたランキングが生まれる。
この手法の優れた点は、ブレンドする内容やバランス次第で、ランキングを自由に変質できる点である。
ランキングに複数のユーザークラスタをブレンドする
ブレンドの応用例。新人ランキングと巨匠ランキングを算出し、例えば新人30%と巨匠70%をブレンドして、最終的なランキングを作ることができる。
同様にフォロワーが少ない人と、フォロワーが多い人の良い記事をブレンドすることも可能である。このような手法は、階層の固定化や収奪性を、コントロール可能なものへと変化させる。
人力のキュレーションをブレンドする
ブレンド時にスコアだけでなく、人間のキュレーションをブレンドすることもできる。これにより人為的なバランス調整や、特定カテゴリのプロデュースなども行うことが可能だ。
バランス調整ができ、編集の色が出せる一方、仕様上は依怙贔屓も容易なため、運用には慎重さが求められる。
PVなどスコアに、コンテクストに応じた重み付けを行う
収奪的な格差への対策として、スコア加点への重み付けが考えられる。例えば、Twitterから流入したPVを1/10と評価すれば、バズがランキングに与える影響は極小化される。同様に、ランキングページからのPVを過小評価することで、ランキングの収奪性や固定性を是正することができる。
ペイジランクを導入する
googleのラリー・ペイジが提案したアレ。「良い記事を描いてる人がライクしている記事は、良い記事」といったルールを用いて、クリエイターや記事全般にクオリティスコアを付与し、その重さでランキングをコントロールする手法である。
非常に精度が高く、使い勝手も良いと推測されるが、ルールをハッキングされやすいという弱点を持つ。複数の影響力の強いクリエイター同士で、相互送客クラブを作られてしまうと、収奪性が逆に高まってしまう。
ペイジランクを導入する場合には、アルゴリズムを秘密にした方が良い。
友達の読了率、スキ率からランキングを生成する
自分のフォローしている人、友達の評価からランキングを生成した場合、似たような好みのランキングが生まれやすい。つまり精度が高くなる。デザイナーの友達が多ければ、デザインが多めのランキングになってくれるからだ。
簡単に精度が上がりそうだが、空間が同質化しやすくなるという問題がある。同じような価値観で固まってしまうと、note全体に先鋭化のリスクが生まれる。できれば、この方向のアルゴリズムは、ランキングよりもパーソナライズで使った方が良いかもしれない。
読者のリアクション率を加味する
「読者のリアクション数 / 読了数」といった式を使うと、「多くの人が面白いと思うであろう記事」のスコアを高めることができる。リアクション率は読者が多くなるほど低くなる。よって大きくバズったエントリーほど、スコアが上昇しにくくなる。結果的に、収奪的な格差がつきにくくなる。
一方で、この手法のダウンサイドは、互助会クラブが生まれやすくなることである。良質で少数のユーザーを抱えたプレイがーは、極端に有利になる。このため他のアルゴリズムとの合算が必要となる。また、読者数が少ない場合も極端に有利になるため、足切りとなる読了数が必要となる
などなど、無数のアプローチを検討中である。
自分にとっては、こういう整合性の設計がデザインのコアパートである。
これら諸々の考察を組み合わせながら、noteチームでいくつかのコンセプトモデルを作っていきたいと思う。そう遠くない未来に実戦投入されるのではないかと思う。みなさまお楽しみに。(続く)
参考文献
Steemitの仕組みが今ひとつわからないのでわかったことをここに書いていくことにしよう