■「~を買っている人は、~も買っている」
「Aを買っている人は、Bも買っている」という分析は、一般には、バスケット分析とか、協調フィルタリングとかいう分野になります。
しかし、こういう複雑な分析が必要なのは、
AとBの商品が決まっていない(バスケット分析)
それを買った人の類似性を評価している(協調フィルタリング)
から、話を難しくしているだけで、
Aという商品が決まって、「Aを買った人は、どの商品を買っていますか?」というだけなら、SQLでできます。
たとえば、以下のような受注表があったとします。顧客IDと商品Noが入っている(実際には受注表に顧客ID,商品Noは受注明細に入っていることが多いが、ここでは、それをJoinしたViewで考えているものとします)
この場合、
select distinct shohinNo from jyutyu where shohinNo <> 1 and kokyakuID in (select kokyakuID from jyutyu where shohinNo = 1 )
(実際には<>は、半角)
とすれば、1番を買った人は、他のどの商品を買っているかを出せます。
さっきの、「Aを買っている人は」のAが、上記のSQLの1にあたります。
なので、他の商品にしたい場合は、1のところを直すことになります(1は2箇所)。
一応SQLを説明すると、「Aを買っている人は」の部分が、サブクエリーの
(select kokyakuID from jyutyu where shohinNo = 1 )
であり、ここで顧客IDを出すことで、その人たちが何を買っているかを絞り込める。
ただ、これだと、違う顧客が同じ商品を買ってしまうと、商品IDが何回も出てくるので
distinctしてる。また、shohinNo <> 1でA自身を除いている。
今回は、商品Aそのものでやったけど、カテゴリーとか、もうすこし、大きな区分でやってもいい。
ただし、購入者の類似性は見ていない。
だから、「風邪ぐすりを買った人は」とかやると、胃薬、毛はえ薬、ばんそこう・・・いろいろ出てきてしまう(風邪薬は誰でも買うから)。でも、そのほうがいいケースもある(どういう人なのか、わからない場合、とりあえず、可能性を全部出したほうがいい)
■「~は高評価」
これをまじめにやると、テキストマイニングとかになります。
でも、ものすごく単純にやるなら、こんなかんじで出来るかも・・・
・CaboCha/南瓜を使って、対象となるテキストを解析します
すみません、今、南瓜が動かないので(なんでなろ~)
http://code.google.com/p/cabocha/
にあるサンプルで説明します。(以下太字はサンプル)
% cabocha -f1
太郎は花子が読んでいる本を次郎に渡した
* 0 5D 0/1 1.062087
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/1 1.821210
花子 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
* 2 3D 0/2 0.000000
読ん 動詞,自立,*,*,五段・マ行,連用タ接続,読む,ヨン,ヨン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
* 3 5D 0/1 0.000000
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 4 5D 1/2 0.000000
次 名詞,一般,*,*,*,*,次,ツギ,ツギ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
* 5 -1D 0/1 0.000000
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS
・Dの部分をもとに、係り受け構造を出します。
★「太郎」「は」→「渡し」「た」
★「花子」「が」→「読ん」「で」「いる」→★「本」「を」→「渡した」
★「次郎」「に」→「渡し」「た」
・この中で、名詞(★がついているもの)について、
低評価の語にかかっているものをマイナス
高評価の語にかかっているものをプラス
とします。高評価、低評価語の辞書はあらかじめ作っておきます。
http://thesaurus.weblio.jp/
などを使って、「好き」とか「良い」とかいれて、高評価の類義語を調べていって、辞書を作るとか・・
・この名詞と評価を保存しておく
なかんじで、たぶん出来ると思う。やってないので、確証はない。
「Aを買っている人は、Bも買っている」という分析は、一般には、バスケット分析とか、協調フィルタリングとかいう分野になります。
しかし、こういう複雑な分析が必要なのは、
AとBの商品が決まっていない(バスケット分析)
それを買った人の類似性を評価している(協調フィルタリング)
から、話を難しくしているだけで、
Aという商品が決まって、「Aを買った人は、どの商品を買っていますか?」というだけなら、SQLでできます。
たとえば、以下のような受注表があったとします。顧客IDと商品Noが入っている(実際には受注表に顧客ID,商品Noは受注明細に入っていることが多いが、ここでは、それをJoinしたViewで考えているものとします)
この場合、
select distinct shohinNo from jyutyu where shohinNo <> 1 and kokyakuID in (select kokyakuID from jyutyu where shohinNo = 1 )
(実際には<>は、半角)
とすれば、1番を買った人は、他のどの商品を買っているかを出せます。
さっきの、「Aを買っている人は」のAが、上記のSQLの1にあたります。
なので、他の商品にしたい場合は、1のところを直すことになります(1は2箇所)。
一応SQLを説明すると、「Aを買っている人は」の部分が、サブクエリーの
(select kokyakuID from jyutyu where shohinNo = 1 )
であり、ここで顧客IDを出すことで、その人たちが何を買っているかを絞り込める。
ただ、これだと、違う顧客が同じ商品を買ってしまうと、商品IDが何回も出てくるので
distinctしてる。また、shohinNo <> 1でA自身を除いている。
今回は、商品Aそのものでやったけど、カテゴリーとか、もうすこし、大きな区分でやってもいい。
ただし、購入者の類似性は見ていない。
だから、「風邪ぐすりを買った人は」とかやると、胃薬、毛はえ薬、ばんそこう・・・いろいろ出てきてしまう(風邪薬は誰でも買うから)。でも、そのほうがいいケースもある(どういう人なのか、わからない場合、とりあえず、可能性を全部出したほうがいい)
■「~は高評価」
これをまじめにやると、テキストマイニングとかになります。
でも、ものすごく単純にやるなら、こんなかんじで出来るかも・・・
・CaboCha/南瓜を使って、対象となるテキストを解析します
すみません、今、南瓜が動かないので(なんでなろ~)
http://code.google.com/p/cabocha/
にあるサンプルで説明します。(以下太字はサンプル)
% cabocha -f1
太郎は花子が読んでいる本を次郎に渡した
* 0 5D 0/1 1.062087
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/1 1.821210
花子 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
* 2 3D 0/2 0.000000
読ん 動詞,自立,*,*,五段・マ行,連用タ接続,読む,ヨン,ヨン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
* 3 5D 0/1 0.000000
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 4 5D 1/2 0.000000
次 名詞,一般,*,*,*,*,次,ツギ,ツギ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
* 5 -1D 0/1 0.000000
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS
・Dの部分をもとに、係り受け構造を出します。
★「太郎」「は」→「渡し」「た」
★「花子」「が」→「読ん」「で」「いる」→★「本」「を」→「渡した」
★「次郎」「に」→「渡し」「た」
・この中で、名詞(★がついているもの)について、
低評価の語にかかっているものをマイナス
高評価の語にかかっているものをプラス
とします。高評価、低評価語の辞書はあらかじめ作っておきます。
http://thesaurus.weblio.jp/
などを使って、「好き」とか「良い」とかいれて、高評価の類義語を調べていって、辞書を作るとか・・
・この名詞と評価を保存しておく
なかんじで、たぶん出来ると思う。やってないので、確証はない。