データ研磨
データ研磨は、データを直接解析するのではなく、まず見つけたものを明確化しようという方法です。見つけたいものがはっきりしていれば、見つけるのも簡単だろう、ということです。図polishedを見てください。点が散らばったデータからまとまりを見つけるのは大変ですが、グループごとにほとんど同じ位置に密集していれば、どこまでがグループなのかをはっきりわかります。facebookやtwitter、LINEなどの友達ネットワークで、同じグループに属する人が全部リンクされていれば、コミュニティを見つけるのは簡単です。時系列データが、いくつかの線や波線でできれいれば、どこで変化が起こったかすぐにわかります。このように、見たいものがきれいな形でデータの中に存在すれば、データ解析は非常に簡単になります。しかし、現実のデータはそうではありません。グループ外の人と友達になりますし、グループの中でも友達になってない人たちはたくさんいます。
我々は、今までいろいろなデータマイニング手法がありましたが、いろいろうまくいっていないのは、このデータの中から見つけ出したいものが、ぼけた状態になっていて、見つけにくいことが、そもそもの原因、そもそもの難しさだろうと考えました。写真で言えば、ピンぼけの写真を見て、そこに何が写っているのか、判別しようとしているのと同じであろう、ということです。ピンぼけであれば、じっくり見ても、コンピュータに判断させても、何が写っているか、理解することはとても難しいでしょう。しかし、いったん、ピンぼけを直してしまえば、とても簡単にできるようになります。写真のピンぼけは、最新の技術を使えば、コンピュータである程度修正できます。それと同じように、データの中にあるぼけているもの、それもピントを合わせて明確にしてあげよう、そうすればいろいろなものが見つけやすくなるに違いない、と考えました。
上記のグループを見つける問題であれば、例えばはっきりした状態というのは、同じグループに属する人はリンクで結ばれていて、そうでない人は結ばれていない、という条件が確実にどこでも成り立っている状態です。我々の開発したデータ研磨では、与えられたデータのネットワークがこうなるようにデータを改変します。正確には、そうなるように努力します。データ中では、どの人とどの人が同じグループに属しているか、根拠となるものは何もありません。ですが、ある程度大きなグループに属している二人であれば、たとえ二人が友達申請をしていなくても、共通の友達はたくさんいるでしょう。そう考えると、二人の「共通の友達」の数が大きければ、同じグループに所属している可能性が高いし、そうでなければ、可能性は低いと思われます。このように、「データはそもそもこうなっているはずだ」という、確からしい根拠に基づいて、見たいものが明確になるようにデータを改変していくのがデータ研磨です。
このようにネットワークを改変すると、「すべての人がお互いにリンクされている人の集まり」がグループに対応します。そういった人の集まりを見つけることは、実はさほど難しくありません。たとえ1000万人が所属するような大きなネットワークでも、グループの数が天文学的に大きくなければ、ほんの短時間で計算は終了します。普通は、みなさんそれほど多くのグループに属することはないので、グループの数は、ネットワーク内の人の数よりはずっと小さく、計算時間が長くなることはありません。あと気になるのは、果たしてデータを壊してしまっていいのだろうか、という点でしょう。でも、安心してください、データはコピーをとって、保存しておけばいいです。改変するデータは、我々が見たいもの、グループなどを明確にするために一時的に使うものなので、中身を変えてしまっても問題ありませんし、変えたことによってむしろ見えやすくなります。スマートフォンなどでは、顔や背景の明るさを自動的に調整して写真を自動的に「見やすく」しています。これによって、カメラが観察した画像データとは異なるものを写真として見せているのですが、そもそもカメラが捉える光と人間の目が感じる光の強さは異なっているということもあり、むしろ変化させたほうがきれいな写真になっています。データについても、見たいものがあるときは、それに沿ってデータを改変したほうがいいだろう、というのが我々のスタンスです。
実際のデータ研磨の処理では、共通の友達の数がある一定数以上かどうか、あるいは友達の集合が似ているかどうかで、リンクをはるか消すか、すべてのペアについてチェックし、ネットワークを作り替える作業を何回か繰り返します。これによってより精度が高く、まとまりが良くなります。すべてのペアについて計算が必要となると、1000万人がいるネットワークだと、素直にすべてのペアをチェックすると、1000万×1000万で100兆回の比較が必要で、これは大変な時間がかかります。しかしよくよく考えると、Aさんと共通の友達を持つ人は、Aさんの友達の友達だけなので、平均的にそれぞれの人が10人くらいと友達になっていると思えば、友達の友達は100人程度。友達の友達とだけ比較するようにすれば、1000万×1000万が、1000万×100に、10万倍計算が速くなります。また、もう少し計算アルゴリズムの「テクニック」を使ってあげると、さらに10倍から100倍くらい速くなりますので、巨大なネットワークでもそれほど恐れることはありません。
気になるデータ研磨の精度ですが、検証するのは意外と難しいです。というのはネットワークの中で「これがグループ」とわかっているものは少ないですし、そもそもグループどこが境目なんだろう、と決めるのは難しいです。友人グループは、なんとなく存在していると思いますが、大人数のグループになれば、どこまでがグループだか区別するのは難しいですし、学校のクラスみたいに明確に正解があるものはめずらしいでしょう。そこで、我々は正解があるネットワークデータを、人工的に乱数を使って作り、それで精度を検証してみました。おおきなカラのネットワークを作り、そこに20人のグループをたくさんランダムにはめ込み、グループのメンバー間には全部リンクを張ります。これが完璧なネットワークです。これに余計なリンクをランダムに張り、あるいはランダムに消して、乱雑な、リアリティのあるネットワークを作ります。このノイズのリンクが40%程度ある状態でも、データ研磨はほぼすべての正解グループを見つけ出すことができます。一方、既存の手法を使った場合は、せいぜい7割程度、それも正解をきっちり見つけるのではなく、7割くらいのメンバーが入ったグループを見つける、といったところまででした。ピンぼけを直す、というデータ研磨のコンセプトは、データ解析の精度を飛躍的に高められることがわかりました。
データ研磨の、ピンぼけを直す、というコンセプトは、他の問題を解く際にも使えます。パターンマイニングという、データの中にたくさん表れるパターン、例えば買い物データから良く一緒に買われる商品の組合せを見つける問題にも適用できます。ここでも、通常は何億個ものパターンを見つけ出す必要があるところを、正解データを高い精度で見つけ出すことができることが、上記のような人工的に作成したデータ上の検証でわかっています。また、バイクラスタリングという、2種類のものを同時にグループ分けする問題でも、高い精度が出ることが検証できました。本の購入履歴のデータから、同じような本を買う人たちと、その人たちによって買われる本をいっぺんに見つけ出し、例えば、「ミステリー好きの人」「ミステリー好きの人たちが買う本」を同時にグルーピングするものです。この他にも、ネットワーク上の広がりや流れといったものを見つけたり、地図上に分布するものをグループ分けしたり、音波などの波形データを特性の違う区間に区切ったりと、いろいろなものに使えるはずです。今後はこれらに対する、精度の高い良い方法を開発していく予定です。