データマイニングについての質問です。購買者が特定できる履歴(会員システムなど)で、ある2人のペアが同じ日に同時に購買している頻度を計算するのにはどうするといいのでしょうか? 一人ひとり調べていくのは、計算量がかかります。計算量を減らすのにはどうするといいのでしょうか? データから連れで購買しているかどうかを調べたいのです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/10 08:25:18
  • 終了:2009/10/17 08:30:03

回答(1件)

id:crenlif No.1

crenlif回答回数56ベストアンサー獲得回数52009/10/12 14:59:22

ポイント60pt

コメントでの質疑を受けまして、以下の方法を提案いたします。

 

(1) 任意の日において購買を行った人の集合データ{A}を作成する

(2) 集合{A}内の購買者対を列挙し、[購買者1, 購買者2, 購買日]を要素とするリスト{B}を作成する。

(3) 購買者1,購買者2をそれぞれキーとし、[同日に購買した回数]を値とする

"ハッシュのハッシュ"{H}を作成する

(4) {H}を元に必要なデータを抽出する

 

購買者数Nが100,000程度ということでしたら

購買者IDを4バイトのデータに格納したとして

最大で(4*10^5)^2=160[GB]のデータが生成されます。

(実際にはデータが疎であると考えられるのでこれより数桁小さいと思われます)

 

実行時間としては、ディスクへデータを書き出す時間が主となり

このデータ量では全体の処理時間はさほど問題にならないかと思います。

 

>少しプログラミングするとできないことなさそうですね。従来のツールそのままでは難しいでしょうか?

 

ご指摘のように、実行時間に関しては無理のない範囲で可能かと思います。

 

なお、「従来のツール」が何を指すか不明瞭なのですが、

データ解析ソフトなどで上記の内容を行うことも可能であると思われます。

 

http://q.hatena.ne.jp/

id:isogaya

ありがとうございます。

2009/10/12 16:30:30
  • id:crenlif
    ご質問の確認をしたいのですが、
    例えば、以下のような方法について
    計算量を削減したいということでしょうか?

    (1) 任意の日において購買を行った人の集合データ{A}を作成する
    (2) 集合{A}内の購買者対を列挙し、[購買者1, 購買者2, 購買日]を要素とするリスト{B}を作成する。
    (3) [購買者1,購買者2]の情報から[同日に購買した回数]を引くためのテーブルDを作成する
    (4) {B}のデータを元に、テーブルDを埋めていく

    なお、テーブルDが疎行列となり、かつデータ量が膨大になる場合は
    代わりに[購買者1,購買者2]のハッシュ値Hをキーとして、[同日に購買した回数]Nを値とする
    ハッシュテーブルを用いる。
  • id:isogaya
    ありがとうございます。はいそうです。
    >代わりに[購買者1,購買者2]のハッシュ値Hをキーとして、[同日に購買した回数]Nを値とする
    ここがポイントですね。Hは、10万掛ける10万-1 ぐらいはありそうです。
    少しプログラミングするとできないことなさそうですね。従来のツールそのままでは難しいでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません