jiku log

JTCのデータサイエンス中間管理職の学び

統計検定1級対策に関する記事一覧 #統計検定

はじめに

本記事について

当ブログでは,統計検定1級・統計検定準1級に関連する数理統計学のTips記事や,私が日々学んでいることを紹介している。

統計検定に合格するためには,参考図書を読み問題演習をしっかりこなすことが重要だと考えるが,当ブログでは私が過去に参考書や問題集を読んでいたときに,つまずいたことや理解を深めるために考えたことを紹介する。そのため,「このサイトの内容さえ読めば,受験対策は完璧!」という性質のブログではないのだが,今後統計検定を受験する方にとって,少しでも参考になればと考える。

これらのTips記事は随時更新されるが,記事の数が増えてきたので,「増訂版 日本統計学会公式認定 統計検定1級対応 統計学」の章立てと,「統計検定1級出題範囲表」に沿ってインデックスを作った。本記事はこのインデックスを示すものである。

自己紹介

私は2023年に統計検定1級の統計数理に,2021年に統計検定1級の統計応用(理工学)に合格した。詳細な自己紹介は,下記サイトに記載した。

第6章 統計応用共通手法 ※記事なし

(記事無し)

「データのつながりを活かす技術」を読む ~第3章 ネットワークの性質を知る ③ネットワーク全体の特徴~

はじめに

データのつながりに着目した新たなデータ分析の手法を学ぶために,黒木裕鷹・保坂大樹 著 「データのつながりを活かす技術〜ネットワーク/グラフデータの機械学習から得られる新視点」を読むことにした。


本記事は,「第3章 ネットワークの性質を知る」における,ネットワーク全体の特徴に関する読書メモである。

  • 本書の紹介ページ

gihyo.jp

3.3 どのようなネットワークか

前節までは,ノードやノードのペアといったネットワークの局所的な部分に着目してきた。本節では,ネットワーク全体の性質について紹介している。

ネットワークの大きさ

ネットワーク全体を見渡したときの特徴である「大きさ」(size)は,ノードの数 N_V = \lvert V \rvertで定義される。
なおエッジの数 N_E = \lvert E \rvertよりも,ノードの数をネットワークの大きさとして捉えるのが一般的である。

ネットワークの密度

エッジについては,その数そのものではなく,ノードの数に対する比率に着目した密度(network density)を参照する。

ネットワークの大きさ(ノードの数)を N_Vとしたとき,エッジの数の最大値は N_V (N_V - 1)/2となる。これを用いると,ネットワークの密度は,


 \begin{align}
\frac{ \lvert E \rvert }{ N_V (N_V - 1)/2 } = \frac{ 2 \lvert E \rvert }{ N_V (N_V - 1)} \\
\end{align}

で表される。

なお有向ネットワークの場合,エッジの数の最大値は N_V (N_V - 1)なので,ネットワークの密度は,


 \begin{align}
\frac{ \lvert E \rvert }{ N_V (N_V - 1) } \\
\end{align}

となる。

中心性の指標

3.2節では,ノードの特徴を測る中心性を説明していた。各ノードにおける中心性を計算し,中心性の分布を計算すれば,ネットワーク全体の特徴を知ることができる。
中心性の指標について次数中心性を用いれば次数分布(degree distribution)を計算できる。

次数の分布について,特定のノードが多くのつながり持つようなネットワークをスケールフリーネットワーク(scale-free network)と呼ぶ。

スケールフリーネットワークの描画

NetworkXを用いてスケールフリーネットワークを描画した。スケールフリーネットワークを生成するには,NetworkXのnx.barabasi_albert_graph関数を用いる。
左側がスケールフリーネットワーク,右側がランダムネットワークである。

スケールフリーネットワーク(左)とランダムネットワーク(右)

次数を比較すると,左のスケールフリーネットワークの次数は偏っているが,右のランダムネットワークは偏っていない。

次数のヒストグラム(左:スケールフリー,右:ランダム)


上記の描画用のPythonコードは以下の通りである。

大域的クラスター係数

ノードの特徴について,ノードの近傍にどの程度密に接続しているかを表す指標として,局所クラスター係数があった。この観点をネットワーク全体に拡張した指標として,大域的クラスター係数(global cluster coefficient)が挙げられる。

大域的クラスター係数は以下の手順で計算される。

  • あるノードが,他の2つのノードとつながっているような部分グラフ(3つのノードからなる経路)をすべて抽出する
  • 抽出された部分グラフのうち,閉路を形成しているものの割合(三角形の割合)を計算する。

大域的クラスター係数が大きければ,ネットワーク内の一部で複数のノードが密接につながっていて,局所的なコミュニティが形成されていることを示唆する。

直径・平均距離

直径は,ネットワーク内で最も離れた2つのノード間の最短距離について,その最大値として定義される。
平均距離は,最短距離の最大値ではなく,平均値で定義される。

ネットワーク全体の大きさや概形を測るのに用いられる。

同類性係数・次数相関

同じような属性をもつノード同士が互いに接続しやすい傾向である同類性について,ネットワーク全体でこの傾向を定量化する指標として,同類性係数(assortativity coefficient)が挙げられる。

ピアソン相関係数と同様に,-1から1までの値を取る。

まとめと感想

今回は,「第3章 ネットワークの性質を知る」における,ネットワーク全体の特徴についてまとめた。

スケールフリーネットワークランダムネットワークを並べて描画してみたが,ぱっと見ではあまり差が無いように感じたが,次数を計算すると違いは一目瞭然だった。ネットワークの特徴や,2つのネットワークの違いを把握するためにも,ネットワーク全体の特徴量や,それぞれの特徴量自体の特徴を理解していきたい。


本記事を最後まで読んでくださり,どうもありがとうございました。

「データのつながりを活かす技術」を読む ~第3章 ネットワークの性質を知る ②ノード周辺の特徴~

3.1 どのようなノードか

本節では,ノード単位の特徴について紹介している。

どくのらい周りが密になっているか

前項では,次数中心性・固有ベクトル中心性・ページランクといった,特定のノードに関する指標を紹介していた。本項では,ノードの近傍(周り)の構造を記述する指標を紹介している。この指標は,たとえば

  • 「コミュニティ」の形成状況を調べたい場合
  • 「あるノードの周りがクラスターのようになっているかどうか」を把握したい場合

などに有用である。

局所クラスター係数

局所クラスター係数(local cluster coefficients)は,「注目するノードの周囲でエッジの接続がどのくらい密になっているか」を表す指標である。

注目するノード iの次数が d_iであるとき, iに隣接するノード同士のペアは全部で d_i (d_i - 1)/2通り存在する。
ノード iの局所クラスター係数 C_iは,そのうち実際にエッジが張られているペアの割合で定義される。

 \mathcal{N}(v_i)をノード v_iの近傍ノードの集合とすると,局所クラスター係数 C_i


 \begin{align}
C_i = \frac{\lvert e_{jk} : v_j, v_k \in \mathcal{N}(v_i), e_{jk} \in E \rvert}{d_i(d_i - 1)/2} \\

\end{align}

で表される。

結構複雑な式ではあるが,細かく見ていくと上記で説明している通りとなる。分子については,

  •  \lvert A \rvert : 集合 Aの要素の数を表す。
  •  A = \{ e_{jk} : C \} :  Cという特徴を持つ要素 e_{jk}の集合を表す。
  •  C = (v_j, v_k \in \mathcal{N}(v_i), e_{jk} \in E) : ノード v_j, v_kが近傍ノードの集合 \mathcal{N}(v_i)に含まれて,かつエッジ e_{jk}がエッジの集合 Eに含まれることを表す。

となっている。

分母については,上述の通り, iに隣接するノード同士のペア数の合計である。

中心性指標の正規化

これまで紹介した中心性指標の大きさは,いずれもノードやエッジの総数に強く依存する。そのため,ノードやエッジが少ない「小さいネットワーク」と,ノードやエッジが多い「大きいネットワーク」を直接比較することが難しい。

このような規模の違いによる影響を抑えるためには,以下の2通りの方法が考えられる。

ノードのペアの総数で補正する

ノードのペアの総数が関係していると考えられる場合,ノードのペアの総数 N_V(N_V - 1)/2 で割る。ただし N_Vは,ノードの総数である。

指標の値が0から1になるように正規化する

得られた指標について最大値を1,最小値が0になるように,以下の式で補正する。


 \begin{align}
s_{\mathrm{normalize}, i} = \frac{s_i - \min _j (s_j)}{ \max _j (s_j) - \min _j (s_j) } \\
\end{align}

3.2 二つのノードはどのような関係にあるか

本節では,ネットワーク上の二つのノードを「ペア」として捉え,その組み合わせを評価する指標を紹介する。

最短経路長

最短経路長(shortest path length)は,2つのノードの間の経路の長さである。最短経路を調べるには,ダイクストラ法(Dijkstra's algorithm)などが用いられる。

ノードの属性の類似性

SNSなどのネットワークを考えると,ノードであるユーザには,趣味や年齢,組織・所属先の種類といった属性情報が付与されている。この属性情報を用いて,「2つのノードが似ている」という類似度を表kする。

最短経路を用いた中心性

媒介中心性

媒介中心性(betweenness centrality)は,「経路や伝達を考えた時に,各ノードがどのくらい要所になっているか」ということを測定する指標である。
たとえば,感染症の経路を考えた時に,爆発的広がりのきっかけになる人物がこの「要所」となる。

 \sigma_{u, v}をノード uからノード vへの最短経路の総数,そのうちノード iを通る最短経路の総数を \sigma_{u, v}(i)とすると,


 \begin{align}
s_{\mathrm{betweenness}, i} = \sum_{u \neq v \neq i} \frac{\sigma_{u, v}(i)}{\sigma_{u,v}} \\
\end{align}
で表される。
近接中心性

近接中心性(closeness centrality)は,ネットワーク内の位置的な中心さに注目した中心性指標である。ネットワークの真ん中に位置しているノードは,「他のノードへの距離」が平均的に短くなると考えられる。

 d(i, j)をノード i, j間の最短経路長とすると,


 \begin{align}
s_{\mathrm{closeness}, i} = \frac{N_V - 1}{\sum_j d(i, j)} \\
\end{align}

となる。

まとめと感想

今回は,「第3章 ネットワークの性質を知る」における,ノード周辺の特徴についてまとめた。

局所クラスター係数は,式は複雑ではあるが,「注目するノードの周囲におけるエッジの接続の稠密さ」という定義を数式に落とし込んだだけだったので,丁寧に確認していけば理解できた。
2つのノード間の経路に着目した中心性は,意味としては理解できるが,最短経路の計算が必要になってくるので,実際に使おうとしたときには計算が大変になるのではと感じた。実例をもとに,どの程度計算時間がかかるか確認してみたい。

本記事を最後まで読んでくださり,どうもありがとうございました。

「データのつながりを活かす技術」を読む ~第3章 ネットワークの性質を知る ①ノードの中心性~

はじめに

データのつながりに着目した新たなデータ分析の手法を学ぶために,黒木裕鷹・保坂大樹 著 「データのつながりを活かす技術〜ネットワーク/グラフデータの機械学習から得られる新視点」を読むことにした。


本記事は,「第3章 ネットワークの性質を知る」における,ノードの中心性に関する読書メモである。

  • 本書の紹介ページ

gihyo.jp

第3章 ネットワークの性質を知る

本章では,ネットワークの特徴を表すための指標について紹介している。

3.1 どのようなノードか

本節では,ノード単位の特徴について紹介している。

どのくらい中心的な役割を果たしているか

本節では,ノードに関する特徴のうち中心性指標(centrality measure)について説明している。中心的なノードが特定できれば,例えばSNSの中で誰が効率よく情報を発信できるか特定する,といった課題にアプローチするうえで役に立つ。

本節では代表的な中心性指標として,次数中心性,固有ベクトル中心性,ページランクを紹介している。

次数中心性

次数中心性(degree centrality)は,あるノードに接続しているエッジの数を数え上げることで計算できる。

ノード iの次数(中心性) d_iは,


 \begin{align}
d_i = \sum_{j} A_{i, j} \\
\end{align}
で表される。

ネットワークが有効である場合,

  • ノードへ入ってくるエッジの数(入次数(in-degree))
  • ノードから出ていくエッジの数(出次数(out-degree))

が異なる。

 A_{i, j}=1なら iから jへ向かうエッジが張られていることを表す。
 A_{j, i}=1なら i jからエッジが張られていることを表す。

したがって,ノード iの入次数 d_i^{\mathrm{IN}}と出次数 d_i^{\mathrm{OUT}}は次のように計算できる。


 \begin{align}
d_i^{\mathrm{IN}} &= \sum_j A_{j,i} \Leftrightarrow d_j^{\mathrm{IN}} = \sum_i A_{i,j}\\ \\
d_i^{\mathrm{OUT}} &= \sum_j A_{i,j} \\
\end{align}
隣接行列と入次数・出次数


次数中心性のアイディアで暗に仮定されていることは,「同じ重みのつながりは等しく重要である」ということである。すなわち,例えばSNSのネットワークを想定したときに「インフルエンサーからフォローされている」といったことは重視できない。ただし次数中心性は,シンプルながら実用面では十分に通用するということが,様々な研究から示されている。

固有ベクトル中心性

固有ベクトル中心性(eigenvector centrality)は,「重要なノードと接続されているノードもまた重要である」というアイディアに基づいた中心性である。

ノード i固有ベクトル中心性 s_{\mathrm{eigen}, i}は,下式(本書P54の式(3.3))のような再帰的(recursive)な計算によって定義される。
この式が「再帰的」であるのは,ノード iの中心性を,隣接するノードの中心性の総和によって求めているためである。


 \begin{align}
s_{\mathrm{eigen}, i} = \sum_{j} A_{i, j} s_{\mathrm{eigen}, j}  \\
\end{align}

具体的に, d次元のベクトルであるとして書き出してみると,


 \begin{align}
s_{\mathrm{eigen}, 1} &= A_{1, 1} s_{\mathrm{eigen}, 1} + A_{1, 2} s_{\mathrm{eigen}, 2}  + \cdots + A_{1, d} s_{\mathrm{eigen}, d} \\ \\
s_{\mathrm{eigen}, 2} &= A_{2, 1} s_{\mathrm{eigen}, 1} + A_{2, 2} s_{\mathrm{eigen}, 2}  + \cdots + A_{2, d} s_{\mathrm{eigen}, d} \\ \\
& \vdots \\ \\
s_{\mathrm{eigen}, d} &= A_{d, 1} s_{\mathrm{eigen}, 1} + A_{d, 2} s_{\mathrm{eigen}, 2}  + \cdots + A_{d, d} s_{\mathrm{eigen}, d} \\ \\

\Rightarrow 

\boldsymbol{s}_{\mathrm{eigen}} &= \boldsymbol{A}   \boldsymbol{s}_{\mathrm{eigen}} \\

\end{align}

これは,本書P54の式(3.3)をベクトル・行列形式で表しただけだが,式(3.4)にはならない。


そこで,MIT OpenCourseWare"Networks, Lecture 3: Eigenvector Centrality Measures"を参考にして解釈を試みた。

上記のリンクを参考に,比例定数 \lambdaを導入すると,


 \begin{align}
s_{\mathrm{eigen}, i} = \frac{1}{\lambda}\sum_{j} A_{i, j} s_{\mathrm{eigen}, j}  \\
\end{align}

となる。

隣接行列 \boldsymbol{A}はネットワーク構造によって決まる行列であるため,固定された値であるため,式(3.3)を満たすような固有ベクトル中心性 s_{\mathrm{eigen},i}が取り得る値の範囲が限定されてしまう。そのため比例定数 \lambdaを導入して定義したほうが,固有ベクトル中心性解が求まりやすいと考えられる。

上式を変形すると,


 \begin{align}
\lambda \boldsymbol{s}_{\mathrm{eigen}} = \boldsymbol{A}   \boldsymbol{s}_{\mathrm{eigen}} \\
\end{align}

となる。これは,固有値固有ベクトルの関係式になるので,最大固有値 \lambda_0を用いると,


 \begin{align}
\boldsymbol{s}_{\mathrm{eigen}} = \lambda_0^{-1} \boldsymbol{A}   \boldsymbol{s}_{\mathrm{eigen}} \\
\end{align}

となり,式(3.4)が得られる。


固有ベクトル中心性については,有向ネットワーク,すなわちフォロー関係が一方向的なSNSなどでは,フォロワーが誰もいないノードが発生する。このような場合,入次数が0になる。
「入次数が0であるノードとつながっている」ことを考慮する場合は,他の中心性を検討することになる。

Katzの中心性は,固有ベクトル中心性に以下のような補正(定数項)を加える。


 \begin{align}
s_{\mathrm{katz}, i} = \sum_{j} A_{i, j} s_{\mathrm{katz}, j} + \beta \\
\end{align}

ページランク

ページランク(PageRank)はウェブページのランク付けをすることを目的に考案された。ページランクは,以下で定義される。


 \begin{align}
s_{\mathrm{PageRank}, i} = \sum_{j} A_{i, j} \frac{s_{\mathrm{PageRank}, j}}{d_j^{\mathrm{OUT}}} (1 - \beta) + \frac{\beta}{N_V} \\
\end{align}

前半の項 (1 - \beta)は,「ユーザが現在ページ内のリンクをたどる確率」を示す。後半の項は「ユーザがリンク先を選ばず,ランダムなページへ直接ジャンプする」動きをモデル化している。

まとめと感想

今回は,「第3章 ネットワークの性質を知る」における,ノードの中心性についてまとめた。

ノードの中心性は,代表的なノードを計算するための指標を学んだ。次数中心性は,計算方法も考え方もシンプルで分かりやすかった。固有ベクトル中心性は,再帰的な式であり定義が複雑であるが,最終的には行列の固有値問題に落とし込めるので,ネットワーク解析と線形代数の親和性の高さを感じた。

本記事を最後まで読んでくださり,どうもありがとうございました。

IPA&DSA第2回データ未来会議に行ってきた

はじめに

先進的な企業におけるDX(デジタルトランスフォーメーション)や政府のデジタル・データ戦略に関する情報収集のために, IPA&DSA第2回データ未来会議に行ってきた。
本会議の資料は後日共有されると考えられるが,当日発表を行なった民間企業(JR東日本・ライオン)の取組みで特に興味深かった点について,公開情報をもとに紹介したい。

https://www.ipa.go.jp/event/2024/sbn8o10000007ypm-img/sbn8o10000007yr7.png

会議の概要

第2回データ未来会議は,情報処理推進機構(IPA)とデータ社会推進協議会(DSA)が共催するイベントである。
経産省・デジタル庁といった政府関係者のパネルディスカッション,RRI・日本データマネジメントコンソーシアム(JDMC)といった業界団体関係者のパネルディスカッション,および民間企業の事例紹介といった内容で,国内外のデータ施策の最新状況や実際のデータ活用の取組みなどが紹介されている。

  • IPAによる本会議の紹介サイト

www.ipa.go.jp

  • DSAによる本会議の紹介サイト

data-society-alliance.org

JR東日本の取組み

JR東日本は,「鉄道やバスの遅れを加味した「リアルタイム経路検索」とSuicaデータ活用の新たな試み「タッチトリガー」」という題目で,マーケティング本部戦略・プラットフォーム部門デジタルビジネスユニット 村上洋輔氏が講演を行なっていた。この講演において興味深かった点について,公開情報をもとに紹介する。

リアルタイム経路検索

「リアルタイム経路検索」は,経路検索システムにおいて,電車の遅延状況を反映して経路検索を行なう仕組みである。電車の遅延が発生すると,電車が駅に到着する時刻が遅くなるが,この影響で乗り継ぎができる電車が変わる(乗り継げなくなることが発生する)。電車の遅延の影響をリアルタイムに反映して経路検索を行なう仕組みが,リアルタイム経路検索である。

リアルタイム経路検索の凄さはデータ共有

私自身もリアルタイム経路検索の恩恵にあずかっているが,参考サイトにある通りリアルタイム経路検索では,私鉄との乗り継ぎも含めた経路検索が表示されるのであるが,これを実現するためには他社である私鉄とデータ共有ができている必要がある。

私が働く製造業では,データを社外に提供することにはかなり慎重になっている。しかしJR東日本では,他社ともデータを共有するための契約スキームや,データ共有システムを構築しているということになる。ユーザからすると,JRだけの乗り換えだけではなく私鉄の乗り換えも含めた情報が欲しいので,データを他社と共有するという判断は,ユーザにとって有益な選択である。

JR東日本にも当然社外秘のデータが存在するはずなのであるが,ユーザの利益を実現するために,オープンにするべきデータ・クローズにするデータを弁別し,オープンにするべき自社データを他社と共有すると同時に,他社にもデータを共有させる仕組みを構築しているというのは,かなり衝撃的だった。

センターサーバー方式の新しいSuica改札

これまでSuicaの仕組みでは,各駅に置かれている改札機が運賃計算を行ない,ユーザのSuicaに対して読込み・書込みを行なっていた。
これに対して今後導入されるセンターサーバー方式では,改札機とセンターサーバーが通信を行ない,運賃計算はセンターサーバーが行なう仕組みになっている。

センターサーバー方式の凄さはサービス拡大の可能性を広げること

センターサーバー方式のメリットは参考サイトにもある通り,他のシステムと連携することで新たなサービスと生み出せることである。
JR東日本では,旅客・貨物を輸送するサービスだけでなく,駅におけるサービスも展開している。センターサーバー方式にすることにより,旅客の情報を集約できるようになるため,鉄道沿線(商業施設など)と連携したクーポンを発行しやすくなるのである。

タッチトリガー

タッチトリガーとは,Suicaのタッチのタイミングをリアルタイムに活用できるサービスである。

  • 参考サイト

www.jreast.co.jp

タッチトリガーの凄さはユーザの行動に応じたサービスができること

タッチトリガーによって,入場のタッチタイミングと,出場のタッチタイミングが分かるので,電車の中にいる・通勤先に移動している・自宅に移動しているといったユーザの状態を推定できるという点である。このようにユーザの状態を推定できると,これに応じたクーポンを発行するといった,ユーザ体験を向上させることが可能になる。

ライオン

ライオンは,「ハイブリッド人材で加速するライオンのデジタル変革」という題目で,執行役員 全社デジタル戦略担当・デジタル戦略部担当 中林紀彦氏が講演を行なっていた。

ライオンにおけるDX事例について詳細に説明されていたが,特に興味深かったのは,DXに関する社外向けサイトを作っている点であった。
www.lion.co.jp


ライオンというと,歯磨き粉などの「ものづくりの会社」という印象が強かったが,「『習慣を科学する』ことで、人々のより良い習慣づくりに貢献する新しい製品・サービスを創出していきます。」というユーザ視点に立ったメッセージを発信していた。

またビジョンや各種施策を社外に打ち出していることも印象的であった。おそらくDXに関する取り組みを前面に打ち出すことが,株主や消費者に対するアピールになるという判断なのだろう。

まとめ

IPA&DSA第2回データ未来会議」に登壇した,JR東日本・ライオンの取組みについて紹介した。

いずれの企業も日本を代表する企業であり伝統的な企業であるが,明確なビジョンのもと,徹底的にユーザのメリットを追求した施策やシステム・サービスづくりを行なっていた。またこの実現に向けてデジタルをしっかり活用していた。特にJR東日本については,講演の中ではあまり触れられていなかったが,センターサーバー方式を実現するためのシステム構築にも相当力を入れているはずである。

ビジョンを掲げることやユーザ目線に立ったサービスづくりなどは着手できそうであるが,この2社のように徹底して取組んでいきたい。
また,定期的に他社の取組みについて情報を集めて,自社の施策に反映できるものは反映していきたい。


本記事を最後まで読んでくださり,どうもありがとうございました。

「データのつながりを活かす技術」を読む ~第2章 ネットワークデータの発見・観測・構築 ③ネットワークのデータ形式~

2.4 ネットワークのデータ形式

第1章では,ネットワークを数学的に表す隣接行列について紹介していた。ただし隣接行列は,大規模で疎なネットワークを扱う場合,メモリ使用量や処理効率の観点で不利なことがある。
疎なネットワークを効率的に表すための方法として,エッジの集合やエッジリストなどを利用することが望まれる。
本節では,ネットワークデータを扱うためのデータ形式について説明している。

ネットワークの基本的なデータ形式

隣接行列
ネットワーク例

上記のようなネットワーク例を隣接行列で表す。ノード v_1, v_2の間にはエッジが存在するため,隣接行列の成分 A_{1,2}は1を取る。一方で,エッジが無い部分に相当する成分は0となる。隣接行列全体は以下のような,対角成分が0の対称行列になる。


 \begin{align}
\boldsymbol{A} = 

\begin{bmatrix}
  0 & 1 & 1 & 0 & 1 & 0 & 0 \\
  1 & 0 & 1 & 1 & 0 & 0 & 0 \\
  1 & 1 & 0 & 1 & 0 & 1 & 0 \\
  0 & 1 & 1 & 0 & 0 & 0 & 0 \\
  1 & 0 & 0 & 0 & 0 & 1 & 0 \\
  0 & 0 & 1 & 0 & 1 & 0 & 1 \\
  0 & 0 & 0 & 0 & 0 & 1 & 0 \\
\end{bmatrix}
\end{align}

隣接行列の行数・列数が dのとき, d^2個の要素を保持する必要がある。またその多くは0となり,この部分にもメモリが割り当てられることになる。そのため隣接行列で示されるネットワークが大規模になるほど,非効率な表現となっている。

エッジリスト

より効率的にネットワークを表すためには,エッジが存在する部分のみをタプルで表し,ネットワーク全体をタプルのリストで表現する,エッジリスト(edge list)が挙げられる。
上図を例にすると,ノード v_1, v_2の間にはエッジが存在することを,タプル (v_1, v_2)で表すことになる。ネットワーク全体は,


 \begin{align}
[  (v_1, v_2), (v_1, v_3), (v_1, v_5), (v_2, v_3), (v_2, v_4), (v_3, v_4), (v_3, v_6), (v_5, v_6), (v_6, v_7)  ] \\
\end{align}

となる。

隣接リスト

ノードごとに,「どのノードとつながっているか」をリスト化したものが隣接リスト(adjacency list)である。Pythonでは辞書として実装することが多い。


 \begin{align}
\{ \\ 
\quad \quad &v_1 : [ v_2, v_3, v_5 ], \\ 
\quad \quad &v_2 : [ v_1, v_3, v_4 ], \\ 
\quad \quad &v_3 : [v_1, v_2, v_4, v_6 ], \\ 
\quad \quad &v_4 : [v_2, v_3 ], \\ 
\quad \quad &v_5 : [v_1, v_6 ], \\ 
\quad \quad &v_6 : [v_3, v_5, v_7 ], \\ 
\quad \quad &v_7 : [v_6 ], \\ 
\}
\end{align}

隣接リストのメリットは,「ノード v_1の近傍ノードを効率よく取得する」といった用途に強いことが挙げられる。ノードの存在を明示的に記録することで,孤立ノードも扱いやすくなる。

2.5 ネットワークデータのハンドリング

本節では,Pythondeネットワークデータを扱う方法を説明している。

NetworkXとの連携

NetworkXは,ネットワーク分析ライブラリであり,ネットワークの作成・操作・可視化・分析のための機能が豊富にそろっている。
networkx.org


以下のサンプルコードを,Google Colab上で動作させながら挙動を確認した。
github.com

ネットワークの可視化

networkx.draw関数を用いると,ネットワークを可視化できる。ただし実行するごとに,ネットワークのトポロジーは同じであるが形は異なる図が描画される。

ネットワークの描画例

PyTorch Geometricとの連携

PyTorch Geometricは,深層学習をネットワークデータに適用するための,PyTorchライブラリを拡張したライブラリであり,特にグラフニューラルネットワーク(Graph Neural Network; GNN)の開発に適している。
pytorch-geometric.readthedocs.io

Coraデータセット

PyTorch Geometricでは,たくさんのデータセットが用意されている。本書では,論文の引用関係を扱ったCoraデータセットの読み込みが紹介されていた。

graphsandnetworks.com

Coraデータセットは,

  • 7つのクラス
  • 2,708件の科学出版物(ノードに対応)
  • 5,429個のリンク(引用ネットワーク)
  • 各出版物(ノード)は1,433個の単語の有無を表す0/1のベクトル

といった特徴を持つ。

まとめと感想

今回は,「第2章 ネットワークデータの発見・観測・構築」における,ネットワークのデータ形式と,ネットワークデータを扱うためのPythonライブラリについてまとめた。

ネットワークの構造は隣接行列で扱うことができるが,疎行列になるため隣接行列で扱うとメモリの効率が良くない。そのため,エッジリストや隣接リストといった表現方法を学んだ。

本記事を最後まで読んでくださり,どうもありがとうございました。

「データのつながりを活かす技術」を読む ~第2章 ネットワークデータの発見・観測・構築 ②ネットワークデータの観測・入手~

2.3 ネットワークデータを観測・入手する

分析したいネットワークデータがなければ,新たなデータを取得する必要がある。本節では,ネットワークを抽出し観測するサンプリング手法について紹介している。

複数のノードを観測し,その間のエッジを見つける

誘導サンプリング

任意の複数のノードを観測し,それらノード間に存在するエッジもあわせて観測するサンプリング手法を誘導サンプリング(induced subgraph sampling)と呼ぶ。このようにして得られるネットワークを誘導部分グラフ(induced subgraph)と呼ぶ。

誘導サンプリングの注意点

ノードの抽出をランダムに行なう場合,抽出したネットワークにエッジがほとんど張られない可能性がある。他のノードとつながらないノードを孤立ノード(isolated node)と呼ぶ。
エッジがほとんどないような誘導部分グラフしか得られなければ,ネットワーク全体の構造が把握しづらくなる。

また誘導部分グラフが抽出されても,これがネットワーク全体を統計的に代表するわけではないことにも注意が必要である。

エッジを抽出し,つなぎ合わせる

エッジ誘導サンプリング

誘導サンプリング(ノードをまず選ぶ)とは反対に,はじめにエッジを観測し,続いてその両端にあるノードを観測する手法をエッジ誘導サンプリング(incident subgraph sampling)と呼ぶ。

サンプリング手法 手順
誘導サンプリング ノードを観測する⇒ノード間のエッジを観測する
エッジ誘導サンプリング エッジを観測する⇒その両端にあるノードを観測する
誘導サンプリングとエッジ誘導サンプリング
エッジ誘導サンプリングの注意点

エッジ誘導サンプリングは,つながりを多く有するノードが過剰に抽出されやすい,という点に注意する必要がある。エッジを軸として観測するので,結果として得られるネットワークは「中心的なノードの特徴」を過度に反映するものとなる。

任意のノードとその近傍ノードを抽出する

スターサンプリング

はじめに複数のノードを観測し,続いてそれらノードを起点とするエッジたどり,その先にある近傍ノードについても観測するサンプリング手法をスターサンプリング(star sampling)と呼ぶ。
サンプリング範囲が段階的に拡大していくことになり,雪玉が転がるにつれて大きくなるイメージにちなんでスノーボールサンプリング(snowball sampling)と呼ばれる。

スターサンプリングの例

経路を観測し,貼り合わせる

ノード集合(ソースノード)と,別のノード集合(ターゲットノード)をあらかじめ用意し,ソースからターゲットへ至る経路上にあるノードとエッジを抽出するサンプリング手法をリンクトレーシング(link tracing)と呼ぶ。

リンクトレーシングの例

リンクトレーシングが有効に機能するのは,「特定の経路に関する情報は簡単に取得できるが,ネットワーク全体を把握するのは困難」という場面(物理的ななインターネットの通信経路の観測など)が典型的である。

まとめと感想

今回は,「第2章 ネットワークデータの発見・観測・構築」における,ネットワークデータの観測・入手についてまとめた。


ネットワークデータの作成方法は,ノードに着目する方法と,エッジに着目する方法がそれぞれ存在することが理解できた。
今回説明があった方法はそれぞれ特徴があったが,ノードやエッジといった局所的な特徴から,ネットワーク全体を捉えようとするのは,なかなか大変なことだと考える。各手法について,ネットワークの構築に関する性能の比較はいずれ試してみたい。


本記事を最後まで読んでくださり,どうもありがとうございました。

「データのつながりを活かす技術」を読む ~第2章 ネットワークデータの発見・観測・構築 ①ネットワークの発見~

第2章 ネットワークデータの発見・観測・構築

本章ではネットワークデータ分析の第一歩として,ネットワークデータ分析に取組む前に確認すること,事象をネットワークデータとしてとらえるための観測の仕方,ネットワークデータの扱い方などについて説明してる。

2.1 分析前の確認事項

本節では,ネットワークデータ分析の前段の流れを整理するための観点を整理している。この観点とは,以下の3つである。

  • 分析の目的 :
    • 注目する現象のネットワークとしての性質に興味があるか。
  • データの形式 :
    • 注目する現象の観測は明確なネットワーク構造をもつか。
  • データの獲得 :
    • 分析するデータはすでに得られているか。


1つ目の「注目する現象のネットワークとしての性質に興味がある」とは,たとえば

  • SNS上の友人関係の密度を測る
  • ネットワーク内の影響力のある中心人物を特定する

といった,ネットワーク分析の手法がそのまま当てはめられそうな状況である。

2つ目の「注目する現象の観測は明確なネットワーク構造をもつ」について,ネットワーク構造が分かっているならばそれに適した分析手法を選べばよい。
一方で,ネットワーク構造が捉えられていなくても,現象をネットワークとして考えることで,新たな視点の獲得につながる。

3つ目の「分析するデータは既に得られている」について,もしデータが得られていない場合には,ネットワークをサンプリングすることになる。


ネットワーク分析を適用することで,これまでにない知見が得られる可能性があるため,「データの中にネットワーク構造を発見し,再構成できないか」という視点を持つことは重要である。

2.2 ネットワークを発見する

本節では,一見するとネットワークとは思えないデータから,ネットワーク構造を引き出す方法,すなわち潜在的なエッジ(つながり)を見つけ出すための4つの視点を紹介している。

  1. 行動・状態を探し,結ぶ
  2. 共起関係を探し,結ぶ
  3. 移動・流れを探し,貼り合わせる
  4. 距離や類似度から完全グラフを作る

行動・状態を探し,結ぶ

行動や状態をエッジとして扱うことで,意味のあるネットワークを構築できることがある。

例 : SNSや社内コミュニケーションツールにおけるメンション

SNSなどでは,ユーザ間でメンションや引用(リプライ)が発生する。たとえば,

from @佐藤
@鈴木 こちらの報告書について…

のようなメッセージがあったとすると,佐藤さんと鈴木さんの間には一緒に仕事をしているという関係があるので,

  • ノード : 人名(佐藤さん,鈴木さん)
  • エッジ : ともに仕事をする(無向エッジ)

というネットワーク構造が見いだせる。

例 : 取締役の兼任

株式会社には取締役が置かれるが,複数の会社の取締役を兼任している人がいる。この場合,

  • ノード : 会社・取締役の人 (二部グラフ)
  • エッジ : 取締役を務める

というネットワーク構造が見いだせる。

共起関係を探し,結ぶ

共起(co-occurrence)とは,ある事象の中で,複数の主体が共存することを指す。たとえば,購買行動において「2つの製品が一緒に買われる」という状態や,文章において「2つの単語が同じ文章に出現する」という状態を表す。

例 : 購買バスケット

購買行動において,「買う人」と「商品」に着目すると二部グラフになるが,商品同士の共起関係に着目すると,

  • ノード : 商品 (同種ネットワーク)
  • エッジ : 同時に買われる

というネットワーク構造が見いだせる。

移動・流れを探し,貼り合わせる

ヒトやモノの移動などは,「1次元の系列」として記録されるが,これを履歴やルートに沿って「貼り合わせる」とネットワーク構造が構築できる。

例 : 転職ネットワーク

転職ネットワークは,個人が異なる組織間を移動するパターンをネットワークとして捉えたものである。転職行動に着目すると,

  • ノード : 転職元・転職先の企業
  • エッジ : 労働者の移動 (有向エッジ)

というネットワーク構造が見いだせる。

例 : 顧客行動パターン

顧客行動パターンでは,「ある商品を買った後に,別の商品を買う」という商品の購買行動に時間の概念を入れることで,

  • ノード : 商品Aと,商品Aの後に買われた商品B
  • エッジ : 購買行動,購買時間(時を近くして買われた,という状態を考慮する場合),など

というネットワーク構造が見いだせる。

距離や類似度から完全グラフを作る

2つのデータの間に類似度(simularity)距離(distance)が導入できる場合,すべてのデータ(ノード)の間にエッジを張ることができる。あらゆるノードの組合せがエッジで結ばれたネットワークを完全グラフ(complete graph)と呼ぶ。

例 : 帳票の項目間の距離

レシートや請求書などの複雑なレイアウトを持つ帳票において,各セル間の相対的な位置関係をネットワークととらえることができる。

まとめと感想

今回は,「第2章 ネットワークデータの発見・観測・構築」における,ネットワークの発見についてまとめた。

「2.2 ネットワークを発見する」では,もともとはネットワークデータとして作られたものではないが,ネットワークデータとして捉えるための様々な観点が紹介されていて,非常に参考になった。
自然言語処理や購買行動において,共起関係に着目した分析は古くから提案されているが,これがネットワークとして捉えることで,今後紹介されるネットワーク分析の各種手法によって新たな知見が見いだせるのではないかと感じた。

データは,分析するときのことを考えて蓄積されているとは限らない。しかし,このような視点を導入することにより,既存のデータを新たな切り口で分析することが可能になるので,データの見方・事象の捉え方は重要だと感じた。既存のデータからネットワーク構造を取り出すという行動は,ある種の前処理とも捉えることができるので,データ分析の業務フローにおける1つの道具として,「ネットワークデータに変換する」というプロセスを定義しても有用であると感じた。

本記事を最後まで読んでくださり,どうもありがとうございました。