データサイエンティストのひよこ

分析に関する日々の相談事項

ネットワークとは

 ネットワーク解析に興味を持ったか、必要になって調べてきたかのどちらかだろうと思う。興味をもってくれたことはうれしいし、ネットワーク解析が必要になるような分析が実務の技術者の間にも広まってきたこともうれしい。
 ネットワーク解析は、関係性データ解析、グラフアルゴリズム圏論などと名前を変えて、さまざまな分野で研究されている。もちろん、分野によって対象とすることは異なるが、必要に応じて横断的に学ぶ必要も出てくるので、明確な線引きはないと思う。これから説明するネットワーク解析は、すこし情報科学や物理学的な側面をもとにまとめられている。主にネットワークやグラフ(ネットワークと同じもの)を対象とした分野は次のようなものがある。

関係性データ解析は、テンソル解析などの重厚な線形代数の計算や数値計算をこなさなければいけないものが多い。グラフアルゴリズムは、データ構造などをもとに経路探索や木の構成など、ネットワーク特有の構造の複雑性で生まれる厄介な方法を単純化したり、速くしたりする方法を扱う。グラフ理論圏論は幾何的構造をもとに分類したり、問題の可能性を議論する。理論の側面では整っているが、実務で使うのはなかなか難しい。
 ネットワーク解析は、教師なし学習として使われることがほとんどで、その他の機械学習の手法のように分析の主役となることが少ない。つまり、使いこなせたうえで、データを理解していないと結果が解釈できないのである。ただ、予測モデルに組み込む変数を作成したり、データの順位付けを行うことはできるので、使い方には慣れが必要かもしれない。使いどころがうまく判断できないと、何のためにあるかわからないといった感想をもってしまうだけの領域だが、ここを専門とする分析屋さんは、グラフアルゴリズムや行列計算などの重厚な分野を使いこなせる指標ともなるので、ぜひとも挑戦してほしいと思う。
 さてそんな、ネットワーク解析について、余力のあるときに書き進めていきたいと思う。


 ここでは、データ分析を主眼として、ネットワークというものを書く。まず、通常の機械学習で扱うテーブルデータとは異なるデータである関係性データについて、その特徴をまとめる。次に、そのデータの表現方法として、ネットワークというものがあることを述べる。文中では、ネットワークを定義する前にネットワークデータという単語が出てくるが気にするな。そして、ネットワークの解析方法とはという順で(記事を)書いていきたい。*1

ネットワークデータとは?ネットワーク解析とは?

 ネットワーク解析は、データとデータの関係を表す「ネットワークデータ」の特徴を定量的に表現する方法の総称である。昨今、ようやく実務の場でも扱う人が増えてきたような印象であるが、私が7年前に修士で入ったときにネットワークをテーマに実務で分析する人は周りで見なかった。簡単に計算できるようなスペックのパソコンが出回っていなかったように思うし、手元のラップトップで計算するにしても、アルゴリズムが複雑だったのかもしれない。現在では、手元のラップトップでできる行列の計算も、10年位前は地球シミュレータ使って、計算していたのだから、その進化はすさまじい。
 7年前に比べたら、もうあまり前書きは必要なくなって来たかもしれないが、ネットワークデータというものを、身近なデータと比較してみる。データ分析で主流なデータ形式といえば、次の表のようなテーブルデータ(ベクトルデータとも言う)である。性質を列として書いたデータのことで、データ分析する人なら誰でも見たことがあるデータ形式だと思う。

購入確率 住所 性別 年齢 年収 世帯年収 学歴
80% 東京 20 320 480 高卒
75% 東京 25 350 350 学歴
60% 埼玉 35 560 560 学歴
85% 千葉 46 660 880 学歴
90% 神奈川 29 520 520 学歴
45% 神奈川 33 700 1250 学歴
20% 埼玉 31 680 1120 学歴

 時系列分析や回帰分析のような通常の機械学習で利用されるデータは主にテーブルデータと呼ばれるものである。時系列データは、変量と時間が2列のデータとなって書かれているテーブルデータと考えられるし、「温度」と「アイスの売上」と「客数」も3列のテーブルデータである。テーブルデータには、列の数という自明なデータの次元が存在する。たとえば、「購入確率」、「年齢」、「年収」を列として、3列のデータを、それぞれ3軸にして、3次元に書くことはたやすい。

f:id:TamSan:20181030010227p:plain

 質的変数も0,1のOne-hot表現に直すことで、独立な軸上に移すことができる。テーブルデータはこのようにして、データ点を高次元空間中の1点として、書き表せる*2のである
 ネットワーク解析とは、非テーブルデータとなるデータの次元が存在しないデータ形式に対して行う解析の方法である。ネットワーク解析の対象であるネットワークデータをめんどくさい書き方で説明するとこのようになる。簡単に言うと、通常は時系列データが時々刻々と変化する性質を現すデータに対して、ある時間のスナップショットとして与えられるデータとデータとの関係を表しているデータが対象となる解析である。もちろん、最先端では、ネットワークの構造が時々刻々と変化する場合のテンポラルネットワーク解析というのもある。まだまだ、研究の最先端なので実務に降りてくるのは時間がかかるだろう。

ネットワークの表し方とは

 ネットワークデータ(関係性データ)を可視化する方法として、独立な軸を持つN次元空間へのプロットはふさわしくない。このデータを表現・保持する方法として、ネットワークというものが存在するのである。ネットワークは、データとデータの関係を表すために、いくつかの表現方法がある。テーブルデータであれば、添え字を付けて配列やタプルに代入すればいいため、この説明は必要がない。ネットワークデータは、そのデータの書き方にも癖がある。図で書くだけであれば、モノとモノとの関係を表すネットワークは次のようになる。
 丸がノード(サイト、節点、頂点)で、丸を繋ぐ線がリンク(ボンド、エッジ、枝、辺)と呼ばれる*3。関係に向き(リンクに向き)があるネットワーク、関係に強さ(リンクの太さ)があるネットワークと、いくつかバリエーションがあるが、表し方の時点ではそこまで大きな違いはない。

f:id:TamSan:20181107004448p:plain

この「関係図」を、プログラム上で表す方法として、大きく2つ方法がある。 
 1つ目は、行列として書く方法である。物と物との関係を隣接行列として書く方法だ。ノードに1からNまでの番号を与えて、2次元の配列を用意する。ネットワークの形状に応じて、ノードiからノードjへ進めるリンク*4があれば、Matrix[i][j]=1、リンクがなければMatrix[i][j]=0、のような形で行列を書いていく。
 2つ目は、リストとして書く方法である。物と物との関係を隣接リストとして書く方法だ。ノードに1からNまでの番号を与えることは同じだが、リンクの存在するペアを書き出していく方法である。

f:id:TamSan:20181107010020p:plain

数値計算的には、基本的にはこの2つの方法が行われる。たとえば、行列計算が必要で、線形代数ライブラリなどを使って計算したいときには、前者の形が必要だ。一方で、後者は、非常に簡略的に構造を書き表すことができる。
 この二つの表現の大きな特徴は、巨大な行列に対してあらわになる。例の図で言えば、行列はノードの数の2乗、5×5のメモリを用意する必要がある。ただ、実際にリンクの情報をもつ1は11個しか入っていない。一方、隣接リストは第k行目のリンク i \rightarrow jの情報をMatrix[2(k-1)]=i;Matrix[2(k-1)+1]=j;と与えればよいので、メモリはリンクの数L×2ですむ。ノードは一杯あるけど、リンクは少ないといったネットワーク( N^2 >> 2L)では、隣接リストで表現すると計算資源を有効に使えるのである。

ネットワークの例・使われ方

 どのようなデータ(テーブルデータさえも)も多数の要素で構成されるデータであれば、形の上ではネットワークデータとして扱うことができる。株式価格の時系列でさえ、複数銘柄の間で2体相関を計算すれば、相関ネットワークを構成することができる。前述した表データも個人属性の間で類似度のような指標を定義すれば、個体間のネットワークデータとすることができる。ただし、ネットワーク解析が万能かというとそうではなくて、威力が発揮されるのは、やはり関係性のなかにデータの特徴の本質があると思えるときだ。インフルエンザの蔓延を知るのに、友達関係ネットワークのデータは非常に重要であると思えるが、1年間に読んだ本の種類を知るのに友達関係ネットワークはあまり重要でない(ようには思う)のと同じだ。
 ネットワークデータとして扱うことが適切と考えられているデータは以下のようなものがある。
  ・人間関係
   SNSにおける友達関係、人事評価、役員の兼任関係
  ・取引関係
   与信、反社会的勢力の近接具合
  ・電車の運行ダイアグラム
  ・商品の同時購入の関係
  ・ウェブサイトのランキング
  ・サーバネットワーク(故障の連動など)
 ネットワークの構造をもとにして、グルーピングする方法もある。
  ・株式の相関銘柄コミュニティ
  ・企業取引構造をもとにした企業グループの定義

 ネットワーク解析は実際の社会でさまざまなところに応用されている。たとえば、推薦アルゴリズムは関係性データの分析として、代表的である。ネットワーク分析かというとそうでない側面もあるが、ネットワークの知識は無関係ではないと思う。他のものとの類似性などを評価して、推薦を行うマッチングアルゴリズムがほとんどであると思う。
  人のマッチング
  ・結婚相手
  モノのマッチング
  ・合金/たんぱく質
  人と何かのマッチング
  ・就職/転職/スポット派遣のジョブマッチング
  会社のマッチング
   取引先推薦
   営業電話の架電先推薦、商品推薦

まとめ

 第一回の区切りをどこにしようかと好き放題書いていたら、とてつもなく長くなってしまったので、ここで区切った。ネットワークのはじめとしては、有益な情報がないところで終わってしまったかもしれない。ネットワーク解析は、データマイニングとしての側面が強く、予測モデルや精度を高めるための変数となりうるかもしれないが、これ自体で何かのモデルを立てるというときには、あまり役に立たないかもしれない。複雑系科学としての側面が強く、データの集団の状態を特徴づけることが多いかなと思う。
 

*1:ネットワークデータという言い方に違和感を覚える人は関係性データとでも読み替えてほしい

*2:変数を独立な軸に分けることができる

*3:分野によって名前がぜんぜん違う

*4:進めないリンクとは、リンクはあるが向きが逆向きのもののことを言っている