0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

固有ベクトル中心性でQiitaの組織票を検出してみた【ネットワーク分析】

0
Posted at

中心性分析でQiita記事を評価しよう

一言で:組織票を除外できる指標を探したら、逆に組織票が上位に来た

中心性分析っていうのがある。
ネットワークの中から影響力があるノードを見つけられるんだとか。

例えば、

  • 情報をいっぱい広める人(社会ネットワーク)
  • 故障したら全部ダウンしちゃうルーター(コンピュータネットワーク)

こういう、重要なヤツを見つけられるらしい。

で、ふと思った。これQiita記事の評価に使えるんじゃない?

普通は「いいね数」で記事の良し悪しを判断する。
でも、Qiitaのいいね数って実はあんまり信用できない。
なんたって、組織票が横行してるし
本当にいい記事なのか、身内から義理でいいねを貰っただけなのか、区別がつかない。

どうにかできないかな〜と考えてみた。

いいねの数だけじゃなくて、「誰がいいねしてるか」も見ればいいのでは?

たとえば同じ10いいねの記事が2本あったとする。

片方は初心者10人にいいねされてる。
もう片方は凄腕エンジニア10人。

後者の方が明らかに凄そうだ。
技術的に高度だったり、役立つ知見が入ってたりしそう。

要するに、凄い人からの評価を重くしてやればよさそうってこと。

固有ベクトル中心性が使えるのでは?

固有ベクトル中心性っていうのが使えそうだと思った。
どうやら「重要なノードに支持されているノードの評価が上がる」指標らしい。

たとえば、フォロワーがめっちゃ多い人がいる。
その人にフォローされてる人もきっと凄い!
だから、高く評価してやろう、って考え方。

これを使えば、組織票に惑わされずに、いい記事を見つけられるんじゃないかな?

というわけで、実際にQiitaのデータに使ってみた。

期待と真逆の結果に

結論から言うと、なんと期待とは真逆の結果になった。

固有ベクトル中心性ランキングの上位が、組織票記事で埋め尽くされた。

どうやらコイツには「密で閉じたコミュニティ内のノードを高く評価する」性質があるらしい。

つまり、
内々でいいねし合ってる孤立グループの記事は、高く評価されちゃう
ってこと。

これはむしろ、組織票検出に使えそうと思った。

以降は、どんな分析をしたかを書いていく。

Qiitaいいねネットワーク

ネットワークの作り方

まずはQiitaのデータからネットワークを作った。
具体的には、記事とユーザーのいいねネットワークだ。

ユーザが記事にいいねしたら、そいつらをつなぐ。
だから、ノードは2種類。記事ノードとユーザーノードになる。

networkxを使えば簡単

ネットワーク作成は、networkxというpythonライブラリを使えば、簡単にできる。

各種中心性が1行で求められる。
例えば、固有ベクトル中心性を求めるコードはこんな感じ。

    eigenvector = nx.eigenvector_centrality(G, max_iter=1000, tol=1e-06)

簡単。

ネットワーク作成と、分析コードはgithubに上げた。

GitHub

データの詳細情報

データの詳細情報はこの通り。

項目
取得期間 2026-05-03 ~ 2026-05-31
取得日 2026-07-16
フィルター条件 いいね数 4以上100未満
ノード数 5,083
記事数 843
ユーザー数 4,240
エッジ数 10,942

ちなみに、4いいね未満、100いいね以上の記事は除外した。

理由はこんな感じ。

  1. ノード数を減らして、計算時間を減らす
  2. 組織票が混じっているのは中堅記事

2.がメインかな。実は、興味があるのは「中程度のいいね数」の記事。

そもそも組織票をなんとかするのが目的だった。

でも、どうやら、いいね数がめっちゃ多い記事に組織票はないっぽい。さすがに組織票で100いいね以上は難しいのかな?

だから、いいねが中ぐらいの記事に絞ることにする。そこに組織票が集中しているから。

記事の固有ベクトル中心性ランキング

固有ベクトル中心性が大きい順に、記事を並べた。

結果はこれ。
organization列が著者の所属組織。

順位 organization いいね タイトル
1位 any-plus 56 PythonとJavaのコードの違い
2位 any-plus 54 【新入社員研修】Linuxの基本操作
3位 any-plus 47 Pythonの制御構造について【基礎】
4~28位 any-plus この間もすべて any-plus
29位 prum 87 会社が変わっても消えないスキルとスタートアップという選択肢

any-plus(エニプラ)の記事が上位を独占している!
しかも、1~28位まで。

これらの記事は、研修生が書いた記事みたい。いいね欄を確認してみたんだけど、研修生同士でいいねし合っていた。
要するに、組織票だね。

つまり、ランキング上位が組織票で埋め尽くされたってこと。

これは期待と真逆だ。

組織票に強いランキングができると思っていた。
なのに、むしろ組織票ランキングができた。

閉じたコミュニティが高評価に

なんでこうなったんだろう?

どうやら、固有ベクトル中心性は「密で閉じたコミュニティ」の評価を高くしてしまうらしい。

参考:https://arxiv.org/abs/1909.03916

「密で閉じたコミュニティ」
これって、まさしく組織票の特徴だ。

例えば、さっきの研修生記事群は、研修生同士でいいねし合っていた。
そんでもって、外部の人にはほとんどいいねされていない。
結果、孤立したコミュニティが出来上がっている。

固有ベクトル中心性はそういうコミュニティのノードを高く評価する、というわけ。

だから、固有ベクトル中心性で組織票記事をあぶりだせる、ということになる。

仕組みを体感してみる

固有ベクトル中心性は、「密で閉じたコミュニティ」のノードを高く評価することは分かった。

じゃあ、なんでそうなるんだろう?

どうやら「閉じていないと、スコアが外に逃げるから」らしい。
AIに聞いたらそう答えてきた。
全然意味が分からない。

というわけで、自分で計算してみることにした。
こういうのは、実際に手を動かさないと分からない気がする。

固有ベクトル中心性のルール

固有ベクトル中心性は、ざっくり言うとこういうルール。

「自分の重要度は、自分に繋がっている人たちの重要度の合計で決まる」

これを何度も繰り返して計算する感じ。

実際にやってみた。

閉じたネットワーク

これは閉じたネットワーク。
丸いのがユーザ、四角いのが記事。

まず、みんなに同じポイントを配る。そのポイントが重要度ね。
適当に、みんな1にしよう。

次は、「つながってるヤツのポイントの合計」を自分のポイントにする。

結果、みんな2ポイントになった。

ここからが重要。

これを何回も繰り返していきたい。
でも、このままだと、無限にポイントが増えちゃう。

だから、正規化する。つまり、最大ポイントが1になるようにする
この場合、みんなのポイントを2で割る。

結果、みんな1になった。

閉じていないネットワーク

さて、次は、新しいノードをつなげてみる。

外のネットワークにつなげる、ということ。

さっきと同じく、「つながってるヤツのポイントの合計」を自分のポイントにする。

正規化する。

最終的にはこうなった。

閉じたネットワークの方がポイントが大きい

閉じたネットワークの時はみんなポイントが1だった。

でも、外につなげたら、2/3になった。(次数3の記事以外)

つまり、閉じたネットワークの方が固有ベクトル中心性が高くなった

まとめ

  • いいね数だけでなく「誰がいいねしたか」を見ることで、単純ないいね数ランキングとは違う評価ができる
  • 固有ベクトル中心性は「重要なノードに支持されているノードを高く評価する」指標
  • しかし実際にQiitaのいいねネットワークで試すと、組織票記事(閉じた相互いいね集団)が上位を独占した
  • 理由は、固有ベクトル中心性が「密で閉じたコミュニティ」のノードを高く評価する性質を持つから
  • 結果として、固有ベクトル中心性は組織票の検出に使える

ちなみに、本来の目的の「組織票に強いランキング」はPageRankで作れる。それについてはやる気が出たら書く。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?