ストレイテナーと確率4(n曲目には何が選ばれやすい?)
前回の続き。
前回は「CLONEの選ばれやすさ」というのに注目して、楽曲に限定した検証を行ったが、
今回は「曲順」という観点で検証をしていきたい。
手持ちのストレイテナー全曲の中で、インスト除くと「CLONE」は3つあるが、
3つ目の「CLONE」は平均して192曲目までには選ばれる、
というのが前回のシミュレーションでわかった。
同様の考え方が他の楽曲に関しても言えるのであれば、
曲順が進むにつれて「選ばれやすさ」にも変化が起こり、
前半・中盤・後半とでは楽曲別の「選ばれやすさ」も変わってくるのでは?
という疑問から検証をしてみたいと考えた。
例えば1曲目なら257曲の中からランダムに選ぶだけだが、
10曲目、50曲目、100曲目…と進んでいく中では、次に選ぶ曲の選択肢も変化しているはずだから、
楽曲単体(シングルとアルバムで完全に区別をつける)で見れば完全ランダムだとしても、
シングル集計・アルバム集計と、括りを付けて集計していくとその結果も変化するのではないだろうか。
あるいは、リスト内に占めるその集計単位の数(構成比)と一致するのか?
というわけで、その検証をしてみる。
今回もプログラムを作って検証する。
相変わらず、引数のチェック部分と楽曲リストの読込部分は前回からの流用。
ただし今回の引数は「n曲目」の判定に使用する。
試行回数は内部的に固定値(可変でもよかったんだが面倒になったので)
(1)引数チェック 引数が数値かどうかチェックする。 数値じゃなかったり、数値でも負数だったらNG。 この引数は上述したように「n曲目」の判定に使用する。 ※というか今思ったが個人利用する前提だからこんなチェックいらんな…(2)曲リスト読込
外部ファイルのストレイテナー曲リストを読み込んでListにして返却。ここで、引数n(チェックする曲順)と(2)の楽曲リストの値の整合性チェックを行う。
例えば257曲しかないのに300曲目をチェックすることはできないので、
楽曲リストの数<引数nならここで例外発生させて終了。(3)シミュレーション メイン処理
以下の処理を100万回(※)繰り返す。
①曲リストからランダムに1曲選択。曲リストからその曲を除外(Lisr#remove)。
②インスト曲だったら①へ戻る。インスト曲じゃなければ③へ進む。
③現在の曲順=引数nと一致しているか判定。一致してなければ①へ戻る。一致していれば④へ進む。
④曲情報をテキストファイルに書き出す。(曲名+[TAB文字]+アルバム名)
(※)この①~④が本検証における「1試行」である。
今まではこの繰り返し数を引数で渡していたが、
今回はこの繰り返し数は内部的に1000000(100万)で固定にしてある。
(4)結果サマリー処理
(3)で出力されたファイルを読み込んで、以下の観点の集計を行う。
①楽曲別集計:曲名のみをKEYとし、n曲目がその楽曲だった回数を集計する。
②楽曲アルバム別集計:曲名+アルバム名をKEYとし、n曲目がその楽曲だった回数を集計する。
③アルバム別集計:アルバム名をKEYとし、n曲目がそのアルバムだった回数を集計する。
上記①~③をそれぞれ(3)とは別のテキストファイルに出力する。
相変わらず集計用の一時ファイルはローカルディスク出力の方針である。
ちなみに(3)の一時ファイルは固定値である100万回という試行回数に基づき、
実行する度毎回100万行固定のテキストファイルになる。その容量は約34~35[MB]。
もう少しうまいやり方もありそうだが、
(3)はチェック曲順nになるまで「ランダムに1曲選択」というのを馬鹿正直に繰り返すだけなので、
単純にnが大きければその分1試行にかかる時間も大きくなる。
ただまあ1~257の範囲内でしか指定できないから正直、それほど気になるものでもない。
これの実行結果に関してだが、引数として渡すnの値で分ける必要があるので、
まずはn=1(1曲目)から見ていきたいと思う。
先頭10位まで。
①楽曲別集計②曲+アルバム別集計③アルバム別集計
順位曲名回数
|
順位曲名回数
|
順位曲名回数
|
これはまあ、概ね予想通りといったところか。
■「①楽曲別集計」に関しては、前回までで確認できていた通り、4つの重複をもつ「SIX DAY WONDER」が1位。
100万回試行中の選択回数16191回も、割合にすると約1.554%で、
これは手持ちのストレイテナー曲数257曲の中でSIX DAY WONDER(4曲)の占める割合4/257≒0.015564…とほぼ一致する。
2位以降は重複度が3つの曲が並ぶ。ここには出ていないがROCKSTEADYが11位で、これも重複度3。
一方12位以降はがくんと回数が落ちる。今回はLIVESで8374回。12位以降は重複度2の曲が並ぶ。
というように、基本的には重複度の大きい曲がそのまま順位に結びつくという、当たり前といえば当たり前だが
そういう結論になっている。
■「②曲+アルバム別集計」に関しては、1位以降、ほとんど選択回数にブレがない。
今までの検証からわかりきっていたことだが、アルバムまで含めるので楽曲間の重複は完全に排除され、
各楽曲とも同様の確率で選択されていることになる。
目安として、集計された結果の値「回数」の値に対して標準偏差を取ったが、64.8108…位になる。
一方「①楽曲別集計」の「回数」の標準偏差は2204.776となり、40倍近い差が出ている。
■「③アルバム別集計」に関しても、前回までに確認できていた通り、アルバム内の収録曲数が多いアルバム程選ばれやすい。
よって22曲の収録曲数を持つEarly Yearsが1位。
手持ちのストレイテナー257曲の中で占める割合は、22/257=約8.59%。
実際のシミュレーション結果は8.926%で若干多いが、ほとんど実際の構成比と同じ値になっていることがわかる。
1曲目なので当然と言えば当然だが、楽曲でいえば曲の重複度、アルバムでいえば収録曲数といったように、
数が多い方が選ばれやすい。
曲でいえば、SOFT分を加味すると「SIX DAY WONDER」が最も選ばれやすく、
アルバムでいえば、Early Yearsが最も選ばれやすい。
で、この後いろいろ変化する様相を楽しみたかったのだが、
結論から言うとnの値をいくら増やしたところでn=1のときの結果とほぼ一緒で大差がなかった。
要するに、1曲目だろうと100曲目だろうと、選ばれやすさは同じということである。
一例としてn=100(100曲目)のパターンを載せてみる。
①楽曲別集計②曲+アルバム別集計③アルバム別集計
順位曲名回数
|
順位曲名回数
|
順位曲名回数
|
という感じである。
プログラムがミスってる可能性も否定はできないがw、
巨視的な視点で見たときは、
1曲目だろうと100曲目だろうと、
いずれも同じように曲が選択されているという結論になるようだ。
今回は曲の演奏時間の考え方はないので、時間制限ありでいえば初回の検証結果が最も妥当といえそうである。
というわけであまり面白くない結果に終わってしまった。
”ある重複度の曲なら、ブレは当然あるものの、少なくとも〇曲目までには選ばれている”というのが
楽曲ごと、アルバムごとに計算される仕組みが存在していると思っていたが、
どうもそういうことではないようである。
う~ん…やっぱり実際に聴きまくって実験結果と比較しなければ納得できないのか…
ちなみに実際のプログラムはこれ↓