順位を支配する黄金ルール
人はランキングが大好きで、何にでも順位を付けたがります。その特性を利用しようとテレビもラジオもインターネットもランキングだらけです。とにかく、ランキングさえ見ていれば安心とばかりに似たような音楽や似たような書籍、似たような意見が人気を集めます。
その結果、ランキング上位への集中が見られるようになります。書籍やCDで売れるのはベストテンばかりといった現象です。特にランキングで1位の販売数はダントツに多く、順位が下がる度に数が急減していきます。
検索サイトもサジェスチョンが導入されたことで、トラヒックの流れが大きく変わりました。ファットテールも過去の言葉のように聞こえますね。また、論文の参照数から重要度を判定するヒントを得たGoogleの検索システムもウェブサイトの被リンクと異なり、TwitterやFacebook等でリンクしあうソーシャルネットワークの増大により質の高いサイトのランキングに失敗している可能性もあります。*
いずれにしても、順位と販売数(占有率:全体に占める割合)には密接な関係がありそうです。順位が落ちると占有率はどのように減っていくのでしょうか。今から100年近く前、このような関係を調べたジップの法則(Zipf's Law)という興味深い法則があります。
ジップの法則(またはジフの法則)はもともとは言語学の法則なのですが、アメリカの言語学者ジョージ・キングズリー・ジップ(1902~1950)が英単語の使用頻度と順位について調べたことから発見されました。別名、ランクサイズルールとも言います。
ちなみに英単語の使用頻度は1位がtheで10%、2位のofは5%、3位のandで3%だったそうです。後述するジップの法則で逆算すると、約12,000種類の単語での調査だったことにが分かります。
法則の応用範囲は広く、自然現象から社会現象まで適用できます。なお、ジップの法則に従うものをジフ構造とも言うそうですが、この法則を使うとそれぞれの順位の占有率が予め分かってしまうというから驚きです。
ジップの法則と似たものにベンフォードの法則があります。突き詰めていくと共に冪乗則の仲間だということが分かります。ベンフォードの法則に関しては実践コーナー(統計アラカルト)のウソの数字を見破る方法に詳しくあります。興味があれば閲覧ください。
ジップの法則
ジップの法則は経験則です。経験則なので証明はできないのですが、自然現象や社会現象に対してかなりの一致が見られます。法則自体は次の簡単な数式で表されます。
---
k
z = -------
m 1
∑ --- ※k番目に多い出現頻度の要素が全体に占める割合は
n=1 n 1/kに比例する(kは順位、mは全要素数で有限)。
この数式を使って実際に計算してみましょう。例えば、全部の要素が10あるうちで1位が占める割合は、ちょっと複雑ですが次のrpn式で計算できます。
0.341417
占有率が34%あることが分かります。結構な割合ですね。
もし、全体の要素数を増やしたい場合は最後の-rオプションの後の数字を変更します。占有率を知りたい順位は-eオプションの後の数字を変更すればOKです。
10位までをジップの法則で計算
さて、上記のrpn式を入力してもいいのですが、煩雑なのでrpnプログラムも用意しました。プログラムの名前はzipfです。使い方は簡単で1位の占有率を計算するには以下のrpn式を使います。
先頭の数字が順位を表します。この例では1位です。1の後の10は要素が全部で10あることを示しています。つまり10位中1位が占める占有率を計算しています。同様に2位なら以下になります。
この調子で10位まで続ければよいのですが、面倒な場合は次のようにします。tmpファイルに1から10までの数字を先に保存しておきます。
1
2
:
(中略)
:
9
10
このテキストファイルを次のようにzipfプログラムに読み込ませれば、1位から10位まで連続して計算できます。
ファイルを先に用意するのが面倒な場合は、以下のように他のプログラムと連携する方法もあります。以下の例では、1から10までの数値をseqプログラムに生成させて、zipfプログラムに引き渡しています。これで10位中1位から10位までの占有率が一気に計算できます。
あるいはzipfプログラム単体でリピート指定を使用して、次のようにrpn式を書いても同じように計算できます。
どれでも好きな方法が使えます。以降、seqプログラムを使って説明していきます。では、1位から10位までの占有率を計算させてみましょう。
0.341417
0.170709
0.113806
0.0853543
0.0682834
0.0569029
0.0487739
0.0426771
0.0379352
0.0341417
1位で全体の1/3を占めていますね。2位も加えると全体の1/2を超えます。その後は急激に占有率が減っていきます。グラフ化してみましょう。
>rpn 1 -c rownum <tmp | xyp -x,10 -y,.5 -s1,.1 -n
^y 0.5
|
0.4
|
| *
0.3
|
|
0.2
| *
|
0.1 *
| * *
| * * * * *
|o 10
+--1---2---3---4---5---6---7---8---9--->
横軸が順位で縦軸が占有率です。急激に値が減っていく様子がよく分かります。では、これらの占有率を累積していくとどうなるでしょう。
0.341417
0.512126
0.625932
0.711286
0.77957
0.836473
0.885247
0.927924
0.965859
1
80%を超えるのが6位の段階なので、パレートの法則とは一致していない気がします。しかし、実際に計算してみると分かりますが、要素数が100になると累積数が80%を超えるのは36位、1000になると累積数が80%を超えるのは224位です。徐々に80対20の法則に近づいていることが分かります。
ちなみに要素数が10000になると占有率の累積が80%を超えるのは1412位のときです。パレートの法則の代表である80対20を超えています。*
次にジップの法則が適用できると言われているいくつかの事例について、rpnを使って実際に検証してみます。
ウェブへのアクセスランキング
ウェブへのアクセス数はジップの法則に従うらしいのですが、さっそく試してみましょう。集計したデータはファイルの"access.txt"に格納されています。
1 8488
2 4241
3 4015
4 3957
5 1857
6 1672
7 1631
8 294
9 97
10 90
ジップの法則に従っているか判定する簡便法として、順位とアクセス数を掛ける方法があります。1×8488=8488、2×4241=8482、3×4015=12045のように大体同じであれば可能性があります。ただし、機能しないことも多くウェブのアクセス数の事例では大きくズレています。
アクセス数をグラフ化してみましょう(左側が実数グラフ、右側が対数グラフ)。実数グラフを見るとアクセス数が1位のページは高い数値ですが、順位が下がるに従って急激にアクセス数が低下している様子が分かります。一方、片対数グラフではほぼ線形(直線)になるので、冪乗則の可能性が感じられます。
^y 10000 ウェブページへの ^y 100000 片対数グラフ
| * アクセス数の分布 10000
7500 | *
| | * * * * * *
| |
5000 | *
| * * * 100 * *
| |
2500 * |
| * * x | x
|o * * 1* |o 10
+-1--2--3--4--5--6--7--8--9--> +-1--2--3--4--5--6--7--8--9-->
ページ ページ
access.txtファイルのデータは順位とアクセス数を対にして、アクセス数の多い順に並べてあります。さっそくジップの法則で理論値を計算してみます。なお、計算結果は"zipf.txt"ファイルに格納しておくことにします。
実際の値と理論値を比べてみましょう。先にアクセス数を構成比(占有率)に変換して、"ele.txt"ファイルに格納しておきます。その後、横結合で一覧表示します。
>paste ele.txt zipf.txt
0.322223 0.341417
0.160998 0.170709
0.152418 0.113806
0.150216 0.0853543
0.0704958 0.0682834
0.0634728 0.0569029
0.0619163 0.0487739
0.0111609 0.0426771
0.00368233 0.0379352
0.0034166 0.0341417
データからは互いに似ている感じがしますね。グラフ化してみると一目瞭然です。
>xyp -x,10 -y,.4 -k2 -s1,.1 -n -m <tmp
^y 0.4
|
0.3+
|
|
|
|
0.2
| +
| * *
| +
0.1 +
| + + *
| + + + +
|o * * 1*
+--1---2---3---4---5---6---7---8---9--->
"*"が実際の値で、"+"が理論値です。1位と2位はドンピシャリです(同じ値の場合は"+"が"*"を上書き)。他は微妙にズレていますが、それでも目視する限りではかなりの一致具合です。
次は…
ウェブのアクセスでは人気のあるページには、よりアクセスが集まる傾向が色濃く出ます。人為的な作用が強く反映されるわけです。結局、アクセス数にしても、都市の人口にしても集まるところには余計に集まる傾向があるため、ジップの法則が有効に機能するのかもしれません。
では、人間の関与がない世界でもジップの法則は機能するのでしょうか。例えば大陸の面積や割れた破片の重さなどは人為的に操作できない領域です。そんな世界でもジップの法則は成り立つのでしょうか。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
pasteは講座サポートで公開されています。seqはユーティリティーパッケージに同梱されています。rownum, rowacc, roweleはカンタン分析パッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。