Skip to content

Instantly share code, notes, and snippets.

@mj-hd
Last active March 23, 2021 04:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mj-hd/326f58b0447ea9d898a6123322cec7d4 to your computer and use it in GitHub Desktop.
Save mj-hd/326f58b0447ea9d898a6123322cec7d4 to your computer and use it in GitHub Desktop.
20210323_PageRankと競輪選手

20210323_PageRankと競輪選手

PageRankと競輪選手

仕事柄、競輪関連のデータ分析などに興味があり、データマイニングをチョット学んだので応用編として、PageRankというアルゴリズムを競輪選手に応用した。
PageRankによる対戦ネットワークの分析 | 株式会社AlphaImpact
内容としては競馬の分析↑の競輪版。PageRankを使うことで、競輪選手同士の強さをランクづけすることができる。
PageRankとはそもそもなんだっけと言うところだが、むかーしGoogleがクロールしたWebページの順位づけに使っていたというアルゴリズム。 Googleの検索は、一覧で並べるので上から何番目、という位置関係がとても重要になってくる。この位置関係はページの価値や関連度などなどで決まるのだが、ページの価値「良いページとはなんだっけ」「機械的にページの価値を判断して、順位づけするためには何をしたらいいんだっけ」という問題に答えるのがPageRank。
仕組みとしては、Webページのリンク/被リンク関係を、有向グラフ(矢印付きのグラフです)として表現する。そして、被リンク・矢印が沢山繋がっているページほど「良い」とし、さらに「良い」とされるページからリンクされているページも「良い」と定義する(論文なども同じで、被引用が多いほど価値が高い)。あとは有向グラフ上でこの「良さ」を計算すれば良い。
計算方法は、ランダムサーファーという方式で説明をすると、今開いているページのリンクの中からランダムにリンクをポチポチ開いていくサーファーという登場人物を考える。初期状態ではこのサーファー達沢山用意し、適当なページに配置、その後ターンを進めていく。サーファー達は毎ターンランダムなリンクを踏むので、有向グラフ上を矢印に従いどんどん移動していく。
これを繰り返すと、確率的に被リンクの多いページには自然とサーファーが集まり、被リンクが多いページからリンクを受けているページにも、沢山のサーファーが集まる。先ほど定義した「良い」ページが、ページにとどまるサーファーの数として表せるわけだ。
有向グラフの話に戻ると、矢印を沢山受けているノードは数値が高く、矢印を沢山受けるノードから矢印を受けるノードも数値が高くなる。これを対戦成績に当てはめると、「他の選手に勝った回数が多い人ほど強い、強い選手に勝った選手も強い」と言えて、もっともらしい。
計算もpythonのnetworkxというライブラリに、そのままページランクをワンラインで計算できるような命令が生えているのでサクッと実装できた。 選手の過去成績をスクレイピングし、α=0.85で実行してみたところ、おおよそ競走得点と相関のありそうな数値が出てきた。じゃあ競走得点でいいじゃん…完。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment