Neo4j勉強会#3

ということで雨の中、新宿までNeo4j勉強会に行ってきましたよ。

  • 会場はほぼ満杯。参加者の熱意が伺える。

Neo4jユーザグループからのお知らせ

  • 勉強会は定期的にやるよ
  • 出版、翻訳に関する提案
  • 入門サイト構築ヘルプ!
  • OSCへの参加。名古屋、北海道、沖縄、京都。
    • OSC北海道は別件で俺も行くんだよな・・・たぶん。

セッション1:Neo4j 2.2の話

  • いっぺいさんの話
  • 性能とスケーリングは2.2の改善の目玉。
  • ネタ:グラフデータベース、Neo4jに関する英語書籍は結構多く出版されている。


Cypherの改善
  • コストベースオプティマイザの話。
  • コストベースに変更したことによって、100倍以上の高速化。
  • Visual Query Plans:実行計画を図式化してくれるツール。

 □の間の矢印幅が検索結果の量を示す。
 検索のネックになっている箇所を見出す。

  • ルールベースとコストベースの両方を併用。手動で方式を選択可能。
  • profileコマンドとexplainコマンド
読み込み性能
  • 独自にmmap相当を開発。従来はOS提供のmmapを使っていた。
  • グラフデータに最適化されたmmap管理
書き込み性能

⇒これが書き込み性能ネックになっていた。

Neo4jデモの説明(実際にデモをしたわけではない)
    • 商品と供給元の関係を示すデータを使ったデモ
      • 豆腐⇒購入者の関係から、特定の購入者を求め、その購入者が購入している商品を見つけるなど。
      • そのデモの中で、Visual Query Plansを使っている。
    • クエリテンプレートツールの説明。


ユーザセッション1:Cypher QL レコメンデーション・エンジンとしてのポテンシャル(デモ)

デモ概要
  • 販売履歴の解析(ユーザ、商品、価格)
  • ユーザ別レコメンデーション商品の割り出し
  • 元データはCSV:Q.データ件数は?
  • 「ユーザ」と「商品」のノード、「買った」というエッジ。
クエリ例
  • 購入した商品数が多いユーザTOP10
  • 前項のユーザTOP10が購入した商品一覧
  • 前項の商品TOP10の中で商品単価TOP10
  • 前項の商品単価TOP10を購入したユーザは?
  • 特定のユーザが購入した商品を買っているユーザ・・・などなど
  • 売上金額TP10の商品の中で、どれかを購入したユーザが、購入した商品TOP10 など複雑な分析もOK
  • MATCHの連鎖的な記述で「単価TOP10を買ったユーザ」なども1つのQLで書ける。
クエリの応用例
  • ここでも重要なのは入れ子でQLが書けること。
  • ABCを買っていない顧客のなかで、優良顧客にABCを勧める
  • ABCを買っていない顧客のなかで、XYを購入している顧客にABCを勧める
  • ABCのどれかを買っている顧客のなかで、優良顧客にXYを勧める
  • ABCのどれかを買っている顧客に、ABCのうち購入していない商品を勧める
    • むむ、そのデモは合ってる?
  • 同様に商品数を売上額などの計算結果でもOK。
  • ビジュアル判断でなく、countなどの集約結果で見ることもできる。
  • うーん、個人的には、もう少しQLを詳細に解説してほしかった。
  • あるいは同種の操作をSQLで表現したらどうなるか、を示してくれると嬉しかったかな。
苦労したこと。
  • 句や関数、演算子の組み合わせで苦労した。
  • outer join的な処理がちょっと面倒。


10分ほど休憩・・・


ユーザセッション2:ファーストパーティ詐欺の詐欺検知アプリデモ

  • 使用額が平均額+標準偏差 * 2を超えるユーザが5%以下の特異点。あやしい。
  • これをグラフでどう表現するのか。
  • アカウントホルダーが複数あるケース:リング上のグラフになる。
  • 1つのアカウントホルダーを起点として長々とノードが繋がっているケースも同じ?(良く聞こえなかった)
  • あるアカウントホルダーの隣のノードのタイプ(ContactType)も判断情報になる。
  • クレカの限度額や貸付額などからリスクファクターを計算して、さらにContactTypeの係数もかけた値でソートすることで、あやしいユーザを推測する。
Q&A
  • リングの数や標準偏差2乗などは、元々計算してあった値を使っているのか、Cypher内で計算しているのか?
    • リングの数も標準偏差Cypher内で計算している。
    • (ぬこ) クエリ例見てるけど、結構壮絶なクエリにみえるるる・・・
  • 今回参考した情報やデータがあれば教えて欲しい。
    • データなどはNeoTechnology社から提供してもらった。公開してもらえるかは確認してみる。
  • SSNって何?
    • 国民番号のようなもの。これを使いまわすような犯罪があるらしい。


日本での事業展開について


グラフ型データベースの書籍企画について

  • 執筆をユーザグループ内でやってみたいとのこと。
  • グラフデータベースの基礎、Neo4jの基礎、初心者向けの内容。
  • 本を書きたい人は長瀬さんへ連絡。(yoshi@tech-arts.co.jp)
    • 「Neo4j書籍に興味あり」みたいなメールを投げてもらえばOK。
    • 正式には来月くらいに決定らしい。
  • 章単位で分担を決める。
    • マージと一時手直しは長瀬さん。その後、編集へ。
  • 執筆者は名前が乗るよー!


勉強会案内

  • 丸の内Neo4j勉強会
    • 元々丸の内MongoDB勉強会の人が主催。5/20 19:00-
    • あ、さっき勉強会の休憩時間に登録した勉強会だw


恒例:Tシャツ争奪会

  • 今回は2枚。
  • 俺は前回、Getしたので今回は自重w


懇親会

  • 一応、顔を出した。
  • 一部の人は自分のことを「ラーメンの人」ということで覚えていたらしいw
    • たぶん最初の勉強会LTでラーメンデータベースのユーザ間グラフの可視化の話をしたから。