7.4 相関ルール
ore.odmAssocRules関数は、Aprioriアルゴリズムを実装することで、高頻度アイテム・セットを検索して相関モデルを生成します。
               
この関数は、マーケット・バスケット分析などの大量のトランザクション・データにおいて、アイテムの同時発生を検出します。相関ルールは、トランザクション・レコードで一連のアイテムが出現すれば、もう1つの一連のアイテムが存在するというデータのパターンを特定します。ルールの形成に使用されるアイテムのグループは、発生(ルールの支持度)する頻度および後件が前件(ルールの信頼度)に従う回数に応じて、最小しきい値を渡す必要があります。相関モデルは、ユーザー指定のしきい値よりも大きい支持度および信頼度を備えるすべてのルールを生成します。Aprioriアルゴリズムは効率的で、トランザクション数、アイテム数および生成されるアイテム・セットおよびルールの数が有効に測定されます。
formulaの指定には~ termsという形式があり、ここでtermsは分析に含まれる一連の列名です。複数の列名は列名の間に+を使用することで指定されます。~ .は、dataのすべての列をモデル構築に使用する場合に使用します。列を除外するには、除外する各列名の前に-を使用します。関数は変換を確認するためにtermsの項目に適用できます。
                  
ore.odmAssocRules関数は、次の形式のデータを受け入れます。
                  
- 
                        トランザクション・データ 
- 
                        アイテムIDおよびアイテム値を使用した複数レコードのケース・データ 
- 
                        リレーショナル・データ 
データの形式の指定の例および関数の引数の詳細は、help(ore.odmAssocRules)をコールしてください。 
                  
関数rulesは、クラスore.rules (一連の相関ルールを指定します)のオブジェクトを返します。ore.pullを使用して、ore.rulesオブジェクトをローカルのRセッションのメモリーにプルできます。ローカルのインメモリー・オブジェクトは、arulesパッケージで定義されているクラスrulesのものです。help(ore.rules)を参照してください。
                  
関数itemsetsは、クラスore.itemsets (一連のアイテムセットを指定します)のオブジェクトを返します。ore.pullを使用して、ore.itemsetsオブジェクトをローカルのRセッションのメモリーにプルできます。ローカルのインメモリー・オブジェクトは、arulesパッケージで定義されているクラスitemsetsのものです。help(ore.itemsets)を参照してください。
                  
相関ルール・モデルの設定
次の表に、相関ルール・モデルに適用される設定を示します。
表7-4 相関ルール・モデルの設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| ASSO_ABS_ERROR | 
 | 相関ルールのサンプリングの絶対誤差を指定します。 
 デフォルト値は | 
| 
 | 
 | 集計する列を指定します。これは、集計する列の名前を含む文字列のカンマ区切りリストです。リスト内の列の数は10以下にする必要があります。 
 項目値は必須ではありません。 デフォルト値は 項目ごとに、集計する複数の列を指定できます。ただし、これを行うと、追加のデータをバッファするためにより多くのメモリーが必要になるとともに、入力データセットが大きくなり、操作が増えることからパフォーマンスにも影響が生じます。 | 
| 
 | 
 | 前件の包含ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちの少なくとも1つの文字列が、レポートされる各相関ルールの前件部分に出現する必要があります。 デフォルト値は | 
| 
 | 
 | 前件の除外ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちのいずれの文字列も、レポートされる各相関ルールの前件部分に出現できません。 デフォルト値は | 
| 
 | 
 | 相関ルールのサンプルに対する信頼水準を指定します。 
 | 
| 
 | 
 | 後件の包含ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちの少なくとも1つの文字列が、レポートされる各相関ルールの後件部分に出現する必要があります。 デフォルト値は | 
| 
 | 
 | 後件の除外ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちのいずれの文字列も、レポートされる相関ルールの後件部分に出現できません。 除外ルールを使用すると、格納する必要があるデータを削減できますが、異なる包含ルールまたは除外ルールを実行するための追加のモデルを構築する必要が生じることがあります。 デフォルト値は | 
| ASSO_EX_RULES  | 
 | 各相関ルールに適用される除外ルールを設定します。これは、相関ルールに出現できない文字列のカンマ区切りリストです。リスト内の項目をルールに含めることはできません。 デフォルト値は | 
| 
 | 
 | 各相関ルールに適用される包含ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちの少なくとも1つの文字列が、レポートされる各相関ルールに前件または後件として出現する必要があります デフォルト値は | 
| ASSO_MAX_RULE_LENGTH | TO_CHAR( 2<= numeric_expr <=20) | 相関ルールの最大ルール長。 デフォルト値は | 
| ASSO_MIN_CONFIDENCE | TO_CHAR( 0<= numeric_expr <=1) | 相関ルールの最小信頼度。 デフォルト値は | 
| ASSO_MIN_REV_CONFIDENCE | TO_CHAR( 0<= numeric_expr <=1) | 各ルールで満たす必要がある最小逆確信度を設定します。 ルールの逆確信度は、ルールが発生するトランザクションの数を後件が発生するトランザクションの数で割ったものとして定義されています。 値は0から1の実数になります。 デフォルト値は | 
| 
 | TO_CHAR( 0<= numeric_expr <=1) | 相関ルールの最小支持度。 デフォルト値は | 
| 
 | TO_CHAR( 0<= numeric_expr <=1) | 各ルールで満たす必要がある絶対最小支持度。値は整数である必要があります。 デフォルト値は | 
| 
 | ||
| 
 | column_name | トランザクションの項目を含む列の名前。この設定を指定すると、アルゴリズムは、次の2つの列で構成されるネイティブ・トランザクション形式でデータが表されると想定します。 
 | 
| ODMS_ITEM_VALUE_COLUMN_ NAME | column_name | トランザクションの各項目に関連付けられている値を含む列の名前。この設定は、データがネイティブ・トランザクション形式で表されることを示す 
 
 
 この項目値列では、(リンゴ3個などの)項目数、(マッキントッシュのリンゴなどの)項目タイプなどの情報を指定できます。 | 
例7-3 ore.odmAssocRules関数の使用方法
この例では、トランザクション・データセットに基づいて相関モデルを構築します。パッケージarulesおよびarulesVizは、生成されるルールおよびアイテムセットをクライアントのRセッションのメモリーにプルしてビジュアル化するために必要です。ルールのグラフは、例の後の図に示されています。
                  
# Load the arules and arulesViz packages.
library(arules)
library(arulesViz)
# Create some transactional data.
id <- c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
item <- c("b", "d", "e", "a", "b", "c", "e", "b", "c", "d", "e")
# Push the data to the database as an ore.frame object.
transdata_of <- ore.push(data.frame(ID = id, ITEM = item))
# Build a model with specifications.
ar.mod1 <- ore.odmAssocRules(~., transdata_of, case.id.column = "ID",
             item.id.column = "ITEM", min.support = 0.6, min.confidence = 0.6,
             max.rule.length = 3)
# Generate itemsets and rules of the model.
itemsets <- itemsets(ar.mod1)
rules <- rules(ar.mod1)
# Convert the rules to the rules object in arules package.
rules.arules <- ore.pull(rules)
inspect(rules.arules)          
# Convert itemsets to the itemsets object in arules package.
itemsets.arules <- ore.pull(itemsets)
inspect(itemsets.arules)
# Plot the rules graph.
plot(rules.arules, method = "graph", interactive = TRUE)この例のリスト
R> # Load the arules and arulesViz packages.
R> library(arules)
R> library(arulesViz)
R> # Create some transactional data.
R> id <- c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
R> item <- c("b", "d", "e", "a", "b", "c", "e", "b", "c", "d", "e")
R> # Push the data to the database as an ore.frame object.
R> transdata_of <- ore.push(data.frame(ID = id, ITEM = item))
R> # Build a model with specifications.
R> ar.mod1 <- ore.odmAssocRules(~., transdata_of, case.id.column = "ID",
+             item.id.column = "ITEM", min.support = 0.6, min.confidence = 0.6,
+             max.rule.length = 3)
R> # Generate itemsets and rules of the model.
R> itemsets <- itemsets(ar.mod1)
R> rules <- rules(ar.mod1)
R> # Convert the rules to the rules object in arules package.
R> rules.arules <- ore.pull(rules)
R> inspect(rules.arules)          
   lhs    rhs   support confidence lift
1  {b} => {e} 1.0000000  1.0000000    1
2  {e} => {b} 1.0000000  1.0000000    1
3  {c} => {e} 0.6666667  1.0000000    1
4  {d,                                 
    e} => {b} 0.6666667  1.0000000    1
5  {c,                                 
    e} => {b} 0.6666667  1.0000000    1
6  {b,                                 
    d} => {e} 0.6666667  1.0000000    1
7  {b,                                 
    c} => {e} 0.6666667  1.0000000    1
8  {d} => {b} 0.6666667  1.0000000    1
9  {d} => {e} 0.6666667  1.0000000    1
10 {c} => {b} 0.6666667  1.0000000    1
11 {b} => {d} 0.6666667  0.6666667    1
12 {b} => {c} 0.6666667  0.6666667    1
13 {e} => {d} 0.6666667  0.6666667    1
14 {e} => {c} 0.6666667  0.6666667    1
15 {b,                                 
    e} => {d} 0.6666667  0.6666667    1
16 {b,                                 
    e} => {c} 0.6666667  0.6666667    1
R> # Convert itemsets to the itemsets object in arules package.
R> itemsets.arules <- ore.pull(itemsets)
R> inspect(itemsets.arules)
   items   support
1  {b}   1.0000000
2  {e}   1.0000000
3  {b,            
    e}   1.0000000
4  {c}   0.6666667
5  {d}   0.6666667
6  {b,            
    c}   0.6666667
7  {b,            
    d}   0.6666667
8  {c,            
    e}   0.6666667
9  {d,            
    e}   0.6666667
10 {b,            
    c,            
    e}   0.6666667
11 {b,            
    d,            
    e}   0.6666667
R> # Plot the rules graph.
R> plot(rules.arules, method = "graph", interactive = TRUE)