AmazonランキングからAmazon全体の売り上げを考える

Amazonランキングの謎を解く」という本を読んだので、実際にAmazonランキングのグラフを作ってみたら案外いろんなことが読み取れるおもしろい結果になった。
めんどうな話は読みたくない人は、最後の「データから考えてみる」あたりから読めばいいと思います。

最初は読むのをやめようと思ったけど・・・

Amazonのランキングは、売れたら急激にランクがあがったりするし、あと100万以上あるアイテムの順位付けをどうやってるのか気になったりしてた。前にTwitterでゲームの順位付けについて、サーバーが分散するときにリアルタイムに計算するのは難しいよねという話題をやったことがあったので、確率的な順位付けも気になってた。
で、この本を買ってみて読んだのだけど、ぜんぜん順位付けを計算する本じゃなかった。

Amazon書評でも「アマゾンランキングを統計学的な見地から、どうしたら楽に計算できるだろうという推論」という風に誤解している人がいるけど、Amazonランキングのモデルを仮定して、楽に計算できるからだいたい間違ってないだろうと補足した上で、Amazonランキングの全体的な動きを統計的に予測するという話。
実際1時間一度の順位付けで、たまに間に合わなくてもいいとしたら、1000万件程度並べ替えるのに特別な技術は必要ない。ただ、あとで挙げるように、グラフを書いてみてわかったけど、順位の基準はなんかそこまで単純じゃなさそうではある。
本の中で、Amazonの中の人も簡単な計算にしておいたほうがメンテも楽だろうというようなことを何度も書いてるけど、それに関しては「Amazon技術者ナメんな」と言いたいw。


Amazonランキングの全体的な動きを考えるとあって、たしかに上位のランキングの動き気になるよなーと思いながら読んでたら、「売れ行きの良い本は本書の議論の最重要な点ではない」として上位10万位以内は興味の対象外と切り捨てられた。
筆者のネガティブな書き方もあって、この時点で、読む興味が薄れてしまった。
というわけで結論だけ読んで終わろうと思ったら、実際は、1冊のランキングから全体を予測するという話だと気づいて、興味が出て続きを読み返した。あと、筆者がネガティブだったのは最初だけで、途中からは開きなおって結構好きに書いてる。


ランキングモデルに関しては、1冊うれたら1位になるという単純なモデルとしている。下にあげた実際のデータを見てもわかるように、1冊売れたら3万位くらいになるのだけど、全体から見たらほとんど1位と言っていい程度の位置まであがっているともとれる。そこからあとは新たに売れた本によって順位が落ちていくというモデル。
実際には、長期的な売れ行きも順位に反映されているようで、本によって順位の落ち方に違いがある。ただ、そこでこの本の結論は大きく変わるわけではないと思う。


ともあれ、1冊のランキング推移から、全体の売り上げがある程度見えるというのが面白くて、結局一冊全部ちゃんと読んだ。

確率過程の勉強をする

結局この本は、確率過程についての本で、そいういう意味では読むべきは「第5章 確率過程入門」だと思う。実際にAmazonのランキングを具体例として説明しているので、確率過程の本としては非常に読みやすいように思う。
続く「第6章 流体力学的極限」が研究成果の数学的な説明なのだけど、本の流れとしては結構どうでもいいので、「研究の中心が読み飛ばされることになるゆえ、断腸の思い」と書いてるけど、遠慮なく読み飛ばせばいいと思う。読むと面白いのだけど、体力つかう。


理論の詳しい話は、著者のサイトにも。
無限粒子系によるランキングの時間変化の解析,服部哲弥


前のエントリで「日本語入力を支える技術」を取り上げたけど、こういった確率的な日本語処理というのも確率過程なので、ちゃんと勉強するときの前準備としていいのかもしれない。


ただ、確率統計自体を勉強したことがない場合は、このあたりで勉強したほうがいいかも。

Rによるやさしい統計学

Rによるやさしい統計学

Rの使い方ではなくて、Rを使って統計を勉強する本。後半はパッケージの使い方になってしまってるけど、わかりやすいしいい本。統計をRを使わずに勉強するのは、もはやナンセンスだと思うし。
というか、勉強しなければ・・・


あと、確率過程の本としては、この本が結構いいかもしれない。

増補版 金融・証券のためのブラック・ショールズ微分方程式

増補版 金融・証券のためのブラック・ショールズ微分方程式

金融の分野で有名なブラックショールズ方程式を導く本なのだけど、テイラー展開フーリエ解析微分方程式について噛みくだいた説明がある。Excelフーリエ解析してみるという話も載ってたりして、参考になる。
Amazonランキングの謎」でとりあげられてるブラウン運動についても、ウィナー過程として説明がある。
ただし、このブラックショールズ方程式を導けるようになったからといって、株で儲けれるようになるわけじゃないです。


確率測度の話は、ルベーグ積分の本に載ってた。

この本、日本語部分はすごく読みやすいんだけど、残念ながらほとんどのページで2/3以上が数式なので、読もうと思うたびにすぐ閉じてしまいます。。。

実際にデータとってみた

で、まあ数式わかんなくてもデータは取れるってことで、気になったので、自分の本のデータを1週間ほど取得してみた。
ソースはここ。
https://gist.github.com/1918496
コードはJava6で、HTMLのパースにはNekoHTMLを使った。


これをAmazon EC2で動かしておいた。そうすると、こんな感じのデータができる。

2012/Feb/26 20:04:48 http://www.amazon.co.jp/dp/4839914826/ 348,157 創るJavaNetBeansで(ry
2012/Feb/26 20:04:50 http://www.amazon.co.jp/dp/4777515486/ 301,458 はじめてのGoogle App Engine(ry
2012/Feb/26 20:04:52 http://www.amazon.co.jp/dp/4839926816/ 347,592 創るJava 改訂第2版 (ry
2012/Feb/26 20:04:54 http://www.amazon.co.jp/dp/4839932530/ 303,126 創るJava NetBeansで(ry


このデータをグラフとして表示する。
ソースはここ。
https://gist.github.com/1918612
コードはJava7で、グラフにはJFreeChartを使った。


んで、できたグラフがこれ。

グラフは、上が低い順位をあらわしている。

データから考えてみる

たしかに、25万位からでも50万位からでも、一冊売れると3万位程度まで順位があがっている。
ただ、ここで、しばらく売れてなかったと思われる初版や2版は、GAE本や3版よりも順位が落ちるのが早い。初版と2版の落ち方は、完全に一致していて片方しか描画されていない。
また、GAE本も、最近売れてない3版(T_T)よりも結局下の順位になってしまった。グラフでは見えにくいけど、GAE本が300,186位で3版が297,965位です。
このことから、単純に売り上げが7割になっていくような計算ではなくて、遠い売り上げに対して近い売り上げにはかなりの比率が割り当てられて順位が計算されていることがわかる。


あと、よく見ると、3版は、2時以降午前中は順位があがって、午後は順位が下がるという動きをしている。
これは、午前中は取引が少なく、最近の売り上げ関する係数が小さくなったGAE本のような本の順位が落ちたことによって、順位が押し上げられ、午後になると取引が増えて、低い順位の本が売れて3万位くらいまで上がることで、順位が押し下げられるということだと思う。
Amazonランキングの謎を解く」では10万位に落ちるのは売り上げから36時間とかかれていたけど、今はもう、18時間程度で10万位に落ちるようになっているかもしれない。つまり、全体の売り上げがかなり上がっているのだと思われる。ただ、10万位以内なら、少なくとも1日以内に1冊売れてるのだろうということがわかる*1
もっといろんな売れ方の本を観察すると、全体像が見えて、よりそれらしくAmazonの売り上げが推測できるかもしれない。

結び

絶版のため、もうほとんど売れてないはずの初版・2版が計測期間に売れたことは、幸運だったかもしれない。
あと、3版が一度も売れず安定した位置におり、基準となったこともグラフを読みやすくしている。
とはいえ、もうデータは取り終わったので、3版買ってくださってもいいんですのよ?

創るJava NetBeansでつくって学ぶJava GUI & Webアプリケーション[改訂第3版]

創るJava NetBeansでつくって学ぶJava GUI & Webアプリケーション[改訂第3版]

Google App Engineは執筆時点からいろいろ変わっているので、小川さんの本が出るのを待って買うのがいいんじゃないですかね。それまでに基本をおさらいしておくのはアリだと思いますけど。

Google API Expertが解説する Google App Engine for Java実践ガイド

Google API Expertが解説する Google App Engine for Java実践ガイド

*1:1週間3冊とか売れてると、売れなくてもしばらく2万位くらいにいたりする