2. 統計の応用
ノート2.1 (♡ + 1) / (PV + 2)
(注意)本作のデータは全て2021年1月19日から20日にかけて取得されたものです。
――――――――――――――――
「ねぇ、タケル君。今日は
俺――
まぁ、黙々と500円玉を投げては拾い投げては拾う姿を見れば、そんな質問をしたくなるのは当然だろう。
「見ての通りコイントスだ。ケイコちゃんは、コインの表が出る確率は知ってる?」
「流石に分かるわよ。2分の1ね」
「正解だ。じゃぁ、ここに俺が作った粘土製のコインがあったとしよう。表が出る確率はいくつ?」
「そんなの分かる訳無いじゃない」
「当然、事前に知ることはできないよな。ケイコちゃんなら、表が出る確率をどうやって調べる?」
「そうねー。まずはコインを何回か投げみるわ。そして、投げた回数と表が出た回数をカウントして――
(表が出る確率)=(表が出た回数)÷(投げた回数)×100 [%]
――を計算するわ」
「期待していた模範解答をどうもありがとう」
「え? もしかして私間違ってた!?」
「まさか! 誰だってそうするさ」
「よかったー。タケル君の事だから、何か引っかけを用意してると思ったじゃない!」
「ごめんごめん」
「それで、今日は
「そうだよ。今日の話題は、カクヨムのユーザーがエピソードに対してどれくらい反応したか、そのリアクション率について考察するぞ」
「コイントスと何か関係があるわけ?」
「大ありだよ」
「どうして?」
「考えてみて。コインと応援ボタンの共通点は何かな?」
「んー……。全く分からないわ。降参よ」
「コインの場合は表と裏、応援ボタンの場合は押すか押さないか」
「あっ! 2択ってことか!!」
「そう言うことだ。つまり、コインの問題はそっくりそのまま応援ボタンの話に応用できるんだよ」
「えぇ! そんなのってあり!?」
「そのための数学理論だ」
「……いや、でもちょっと待って。以前、私がリアクション率を思いついたとき、タケル君は全否定したじゃない! 確かこんな感じだったかしら――」
リアクション率 R = ♡数 / PV数 × 100 [%]
「あれ、よく見たら……これってコインの表が出る確率と全く同じ計算方法だわ。コインの話を応用できるって話は嘘?」
「待て待て、早とちりするな。ケイコちゃんがやってくれたのは『最尤推定』と言う方法で、一般的な統計学で使われる方法なんだ」
「
「
「むむ、一気に難しくなった感」
「出来るだけわかりやすく説明するから、読み飛ばさずについてきて欲しい」
「ちょっと自信無いけど、がんばるわ」
「まずは問題設定だ。何を求めたいのかをはっきりさせるぞ――」
『問題:表の出る確率が分からないコインがある。ある人が実験を行った結果、コインを3回投げて表が3回出た。このとき、コインの表が出る確率 P(X = 表) を推定せよ』
(最尤推定による答え:P(X = 表) = 3 / 3 × 100 = 100 [%])
『問題:押される確率が分からないカクヨムの応援ボタンがある。ある小説で実験を行った結果、3人が読んで (3PV) 応援ボタンを押したのは3人 (
(最尤推定による答え:P(X = 押す) = 3 / 3 × 100 = 100 [%])
「なるほど。こう書かれると確かに2つはほとんど同じね」
「だろ」
「それにしても、永遠に表が出続けるのは非現実的だわ」
「もし答えを真の確率 P(X = 表) に近づけようと思ったらどうする?」
「コインを投げる回数を増やすわ」
「まぁ、普通はそういう答えになるよね。だけど、カクヨムの応援ボタンの場合は?」
「う……読者を増やすしか無いけど、そう簡単には読みに来てくれないわね。困ったわ」
「ケイコちゃんの悩みを解決してくれる方法こそが、ベイズ確率論に基づく『ベイズ推定』だ。ベイズ推定では確率 P(X = 押す) を直接計算するのではなく、確率 P(X = 押す) そのものを確率変数とみなして、それが従う確率分布を計算する。
これにより、推定した確率 P(X = 押す) がどれくらい
しばらくの沈黙の後、景子はようやく口を開いた。
「確率変数? 確率分布? もうダメだ。頭が爆発した……」
「『確率変数』とは、その名の通り確率で値が決まる変数のことだ。
今の例だと、コインの表が出るか出ないか、応援ボタンが押されるか押されないかの X に相当する。そして、ベイズ推定では確率 P(X = 押す) そのものが少しぐらいランダムに動いてもいいよね~というノリで計算するんだ」
「そんな軽くていいの!?」
「だって人間が絡む行為だし。少しくらい変化する方が自然だと思わない?」
「確かに……」
「次に、確率変数の性質を決めているのが『確率分布』だ。
例えば、コインの表が出る確率は『表(成功)か裏(失敗)か』の2項だけで表されるから、『二項分布』と呼ばれる確率分布に従うことが知られている」
「『正規分布』って言葉をどこかで聞いたことがあるわ」
「正規分布は最も基本的な確率分布の1つだ。統計分野ではライトノベルにおけるツンデレ女子並みにしょっちゅう登場するぞ」
「その説明は斬新」
「さて、ここまで説明が長くなってしまったが、実際にベイズ推定で上の問題を解いていくことにしよう」
「理解できる自信が全く無いけど、分かったわ」
「最尤推定ではコインを投げた3回分のデータをまとめて扱ったけど、ベイズ推定ではコインを1回投げるたびに色々な計算していくのが特徴だ。
しかし、とーっても有り難いことに、コインの問題は偉い人達によって計算が非常に簡略化出来ることが分かっている。その方法を元に、応援ボタンが押される確率 P(X = 押す) を推定する計算方法を示すぞ」
1. 読者が来るまで全力で待機。読者がやって来てPVがついたとする。応援ボタンが押されるかもしれない。
2. 十分時間が経った後、ベータ分布の確率密度関数をパラメータ a = ♡数 + 1, b = PV数 - ♡数 + 1 で更新。この時、P(X = 表) の推定値 Rb をベータ分布の期待値とすれば、次のように計算出来る。
Rb = a / (a + b) = (♡数 + 1) / (PV数 + 2)
3. 1へ戻る。
「ここで、ベータ分布の確率密度関数は次のように表される。
f(P, a, b)= P^(a - 1)×(1 - P)^(b - 1) / B(a, b)
ただし、a > 0, b > 0, 0 ≦ P ≦ 1, B(a, b)はベータ関数
カクヨムは数式が綺麗に表示出来なくて困るな……。綺麗な数式で見たい方は、以下のページなどを参照するといいだろう」
高校数学の美しい物語『ベータ分布の意味と平均・分散の導出』
https://mathtrain.jp/betadistribution
「確率密度関数とかはよく分かんないけど、推定値の計算自体は拍子抜けするくらい簡単ね。って言うか、私のリアクション率とほとんど変わらないじゃない!」
「確かに。だが、推定値が Rb の形になったことで、例題の答えが Rb = (3 + 1) / (3 + 2) × 100 = 4 / 5 × 100 = 80 [%] と、100%ではなくなったぞ」
「あ、本当だ」
「これがベイズ推定だ。今までの統計学とはちょっと違うことを肌で感じてくれただろうか」
「次に、Rb による作品分布を見てみよう」
「はーい」
――――――――――――――――
統計情報:リアクション率のベイズ推定値 Rb = (♡数 + 1) / (PV数 + 2)
――――――――――――――――
-1.00% < R ≦ 0.00%:0作品 (0.00%, 0.00%)
0.00% < R ≦ 1.00%:19,826作品 (9.20%, 9.20%)
1.00% < R ≦ 2.00%:16,403作品 (7.61%, 16.80%)
2.00% < R ≦ 3.00%:12,781作品 (5.93%, 22.73%)
3.00% < R ≦ 4.00%:10,813作品 (5.02%, 27.75%)
4.00% < R ≦ 5.00%:9,000作品 (4.17%, 31.92%)
5.00% < R ≦ 6.00%:7,604作品 (3.53%, 35.45%)
6.00% < R ≦ 7.00%:6,809作品 (3.16%, 38.61%)
7.00% < R ≦ 8.00%:7,162作品 (3.32%, 41.93%)
8.00% < R ≦ 9.00%:5,680作品 (2.63%, 44.57%)
9.00% < R ≦ 10.00%:7,772作品 (3.61%, 48.17%)
……
30.00% < R ≦ 31.00%:1,242作品 (0.58%, 84.97%)
31.00% < R ≦ 32.00%:1,343作品 (0.62%, 85.59%)
32.00% < R ≦ 33.00%:693作品 (0.32%, 85.91%)
33.00% < R ≦ 34.00%:7,634作品 (3.54%, 89.45%)
34.00% < R ≦ 35.00%:786作品 (0.36%, 89.82%)
35.00% < R ≦ 36.00%:936作品 (0.43%, 90.25%)
36.00% < R ≦ 37.00%:966作品 (0.45%, 90.70%)
37.00% < R ≦ 38.00%:1,368作品 (0.63%, 91.34%)
38.00% < R ≦ 39.00%:773作品 (0.36%, 91.69%)
39.00% < R ≦ 40.00%:2,726作品 (1.26%, 92.96%)
……
90.00% < R ≦ 91.00%:0作品 (0.00%, 100.00%)
91.00% < R ≦ 92.00%:1作品 (0.00%, 100.00%)
92.00% < R ≦ 93.00%:3作品 (0.00%, 100.00%)
93.00% < R ≦ 94.00%:0作品 (0.00%, 100.00%)
94.00% < R ≦ 95.00%:1作品 (0.00%, 100.00%)
95.00% < R ≦ 96.00%:0作品 (0.00%, 100.00%)
96.00% < R ≦ 97.00%:0作品 (0.00%, 100.00%)
97.00% < R ≦ 98.00%:0作品 (0.00%, 100.00%)
98.00% < R ≦ 99.00%:0作品 (0.00%, 100.00%)
99.00% < R ≦ 100.00%:0作品 (0.00%, 100.00%)
――――――――――――――――
合計:214,218作品 (100.00%)
備考:PV0、♡1だった1作品は除外(データ収集におけるタイミングの問題で、エラーじゃありません)
――――――――――――――――
「あれ、前回よりましになったけどやっぱりギザギザしてない?」
「33.00%<Rb≦34.00%とかに作品数が集中してるね。と言う訳で、最後はこのギザギザを取り除く処理をするぞ」
「どうやって?」
「Rb はベータ分布に従っているため『分散』が計算出来るという強みがある。
分散とは、確率変数の分布が期待値からどれだけ散らばっているかを示す統計量で、これが大きいことは推定した値の信頼性が低いことを示している。つまり、分散が大きい作品から順に取り除いていけば、信頼性の高い推定がなされた作品だけが残ると、こういう訳だ」
「なんか魔法みたい……」
「と言うことで、分散の大きかった上位19,591作品を取り除いた上で、もう一度作品分布を見てみるぞ」
――――――――――――――――
統計情報:リアクション率のベイズ推定値 Rb = (♡数 + 1) / (PV数 + 2)
条件:分散が大きい上位19,591作品を除く
――――――――――――――――
R = 0.00%:0作品 (0.00%, 0.00%)
0.00% < R ≦ 1.00%:19,826作品 (11.13%, 11.13%)
1.00% < R ≦ 2.00%:16,403作品 (9.21%, 20.33%)
2.00% < R ≦ 3.00%:12,781作品 (7.17%, 27.51%)
3.00% < R ≦ 4.00%:10,813作品 (6.07%, 33.58%)
4.00% < R ≦ 5.00%:9,000作品 (5.05%, 38.63%)
5.00% < R ≦ 6.00%:7,604作品 (4.27%, 42.90%)
6.00% < R ≦ 7.00%:6,809作品 (3.82%, 46.72%)
7.00% < R ≦ 8.00%:7,162作品 (4.02%, 50.74%)
8.00% < R ≦ 9.00%:5,680作品 (3.19%, 53.93%)
9.00% < R ≦ 10.00%:7,772作品 (4.36%, 58.29%)
10.00% < R ≦ 11.00%:3,654作品 (2.05%, 60.34%)
……
30.00% < R ≦ 31.00%:823作品 (0.46%, 94.87%)
31.00% < R ≦ 32.00%:1,343作品 (0.75%, 95.62%)
32.00% < R ≦ 33.00%:693作品 (0.39%, 96.01%)
33.00% < R ≦ 34.00%:939作品 (0.53%, 96.54%)
34.00% < R ≦ 35.00%:786作品 (0.44%, 96.98%)
35.00% < R ≦ 36.00%:705作品 (0.40%, 97.37%)
36.00% < R ≦ 37.00%:573作品 (0.32%, 97.69%)
37.00% < R ≦ 38.00%:469作品 (0.26%, 97.96%)
38.00% < R ≦ 39.00%:533作品 (0.30%, 98.26%)
39.00% < R ≦ 40.00%:487作品 (0.27%, 98.53%)
……
90.00% < R ≦ 91.00%:0作品 (0.00%, 100.00%)
91.00% < R ≦ 92.00%:1作品 (0.00%, 100.00%)
92.00% < R ≦ 93.00%:3作品 (0.00%, 100.00%)
93.00% < R ≦ 94.00%:0作品 (0.00%, 100.00%)
94.00% < R ≦ 95.00%:1作品 (0.00%, 100.00%)
95.00% < R ≦ 96.00%:0作品 (0.00%, 100.00%)
96.00% < R ≦ 97.00%:0作品 (0.00%, 100.00%)
97.00% < R ≦ 98.00%:0作品 (0.00%, 100.00%)
98.00% < R ≦ 99.00%:0作品 (0.00%, 100.00%)
99.00% < R ≦ 100.00%:0作品 (0.00%, 100.00%)
――――――――――――――――
合計:195,998作品 (100.00%)
――――――――――――――――
「おおお、ギザギザがましになった!」
「取り除く作品数を増やせば、もっと滑らかな『べき乗則』が現れる。これでようやく、リアクション率を使った統計的な分析をする準備が整ったぞ」
「な、長かったーっ!」
「さて、今回はここまでにするけど、どうだった?」
「もうね、1年分の勉強をした気分よ」
「俺もここにたどり着くまで結構時間がかったな。正直2回分にエピソードを分けたかったよ。ただ、話の流れをぶった切っちゃうからできなかったけど」
「そうね。すぐ忘れちゃうもん」
「最後に紹介したいのは、ベータ分布の可視化だ。可視化することによって、自分の書いた作品やこれから読もうと思った作品がどれくらい信頼のおける Rb を持ってるか直感的に知ることが出来るぞ」
「ふむふむ」
「まずは下のサイトへアクセスして欲しい」
keisan『ベータ分布(グラフ)』
https://keisan.casio.jp/exec/system/1161228837
「アクセス出来たわ」
「そしたら、a の欄に
「それじゃぁ、適当に数字を入れてみようかしら。♡数を100で、PV数を300だとすると、a = 100 + 1 = 101、b = 300 - 100 + 1 = 201 ね。ボタンを押してっと――
あ、なんか赤い線のグラフが表示されたわ! この図はどうやって見ればいいの?」
「横軸は応援ボタンの押される確率、縦軸は起こりやすさを示している。山のようなピークのある形になっている場合、ピークは ♡数 / PV数と一致しているぞ。ただし、推定量 Rb はそこから必ずずれていることに注意が必要だ。
また、山裾の幅が狭ければ狭いほどその確率が確からしいことを表している」
「おぉ、なるほど。見た目で分かるのは便利だわ」
「ベータ分布は入力する数字によって様々な形になる。暇な人はどんな形が現れるか遊んでみるのもいいだろう」
「皆さん、ここまで本当にお疲れ様でした!」
「次回は、応援ボタンが押される確率がどんな小説でも同じらしいということを、ガチで検証するぞ」
「え? 同じ!? そんなバカな!!」
――――――――――――――――
今日の研究ノートまとめ
――――――――――――――――
・ベイズ推定を使って逐次的にリアクション率を推定する方法を紹介
・難しそうに聞こえるが、Rb = (♡数 + 1) / (PV数 + 2) を計算するだけでとっても簡単
・Rb の分散を求めることによって外れ値の除去を実現した
――――――――――――――――
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます