September 26, 2007
Weka を起動する(アソシエーション分析①)
今回のアソシエーション分析は、今更ながらであるが、データマイニングでは最も有名 な分析かもしれない。
「金曜日には、ビールとおむつが良く売れる」
といえば、どこかで聞いたことがあるかもしれない。
アソシエーション分析はマーケットバスケット分析とも呼ばれ、「商品Zを購入する人 は商品Y も購入する傾向がある」というように2つ以上のアイテムの関連性に関す るルールを探るものである。
従って、ルールの中には当然のルールもあり、ビールとおつまみ、歯ブラシと歯磨き 粉などはセットになることが多い。
さて、本ブログは「習うより慣れろ」である。早速、データ解析を行う。
まず使用するデータは以下のデータで、あるプロジェクトの概要である。参加企業数、
予算、利益などが記載されている。
分析の目的はプロジェクトでのルールを発見することで、「利益の高いのは・・・」と利 益を目的変数に設定し、説明因子を引き出すのではない。さらに、wekaでは、表 のように行と列が整っていることが条件で、レシートなどの顧客がいくつの品目を購 入したかが離散しているのには適さない(この方法ついては後日記載する予定)。
さて、分析に入るが、weka を立ち上げ、第一に行なうのは、「分析の前に、変数の値 を名義尺度に変換する」必要がある。これは、数字ではなく、例えば、身長であれば、
高い、中程度、低い(3 つに区分:"bin"は"3"、高い、低いであれば"bin"は"2":"bin"
は後述)に区分することである。
具体的には:
"Choose"をクリック、filters:unsupervised:attribute:Discretize となる。
次に図の"4"(文字の部分)をクリックすると次の画面が現れる。
"bins":先ほどの身長ような数値をいくつのグループ(高い、中程度、低いなら"3")に 分けるかを指定し、通常は 2〜4 を指定する。
"useEqualFrequency":通常は"True"を指定する。
ままでよい。
"OK"をクリック後、先ほどの画面の"5"で"No class"に指定し、"6"の"Apply"をクリッ クする。これで、分析前のデータ処理が終了した。
次に、"WekaExplorer"画面の"Associate"タブをクリックする。さらに、図の赤の四角 の部分をクリックすると、別の画面が立ち上がる。
"numRules"は抽出する最大ルール数、"minMetric"は最小信頼度(metricType に Confidence を選択している場合)。数値を小さくすると、抽出されるルールの候補が 増加する。"Start"をクリックすると分析が始まり、時にはルールが抽出されない場合 があるが、このような時は
この数値(minMetric)を小さくしたり、"lower...support"の数値を設定したりして、ルー ルを抽出する。
画面には以下のようにアウトプットされる。
* * * * * * Apriori
=======
Minimum support: 0.1
Minimum metric <confidence>: 0.8 Number of cycles performed: 18
Generated sets of large itemsets:
Size of set of large itemsets L(1): 25
Size of set of large itemsets L(2): 151
Size of set of large itemsets L(3): 21
Best rules found:
1. 予算='(6006.5-inf)' 企業数='(6.5-inf)' 8 ==> 開発期間='(15-25.5]' 7 conf:(0.88) 2. 企業数='(6.5-inf)' 開発期間='(15-25.5]' 8 ==> 予算='(6006.5-inf)' 7 conf:(0.88) 3. 開発期間='(15-25.5]' 利益='(19993.5-31697.5]' 7 ==> 開発種別=C 6 conf:(0.86) 4. 関連国数='(-inf-1.5]' 利益='(19993.5-31697.5]' 7 ==> 企業数='(-inf-3.5]' 6 conf:(0.86)
5. 要員='(18-inf)' 利益='(19993.5-31697.5]' 7 ==> 企業数='(-inf-3.5]' 6 conf:(0.86)
* * * * * *
典型的には"2"のルール:「企業数が多く、開発期間が中程度であれば、予算が高 い」というルールが抽出されている。
以上のように、weka では簡単に行なえるが、この分析で身につけて置かなければな らないのは、"support"と"confidence"の概念である。この概念が不明である と、当たり前のルールしか抽出できない状態になってしまい、折角のデータ収集がム ダに終わってしまう可能性がある。
これは次回に補足する。
(「Weka を起動する(アソシエーション分析①)」了)
次回は「Weka を起動する(アソシエーション分析②補足)」です。
October 20, 2007
Weka を起動する(アソシエーション分析②)
今回は、supportとconfidence の概念についてである。
(投稿に間隔があいたにも関わらず、訪問してくださったヘビーユーザーの方に感 謝!)
さて、supportとは支持度、confidenceは信頼度、確信度とされることが多い。
support値とは「データベース全体で、その組み合わせ(事象)が発生する割合」で
あり、confidence 値とは、「相関の強さを示し、例えば、A⇒BにおいてはAが発 生した場合のBが発生する確率」である。
例えば、下の図において:
A:おむつを購入する B:ビールを購入する
として全体を100人とする。
それぞれ、Aでは50人、Bでは20人がこの行動をしている(購入している)ことが わかる。
ここで、support(A)とはAの行動を起こす支持度、いわゆるAの行動をする確率で、
それをP(A)と表すと、全体が100人なので、P(A)=50/100=0.5となる。
同様に、P(B)=20/100=0.2 である。
さらに、Aの行動を起こし、かつ、Bの行動を同時に起こすのは(A⇒B)、図から10 人いるので、これをP(A⇒B)とすれば、P(A⇒B)=10/100=0.1 となる。
このときのconfidence(A⇒B)は、p(B|A)と表し、p(B|A)=10/50=0.2 である。
(Aの行動を起こした中で、Bの行動を起こすのは?と考えるとと分りやすい)
これらの結果について、どのルールを中心に考えるのかは、店舗運営者が欲するデ ータである。
そこで、分析で導出したルールの精度についての指標については、Lift値という値が ある。
この値は、信頼度を期待信頼度で割った値で、上の例では:
Lift値(A⇒B) = confidence(A⇒B) / confidence(⇒B)= 0.2/0.2=1.0 Lift値(B⇒A) = confidence(B⇒A) / confidence(⇒A)= 0.5/0.5=1.0 となる。
この値は1.0以上であることが目安とされている(が、どの値がよいかというのは分 析により様々である)。種々の導出されたルールを比較する際に役に立つ。
実際の分析では、supportとconfidence を指定して分析を行うことが多い。例えば、
support20%、confidende70%など・・・。この設定は分析対象により異なるので、
何回もtryするしかない。
とは言っても正解がないので、どこまでルールを導出するかは決まっていない。ビジ ネスに直結するルールなら「面白いルール」より「金になるルール」の方が望ましいこ とは言うまでもない。
さて、Wekaでは、店舗のレシートの分析は困難で、以前記載した例のようなデータ のルール導出しかおこなえないが、apriori program(ブログで記載のリンクが切れ ていますので、ここを参照してください↓↓
http://ibisforest.org/index.php?Apriori)では、いわゆる「バスケット分析」が可 能で、ルールの導出やプログラムの使用法が詳細に記載されている。Windowsで はコマンドプロンプトを利用して使用することが出来る。
非常に参考になるので、ご参照ください。
次は補足(ROC曲線とLift chart、研究開発部門での使用)です。