SNAGeek

Sociologically Technological, and Technologically Sociological

次数分布を固定してランダムグラフを生成する

はじめに

グローバルクラスタリング係数や平均パス長、度数中心性など、ホールネットワークに関する統計量について、客観的に見てその数値がどれほど大きなものなのかを知りたい時がある。

このような場合、ヌルモデルと比較し、グラフの特徴量が統計的にどれほど逸脱しているのかを調べるという方法がある。よく使われるのは、オリジナルのグラフと同様の次数分布を持つランダムグラフと比べるというものである。

この記事では、Rのigraphパッケージを使って、次数分布を固定してランダムグラフを生成する方法について紹介する。

グラフ読み込み

今回はigraphに付属している空手クラブネットワークデータを用いる。

library(igraph)
library(tidyverse)
library(ggnetwork)

net <- graph("Zachary")

とりあえず可視化

ggnetworkでグラフを可視化する。後ほど、ランダムグラフも可視化するが、オリジナルのグラフでのノードの座標を最初に取得しておき、使い回せるようにしておく。

hruchterman_reingold = layout.fruchterman.reingold(net)
gnet <- ggnetwork(net,layout=hruchterman_reingold)
g <- ggplot(gnet,aes(x=x,y=y,xend=xend,yend=yend))
g <- g + geom_edges(size=0.5)
g <- g + geom_nodes(size=3,col="blue")
g <- g + geom_nodelabel_repel(aes(label=vertex.names))
g <- g + ggtitle("original karate club network") 
g <- g + theme_blank()
g

画像がこちら。なんとなく、クラスタリング係数が高く、平均パス長は大きい、ような気がする。

f:id:meana0:20190302005735p:plain
Zachary Karate Clubのネットワーク

実際に計算してみると

> cc_original <- transitivity(net) #グローバルクラスタリング係数 
> pl_original <- mean_distance(net) #平均パス長
> 
> cc_original
[1] 0.2556818
> pl_original
[1] 2.4082

さて、これらの値はどこまで特徴的なのだろうか?

ランダムグラフ生成

igraphでは、sample_degseq(in.deg) で生成できる。in.deg はそれぞれのノードの次数のベクトル。無向グラフの場合はin.degのみ、有効グラフの場合はin.degで入次数の分布、out.degで出次数の分布を指定する。

オリジナルのネットワークの次数分布を取得しておく。

degree_dist <- igraph::degree(net)
g <- ggplot(data=tibble(degree=degree_dist),aes(x=degree))
g <- g + geom_histogram()
g <- g + ggtitle("degree distribution of karate club network ")
g

f:id:meana0:20190302183725p:plain
オリジナルネットワークの次数分布

グラフの生成方法はオプション引数のmethodで指定する。igraphにはsimple (デフォルト), simple.no.multiple,vl の3種類が用意されている。

simple

ノードから適当にn本のエッジを生やして、それを結合するという方法。シンプルな方法だが、多重エッジやセルフループが発生する。つなげ合わせる2つのノードの持つエッジの相手が重複する可能性を排除していないためである。

degree_dist <- igraph::degree(net)
simple_random_net <- sample_degseq(degree_dist)

こうして得られたグラフだが、simplify() して多重エッジとセルフループを取り除くと、エッジ数が少し減ることが確認できる。

> simple_random_net
IGRAPH 3c731f6 U--- 34 78 -- Degree sequence random graph
+ attr: name (g/c), method (g/c)
+ edges from 3c731f6:
 [1]  2-- 6  1-- 4  3--14 17--28  1--34 19--28 12--33  7--18  9--29 21--33  5--34  1--14  3--33  1--28  8-- 8 22--27 25--31
[18]  7--32  9--33  1--22 19--20 11--34  1--20  2-- 7  4--34  1--30 18--34  4--32  2-- 5 10--34  1-- 1  6--14  1-- 3  9--17
[35]  6--33  8--24  5--34 16--30  4--23  1--31 33--34  3--24 25--27 33--34  2--26  1-- 3  3--33 28--34 26--33  1-- 3 23--34
[52]  4--29 14--32 10--34  2--29  9--32 11--20 34--34  3--24 11--25  4--15  3--15  1--14  2--31  1--16  7--24  2--34  3--13
[69] 21--32  6--32 24--30  1-- 2  2--34 13--33  8--30 33--33  9--34 26--31
> simplify(simple_random_net,remove.multiple = TRUE,remove.loops = TRUE)
IGRAPH 40d3c01 U--- 34 65 -- Degree sequence random graph
+ attr: name (g/c), method (g/c)
+ edges from 40d3c01:
 [1]  1-- 2  1-- 3  1-- 4  1--14  1--16  1--20  1--22  1--28  1--30  1--31  1--34  2-- 5  2-- 6  2-- 7  2--26  2--29  2--31
[18]  2--34  3--13  3--14  3--15  3--24  3--33  4--15  4--23  4--29  4--32  4--34  5--34  6--14  6--32  6--33  7--18  7--24
[35]  7--32  8--24  8--30  9--17  9--29  9--32  9--33  9--34 10--34 11--20 11--25 11--34 12--33 13--33 14--32 16--30 17--28
[52] 18--34 19--20 19--28 21--32 21--33 22--27 23--34 24--30 25--27 25--31 26--31 26--33 28--34 33--34

simple.no.multiple

生成ロジックは simple と同じだが、こちらは多重エッジやセルフループが発生したらそのグラフは破棄し、多重グラフやループのないグラフが生成されるまで生成を続ける。したがって平均次数が多い場合は計算時間がかかり、また、可能なグラフ集合からの均一なサンプリングではない。

この方法で生成したランダムグラフを可視化する。

gnet <- ggnetwork(simple_no_multiple_random_net,layout=hruchterman_reingold)
g <- ggplot(gnet,aes(x=x,y=y,xend=xend,yend=yend))
g <- g + geom_edges(size=0.5)
g <- g + geom_nodes(size=3,col="blue")
g <- g + geom_nodelabel_repel(aes(label=vertex.names))
g <- g + ggtitle("sampled karate club network (method: simple.no.multiple)") 
g <- g + theme_blank()
g

f:id:meana0:20190302005738p:plain
生成されたランダムグラフ

オリジナルのネットワークに比べると、クラスタ化の度合いが小さく、ノード間の距離は近いように思われる。

先ほどの simple によって発生させたグラフと異なり、simplify() の前後でエッジ数は変化しない。

> ecount(simple_no_multiple_random_net)
[1] 78
> ecount(igraph::simplify(simple_no_multiple_random_net,remove.multiple = TRUE,remove.loop = TRUE))
[1] 78

vl

  • 難しいので説明は省略。
  • こちらについても不均一サンプリングになるらしい

  • igraphの公式ドキュメント曰く

    The “vl” method is a more sophisticated generator. The algorithm and the implementation was done by Fabien Viger and Matthieu Latapy. This generator always generates undirected, connected simple graphs, it is an error to pass the in.deg argument to it. The algorithm relies on first creating an initial (possibly unconnected) simple undirected graph with the given degree sequence (if this is possible at all). Then some rewiring is done to make the graph connected. Finally a Monte-Carlo algorithm is used to randomize the graph. The “vl” samples from the undirected, connected simple graphs unformly. See http://www-rp.lip6.fr/~latapy/FV/generation.html for details.

有意性判定

実際に先程のクラスタリング係数と平均パス長をヌルモデルからの乖離によって評価してみる。vlメソッドによってランダムグラフを1000個発生させ、そこから計算した指標の分布の中でオリジナルネットワークの指標がどのあたりに位置するのかを検討する。

sample_cc <- c()
sample_pl <- c()
for(i in 1:1000){
  vl_random_net <- sample_degseq(degree_dist,method = "vl")
  sample_cc <- c(sample_cc,transitivity(vl_random_net))
  sample_pl <- c(sample_pl,mean_distance(vl_random_net))
}

各指標の分布は以下のようになる。

#cc hist
g <- ggplot(data = tibble(cc = sample_cc),aes(x = cc))
g <- g + geom_histogram(binwidth = .01)
g <- g + geom_vline(xintercept = cc_original,col = "red")
g

#pl hist
g <- ggplot(data = tibble(pl = sample_pl),aes(x = pl))
g <- g + geom_histogram(binwidth = .01)
g <- g + geom_vline(xintercept = pl_original,col = "red")
g

f:id:meana0:20190302183611p:plain
クラスタリング係数の分布(赤線はオリジナルの値)

f:id:meana0:20190302183615p:plain
平均パス長の分布(赤線はオリジナルの値)

これらの分布が正規分布に従っていると仮定(平均パス長に関してはずいぶん右に歪んでいるが…)して、平均と標準偏差とz値を計算し、p値を算出する。

cc_mean = mean(sample_cc)
pl_mean = mean(sample_pl)
cc_sd = sd(sample_cc)
pl_sd = sd(sample_pl)
cc_zscore <- (cc_original - cc_mean) / cc_sd
pl_zscore <- (pl_original - pl_mean) / pl_sd
> 1-pnorm(cc_zscore)
[1] 0.1035129
> 1-pnorm(pl_zscore)
[1] 0.0003767265

ランダムグラフから得られた指標の分布と比較すると、オリジナルのネットワークは両指標とも統計的に逸脱した値であることが分かる。

さいごに

ここで紹介した一連の方法は、あるグラフの中でどのような構造が特徴的なのかを探索する際に使う程度に留めておいたほうがよいかもしれない。つまり、他のグラフと比較する際に上の統計的な逸脱度を比べる、ということはしないほうが良いかもしれない。

というのも、クラスタリング係数や平均パス長の異なるグラフ間の比較方法について検討した論文Comparing Brain Networks of Different Size and Connectivity Density Using Graph Theoryによれば、これらの指標はノードサイズNや平均次数kの影響を大きく受けるため、元に異なるサイズや密度のグラフを生の数値によって比較することは困難である(こうしたバイアスはN-independentやk-independent等と呼ばれている)。

今回紹介したようなヌルモデルベースのメトリックのほうがむしろNやkの影響を受けてしまうようで、安易な使用には注意が必要である。

オランダでパスポートを盗まれるの巻

 1月9日から10連休を取得してオランダとマルタ共和国を旅行した。オランダはアムステルダムユトレヒトを観光した後にマルタ島に飛び、4日滞在してから再びオランダに戻り、ロッテルダムデン・ハーグを回った。

 中学生の頃からティエストフェリー・コーステンに代表される所謂ダッチトランスが好きだったので、かねてより行きたいと思っていた。いや、だからといって、言うまでもないが、変な草は吸っていない(断じて)。

www.youtube.com

f:id:meana0:20190226125334j:plain
ロッテルダム中央駅のイケてる建築

 ちなみに、社会ネットワークオタク的な観点で言うと、オランダは社会ネットワーク分析が非常に盛んな地域である。SIENAやマルチレベル分析で知られるTom Snijdersはオランダの出身で現在はグローニンゲン大学に身を置いており、ユトレヒト大学にはゲーム理論を用いたネットワークシミュレーションで有名なVincent Buskensがいる。

 オランダで具体的にどんなアクティビティに興じたかと言うと、『真珠の耳飾りの少女』で有名なマウリッツハイス美術館など各地の美術館を巡ったり、ハーリング(ニシンの酢漬け)っといった現地のB級グルメを食べたり、ハーグから徒歩でスヘフェニンゲン(「スケベニンゲン」と聞こえると有名な地域)の海岸まで行って黄昏れたり等々。

 旅行自体は最高のエクスペリエンスだったのだが、旅行の最終日、帰国直前に事件が発生する。空港に向かう途中駅でパスポートを盗まれたのである。以下、事の顛末を簡単に記述する。

カバンを盗まれるまで

 最終日はロッテルダムに滞在していた。ロッテルダムからアムステルダムスキポール空港までは通常であれば急行が走っているのだが、ちょうど線路がメンテナンス中(そんなことあるんですね)ということで、ロッテルダムからライデンまでは電車、ライデンからスキポールまではバスで移動する必要があった。ちなみにオランダには9292という乗換案内アプリがあり、旅行前にインストールしておくと何かと重宝する。

 たまたま乗った列車は各駅停車だった。車中、10日間の旅行でどれくらいの距離を歩いたのかを確認して悦に浸っていた。ふだんはカバンを前に抱えるのだが、この時は隣の席に置いていた。この点に関しては帰国直前ということもあり、油断があったと言わざるを得ない。

 ある駅に停車した時、窓の方から音がする。そちらを見ると、なにやら男が切符を見せながら窓を執拗にノックしてくる。「切符を売りたいのか?それともこの切符がどこに行くのか教えてほしいのか?なんでそんなことを日本人観光客に聞くんだ?」といった様々な疑念が去来する。その間、視界の端でなんとなく「カバンが落ちた」ような気がした。刹那、男はやれやれ、といった感じでどこかに消えていく。「いったい今のはなんだったんだ?」という思いで、ふと隣席に目をやると、カバンがないことに気づく。と同時に、電車のドアの閉まる音がする。全てに気付く。ノックする男とは別の人間が見事のチームワークでカバンを持ち去っていったのである。

カバンを盗まれてから

 キャリーケースを持って一目散に出口に向かい、乗務員に「カバンを盗まれたから降ろしてくれ!」と懇願する。すぐに電車から降りることはできたが、男たちの姿はなくなっていた。その駅はハーグ中央駅からやや北のDen Haag laan van NOI駅という無人駅で、監視カメラすらなかった。カバンの中にはパスポートや私物のPC・タブレット等様々なものが入っていた。

 ホームの階段を半狂乱になりながら降りて、助けてくれそうな人を探す。キオスクの店員に声を掛ける。とりあえずハーグ中央駅に行けとのこと。乗るべきトラムを教えてもらう。トラムの中でも焦りが隠しきれず、それを見かねたのか若いカップルに助けられる。事情を説明すると、ハーグ中央駅まで同行して、鉄道警察に話をつけてくれるという。駅について借りてきた猫のようにカップルと警察が会話しているのを眺めていると、警察曰く、とりあえず空港に行けとのこと。

 スマホと財布を盗まれないように常にポケットに手をあてながら、一路スキポール空港へ。だが、空港の警察に相談するも、何もできないそうだ。ハーグの警察署で盗難届を発行してもらうように、とのこと。ちなみに、この時奇跡的なタイミングで友人がアムステルダムに旅行に来ており、現金を借りることができた(ありがとう…)。

 再びハーグに戻り、駅員に警察署がどこかを聞く。駅から約2kmほどの場所に交番があり、事情を説明し、然るべき書類に事件の詳細を書き、1時間ほどで盗難届を発行してもらうことができた。

 さて、帰国のための手続きをしようにも、盗まれた日は土曜日で、月曜日までは大使館が開かない。オランダ→成田行きの便は現地時間14時なので、月曜日だとリスキーだろうということで、KLM航空のスタッフの判断で、火曜日の便を予約してもらった。

 というわけで急に3泊する場所を確保しなければならなくなった。宿泊場所については、オランダに留学中の友人から、おすすめのドミトリーを教えてもらう。警察署内で予約を済ませる。こういう時は他人と喋らないと寂しさで精神が荒廃してしまうと考え、ホテルよりも多くの人がいるドミトリーのほうが良いと即判断した。

 滞在したのはthe Golden Storkというハーグ中央駅近くのドミトリー。スタッフにパスポートを盗まれたと説明すると、非常に親身に相談に乗ってくれた。「色々あったと思うけど、ここは安全な場所だから」と。カナダ出身のリンゴ農家と同室になったのだが、彼も親切に話を聞いてくれた。カナダはパスポート紛失に対してかなり厳しく、再発行が認められないケースがあるという話も聞いた。取り留めのない世間話ですら心に染みる。

 こういった事件に遭遇すると、周りの人間が全員敵なのではないかという疑心暗鬼に陥りがちであるが、人々と会話すると、性善説への信仰心が戻ってくる。

帰国のためにやったこと

 パスポートを盗まれた場合、帰国するためには(1)パスポートの再発行と(2)帰国のための渡航書の発行という2つの選択肢がある。しかし、(1)の場合は1週間以上の時間がかかる。(2)の渡航書というのは一回限りしか使用できない帰国のためだけの緊急パスポートである。今回発行してもらったのは後者である。  

渡航書発行のために必要だったもの

  • 盗難届
  • 戸籍謄(or 抄)本
    • 日本の親族に大使館宛にFAXで送ってもらうとよい。今回は.pdfを添付する形でも受理してもらえた。
    • マイナンバーカードや免許証でも構わないらしい。
  • 顔写真
    • 現地の写真屋で撮ってもらう。どこで撮ればいいかわからない場合はホテルのスタッフ等に聞くとよい。
  • 帰りの飛行機の予約証明
    • 予約の変更時にメールで予約証明書を送ってもらうように念押ししたほうがいい。
  • 手数料現金20ユーロ
    • 金額は国によって異なるかもしれない

やるべきだったこと

以下は今回の旅行での反省点である。

  • パスポートや免許証のコピーは持っておくべき
  • 電車関連
    • 監視カメラつきの車両に乗る
    • そもそもカバンを隣席に置かない
    • 真ん中のほうの席に座る
    • 各駅停車の電車にはできるだけ乗らない
  • 渡航先の国外務省の情報を事前にチェックして、よくある手口を頭に叩き込んでおく

さいごに

散々な最後になってしまったが、一ヶ月経って思い返すと非常に良い経験だった……と素直には言えない。 今は新しいPCやバッグを買い直した際の楽天カード請求額と、欠勤による減給に打ち震えている……。 (なお楽天カード付帯の旅行保険は現在審査中)

f:id:meana0:20190226131128j:plain
帰国寸前に除雪で足止めされたシーン

社会学の院生がITベンチャーの研究開発職に就くまで、そしてこれから

今年の2月にSansan株式会社に研究開発職として入社してから、そろそろ1年が経とうとしている。

社会学修士卒→ITベンチャーのR&Dというキャリアはかなり特殊ということもあり、「どうしてそうなったのか」を色々な人から尋ねられる機会も増えてきた。

というわけで、2018年の振り返りも兼ねて、大学・大学院時代にやっていたこと、入社までの経緯、そして現在何をやっているのか等をまとめることにする。

学部1~2年

自分が入学した東京大学教養学部文科3類は、他の科類に比べても文系色が強く、世にいう「文学部」をイメージしてもらえば大枠としては外さないはずだ。学部1,2年は教養課程で、3年生から専門の学部へと進学する仕組みになっている。

この頃はドイツ語やイタリア語などの外国語を中心に哲学、社会学などをつまみ食い的に勉強していた。大学に入る前から大学院にはなんとなく進学するつもりではいたが、おおまかには文献研究になるだろうと踏んでいた。

この時期は基本的に人文・社会系の勉強が多かったが、たまたま履修した行動生態学の授業が面白く、それ関連の本を読み漁ることもあった。

遺伝マインド --遺伝子が織り成す行動と文化 (有斐閣Insight)

遺伝マインド --遺伝子が織り成す行動と文化 (有斐閣Insight)

では、現在の仕事に直接つながるような勉強をしていたかというと、決してそうではなかった気がする。

準必修でたまたま履修した自然言語処理の授業でRを触ったことはあったが、成績はそこまで芳しくなく、スクリプトを書いていても全く楽しさを感じなかったので、将来的にこれが商売道具になろうとは当時は思いもしなかった。

加えて、もともとプログラミングや情報技術自体には興味があり、趣味で基本情報技術者試験を受けたりしていたものの、実務でコードを書くといった経験はほとんどなかった。

学部3~4年

社会学専攻に進学してからは、先輩や同学年の人たちに恵まれた。近年のコーホートの中では、最も「社会学を勉強するんだ」という気骨のある人たちが集まる世代だったのではないかと思う。

理論・メソッドを問わず、非常に盛んに勉強会や研究会が開かれた。自分もほぼ毎週のように何かしらの勉強会の準備に追われていた。学部生室には常に誰かがいて、何かしらの議論が行われていた。

具体的にどのような文献を読んでいたかというと、理論だったらColemanやGiddens、メソッドだったらWooldridgeの計量経済学の教科書やAgrestiのカテゴリカルデータ分析の本などを輪読していた。とにかく興味のある本があれば、周りを巻き込んで何でも読んだ。

コールマン 社会理論の基礎〈上〉 (社会学の思想)

コールマン 社会理論の基礎〈上〉 (社会学の思想)

An Introduction to Categorical Data Analysis (Wiley Series in Probability and Statistics)

An Introduction to Categorical Data Analysis (Wiley Series in Probability and Statistics)

計量分析を始めたのは、専門課程に入ってからのゼミの影響が大きかったと思う。学部に入った当初は興味が思想方面にあったのだが、優秀な人たちが計量寄りのゼミに入っていたこともあり、気付けばそちらの道に進んでいた。

統計学やRの使い方を本格的に勉強し始めたのはこの頃だった。当時はRの解説本はまだ市場にそれほど出回っておらず、『Rによるやさしい統計学』を繰り返し読んでスクリプトを書いていたと思う。

Rによるやさしい統計学

Rによるやさしい統計学

社会ネットワーク分析(以下SNA)と出会ったのもこの頃で、きっかけはたまたま乱読していた本の中で出会った安田雪先生の『パーソナルネットワーク』だったような記憶がある。

もともと自分はずっと「社会的分断」のようなテーマに興味があり、そのような現象に対するフォーマルな記述手法を提供するSNAに感銘を受けた。

SNAに興味を持ち始めてからは、GUIベースのPajekというソフトウェアを使って、サンプルデータを用いながら遊び半分で分析を回していた。

学部3年で書くゼミ論では、高校の学級にフィールドワークに行き、そこで実際にネットワークデータを収集して、Pajekで分析・可視化などを行った。修論もこのテーマをそのまま引き継いだものだ。

(ちなみに現在ネットワークを分析する時はigraphかNetworkXを使っている)

Exploratory Social Network Analysis with Pajek (Structural Analysis in the Social Sciences)

Exploratory Social Network Analysis with Pajek (Structural Analysis in the Social Sciences)

ちなみに東京大学には「情報学環教育部」というユニークな組織があり、こちらにも所属していた。メディア論やジャーナリズム論を学べる学内のダブルスクールのような組織で、情報法について学ぶ授業や、レッシグの『CODE』を読む授業などを聴講していた。

東京大学大学院 情報学環・学際情報学府 – 情報学環教育部 (実はヘッダー画像に僕が写っている)

ここでは、自主的にネット炎上や監視社会に関するゼミも開いていた。学部では定量的な分析がメインだったが、こちらではどちらかというと歴史や理論的なアプローチで、しかもかなり自由な形式で発表などを行っていた。

CODE VERSION 2.0

CODE VERSION 2.0

この組織にはフルタイムで働いている人や、普段出会わないような理工系の学生も在籍しており、何気ない会話の中で異なる領域の知識や視点を知ることができた。

自分の中での見える世界の幅が広がったのは教育部のおかげだと思う。例えば現在仕事でやっているような「社会学の知識を活用して何かプロダクトが作れるんじゃないか」みたいなアイデアが、教育部に在籍した経験なくして出てくるものなのかは自信がない。本当に良い教育機関だと思う。

大学院修士課程

修士1年のときには学会発表共著で査読付きの書評論文を書いたり、学会発表にも精力的に参加し、年度の終わりにはINSNAというSNAの国際会議にも出席した。Scott FeldやBarry WellmanといったSNA界のレジェンドを間近で見られて感無量だった記憶がある。

修士生活はかなり順調だったと思う。ここまでは。

Networked: The New Social Operating System (The MIT Press)

Networked: The New Social Operating System (The MIT Press)

SNAを勉強していると誰もが思うことかもしれないが、SNAの本流は主にアメリカ合衆国、オランダ、オーストラリアの3カ国にあり、日本の社会学のプレゼンスはまだまだ高いとは言えない。

当然そうなると海外にPh.D留学したいという気持ちが湧いてくる。INSNAに参加してこのあたりの思いは決定的なものになったと思う。

ただ、あまりにも遅かった。M2の4月から急いで準備を始めて、TOEFLなどを受験するも、一向にスコアが伸びなかった。2万円弱ほどの受験料が発生する試験で、金銭的な負担はそのまま精神的な不安として大きくのしかかった。

フルブライトや伊藤国際などの奨学金プログラムにも応募したが、おそらくTOEFLの点数が低すぎて軒並み不合格となった。

この間、概日リズムは完全に狂ってしまい、朝の5時に寝て午後4時に起き、その後は一切頭が働かずにボーっとしただけで一日が終わる、ということも珍しくなかった。

結局、留学は挫折することとなった。この決断の後、推薦状を書いていただくなど尽力していただいた指導教員にもその旨を伝えた。そこで励ましの言葉をいただいたのだが、先生の部屋から出てすぐに法文1号館のトイレ個室でどうしようもなく大泣きしてしまったことを今でも鮮烈に思い出す。

さて、そこからは概日リズムを調整する薬を服用しつつ、修士論文をやっとの思いで書き上げた。その後、口頭試問で激烈な批判を浴びせられながらも、なんとか修士の学位を手に入れ、博士課程に進んだ。

博士課程に進むことに特別な「覚悟」があったわけではなく、さしあたりそうする以外に選択肢がなかった、というだけだった。

大学院博士課程

こうして博士課程に進学するも、修士時代は留学準備に精一杯で学振特別研究員(DC1)にも応募しておらず、露頭に迷っていたところ、修士時代に1年間アルバイトしていた情報学環教育部の先輩方の経営する会社に拾っていただいた。

正社員として雇用していただきながら、ダッシュボードの作成、レポート作成、効果検証やPythonでのスクレイピング、アンケート調査の集計システムの開発などを行った。

ある程度裁量を与えられながら、VMやgitなどの技術にも触れつつ、データ分析およびシステム開発の実務に携われたのは非常に貴重な経験だったと思う。気が向いた時にはkaggleでKernelを書いたりしていた(最近はサボっている)。

Clustering Top Players | Kaggle

こうして週4日ほど勤務しながら、かなりスローペースながらも、修士論文の投稿論文化を中心に研究活動は続けていた。査読論文こそ出していないものの、SNAに依拠しつつ、学会やシンポジウムでの発表や、研究プロジェクトの報告書などを書いていた。

ある日

日々の生活には一切の不満もなかったのだが、ある日、Twitterで一件の求人募集を目にする。

どうやらSansan株式会社というところで、「社会科学分野のデータサイエンティスト」を募集しているらしい。いやいや「社会科学」というのは経済学や金融工学のことだろうと思いながらも詳細を見ると、

計量経済学社会心理学、ネットワーク分析、Computational Social Scienceなど」の研究経験がある人を募集しているという。しかも、実務経験があり、かつRやPythonが使えることが募集要件の中に入っている。

胸が高鳴った。「これは自分のことではないのか?」という気持ちが捨てきれなかった。この募集要項を見た晩はロクに眠れず、仕事中ももっぱら悶々としていた。いてもたってもいられずに、会社の人たちに相談したところ「とりあえず面接に行ってみたら?」と言われた。

学部・院時代には就活をした経験がなかったため、様々なことが分からなかった。それでも慣れない手つきで履歴書と職務経歴を書き上げて、送った。書類審査に通過したという知らせを受けて、面接に向かうと、オフィスはあまりにもオシャレでキラキラしていた。とても緊張した。

だが、面接官(後に同じチームの人になる)とネットワーク研究について喋るうちに、「ここにもいたんだ」という感覚を覚えた。自分のやってきたことは、もしかしたらここで実を結ぶのではないかと。

幸運にも、自分の「やってきたこと・これからやりたいこと」と、先方が「やってほしいこと」がマッチングし、無事に採用が決まった。今から思えば、会社からするとかなりの思い切った判断だったのかもしれない。

現在

現在は、大学院を休学してフルタイムで働いている。機械学習のプロフェッショナルや一流のエンジニアの中で揉まれつつも、なんとか自分なりのやり方で新規サービスを作ったり、社内システムを作ったり、その傍らで社会ネットワーク研究オタクとしてSNAに関するコラムやブログなどを書いている。

bnl.media

部署のslackには15000個のemojiがあり、毎日愉快に仕事できている。また、みなそれぞれ専門領域があり、お互いがリスペクトし合える雰囲気があって、環境としてはとても良いと思う。

qiita.com

自分のバックグラウンドは工学・情報学にないが、かといって全く歯が立たなかったり、自分の作ったものが全然評価されないというわけでもない。むしろ社会(科)学では当たり前の発想が、真新しいアイデアとして驚かれることもある。

これは希望的観測だが、社会科学出身者の雇用先として、今後データサイエンティストやエンジニアといった選択肢は増えていくはずだ。だが、自分が失敗してしまったら、自分以外の人の未来の可能性まで潰してしまうような予感もあり、そのあたりの緊張感は持って日々仕事をしている。

さいごに

こうして改めて振り返ってみると、良い人との出会いの中で自分の方向性が水路づけられていったに過ぎないと感じる。

本当に、人と人との出会いというものはそれ自体奇跡だと思う。

一方、科学的な立場からは、やはり奇跡で終わらせることはせずに、そのメカニズムと対峙する必要があるとも考える。

ネットワーク研究者として、その狭間で揺れながら、それなりに気合を入れて2019年はやっていこうと思う。

まだまだ未熟者ですが、来年もよろしくお願いします。

Thinking Through Statistics 第8章についてのメモ

※この記事は年明けの読書会での資料作成用メモです。

Chapter 8: When the World Knows More about the Processes than You Do

Making Knowledge out of Ignorance

  • 無知が誤った結論を導くケース
    • 特にこの章で扱うのは、不十分な測定が紐帯を過小/過大評価するケース。
    • (例)階級同類婚
      • 研究者の階級観と被調査者の階級観は異なる。
      • 階級の数をどう決めるか=どのようにも決められるという問題がある。
      • 極端に言えばランダムにカテゴリを振れば同類婚は起きないと結論づけられる。

Families

  • 世界は我々がアクセスできない情報を持っていることがある。
    • (例)人種の自認 — 本人の宗教と祖父母世代の交絡
  • 我々のモデルやデータが不完全な時、実世界とは異なる形式での連関が認められる。
    • (例)三世代での階層移動データ
      • 世代に関するマルコフ性だけを仮定した架空データでも、OLSすると祖父母世代の影響が出てくる。
      • ランダムな回答誤差を与えるだけでこれが起きてしまう。

Social Networks: What They Know

  • ネットワークデータの統計的処理に関する諸問題
    • サンプル間の非独立性
    • 研究者が関知しない属性の影響
    • 存在的非独立性(existential non-independence)
      • ある紐帯の存在/非存在が他の紐帯のそれに影響を与える。

Letting the Network Determine Your Sample

  • ネットワークサンプリングに関する諸問題
    • スノーボールサンプリングの一種であるRDS(respondent-driven sampling)は体系的に代表的でない。
      • 数珠つなぎ的にサンプルを選んでいくと、ポピュラーな人にたどり着きやすく、つながりが少ない人にはアクセスしにくい(c.f. Friendship Paradox)。
      • SalgenikによるRDSの修正
        • 重複抽出を許容する。
        • 回答者の知り合いからランダムに抽出する。
      • RDSには限界があったが、それでもこの手法でどこまでのことが現実的に言えるのかを評価していくことは重要。

Interdependencies

  • ネットワークデータの構造的相互依存性にどう対処するか
    • 中和 — 相互依存性に対してロバストな手法を使うこと
      • QAP
        • 並び替え検定の一種。
      • multiway non-nested clustering to correct standard errors
    • 構造を記述するに留める
    • 構造的な原理それ自体を説明する
      • ERGMs
        • ネットワークをその局所的な構造に因子分解することで、ネットワーク形成メカニズムをモデリングする。
          • 問題:
            • モデル退化(degeneracy)の問題。
            • そもそもパラメータが一切推定できなくなる場合がある。
            • 非構造的なパラメータ(e.g. ノードの属性)はHammersley-Cliffordの定理とのつながりを欠いている。
        • ERGMの「儀礼化」(=何も考えずにとりあえずERGMを使っておけばいいだろうという思考停止のこと?)は問題で、ERGMの推定でクラッシュするくらいなら、たとえbestimatesでなくても、ロジスティック回帰を使ったほうがよいという判断もありえる。

合理的選択理論の文献リスト

【個人的メモ・随時更新】

 

Blau, P. M. (1987). Microprocess and macrostructure. Social exchange theory, 83-100.

Boudon, R. (1982). The unintended consequences of social action.

Boudon, R. (2003). Beyond rational choice theory. Annual review of sociology,29(1), 1-21.

Coleman, J. S., & Fararo, T. J. (1992). Rational choice theory. Nueva York: Sage.

Coleman, J. S.(1990). Foundations of social theory. Harvard University Press.

Collins, R. (1981). On the microfoundations of macrosociology. American journal of sociology, 984-1014.

Dahrendorf, R. (2006). Homo sociologicus (pp. 15-101). VS Verlag für Sozialwissenschaften.

Elster, J. (1989). Nuts and bolts for the social sciences (p. 13). Cambridge: Cambridge University Press.

Goldthorpe, J. H. (1998). Rational action theory for sociology. British Journal of Sociology, 167-192.

SSIシンポジウムに行ってきた。

社会情報学会(SSI)主催のシンポジウム「ビッグデータの可能性と課題──監視・シュミレーション・プライバシー」に行ってきた。開催地は中央大学駿河台記念館で、本郷から自転車に乗って5分程度で着いた。会場は非常にこじんまりとした会議室で、20人程度の参加者がいたと思う。

 

発表者・発表題目は以下の通りである。

 

橋田浩一(東京大学)

「集めないビッグデータ: 情報の分散管理による個人の尊厳と公共の福祉

板倉陽一郎(弁護士)

ビッグデータに関連する制度検討の現状」

吉田寛(静岡大学)

「世界表象としてのビッグデータ

 

橋田さんの「集めないビッグデータ」は、パーソナルデータを集中管理するよりも、各個人に分散させ、各個人が共有する範囲を決めるようにする(=分散PDS)ほうが、コスト削減や「人間の尊厳」、または「公共の福祉」にとって良い、というような内容であった。橋田さんは現実的なコスト、あるいはベネフィットや、具体的な実装例を中心にお話されていたが、先日自主ゼミで扱ったISED第6回に登場した「リトルイッツ同士のアンリンカビリティ」という論点と重なる部分が大きく、僕は終始プライバシーの問題として話を聞いていた。

板倉さんは、現在、日本の政府委員会のレベルで現在どの程度まで政策協議が進んでいるかという現状報告をされた。「『個人情報保護法は世紀の悪法だ!』と批判していた新聞も絶対100年間ずっと批判するわけではない。それどころか2,3年たったらどの新聞も何も言わない。忘れられ始めた頃が一番気をつけなければならない。」(大意)という言葉が印象的であった。面白そうな内容だけを何点か紹介しておく。一つ目、欧米の議論がパーソナルデータ「保護」を中心としているのに対して、日本はパーソナルデータ「利活用」が中心らしい。が、これは政府意向に沿うかたちで表向きにはそうなっているだけであって、実際には「保護」についても積極的に議論が進んでいる。二つ目、「利活用」に主眼が置かれていることとも関連するが、「個人が特定される可能性を低減したデータ」を、本人同意なしで利用可能にする動きがあるということである。このあたりは「低減」の基準をめぐって色々と議論の余地がありそうな気がする。

このシンポジウムで最も興味深かったのが吉田さんの発表であった。吉田さんはウィトゲンシュタインがご専門のようだが、今回の発表は「ビッグデータ」を「表象」という視点から読み解く、というのが主旨であった。まず、「表象」とは「対象があり、それを再度何らかの媒体によって提示したもの」であり、それはさらに「局所表象」と「分散表象」の2種類に下位分類できることを確認しておく。局所表象とは、表象の処理過程が可視化・分析できるような表象のことで、ざっくり言えば意味のある仕方でまとまっている表象のことである。一方、分散表象とは、その処理過程がブラックボックスになっているような、ざっくり言えば意味のある仕方で取り出せない表象のことである。吉田さんは、このような区別を置いた上で、「ビッグデータという分散表象から、突然リスクが局所表象として出現する」可能性があるという問題提起を行う。ビッグデータとはまさに分散表象である。巨大なデータの集合は、一見すると「もやもや」していて、「わけのわからない」もののように見える。しかし、そのデータに対して、例えば重回帰分析などの統計的手法を適用することで、何らかの規則性を取り出すことができる。これは分散表象を局所表象に変換することと意味的に対応している。問題なのは、この変換の過程がブラックボックスになっていることである。話が抽象的だから、例を出しておこう。この点に関して、質疑応答で橋田さんが将棋プログラムの話をされていた。かつての将棋プログラムは、人間がプログラムに特定の戦略をインプットする方式で作られていた。だから、開発者はある状況でのプログラムの動きを自分で説明することができた。しかし現在の将棋プログラムは、膨大な試合のデータなどを統計的に処理させる機械学習というプロセスで作られている。だから、開発者でさえも将棋プログラムの挙動を説明できない。もう一つ、こちらは吉田さん自身が挙げた例であるが、遺伝子データを解析すると重大な病気のリスクが判明することがある。だが、このようなケースでは、おおかたの場合、そのようなデータを解析するとなぜそのような結果が得られるのか、その解釈が判然としない。このようなことを吉田さんは「雨乞い」に似た、反知性主義であると言っていたが、ビッグデータにおいては、このように「システムが突然語り出す」。分散表象(=遺伝子データ)から、突如として局所表象(病気のリスク)が浮かび上がってくる。そして、このシステムは「いったん起動したら、理由はわからなくても従うか従わないかの決断しかない」。遺伝子データの解析から、重大な病気のリスクが分かってしまったら、その病気を治療するか/治療しないかという決断をしなければならない。ここで、主体性や自由はもちろん、「誰か責任を取るか」という問題が前景化してくる。これは、データサイエンティストがその責任を取ればいい、という単純な問題ではない。データサイエンティストたちは、あくまで「私ではなく、データがそう言っているのだ」と弁明するだろう。では、「データ」が責任を引き受けるのか?しかしデータは人間ではないから、責任の取りようがない。非常に難しい問題である。吉田さんはさらに「ブラックボックスを通した訓育が許されるのか」「ブラックボックス化が偽装される可能性はあるか」「ビッグデータによる予測の自己循環と閉塞」などの問題提起を行った。このような議論はビッグデータをめぐってこれまでなされてきたと思われるが、「分散表象」「局所表象」という用語法は、ビッグデータの本質である「もやもや」感を学術的な議論のレベルに底上げするために有効であるように感じた。

 各発表の要約は以上だが、質疑応答で興味深いやりとりがあったので最後に紹介しておく。

Q.システムの弾きだした予測と個人の感覚との間のズレに対して違和感を表明していくことが抵抗になっていくのではないか。(例:Amazonのレコメンドが自分の好みを全く反映していない)

→吉田:そうした違和感を表明していくために「良識 bon sens」というものを涵養するのが大事だけれども、仮に生まれた時からAmazonで育ってきた子どもは違和感を表明できるのだろうか。

→質問者:子どもを生まれた時からAmazonで育てるようなことをしてはいけないというのが「良識」ではないだろうか。

論文を読んだ:田邊(1999)

田邊浩, 1999,「社会統合とシステム統合・再考-構造化理論 VS. 社会的実在論を中心として」『金沢大学文学部論集 行動科学・哲学篇』 19 pp.35-60

 金沢大学で構造化理論を中心に研究されている田邊先生による、社会統合とシステム統合について、その起源から現代的展開までを扱った、いわゆるレビュー論文である。(レビュー論文をレビューするというのもなんだか気持ちが悪い…。

 社会統合/システム統合とは、ギデンズの『社会理論の最前線 (原題:The Central Problems of Social Theory)』なんかを読んだ方はお分かりだと思われるが、ミクロ-マクロ問題と密接な関連を持っている概念区分である。

 その起源は、イギリスの社会学者デイヴィッド・ロックウッドDavid Lockwoodに遡る。

ロックウッドによる定式化

  • 社会統合…行為者間の関係における統合
  • システム統合…システムの部分間の関係における統合

 ちなみにこの概念区別は、マルクスにヒントを得たものらしい。この社会統合/システム統合を持ち出すと、いったいどんなご利益があるのか。それは、パーソンズ流の規範的機能主義やコンフリクト理論に欠けていた「社会変動」という問題を上手く扱えるということだ。あるコンフリクトは社会変動をもたらし、一方で別のあるコンフリクトは社会変動をもたらさない。では、この差異はいかに説明されるか、というのが彼の関心である。

まず、システムの部分間に不調和が生じる。それが、社会統合のレベルに影響を及ぼす。諸行為者がそうしたシステム矛盾をいかに取り扱うかによって、変動が生じるかどうか、どのようなかたちで変動が生じるのか、が決まってくるのである。(3)

  ここからは僕の解釈であるが、上の田邊の整理における「システムの部分に不調和が生じる」とは、例えばマルクスの理論における「生産力」と「生産関係」の間の矛盾のような話だと思われる(本文にもロックウッドはそこからアイデアを拝借したと書いてあるのだが)。この「生産力」と「生産関係」の間の矛盾は、システム統合のレベルに存在している。この矛盾は、労働者と資本家の生活に影響を与えずにはいられない。矛盾が増大していけば、労働者による蜂起は避けられなくなる。だから、例えば、資本家たちは賃上げなど、労働者の待遇改善について協議するだろう。その結果によって、矛盾がどのような帰結を迎えるかが左右される。このような資本家たちの協議は、行為者間の関係、つまり社会統合のレベルに存在する。仮に資本家たちが賃上げをした場合、システム矛盾は緩和されるだろうが、賃上げをしなかった場合、システム矛盾はさらに増大し、悪循環に陥ることとなる。最終的に待っているのは労働者による反乱である。つまり、社会変動を主導するのはシステム統合のレベルであるが、それは決定論的ではない。社会統合のレベルで、システム矛盾に対してどのような行為が執られるかによって、その後の社会変動がは果たして発生するか、あるいは、どのように進んでいくかは変わってくる。

 ハーバーマスもまた、社会統合/システム統合という概念を用いている。

ハーバーマスによる定式化

  • 社会統合…規範的・コミュニケーション的に関わらず、合意による統合
  • システム統合…主観的に調整されていない個々の決定を非規範的に制御することによる統合

ハーバーマスがこの概念区別を持ちだしたのは、「いわゆる理解社会学・解釈学的社会学と機能主義との結合がもくろまれている」だという。

ハーバーマスは理解社会学の意義をくみとりつつも、社会と生活世界を同一視することは拒否する。社会の統合は、了解に志向した行為の前提のもとでのみ実現するのではない。社会文化的生活世界の成員たち自身には、その過程どおりにみえるかもしれないが、現実には、了解過程にもとづいて調整されるだけでなく、かれら自身の意図せぬ、また日常実践の地平の内部ではたいてい気づかれていないような、機能的連関にもとづいて調整される。したがって、社会統合とは区別されたシステム統合の概念が必要とされる。(4)

ロックウッドと異なるのは、ハーバーマスにおいては社会統合のほうに力点が置かれているということだ。

システム統合のレベルでいかなる制度的不調和が生じようと、社会統合レベルでのコンフリクトが生じなければ、それは社会変動に至ることはない。(4) 

 このあたりはあまり腑に落ちなかったのだが、先の労働者/資本家の例で言えば、どれだけ生産力と生産関係の矛盾が広がっていようが、それを「矛盾である」という合意がなされていなければ何も起こらない、ということだろうか。

 よく寄せられる批判としては、ハーバーマスによるこの概念区別は方法論的(分析的)なものなのか、実体論的なものなのか、ということだという。

 

 次はギデンズである。ギデンズは、「統合」を行為者間もしくは集合体間の絆・相互交換・実践の互酬性」として、以下のような定式化を行う。

ギデンズによる定式化(『社会の構成』時)

  • 社会統合…共在の文脈における諸行為者間の互酬性
  • システム統合…拡張された時間-空間を超えた諸行為者・諸集合体間の互酬性

前者では「共在」が、後者では「不在」ということがポイントである。このような定式化によってギデンズが目標とするのは、ミクローマクロ問題を超克することである。

ギデンズによれば、ミクロとマクロという概念的区別は、つぎのことを想定している。第一に、ミクロ的な分析は社会生活の主観的な側面に、マクロ的分析が客観的な社会構造に焦点を当てると見なすことである。第二に、ミクロ的なアプローチを自由な行為作用と、マクロ的なアプローチを構造的拘束と結びつけて考える傾向があることである。ギデンズは、こうしたものは虚偽の二元論的な対立にすぎないとする。(6)

ギデンズの定式化に従えば、上の引用のような欠陥を孕むミクローマクロという問題は、ある行為者が取り結んでいるのが、共在した他者との関係か、不在の他者との関係か、という違いに代替される。そこでは、ミクローマクロの持つ「規模の大小」だとか「主観-客観」のような図式は意味をなさなくなる。これがギデンズの概念戦略である。

 この後、ニコス・ムーゼリスやマーガレット・アーチャーなどの「社会実在論」者が、ロックウッドを継承した形で、ギデンズの社会統合/システム統合概念に批判を行い、現代的展開を形成していくのだが、簡単にいえば、ギデンズは行為者をフラットに考えすぎていて、構造に多大な影響を与えるであろうマクロ行為者を考慮に入れていない、であるとか、行為と構造が「中央融合」してしまって、時間が考慮に入れられていないという批判である。より詳しいことはまた時間があれば整理する。