静かなる名辞

pythonとプログラミングのこと

ブログ記事のアクセス数はパレートの法則に従うのか? 分析してみた

はじめに

 このブログは2016年末に立ち上げて、3ヶ月くらい書いた後一年ほど放置していたのだが、今年の1月に性懲りもなくまた書き始めた。

 直接の動機は放置していた間に意外とアクセス数が伸びていたことで、具体的な数字を出すのは控えるが、帰ってきた時点でもgoogleアドセンスか何か貼ればはてなブログProの料金をなんとかペイしそうな程度には伸びてた。それまでに書いた記事数は二十数件だったので、気合を入れて一年くらい書けば1万円くらいの黒字にはなる。しょぼいといえばしょぼいし、単純に稼ぐならアルバイトでもした方が絶対マシだが、割と時間に余裕がある身分のうちに(私は学生である。そしてあと数年は学生を続ける予定)勉強と趣味のついでにブログを書いておいて、ある程度の収入が得られるというのはそれなりに得策ではある。世の中には他人の時間を奪うだけの内容の薄いネット記事を書いて儲けている人もいるらしいが、このブログに関してはジャンルと内容的にそうなる心配はない(おおむね人様の時間を節約するのに貢献する記事を書いてきたつもりである*1)ので、気兼ねなくやれる。

 それはそうとして、アクセス数を気にしだすと「一体これはどんな分布をしているのか」がどうしても気になる。気になるのは、正規分布に従うのかとか、パレートの法則(全体の20%の記事に80%のアクセスが集中する)が成り立つのかとか、そんなテーマである。なので簡単に分析してみた。

 目次

準備

 googleアナリティクスで先週一週間分のすべてのページのアクセスデータをCSVでエクスポートした。無駄なコメント行と後ろの方に付いてるトータルの集計、日別集計を削除した。ファイル名をdata.csvに変えて保存した。

 この方法だとアクセス数0の記事は分析されないが、気にしないことにする。

分析

 分析にはpythonを使った。どんな分析をするかが問題だが、とりあえず

  • 平均と中央値を出す
  • 棒グラフとヒストグラムで図示する
  • 記事ごとのアクセス数がどんな分布なのか確認する
  • 何%の記事がアクセスの何%を占めるのか、というやつをやる

 これくらいの方針でやることにした。内容的にはたぶんエクセルでできる内容だが、私はエクセルの操作はあまり詳しく知らないのでpythonでやることにする。分析に使ったソースコードは記事末尾に付録として示す。

 なお、具体的な数字を出すとgoogle側の規約に引っかかるっぽいので、以下で示す数字は一週間のアクセス数=1とした相対比である(これもグレーといえばグレーな気がするけど)。記事とアクセス数の対応も示していない(やるとかえって面倒くさいのと、なんとなく恥ずかしいから)。具体的な数字が知りたい方にはまったく参考にならないと思うが、勘弁してほしい。

平均と中央値

 平均は0.0154、中央値は0.00648だった。これは相対比(全アクセス=1)なので、このブログの現状に対して次のようなことが言えるかもしれない。

  • 平均的には1記事の追加で1.54%(現状比)のアクセス増が見込める(けっこう夢がある!)
  • 中央値を見ると1記事の追加で0.648%(現状比)のアクセス増になる。その方が実感に近いかもしれない(悲しい)

 ただし、アクセス0の記事は集計されていないので(一週間アクセス0のゴミ記事も何件かあるはず)、実際の数字はもっと悲観的に見るべきかもしれない(悲しい)。あるいは、これには記事以外のページへのアクセスも含まれているので、記事だけで見れば意外とこの数字も適当か?(だとしたら嬉しい)。

棒グラフとヒストグラム

 結果はこうなる。

棒グラフ
棒グラフ
ヒストグラム
ヒストグラム

 一件だけ異様にアクセスを集めている記事があるが、これは本当にそういうデータなので間違いではない*2

 最初の1件はいわば「外れ値」なので、今後の分析に影響を与える可能性がある。なので、取り除いた分析もやる必要がある。

どんな分布なのか調べる

 あまり厳密にやっても仕方ないので(検定しようにも記事数が少なすぎてあぼーんする気がするし)、scipy.statsのprobplot(QQプロット)でやることにする。これなら結果が視覚的に見える。

 正規分布と指数分布のQQプロットをやってみよう。また、外れ値っぽい一番アクセスが多い記事を除外した結果も出してみる。

正規分布
正規分布
正規分布(外れ値除去)
正規分布(外れ値除去)
指数分布
指数分布
指数分布(外れ値除去)
指数分布(外れ値除去)

 やはり、一番アクセスを集めている記事は外れ値と見て良いらしく、これを含めると平均が大きくシフトしてしまう。そしてこの図からは、相対的に指数分布に近いことが読み取れる(なんかのたうってるけど)。まあ、ヒストグラム見ればどう見ても正規分布じゃないことはわかるといえばわかるのだが。

 なお、この分析にあたってはここを参考にした。
正規分布かどうかを見極める3つのステップ(Pythonでの検定実践あり) - 俺、サービス売って家買うんだ

何%の記事が何%のアクセスを集めるのか

 とりあえず、実データから累積比率を描いてみる。

累積比率
累積比率
 青が上で見た棒グラフ、赤がアクセスの累積比率、緑が記事数の累積比率である。

 これをどう見れば良いかというと、緑の線が0.2の位置で赤の線が幾つになっているかを見れば「上位20%が~」というのがわかる。これを見ると80%には届いていないが一応75%くらいにはなっており、。パレートの法則に従うかどうかは微妙、ということになる。

 ただし、外れ値(一番アクセスを集めている記事)のことを重視する(除外するべきと考える)と、次のようになる。

(外れ値除外)
(外れ値除外)

 この場合60%強程度であり、全体的に言ってパレートの法則を満たしているとは言い難いと思う。

 それならロングテールなのか? というとそれは違う。外れ値を無視して40%弱、含めると25%ほど「だけ」が下位8割の記事の取り分になっている訳で、ロングテールというにはちょっと残念な数字である。このブログの現在の記事数は60記事ほどなので、新たな記事を書くと80%の確率で下位側に行き、その場合のアクセスの増加は0.5%ほどということになる。けっこう厳しい現実である。

 ま、そもそもブログをロングテールを意識して書くのはけっこう大変そうだな、というのが率直な感想である。amazonみたいに極限まで流通コストを下げて売る、というならともかく、文章を書くコストは(それこそ自動生成してくれるAIでもできない限り)そう簡単には下げられない訳で、「数撃ちゃ個々の記事の集めるアクセスは少なくても~」というのは普通はやる人間が先にヘタると思う。普通はアクセスを集めやすい記事を書き、「数撃ちゃたまには当たる」を積極的に狙っていくのが得策だと思う。

 ま、それでもこのブログはpythonブログな訳で、pythonプログラミングにはググると英語情報しか出てこないようなニッチなネタも普通にあるから、そういうのに突き当たっちゃうと嬉しくて記事書いちゃったりするのだが(そして数日に1回しかアクセスされなかったりする・・・*3。でもその1回が嬉しいから書く訳だが)。

 これまでその方針でやってて、寂しくならない程度のアクセスにはなってる訳で、これからもそんな感じで行こうと思う。

まとめ

 結論:パレートの法則には従わなかったです。

 ぶっちゃけどんな感じかはやる前からなんとなくわかってたので、この分析で何がわかったかというと微妙だが、とりあえずこんなもんかという感想になった。

 単にこのブログのアクセスデータを分析してみただけなので、「一般的なブログではどうなるの?」という問いにはお答えできない。でもまあ、多かれ少なかれ似たような結果にはなるんじゃないかと思う。パレートの法則に従うからどうだとか、従わないからなんだとか、そういう話でもないので、そもそも気にするだけ無駄といえば無駄なのだし*4。一例として、「こんな感じだったのね」って思って頂ければ構わない。

 で、このデータを使ってできる辛うじて面白みがある話は「記事を増やしていくとパレートの法則に近づくのか? それともロングテールっぽくなってくるのか?」というところだと思うので、それは後日また(最短で半年後くらい、それまで書き続けてたら)記事にしてみるつもり。それを今回の結果と比較することで、このブログがロングテール志向で成長していったのか、それとも「外れ値」を打ち続けてアクセスを伸ばしたのかわかるし、一般化して誰かのブログがある期間においてロングテール志向っぽいかどうかもわかるようになる方法ができる・・・と思う。

 とりあえず今回の話はここまで。

付録

 実験用ソースコード
 使い方:同一ディレクトリにdata.csvを置いて走らせる。

*1:ただし今見ると内容的にどうよこれ・・・という記事が何件かあるので、アドセンスやらに申し込んで過去の記事に広告を貼って回る気力が出たときついでに直す

*2:あの記事の内容は今読むとちょっと・・・なんだけどなぁ。早めに直しとかないと

*3:そもそもデータサイエンスやら機械学習やらが流行ってるとはいえ、日本のpython使いの母数自体そんな劇的に多くはないだろうしな・・・たぶん学生含めて1万人いるかどうか程度だろ

*4:ただしたくさんの人のデータを集めて、「こういう分布のブログは良質な記事が多い」とかの相関を調べれば、もしかしたら役に立つのかもしれない。googleはやってるかもしれないなぁ