8.8 相関ルール

oml.arクラスは、Aprioriアルゴリズムを実装することで、高頻度項目セットおよび相関ルールを検索します。これらはすべて、相関モデル・オブジェクトの一部です。

Aprioriアルゴリズムは効率的で、トランザクション数、項目数および生成される項目セットとルールの数が有効に測定されます。

oml.arクラスを使用して、マーケット・バスケット分析などで大量のトランザクション・データ内の高頻度項目セットを識別します。相関モデルの結果は、データ内の相関のパターンを識別するルールです。

相関ルールは、トランザクション・レコードで一連のアイテムが出現すれば、もう1つの一連のアイテムが存在するというデータのパターンを特定します。ルールの形成に使用される項目のグループは、発生する頻度(ルールの支持度)および後件が前件に従う回数(ルールの信頼度)に応じて、最小しきい値を渡す必要があります。相関モデルは、ユーザー指定のしきい値よりも大きい支持度および信頼度を備えるすべてのルールを生成します。

Oracle Machine Learningでは、相関モデリングのスコアリング操作はサポートされていません。

oml.arクラスの属性およびメソッドの詳細は、help(oml.ar)を呼び出すか、Oracle Machine Learning for Python APIリファレンスを参照してください。

相関ルール・モデルの設定

次の表は、相関ルール・モデルに適用可能な設定のリストです。

表8-3 相関ルール・モデルの設定

設定名 設定値 説明

ASSO_ABS_ERROR

0<ASSO_ABS_ERRORMAX(ASSO_MIN_SUPPORT, ASSO_MIN_CONFIDENCE)

相関ルールのサンプリングの絶対誤差を指定します。

ASSO_ABS_ERRORの値を小さくするとサンプル・サイズが大きくなり、正確な結果が得られますが、計算時間が長くなります。ASSO_ABS_ERRORには適切な値(デフォルト値など)を設定して、サンプル・サイズが大きくなりすぎないようにしてください。デフォルト値は0.5 * MAX(ASSO_MIN_SUPPORT, ASSO_MIN_CONFIDENCE)です。

ASSO_AGGREGATES

NULL

集計する列を指定します。これは、集計する列の名前を含む文字列のカンマ区切りリストです。リスト内の列の数は10以下である必要があります。

ODMS_ITEM_ID_COLUMN_NAMEで列名を指定した場合、ASSO_AGGREGATESを設定できます。ODMS_ITEM_ID_COLUMN_NAMEから導出されるITEM_IDおよびCASE_IDのような有効な列名がデータ表に含まれている必要があります。

項目値は必須ではありません。

デフォルト値はNULLです。

項目ごとに、集計する複数の列を指定できます。ただし、これを行うと、追加のデータをバッファするためにより多くのメモリーが必要になるとともに、入力データセットが大きくなり、操作が増えることからパフォーマンスにも影響が生じます。

ASSO_ANT_IN_RULES

NULL

前件の包含ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちの少なくとも1つの文字列が、レポートされる各相関ルールの前件部分に出現する必要があります。

デフォルト値はNULLです。

ASSO_ANT_EX_RULES

NULL

前件の除外ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちのいずれの文字列も、レポートされる各相関ルールの前件部分に出現できません。

デフォルト値はNULLです。

ASSO_CONF_LEVEL

0ASSO_CONF_LEVEL1

相関ルールのサンプルに対する信頼水準を指定します。

ASSO_CONF_LEVELの値を大きくすると、サンプル・サイズが大きくなります。0.9から1の間の値が適しています。デフォルト値は0.95です。

ASSO_CONS_IN_RULES

NULL

後件の包含ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちの少なくとも1つの文字列が、レポートされる各相関ルールの後件部分に出現する必要があります。

デフォルト値はNULLです。

ASSO_CONS_EX_RULES

NULL

後件の除外ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちのいずれの文字列も、レポートされる相関ルールの後件部分に出現できません。

除外ルールを使用すると、格納する必要があるデータを削減できますが、異なる包含ルールまたは除外ルールを実行するための追加のモデルを構築する必要が生じることがあります。

デフォルト値はNULLです。

ASSO_EX_RULES

NULL

各相関ルールに適用される除外ルールを設定します。これは、相関ルールに出現できない文字列のカンマ区切りリストです。リスト内の項目をルールに含めることはできません。

デフォルト値はNULLです。

ASSO_IN_RULES

NULL

各相関ルールに適用される包含ルールを設定します。これは、文字列のカンマ区切りリストです。そのうちの少なくとも1つの文字列が、レポートされる各相関ルールに前件または後件として出現する必要があります

デフォルト値はNULLで、フィルタリングが適用されないことを示します。

ASSO_MAX_RULE_LENGTH

TO_CHAR( 2<= numeric_expr <=20)

相関ルールの最大ルール長。

デフォルト値は4です。

ASSO_MIN_CONFIDENCE

TO_CHAR( 0<= numeric_expr <=1)

相関ルールの最小信頼度。

デフォルト値は0.1です。

ASSO_MIN_REV_CONFIDENCE

TO_CHAR( 0<= numeric_expr <=1)

各ルールで満たす必要がある最小逆確信度を設定します。

ルールの逆確信度は、ルールが発生するトランザクションの数を後件が発生するトランザクションの数で割ったものとして定義されています。

値は0から1の実数になります。

デフォルト値は0です。

ASSO_MIN_SUPPORT

TO_CHAR( 0<= numeric_expr <=1)

相関ルールの最小支持度。

デフォルト値は0.1です。

ASSO_MIN_SUPPORT_INT

TO_CHAR( 0<= numeric_expr <=1)

各ルールで満たす必要がある絶対最小支持度。値は整数である必要があります。

デフォルト値は1です。

ASSO_CONS_EX_RULES

   
ODMS_ITEM_ID_COLUMN_NAME column_name

トランザクションの項目を含む列の名前。この設定を指定すると、アルゴリズムは、次の2つの列で構成されるネイティブ・トランザクション形式でデータが表されると想定します。

  • ケースID: 質的または量的のいずれか
  • 項目ID: 質的または量的のいずれか
ODMS_ITEM_VALUE_COLUMN_ NAME column_name

トランザクションの各項目に関連付けられている値を含む列の名前。この設定は、データがネイティブ・トランザクション形式で表されることを示すODMS_ITEM_ID_COLUMN_NAMEの値を指定した場合にのみ使用してください。

ASSO_AGGREGATESも使用する場合は、次の3つの列とAGGREGATES設定で指定した列がビルド・データに含まれている必要があります。

  • ケースID: 質的または量的のいずれか
  • 項目ID: 質的または量的のいずれか(ODMS_ITEM_ID_COLUMN_NAMEによって指定)
  • 項目値: 質的または量的のいずれか(ODMS_ITEM_VALUE_COLUMN_ NAMEによって指定)

ASSO_AGGREGATES、ケースIDおよび項目ID列が存在する場合、項目値列が表示される場合とされない場合があります。

この項目値列では、(リンゴ3個などの)項目数、(マッキントッシュのリンゴなどの)項目タイプなどの情報を指定できます。

例8-8 oml.arクラスの使用方法

この例では、oml.arクラスのメソッドを使用します。

import pandas as pd
from sklearn import datasets 
import oml

# Load the iris data set and create a pandas.DataFrame for it.
iris = datasets.load_iris()
x = pd.DataFrame(iris.data,
                 columns = ['Sepal_Length','Sepal_Width',
                            'Petal_Length','Petal_Width'])
y = pd.DataFrame(list(map(lambda x:
                           {0: 'setosa', 1: 'versicolor',
                            2:'virginica'}[x], iris.target)),
                 columns = ['Species']))

try:
    oml.drop('IRIS')
except: 
    pass

# Create the IRIS database table.
oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')

# Create training data.
train_dat = oml.sync(table = 'IRIS')

# Specify settings.
setting = {'asso_min_support':'0.1', 'asso_min_confidence':'0.1'}

# Create an AR model object.
ar_mod = oml.ar(**setting)

# Fit the model according to the training data and parameter 
# settings.
ar_mod = ar_mod.fit(train_dat)

# Show details of the model.
ar_mod

この例のリスト

>>> import pandas as pd
>>> from sklearn import datasets 
>>> import oml
>>>
>>> # Load the iris data set and create a pandas.DataFrame for it.
... iris = datasets.load_iris()
>>> x = pd.DataFrame(iris.data, 
...                  columns = ['Sepal_Length','Sepal_Width',
...                             'Petal_Length','Petal_Width'])
>>> y = pd.DataFrame(list(map(lambda x: 
...                            {0: 'setosa', 1: 'versicolor', 
...                             2:'virginica'}[x], iris.target)), 
...                  columns = ['Species'])
>>>
>>> try:
...    oml.drop('IRIS')
... except: 
...    pass
>>>
>>> # Create the IRIS database table.
... oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
>>>
>>> # Create training data.
... train_dat = oml.sync(table = 'IRIS')
>>>
>>> # Specify settings.
... setting = {'asso_min_support':'0.1', 'asso_min_confidence':'0.1'}
>>>
>>> # Create an AR model object.
... ar_mod = oml.ar(**setting)
>>> 
>>> # Fit the model according to the training data and parameter 
... # settings.
>>> ar_mod = ar_mod.fit(train_dat)
>>> 
>>> # Show details of the model.
... ar_mod

Algorithm Name: Association Rules

Mining Function: ASSOCIATION

Settings: 
                   setting name                   setting value
0                     ALGO_NAME  ALGO_APRIORI_ASSOCIATION_RULES
1          ASSO_MAX_RULE_LENGTH                               4
2           ASSO_MIN_CONFIDENCE                             0.1
3       ASSO_MIN_REV_CONFIDENCE                               0
4              ASSO_MIN_SUPPORT                             0.1
5          ASSO_MIN_SUPPORT_INT                               1
6                  ODMS_DETAILS                     ODMS_ENABLE
7  ODMS_MISSING_VALUE_TREATMENT         ODMS_MISSING_VALUE_AUTO
8                 ODMS_SAMPLING           ODMS_SAMPLING_DISABLE
9                     PREP_AUTO                              ON

Global Statistics: 
     attribute name  attribute value         
0     ITEMSET_COUNT         6.000000
1       MAX_SUPPORT         0.333333
2          NUM_ROWS       150.000000
3        RULE_COUNT         2.000000
4 TRANSACTION_COUNT       150.000000

Attributes: 
Petal_Length 
Petal_Width 
Sepal_Length 
Sepal_Width 
Species

Partition: NO

Itemsets: 

   ITEMSET_ID   SUPPORT  NUMBER_OF_ITEMS    ITEM_NAME          ITEM_VALUE
0           1  0.193333                1  Petal_Width  .20000000000000001
1           2  0.173333                1  Sepal_Width                   3
2           3  0.333333                1      Species              setosa
3           4  0.333333                1      Species          versicolor
4           5  0.333333                1      Species           virginica
5           6  0.193333                2  Petal_Width  .20000000000000001
6           6  0.193333                2      Species              setosa

Rules: 

   RULE_ID  NUMBER_OF_ITEMS     LHS_NAME           LHS_VALUE     RHS_NAME  \
0        1                2      Species              setosa  Petal_Width
1        2                2  Petal_Width  .20000000000000001      Species

  RHS_VALUE   SUPPORT  CONFIDENCE  REVCONFIDENCE  LIFT  
0      None  0.186667        0.58           1.00     3  
1      None  0.186667        1.00           0.58     3