ルールには、次の3つのタイプがあります。
適格性ルール: 選択肢グループや選択肢が、デシジョンに参加する資格があるかどうかを判断するときに使用されます。
フィルタリング・ルール: デシジョンや他のルールの構成要素として使用され、再利用が可能です。このルールを使用して母集団をセグメント化すると、あるセグメントに別のセグメントよりも大きい重み付けができるようになります。
スコアリング・ルール: 選択肢グループと選択肢のスコアを計算するときに使用されます。スコアは、意思決定で適切な選択肢を判断するために使用します。
この章の内容は次のとおりです。
選択肢または選択肢グループの一部である適格性ルールは、ある選択肢が、選択肢を選択する意思決定またはロジックに参加できるかどうかの適格性を判断します。選択肢グループと選択肢は、インライン・サービス・ナビゲータの「Decision Process」の下に表示されます。
選択肢グループを表すアイコンは次のとおりです。
選択肢を表すアイコンは次のとおりです。
適格性ルールは、選択肢グループとそのサブツリーが決定に対して適格であるかどうかを判断します。選択肢自体が適格であっても、そのすべての親が適格でないと、その選択肢は適格にならないことに注意してください。
選択肢グループの適格性ルールにアクセスするには、選択肢グループを選択してから、「Definition」→「Group Eligibility」または「Choice Eligibility」を選択します。
選択肢の適格性ルールにアクセスするには、選択肢を選択してから「Definition」→「Eligibility」を選択します。
この項の内容は次のとおりです。
適格性ルールを追加するには、「Group Eligibility」、「Choice Eligibility」、または選択肢/選択肢グループの「Eligibility」タブを選択してから、新しいルールを追加します。新規ルールの作成とルールへの文の追加方法の詳細は、第4.5.3項「ルールへの文の追加」を参照してください。
選択肢グループと選択肢のルールは、継承されて追加されていきます。つまり、選択肢グループのルール(グループおよび選択肢のルール)と選択肢レベルのルールがある場合、ルールを拡張する論理積が追加されたかのようになります。継承されたルールは、ルールの一番上にある「Inherited eligibility conditions」というセクションを展開すると表示されます。セクションを開いたり閉じたりするには、上矢印と下矢印のボタンを使用します。
例4-1に、選択肢グループのルールと選択肢のルールを評価する方法の例を示します。
例4-1 選択肢グループのルールと選択肢のルールの評価
Group1 has rules GroupRule1 and ChoiceRule1
Group2 is a child of Group1 and has rules GroupRule2 and ChoiceRule2
Group2 has a Choice, Choice1, and it has a rule, Rule1
この例では、Choice1のルールを評価するときに、次に示すルールが有効になります。
GroupRule1 AND GroupRule2 AND ChoiceRule1 AND ChoiceRule2 AND Rule1
選択肢の適格性を判定するときは、初めに親の適格性がテストされます。これは、選択肢に対する不必要な適格性ルール評価処理を回避するためです。
例4-2に、選択肢の適格性を判定する方法の例を示します。
例4-2 選択肢の適格性の判定
Group1 has rule GroupRule1 Group2 is a child of Group1 and has rule GroupRule2 Group2 has a Choice, Choice1, and it has a rule, Rule1
この例では、適格性が次のとおり判定されます。
If Choice1 is eligible with Rule1 test with GroupRule2 if eligible test with GroupRule1
スタンドアロンのルールであるフィルタリング・ルールは、母集団をセグメント化する場合や、その他のルールの構成要素にする場合に使用できます。スタンドアロンのルールは、様々な要素で再利用できます。スタンドアロンのフィルタリング・ルールは、「Decision Process」→「Rules Library」→「Filtering Rules」の下にあります。
フィルタリング・ルールは他のどのルールでも使用でき、デシジョン優先度決定のためにも使用できます。後者の場合は、フィルタリング・ルールをデシジョンに割り当てると、1つの母集団の様々なセグメントにパフォーマンス・メトリックを適用することが可能になります。図4-1に、母集団のセグメント化に使用されるフィルタリング・ルールの例を示します。
図4-1に示すフィルタリング・ルールは、年齢が18歳以上で、与信金額が$8,000以上である顧客を対象としています。フィルタリング・ルールは、デシジョンで使用されます。
フィルタリング・ルールを使用して母集団をセグメント化する手順は次のとおりです。
新しいルールを追加するには、ナビゲータの上にあるツールバーのフィルタリング・ルール・アイコンをクリックします。フィルタリング・ルール・アイコンは、次のように表示されます。
セグメント化のためのスタンドアロンのフィルタリング・ルールを作成します。
新規ルールの作成とルールへの文の追加方法の詳細は、第4.5.3項「ルールへの文の追加」を参照してください。
母集団をセグメント化するデシジョンを選択します。「Definition」→「Priorities」を選択します。
エディタの「Segment」を使用して、母集団のセグメントを定義するフィルタリング・ルールを選択します。
必要に応じて、このセグメントに対するパフォーマンス・メトリックの重み付けを調整できます。
「Save」アイコンをクリックして、変更内容を保存します。
インライン・サービスに加えることができる変更の1つとして、業務目標の優先度の調整があります。意思決定の結果は、組織に定義されたパフォーマンス目標、定義された母集団のセグメント、および母集団の各セグメントにおける目標の優先度に基づいています。優先度の調整は、「Decision」→「Definition」→「Priorities」サブタブで行います。
図4-2に、業務目標の優先度の例を示します。
図4-2に示す例では、母集団のセグメント「Segment to Retain」の業務目標「Customer Retention」の重み付けが高く設定されており(71%)、母集団の残りの部分は収益最大化が優先されます(29%)。
特定の状況下または母集団に変更がある場合は、重み付けのバーをスライドしてこの優先度を調整できます。調整後は、インライン・サービスを再デプロイしてから、変更内容を確認するためにDecision Centerに再度ログインする必要があります。
ブール値を返す適格性ルールとは対照的に、スコアリング・ルールは数値を返します。この値は、Oracle RTDのデシジョン・ロジックのどの部分でも使用できます。一般的なユース・ケースは、次のとおりです。
特定のパフォーマンス目標に対する選択肢のスコアを設定する
選択肢の属性の値を設定する
図4-3に、スコアリング・ルールの例を示します。
図4-3に示す例では、顧客の与信金額に基づいてスコアが割り当てられます。顧客がどの与信範囲カテゴリにも適合しない場合、デフォルトのスコアである3が設定されます。
ルールは、Decision StudioとDecision Centerの中で様々な目的で使用されますが、たとえば次のようなユース・ケースがあります。
選択肢グループや選択肢がデシジョンに参加できるかどうかの適格性を判定する。
スタンドアロンの再利用可能なルールとして、母集団セグメントのフィルタリングに使用する。
スタンドアロンの再利用可能なルールとして、選択肢のスコア設定に使用する。
ルールの作成に使用するエディタは、ほとんど同じです。以降の各項では、エディタとルール・エディタのツールバーを使用してルールを使用する方法を説明します。
この項の内容は次のとおりです。
ルール・エディタのツールバーからは、ルールを編集するための機能にアクセスできます。このツールバーは、実行中のタスクのコンテキストに依存します。
左から右の順に、このツールバーには次に示す機能が並んでいます。
ルール・プロパティの編集
条件値の追加
ルールの追加
ルール・セットの追加
削除
反転
上へ移動
下へ移動
コピー
切取り
貼付け
Oracle RTDのルールには、次の3つのタイプがあります。
フィルタリング・ルール
スコアリング・ルール
適格性ルール
Oracle RTDのルールは、1つ以上のルール条件で構成されます。この条件どうしを結合する方法は、論理演算子を使用して決定します。条件はルール文の形式で表現されます。これについては、次の項で説明します。
|
注意: ここでは、条件を持つルールについて説明します。つまり、ルールが常にtrueになるとはかぎりません。 |
単純なフィルタリング・ルールの例を次に示します。このルールの名前は「Select List Rule」で、この項ではこのルールを使用してルール文の説明をします。
Select List Rule is true when All of the following 1. session / customer / Age > 21 2. session / customer / MaritalStatus = "MARRIED"
表4-1に、Oracle RTDのルール構文を正式な形で示します。この表では、Oracle RTDのルール文で使用される項の説明にバッカス正規形(BNF)タイプの表記規則を使用します。
表4-1 Oracle RTDのルールの構文
| 項 | 項の構成要素 | 注意 |
|---|---|---|
|
|
|
なし |
|
|
|
ルールの名前を指定します。 ルールが作成された後は、ヘッダー行の編集は不可能です。 |
|
|
All of the following | Any of the following | None of the following | Not all of the following |
論理演算子は、直後の |
|
|
|
ルール・エントリには必ず番号が付きます。ルール・エントリの内容はブール文または他のルール・エントリです。 |
|
|
|
2番目の |
|
|
|
|
|
|
|
配列処理ルール・セットの場合にのみ使用します。詳細は、「量化子と配列処理ルール」を参照してください。 |
|
|
For all | There exists |
なし |
「Select List Rule」の例は、次のように分類できます。
Select List Rule is true when = <ヘッダー行>
All of the following = <論理演算子>
このルールの残りの部分は、1つの<ルール・エントリ>で構成され、このエントリは次の2つの文から構成されています。
session / customer / Age > 21 = <ブール文>
session / customer / MaritalStatus = "MARRIED" = <ブール文>
ルール・セットとブール文
「ルール・セット」(表4-1では<ルール・セット>)は、1つ以上の番号付きルール・エントリで構成される複合文です。各ルール・エントリは、ブール文か、別のルール・セットです。
「ブール文」(表4-1では<ブール文>)には、評価結果がtrueまたはfalseになる条件が含まれています。この評価は、ルールが処理されるときに行われます。ブール文はルール・セットの最下位要素です。つまり、それ以上分解できません。
ルール・セットの中で定義される下位のルール・セットに名前を付けることもできます。
|
注意: 各Oracle RTDのルールには、暗黙的な、名前のない、最上位のルール・セットが1つあります。 |
各ルール・セットは論理演算子で修飾されます。この論理演算子によって、ルール・セットの文の処理がコントロールされます。詳細は、「論理演算子」を参照してください。
次に示す「Exclusion Rule」の例では、ルール・セットの中に別のルール・セットがあります。

例:
最上位の無名のルール・セットの中に、論理演算子「All of the following」と2つのルール・エントリがあります。最初のルール・エントリはブール文で、2番目のルール・エントリはルール・セットです。
最上位ルール・セットの内側のルール・セットの中には、論理演算子「None of the following」と3つのルール・エントリがあります。これらのルール・エントリはすべてブール文です。
配列内の値に依存するルール・セットの場合は、全体の「量化子」となる式(「For all」または「There exists」)がルール・セットに追加されます。この量化子は、ルール・セットの論理演算子を修飾します。詳細は、「量化子と配列処理ルール」を参照してください。
論理演算子
Oracle RTDの論理演算子は次のとおりです。
All of the following(論理AND): ルール・セットの評価結果がtrueになるのは、このルール・セットのブール文と下位のルール・セットがすべて満たされているときです。
Any of the following(論理OR): ルール・セットの評価結果がtrueになるのは、このルール・セットのブール文または下位のルール・セットのいずれか1つがtrueであるときです。
None of the following(論理NOT AND): ルール・セットの評価結果がtrueになるのは、このルール・セットのブール文と下位のルール・セットがすべてfalseであるときです。
Not all of the following(論理NOT OR): ルール・セットの評価結果がtrueになるのは、このルール・セットのブール文または下位のルール・セットのいずれか1つがfalseであるときです。
量化子と配列処理ルール
ルール・セットを配列形式の値に依存させることもできます。
ルール・セットによって配列の要素を評価できます。
ルール・セットの中の式で配列の要素を参照できます。
このようなタイプのルールを「配列処理ルール」と呼びます。
このような場合に、ルール・セットが「量化子」式(「量化子」と呼ぶこともあります)を持ちます。この量化子は、ルール・セットの論理演算子を修飾します。ルール・セットの文がすべての配列要素について満たされている必要があるか、少なくとも1つの配列要素について満たされている必要があるかを示します。
次に示す例では、配列属性session/agentsに格納されているすべてのエージェントを検査するルールが作成されています。この例では、ルールの評価結果がtrueになるのは、すべてのエージェントが30歳以上であり、かつステータスが「Qualified」であるときです。
Agent Rule is true when For all people in session/agents, All of the following 1. people / Age >= 30 2. people / Status = "Qualified"
配列処理ルールの構文は、次の項で詳しく説明します。前の例では、peopleという項はユーザーが定義する任意項であり、ルール・セット内の個々の配列要素を識別するために使用されます。
配列処理ルールの修飾
配列処理ルールの修飾の一般的な形式は、次のとおりです。
<量化子> <配列変数> in <配列名>, <論理演算子>
要素の説明は次のとおりです。
<量化子>は、「For all」と「There exists」のいずれかです。
For all: この量化子は、ルール・セットの論理演算子と連携して、各配列要素の検査が必須であることを示します。また、各配列要素について、被修飾ルール・セット内のブール文と下位ルール・セットがすべて満たされている必要があります。
被修飾ルール・セット内のブール文および下位ルール・セットが1つも満たされない配列要素が見つかると、ルール評価による配列処理は終了します。配列内の残りの要素はスキップされます。
There exists: この量化子は、ルール・セットの論理演算子と連携して、少なくとも1つの配列要素について、被修飾ルール・セットのブール文および下位のルール・セットのすべてが満たされていなければならないことを示します。
被修飾ルール・セット内のブール文および下位ルール・セットがすべて満たされている配列要素が見つかると、ルール評価による配列処理は終了します。配列内の残りの要素はスキップされます。
<配列変数>は、被修飾ルール・セットのブール文および下位ルール・セットの中の配列<配列名>の個々の配列要素の名前を指定するための任意名です。
|
注意:
|
<配列名>は、検査対象の配列です。
<論理演算子>は、「All of the following」、「Any of the following」、「None of the following」、「Not all of the following」のいずれかです。
たとえば、ある配列処理ルール・セットが2つのエンティティsessionとcustomerで構成されているとします。
sessionエンティティには、次の属性があります。
整数型の属性AgentDept
配列属性CustInfo(customer型)
customerエンティティには、次の属性があります。
整数型の属性CompSize
文字列型の属性Region
次の条件を両方とも満たすためのフィルタリング・ルールが必要です。
AgentDeptの値は42でなければならない。
CustInfo配列内の少なくとも1つの顧客のCompSizeが> 100で、Regionが「West」でなければならない。
このフィルタリング・ルールは、たとえば次のように定義できます(配列を修飾する式が強調されています)。
Cust Rule is true when
All of the following
1. session / AgentDept = 42
2. There exists some_customer in session / CustInfo, All of the following
1. some_customer / CompSize > 100
2. some_customer / Region = "West"
ルール・セットの追加
ルール・セットを追加するには、次に示す「Add Rule Set」アイコンをクリックします。
これがルール内に作成する最初の要素である場合は、次に示す文がルール内に表示されます。
デフォルトの論理演算子「All of the following」
ルールの最初の行番号を付与されたルール・セット・エントリ。このエントリの中には、デフォルトの論理演算子「All of the following」があります。
2つのオペランドを持つ空のブール文(新しく定義されたルール・セット内)

それ以外の場合は、新しいルール・セット・エントリ1つが現行ルール・セット内の次のエントリとして追加されます。このエントリの中には、2つのオペランドを持つ空のブール文1つがあります。たとえば、すでに1つのブール文を持つ既存のルール・セットに別のルール・セットを追加すると、追加されたルール・セットのエントリは次のように、行番号2の横に表示されます。

ルール・セットに名前を付けるには、右上隅をクリックします。ルール・セットに名前を付けると、ルール・セットのボックスの右上隅にある山形のアイコンをクリックしてルールを閉じたり開いたりできるようになります。
Add Rule(ブール文をルールに追加)
ブール文を追加するには、次に示す「Add Rule」アイコンをクリックします。
これがルール内に作成する最初の要素の場合は、次のように、デフォルトの論理演算子「All of the following」が表示され、その後に2つのオペランドを持つ空のブール文が表示されます。

それ以外の場合は、次の例に示すように、2つのオペランドを持つ空のブール文が現行ルール・セットに追加されます。この例では、1つのブール文がすでに存在します。

デフォルトでは、ブール文は2つのオペランドを持ち、その間に1つの演算子があります。
ブール文のオペランドが1つか2つかを切り替えるには、次の例に示すように、ブール文の行番号をクリックしてから、ブール文ボックスの右下にある三角形のアイコンをクリックします。

オペランドが1つの場合は、評価結果が必ずブール型になります。
演算子を選択するには、演算子をクリックしてから右下隅をクリックします。
表4-2は、使用可能な演算子の一覧です。
表4-2 ルール演算子
| 演算子 | 説明 |
|---|---|
|
なし |
オペランドを1つだけ持つ単純な式 |
|
= |
左辺が右辺と等しい |
|
¼ |
左辺が右辺と等しくない |
|
< |
左辺が右辺より小さい |
|
<= |
左辺が右辺以下 |
|
> |
左辺が右辺より大きい |
|
>= |
左辺が右辺以上 |
|
in |
左辺の値が右辺のリストに含まれる |
|
not in |
左辺の値が右辺のリストに含まれない |
|
includes all of |
左辺のリストに右辺のリストの値がすべて含まれる |
|
excludes all of |
左辺のリストが右辺のリストのどの値も含まない |
|
includes any of |
左辺のリストが右辺のリストのいずれかの値を含む |
|
does not include all of |
左辺のリストが右辺のリストのすべての値を含まない |
ルールのブール文を編集するには、左辺をクリックしてから省略記号をクリックします。定数、属性または関数コールから選択できます。ページ上部の「Array」を選択すると、配列値を指定できます。
「Constant」を選択した場合は、その項目の「Data type」と「Value」を指定します。「Array」を選択した場合は、必要な数の項目を配列に追加します。次に、各項目の「Data Type」を選択して「Value」を指定します。
「Attribute」を選択した場合は、次のいずれかを指定します。
Group attribute: ルール・プロパティで選択された選択肢グループまたはその選択肢の一部である属性。
Session attribute: セッション・エンティティの一部である属性。
Application attribute: アプリケーション要素のメンバーである属性。
Array variable: 量化子付き論理演算子式の中のルール・セットの個々の配列要素の名前。詳細は、「量化子と配列処理ルール」を参照してください。
タイプ別に属性をフィルタリングするには、「Apply filter type」を選択してから「Data type」を選択します。「Array」を選択した場合は、必要な数の項目を配列に追加してから、各項目に属性値を割り当てます。
「Function call」を選択した場合は、次のいずれかを指定します。
Filtering rules: インライン・サービスに対して定義されたスタンドアロンのフィルタリング・ルール
Scoring rules: インライン・サービスに対して定義されたスタンドアロンのスコアリング・ルール
Function calls: インライン・サービスに対して定義されたスタンドアロンの関数
タイプ別に属性をフィルタリングするには、「Apply filter type」を選択してから「Data type」を選択します。「Array」を選択した場合は、必要な数の項目を配列に追加してから、各項目に関数またはルールを割り当てます。
フィルタリング・ルールとスコアリング・ルールのどちらにも、設定可能なルール・プロパティがあります。ルール・プロパティを編集するには、次に示す「Rule properties」アイコンをクリックします。
「Edit rule properties」が表示されます。
ルール・プロパティには、コール・テンプレートとネガティブ・コール・テンプレートがあります。コール・テンプレートは、別のルールからルールをコールするための、ユーザーフレンドリな記述方法を提供します。
コール・テンプレートを定義するには、「Parameters」の下にある「Add」ボタンを使用して、ルールのパラメータ数を追加します。{0}、{1}などの引数と、ルールを記述する句を使用して、コールのテンプレートを定義します。ルールの使用時にはこの句が表示されるため、正確に入力することが重要です。
たとえば、ユーザーから少なくともx回のコールが過去y日間にあったかどうかをルールによって調べるには、次のように記述します。
There were at least {0} calls in the last {1} days
ネガティブ・コール・テンプレートは、ルールが反転されて反対の意味を表すときに使用されます。たとえば、次のようになります。
There were less than {0} calls in the last {1} days
ルール・プロパティでは、ルールで使用する選択肢グループを割り当てることもできます。「Use with choice group」を選択すると、パラメータで使用する選択肢属性を、どの選択肢グループまたはその選択肢から得るかを指定できます。これらの属性は、オペランドの値を編集する場合に使用できます。
「Invert」アイコンを使用すると、ルールの様々な要素を反転させることができます。ブール文の番号を選択すると、そのブール文の演算子が反転します。たとえば、ルールの演算子が=の場合、<>に反転します。
ルール・セットの論理演算子を反転させることもできます。反転させるには、論理演算子を選択して「Invert」をクリックします。たとえば、「All of the following」は「Not all of the following」になります。
「Invert」の最後の用途は、ブール型のルール(オペランドが1つだけのルール)の反転です。このタイプのルールを反転すると、ルールを定義する関数のネガティブ・コール・テンプレートに変換されます。
ルールの中のルールとルール・セットの順序を変更する手順は、次のとおりです。
ルール・エントリの番号をクリックして選択します。
次の操作をルール・エディタのツールバーから実行し、ルール・エントリを移動します。
削除
選択内容をクリップボードにコピー
クリップボードへの選択内容の切取り
上へ移動
下へ移動
ルール・エディタのツールバーのアイコンの詳細は、第4.5.1項「ルール・エディタのツールバーについて」を参照してください。
「Save」アイコンをクリックして、変更内容を保存します。