関係データの定義まとめ

この記事は[古川研究室 Advent_calendar](https://qiita.com/advent-calendar/2019/flab) 2日目の記事です。
本記事は古川研究室の学生が学習の一環として書いたものです。内容が曖昧であったり表現が多少異なったりする場合があります。

## はじめに
最近よく聞く単語として、「関係データ」があります。アドベントカレンダーというよき機会を活用し、定義を中心に脳内に概要をまとめておこうという記事になります。

内容としては、MLPシリーズの「関係データ学習」の一部をつまみ読みし、自分なりにまとめる感じになります。概要のため、主に前述の書籍のChapter 1 です。

## 関係データの定義

機械学習において「関係データ」とは

> 複数のデータの間に観測,定義される「関係」に着目したデータのこと [1]

よく用いられる具体例として、書には SNS (Twitterなど) のユーザー情報の例が挙げられています。

SNS の世界ではユーザー1人1人がオブジェクトであり、ユーザーは他のユーザーを「フォロー」することが出来ます。これがユーザー間の「関係」になります。

SNS はその名のとおりユーザーどうしのつながりを提供するサービスであり、次のように言えます。

> SNS の本質的な情報は、「どのユーザとどのユーザがつながっているか」というユーザ間の関係にある[1]

ユーザーはほかにも自分の「投稿」であるとか、「プロフィール」のようなデータを持っていますが、ここでは”誰が誰をフォローしているか”という一点にのみ注目しています。このとき、これをユーザー間の「関係データ」といいます。

ということで重要なところを繰り返すと、

- 関係データとは複数のデータ間に見られる関係に注目したデータ
- 本質的な情報がオブジェクト間の関係にある

です。

## 関係データの種類
定義が出来たので、もう少し詳しく分類を見ていきましょう。

### 有向関係データと無向関係データ

関係データはオブジェクト間の関係に「方向性」が有るか無いかで区別があります。

先ほど定義のところでSNSのユーザー情報の例を挙げました。Aさん、Bさんの2人が居ると考えてその関係を図で表してみると次のようになります。この図で考えてみましょう。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430554/07bb9b11-76aa-0dc7-cfdb-c4f30b874c65.png)

SNSには一方が一方のみをフォローしている状況が存在し、それは図の①と②のようにAさんを基点にした場合とBさんを基点にした場合に分けることが出来ます。

- ①AさんがBさんをフォローした
- ②BさんがAさんをフォローした

これが「方向性」であり、これは”有向関係データ”となります。

もし方向性が無いのであれば、2者の関係は次の図のようになり、

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430554/341ce851-19a9-0705-2dd4-9f01199734c1.png)

- ①つながっている
- ②つながっていない

の2択になって、”無向関係データ”になります。SNS の例だと、”どちらかがどちらかをフォローしているか否か”にのみ注目した関係データとして定義すれば無向関係データになります。

### 単一ドメインと複数ドメイン

今度はオブジェクトのドメイン(種類)に注目した分類です。

SNS の例ではすべてのオブジェクトがそのユーザーであり、言ってみれば同種のものどうしの関係データでした。これを”単一ドメイン”の関係データと呼びます。

対して、これまたよく用いられるものとして通販サイトの購買データを例として挙げてみると、そのオブジェクトは「ユーザー」と「商品」の2種あります。これを”複数ドメイン”の関係データと呼びます。

### 対称関係データと非対称関係データ

- 対称関係データ：行列で表した際に必ず対称行列になるもので、単一ドメインかつ無向関係データが該当
- 非対称関係データ：対称行列になる保証がないもの(対称行列になるのは特殊な場合)で、複数ドメインあるいは有向関係データが該当

これは図を描いてみるとわかりやすいです。

- 対称関係データは、2つ前の有向関係データ・無向関係データの際に考えたSNS の特殊な状況「どちらかがフォローしていればその2人はつながっているものとする」を考えると(いい例が浮かびませんでした)対称行列になります。フォローしている状態を”1”、していない状態を”0”。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430554/6e794aef-3755-cacd-5ca0-d2d44cef673e.png)

- 有向関係のある非対称関係データでは、SNS の通常の状況を考えると非対称行列です。フォローしている状態を”1”、していない状態を”0”。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430554/8d31070c-f1cf-0efa-b48b-0af9944bc69a.png)

- 複数ドメインの非対称関係データでは、ユーザーと商品の購買データを考えると非対称行列です。この場合は有向関係でもあります。ユーザーが買っている商品に対して”1”、買っていない商品に対して”0”

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430554/22e85a31-364e-394d-9d69-ff0345d8245e.png)

### 2項関係と多項関係

ここまで

1. SNS のユーザー情報
2. 購買データ

の２つの例を挙げました。1. ではユーザーとユーザー、2. ではユーザーと商品の関係データであり、どちらも２つのオブジェクト間の関係データでしたが、３つ以上のオブジェクト間の関係を考えることもできます。

参考文献に挙げられていますが、実用上でもよくある例は「時間」です。SNS の例にこれを加えれば、

①あるユーザーがある時刻に特定のユーザーをフォロー
②一定期間フォローを継続
③フォローを解除

といった流れを表現できるようになります。２つのオブジェクト間の関係を”２項関係”と呼び、３つでは”３項関係”、より一般化して”多項関係”と呼びます。

## おわりに
いかがでしたでしょうか。もう少し具体例を増やせたら良かったとは思いますが、参考になれば幸いです。

最後になってしまいましたがひとつだけ。”単一ドメイン””複数ドメイン”などの呼び方の部分が該当しますが、参考文献[1]内での呼称であり、他所では異なる可能性がありますのでご注意ください。

## 参考文献
[1] MLP 機械学習プロフェッショナルシリーズ 関係データ学習 著：石黒勝彦,林浩平 講談社 2016/12/6
[2] 関係データ解析とInfinite Relational Model 
    https://qiita.com/takuti/items/8faf0e686cfbe68c2dfa