2005年04月23日 21:30 [Edit]

相関係数0.04!

前回予告した通り

404 Blog Not Found:HTML = Hidoi Tag Markup Lanugage
今度はPageRankのええかげんさを発見してしまった。これは別Entryで考察する予定。

と予告したとおりここに結果を発表します。


blogのランキングにGoogleの人気の秘密でもあるPageRankTM(以下Tag打ちがめんどいのでTMは略(笑))を使うというのは、一見いいアイディアに思えます。人気blogほどcommentやtrackbackが多いのは事実ですし、巷で言われている理論*0には、それにより増加するLinkによってPageRankは上がるはずだからです。

でも、それって本当?

これは調べるっきゃない。

pagerank-alexa.png

そこでまず、他のランキングサービスとの相関はどうよ?ということを調べてみました。*1。この分散グラフ(クリックで拡大)は、Alexa日本語ランキングをX軸、PageRankをY軸に展開したものです。確かに一番左のYahoo! Japanの8を先頭に、ゆるやかに下がっているように見えます。しかし、Robotお断りページなど、0のところも散見され、相関係数を弾いてみると0.34という以外な低さになりました。

わき上がる疑問はさておき、Livedoor BlogのTop100のPageRankを同じように調べてみると....*2

ldblog-pangerank.png

なんということでしょう*3。ほとんど相関性なしではありませんか。相関係数は0.04!まるで関係ないということになります。

しかし、これはランキング捏造狙いページが多いことの反映かも知れません。特にPageRank 0のページはほぼそう言い切っていいのではないかと思います。それ以外のページを見ると、たいてい3から5程度はあります。

もっとも、0から10までの整数というのは荒すぎて直にはランキングには使えないというのは当初からわかっています。もっともこれを何らかの「スパイス」に使えそうだというのが今回の調査のきっかけです。

とりあえずの結論として、PageRankは、blogランキングそのものには使えないが,不正検出の手段としては有効そうだということはわかりました。

しかし、私はさらに驚愕の事実を知る事となるのです。

一エントリーとしては長いので次回につづきます。

タイトルだけは公表しておきましょう。次回、「PageRankは田代まさしの夢を見るか?」です。

Dan the Ranked Man


  1. 本当のところはGoogleの企業秘密でもあるので、インサイダー以外誰も知らないのが本当のところです。
  2. 本調査では、即興で書いた以下のプログラムの出力結果をExcelに食わせてグラフ化しました。
    #!/usr/local/bin/perl -Tw
    use strict;
    use LWP::Simple;
    use HTML::LinkExtor;
    use WWW::Google::PageRank;
    my $google_pr = WWW::Google::PageRank->new();
    my $alexa_uri =
         'http://www.alexa.com/site/ds/top_sites?ts_mode=lang&lang=ja';
    my $alexa_re  =
         qr(\Qhttp://www.alexa.com/data/details/main?q=&url=);
    my %alexa_top;
    my $alexa_rank = 0;
    
    sub callback{
         my($tag, %link) = @_;
         $tag eq 'a' or return;
         for my $attr (keys %link){
             $attr eq 'href' or next;
             my $link = $link{$attr};
             $link =~ s/^$alexa_re//o or next;
             $alexa_top{$link} = ++$alexa_rank;
         }
    }
    
    my $p =  HTML::LinkExtor->new(\&callback, $alexa_uri);
    my $alexa_content = get($alexa_uri);
    defined $alexa_content or die "Error fetching $alexa_uri";
    $p->parse($alexa_content);
    for my $uri (sort {$alexa_top{$a} <=> $alexa_top{$b}} keys %alexa_top){
        my $pagerank = $google_pr->get($uri);
        printf "%3d\t%d\t%-40s %s\n",$alexa_top{$uri}, $pagerank,  $uri;
     }
    __END__
    
  3. 同上。こちらの方が簡単。
    #!/usr/local/bin/perl
    use strict;
    use LWP::Simple;
    use HTML::LinkExtor;
    use WWW::Google::PageRank;
    
    my $google_pr = WWW::Google::PageRank->new();
    my $ldblog_uri =
         'http://portal.blog.livedoor.com/xml/ranking.rdf';
    my (@blogs, %blogs);
    
    my $ld_content = get($ldblog_uri);
    defined $ld_content or die "Error fetching $ldblog_uri";
    $ld_content =~ s/rdf:resource=\"([^\"]+)\"/push @blogs, $1/eg;
    
    
    for my $i (0..99){
        my $uri = $blogs[$i];
        my $pagerank = $google_pr->get($uri);
        printf "%3d\t%d\t%-40s %s\n", $i+1, $pagerank,  $uri;
     }
    __END__
    
  4. ここで「大改造!!劇的ビフォーアフター」のナレーションをお願いします(藁)。

この記事へのトラックバックURL

この記事へのトラックバック
え、このページとあのページのPageRankが同じですって?
PageRankは田代まさしの夢を見るか?【404 Blog Not Found】at 2005年04月25日 22:01
この記事へのコメント
ページランクを“スパイス”にするというのは名案ですね。

同様にfeed meter値もスパイスに使えそうに思います。
Posted by miccckey at 2005年04月25日 02:50