読者です 読者をやめる 読者になる 読者になる

kondoumh のブログ

- とあるソフトウェアエンジニアのめったに更新されないブログ -

マイニングの予測モデルをビジュアル化

通勤途中にあるコーヒーショップではじめて無線LANホットスポットに接続でき、コーヒーを飲みながら快適にモバイルができました。ゆったりとメールチェックやWebのニュースを読んでから出勤できて、落ち着いた感じで仕事に入れました。


現在データマイニングのプロジェクトに参画しているのですが、解析ツールが見つけ出すルールを可視化するツールを作りたいと考えていて、少し取り組んでみました。ルールを抽出するアルゴリズムはいろいろあってAprioriアルゴリズムなどが有名です。マーケティングで併買ルールなどを探索するときなどに使われます。ルールは、「前提条件」、「結果」、「サポート」、「確信度」のような項目からなります。

 前提条件:ワインを購入 → 結果:チーズを購入 サポート:12% 確信度:40%

といったぐあいです。この例ではワインを購入する人が全体の12%いて、そのうち40%がチーズを買っているというルールを表現しています。サポートはルールの母数となる集団の規模、確信度はルールの成立する確率を表しており、サポートがある程度あって確信度がそれなりに高いと有用なルールということになります。
解析ツールからは、こうしたルールが出力されるのですが、リスト形式になっているため、ルールが沢山ある場合、重要なルールを探したりルール同士の関係を理解するのが困難になります。前提と結果を○、ルールを○と○をつなぐ矢印で表現し、サポートを○の直径、ルールの確信度を矢印の太さ(濃さ)で表す可視化システムを考えました。これで上記の問題はかなり解消するのではと思います。
可視化のエンジンにはiEditを使います。解析ツールからはルールをタブ区切りテキスト形式とPMMLというXML形式で出力可能です。今回は、タブ区切りテキスト形式のファイルからルールを取り出しiEditのノードとリンクにマッピングiEdit用のXML形式のファイルを出力するコマンドラインツールを書きました。出来上がったファイルをiEditにドロップすると初期状態ではノードがランダム配置されているので、自動レイアウトで表示すると見やすく配置してくれます。

下記のようなルールがあったとして、

結果 前提条件 サポート(%) 確信度(%)
チーズ ワイン 12.0 40.0
ワイン チーズ 25.0 7.0
ワイン 12.0 24.0
35.0 38.0
スパイス 50.0 9.0
ワイン 50.0 12.0
50.0 40.0

ルールの描画例は図のようになります。

結果のみに現れるノードのサポートは突き刺さっている前提条件のサポートと確信度から擬似的に計算しています(重複ケースを考慮していない)。

前提でもあり結果でもあるようなケースでは、矢印が重ならないように手で配置しなおす必要があります。前提条件や結果の文字列は、label要素とtext要素の両方に出力しておけば、小さすぎるノード上でもツールチップで文字列を表示してくれます。芋づる機能を使えば結果に紐付く前提条件をずるずるひっぱれます。

使ってみて、わりとそれっぽく表示されているのでひとまずよしとしました。重要でないルール(サポートや確信度が非常に小さいもの)をフィルタする機能があればよいのですが、iEditは可視化専用ツールではないので、元データにフィルタをかけることになります。また、前提条件が複数ある場合は現在はひとつのノードとして表示しますが、ノードのグループとして表現したいところです。

前述のPMMLですが、Predictive Model Markup Language(予測モデルマークアップ言語) でマイニングツール間のデータ連携に用いることができるそうです。今回はテキストファイル形式にしましたが、 PMMLを解読できるツールに仕立てれば、汎用的なルール可視化システムを作ることもできそうです。