エンジニアリング

Elastic GraphとKibanaを使用してパナマ文書を分析する

Elastic Graphの新機能は、データに含まれる繋がりを分析するものです。パナマ文書に含まれるオフショア金融取引について、複雑に絡み合った糸をほぐすように手がかりを追うときも、利用者が多いEコマースサイトのクリック行動を俯瞰するときも、そこにある関連性を浮かび上がらせる上でGraphの技術が役立ちます。

Graphの機能は、Elastic Stack用の商用X-Packプラグインにバンドルされており、Kibanaアプリと新しいElasticsearch APIが含まれます。Graphについての初めてのブログ記事となる今回は、KibanaアプリとAPIの組み合わせで何ができるのかを簡単にご紹介します。

フォレンジックス分析:パナマ文書

ある金融法務記録の発表 が2016年に世界を駆け巡るニュースとなりました。オフショア法律事務所のモサック・フォンセカから流出したこれらの記録により、多くの政治家、王族、資産家やその親族がオフショアのタックスヘイブンに設立されたペーパーカンパニーのネットワークを利用していることが明らかになっています。ジャーナリストや金融機関は、現在このデータの分析に鋭意取り組んでいますが、繋がりの解明は難しく、また時間が掛かる可能性があります。Kibana Graphアプリは、このプロセスを誰でも簡単に行えるようにするものです。

panama-papers-graph-dashboard-relationships.jpg

上図は、ウラジーミル・プーチン大統領の親友の Sergei Rolduginと関係のある企業や個人です。この画像は、いくつかのシンプルな手順で作成されたものです。

データソースの選択

まず、インデックスのリストから「パナマ」を選択し、続いて図中に表示したい値を持つフィールドを1つ以上選択します。各フィールドには、図中に表示される「頂点」に使用するアイコンと色を設定できます。

panama-papers-selecting-datasource.jpg

検索の実行

これで、通常のフリーテキスト検索を実行して、プーチン大統領の友人の名である「Roldugin」を含むドキュメントを照会できます。

panama-papers-running-a-search.jpg

一致したドキュメント内のタームがネットワークとして表示されます。各ラインは、タームのペアを繋ぐ1つ以上のドキュメントを表しています。

データのキュレーションを行っているICIJのジャーナリストたちは、現実世界の各実体(自然人/法人/住所)に固有のIDを付与し、そのIDを該当する実体を参照する各ドキュメントに追加することを試みました。

残念ながら、人の名前や住所の突き合わせ作業は非常に難しいものです。ジャーナリストたちは、人物番号12180773に関連する3件のドキュメントを正しく識別することができました。そこには、ほかによく似た名前の人物が2人含まれていますが、その人物たちには別のIDコードが割り当てられています。同様に、2件の似たような住所にも別のIDコードが割り当てられています。Graph APIを使用した、実体の解明の自動化については今後のブログ記事で取り上げます。今のところは、グループ化ツールを使って手動で修正しましょう。

頂点のグループ化

詳細モードのツールを使って頂点を選択し、グループ化ボタンをクリックしてマージします。これにより、盤面がさらに整理されます。

panama-papers-grouping-vertices.jpg

必要に応じて、すでにグループ化されているアイテムをさらにグループ化することもできます。たとえば、複数のIDを持つ人たちを1つの頂点にマージした後、さらに法人の頂点にマージすることができます。

「スパイダーアウト」の実行

さて、他にこれらの実体に関連するものがあるかを調べるにはどうすればいいでしょうか?ツールバーの「+」ボタンを使用すれば、ほかの関連する実体も取り込んで、データ内の繋がりの探索を続けることができます。

panama-papers-spidering-out.jpg

「+」を何度も押すことで範囲をさらに拡大でき、選択によってグラフ内の特定のエリアのみに集中して展開することもできます。「元に戻す」ボタンや「やり直し」ボタンは、期待していたような結果が出ない場合に重要な役割を果たします。さらに、「削除」ボタンや「ブラックリスト」ボタンを使って、現在表示されている頂点やリターン可能な頂点を制御することもできます。また、選択された頂点の背後にあるサンプルドキュメントのスニペットも表示できます。

パナマ文書のデータを自分の手で触ってみたければ、ElasticsearchKibanaGraphプラグイン を入手して、こちらのインデックス設定手順に従ってください:bit.ly/espanama

集合知

パナマ文書は、各ドキュメントが極めて重要な繋がりを示す可能性がある、詳細な「フォレンジックス」タイプの調査の一例です。
ただし、Elastic Graphの技術が真価を発揮するのは、クリックログで見つかるデータのような大量のユーザー行動の概要をまとめる機能です。この類の分析を形容する上でよく使われる表現が「集合知」のマイニングです。このようなシナリオでは、各ドキュメント単独では特に興味深くありませんが、多くのユーザーの行動から出現する、たとえば「製品Xを買った人は、製品Yも購入する傾向にある」という創発的パターンは興味深いものであり、リコメンデーション機能などで活用できます。このようなシナリオでは、擬似的な繋がりを出現させる特殊なドキュメントを排除したり、「製品Xを買った人は牛乳も買う傾向にある」というような、あまりにも自明な関連付け(牛乳を買わない人の方が珍しい)を排除する必要があります。これを念頭に、特に重要な関連性を識別するためにグラフによる探索を制御するデフォルト設定を調整します。
それでは、LastFMデータセットを使用したリコメンデーションのユースケースを見てみましょう。ユーザー中心のインデックスを作成する場合、リスナーごとに好みに合った音楽アーティストの配列を含む1つのドキュメントが存在します。このインデックスに対してクエリを実行し、「Chopin(ショパン)」を好きな人の好まれるアーティストを調べてみましょう。

lastFM-wisdom-of-crowds.jpg

返ってきた値のうち、クラシック音楽家には明らかに強い関連性があります。2つの頂点をつなぐ線をクリックすれば、同じ興味を持つリスナーがどれだけいるかが表示されます。メンデルスゾーンのすべてのリスナーのうち約半数がショパンも好んでいます。

Graph APIは、有意な関連性のみを識別しています。これは、他のグラフ探索技術との重要な違いです。

人気 ≠ 重要性

設定タブを開いて、有意な繋がりのみを検索する機能を意図的に切ってみるとどうなるか見てみましょう。

graph-popular-equals-significant.jpg

「significant links」というチェックボックスのチェックを外して、ショパンのリスナーについてのクエリを再実行すると、結果は大きく異なったものになります。

lastFM-wisdom-of-crowds-new.jpg

(世界的に)人気のあるRadioheadやColdplayといったアーティストが結果に混じり込んでいることがわかります。5721人のショパンのファンのうち、1843人はBeatlesを好んでいます。もちろん人気はありますが、これは私たちが「一般共通項」と呼ぶ、牛乳を買う人たちと同じような選択です。「significant links」をオンに切り替えると、ノイズが除去され、私たちが「非一般共通項」と呼ぶ信号に的を絞れます。情報理論に明るい方々のために申し上げますと、何年にもわたって検索エンジンを支えているTF-IDFアルゴリズムも、同じ原則に基づいています。

このような関連性ランク付け技術を再利用することで、データ内の繋がりを探索するときに「トピックを外れない」でいられます。これは、関連性ランク付けという概念がなく、人気のある項目を削除するという戦略を採用せざるを得ないことが多いグラフデータベースとの大きな違いです(「スーパーノード」の問題を参照)。

注:パナマ文書の情報探索のような、詳細なフォレンジックスを行う場合、「significant links」をオンにすることで非常に出現頻度の高い企業を除外することは役立ちますが、「certainty」設定はデフォルト値の3から1に下げるべきです。集合知タイプのシナリオについては、信頼できる繋がりを主張するのに少なくとも3件のドキュメントが必要ですが、フォレンジックスにおいては、1件1件のドキュメントがすべて対象となり得ます。

まとめ

このブログは、Graphの以下の2つの主な使用モードを簡単に体験していただくためのものです。

  1. フォレンジックス:1件1件のドキュメントがすべて対象となり得ます。検索では、各レコードや関係者に「ズームイン」して、あらゆるものを調べます。
  2. 集合知:ズームアウトして、大衆行動の「大局的な」概要を得ます。ノイズとなる繋がりがあまりにも多くあるため、データ内の最も重要な繋がりのみに要約することが焦点となります。

今後のブログ記事では、具体的なユースケースをより深く掘り下げ、Kibanaアプリにより舞台裏で使用されるElasticsearch APIに取り組みます。

Graphファンの皆様、どうぞお楽しみに…