ヘッダーをスキップ
Oracle Real-Time Decisionsインストレーションおよび管理ガイド
リリース3.0
B54058-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

12 モデルのスナップショットの設定および使用

Oracle RTDのモデルのスナップショット機能を使用すると、Oracle RTDの予測モデルに蓄積されたデータを、外部データベースのテーブルにエクスポートできます。これらの結果には、イベント件数、予測値および相関関係が含まれます。Oracle RTDのモデルからエクスポートされたデータはさらに、標準のレポート作成およびビジネス・インテリジェンスの製品および技術を使用して分析できます。

指定されたインライン・サービスの予測モデルにOracle RTDが収集したデータは、スタディにアタッチされます。インライン・サービスとスタディの関連付けは、デプロイ時に定義されます。

Oracle RTDのモデルのスナップショット機能は、スタディ・レベルで動作し、インライン・サービスで定義されているすべてのモデルに影響を及ぼします。モデルのスナップショットを使用すると、指定したスタディのインライン・サービスのすべてのモデルに格納されているデータをエクスポートできます。

モデルのスナップショット機能によってエクスポートされたデータを使用すると、Oracle RTDのDecision Centerによって提供される標準の選択肢および選択肢グループ・レベルの「予測モデル」レポートをレプリケートし、拡張できます。さらに、データ・ウェアハウスから得られる顧客データと関連付けられている場合、このエクスポートされたデータを使用すると、Oracle RTDによって収集および生成された予測的な洞察データの顧客中心のオフライン・レポートを作成できます。

この章の内容は次のとおりです。

12.1 モデルのスナップショットの設定および使用の概要


注意:

Oracle RTDのモデルのスナップショット機能を設定し、使用する方法の説明では、予測モデルが移入された状態でインライン・サービスが稼動していると想定しています。

モデルのスナップショットの設定および使用のプロセスは、主に次の3つの段階に分かれています。

  1. モデルのスナップショット・テーブルの構成。

  2. 学習データからのモデルのスナップショット・テーブルの移入と、必要に応じたテーブルの消去。

  3. モデルのスナップショット・テーブルからのレポート作成。

モデルのスナップショットに関連して、チューニングを目的とするパラメータが2つあります。詳細は、第12.7項「モデルのスナップショット・プロセスのチューニング」を参照してください。

12.2 モデルのスナップショット・テーブルのスキーマ

Oracle RTDでは、図12-1のエンティティ関連モデルで説明されているような多次元スキーマを使用して、予測モデル・データをエクスポートします。この図は、モデルのスナップショット・テーブルとその列を示したもので、テーブル間の関係がコネクタ線で表現されています。

各コネクタは、コネクタの上位のテーブルから下位のテーブルへの関係が1対多であることを示しています。逆に、下位のテーブルから上位のテーブルへの関係は1対1になります。

図12-1 モデルのスナップショット・テーブルのスキーマ

周囲のテキストは図12-1に関する説明です。

テーブルで表される要素間の1対多の関係は次のとおりです(1対多の関係はそれぞれ、逆方向では1対1の関係になります)。

モデル・インスタンスと属性(パーティション、予測および相関関係)の間には、多対多の関係も3つあります。

テーブル名および列名は、次の一覧のとおりです。

12.3 モデルのスナップショット・テーブルの構成

この段階の主要な目的は、モデルのスナップショット・テーブルを作成し、それをアプリケーション・サーバーおよびJMX MBeanに登録することです。


重要:

モデルのスナップショット・テーブル内のテキスト値は、大文字と小文字を区別する必要があります。データベースのデフォルト設定が大文字と小文字を区別しないようになっている場合は、モデルのスナップショット・テーブルを作成するときに、この設定を無効にしてください。

モデルのスナップショット・テーブルを構成するには、次の手順を実行します。

  1. モデルのスナップショット・テーブルを格納するデータベースを選択します。


    注意:

    テーブルはSDDBデータベースに格納することもできますが、本番システムではお薦めしません。

  2. RTD_HOME\scriptsディレクトリから、次のコマンドを実行してモデルのスナップショット・テーブルを作成します。

    sdexec com.sigmadynamics.tools.SDDBTool.SDDBTool -f -i -I InitSnapshotDb.ctl db_type db_host db_port db_name db_runtime_user db_admin_user db_admin_password
    

    注意:

    -iパラメータを-uに置き換えると、新しいスキーマの初期化から既存のスキーマのアップグレードに操作が変わります。

    次の表では、sdexecスクリプトのパラメータについて説明しています。

    パラメータ 説明
    db_type データベースのタイプ。

    oracle、sqlserver、db2のいずれかを選択します。

    db_host データベース・サーバーをホスティングするコンピュータの名前。
    db_port データベースのポート番号。
    db_name データベースの名前。Oracle Databaseの場合はSID。
    db_runtime_user脚注1  システムのランタイム・ユーザーのユーザー名。
    db_admin_user データベースに対してテーブルおよびストアド・プロシージャを作成する権限を持つユーザーの名前。
    db_admin_password 管理ユーザーのパスワード。

    脚注1 Oracle Databaseの場合は、db_runtime_userdb_admin_userは同じユーザーになります。

  3. アプリケーション・サーバーに、モデルのスナップショット・テーブルの格納先であるデータベースを参照する新しいデータソースを作成します。

    アプリケーション・サーバーでのデータソースの作成方法の詳細は、第8章「Oracle Real-Time Decisionsのデータ・アクセスの構成」を参照してください。

    新しいデータソースを作成する作業の一貫として、この後の手順で使用する新しいJNDI名を指定します。

  4. Oracle RTDに新しいデータソースを追加します。

    Oracle RTDに新しいデータソースを追加する手順は、使用しているアプリケーション・サーバーによって異なります。

    使用しているアプリケーション・サーバーに対応する手順を、次のように実行します。

    • アプリケーション・サーバーがOC4Jの場合は、手順5に進みます。

    • アプリケーション・サーバーがWebSphereの場合は、手順11に進みます。

    • アプリケーション・サーバーがWebLogicの場合は、手順14に進みます。

    Oracle RTDへのデータソースの追加手順: OC4Jの場合

  5. Oracle RTDをスタンドアロンOC4Jで実行する場合は、ディレクトリOC4J_HOME/j2ee/home/applications/OracleRTDに移動します。Oracle RTDをOracle Application Serverで実行する場合は、ORACLE_AS_HOME/j2ee/oc4j_instance/applications/OracleRTDに移動します。

    このディレクトリは、RTD.earファイルをアプリケーションとしてデプロイしたときにファイルが展開された場所です。

  6. ファイル./ls/WEB-INF/web.xmlを探し、それを開いて編集します。ファイルの下部にスクロールします。SDDSのリソース参照を定義しているセクションをコピーして、既存のセクションの後ろに貼り付けます。コピーしたセクションで、文字列SDDSを、手順3で入力したJNDI名(jndi_name)に置き換えます。

    次に例を示します。

    <resource-ref id="jndi_name_LS">
    <res-ref-name>jndi_name</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Unshareable</res-sharing-scope>
    </resource-ref>
    

    変更を保存して、ファイルを閉じます。

  7. ディレクトリOC4J_HOME/j2ee/home/application-deployments/OracleRTDに移動します。この場合、applicationsディレクトリではなく、application-deploymentsディレクトリに移動することに注意してください。

  8. ファイル./ls/WEB-INF/orion-web.xmlを探し、それを開いて編集します。ファイルの下部にスクロールします。SDDSのリソース参照マッピングを定義している行をコピーして、既存の行の後ろに貼り付けます。コピーした行で、文字列SDDSを、手順3で入力したJNDI名(jndi_name)に置き換えます。次に例を示します。

    <resource-ref-mapping name="jndi_name" location="jndi_name"/>
    

    変更を保存して、ファイルを閉じます。

  9. OC4Jを起動します。

  10. 手順16に進みます。

    Oracle RTDへのデータソースの追加手順: WebSphereの場合

  11. 次のファイルを開いて編集します。

    WEBSPHERE_HOME/AppServer/profiles/profile_name/config/cells/server_name/
    applications/OracleRTD.ear/deployments/OracleRTD/ls.war/WEB-INF/web.xml
    
  12. 次の手順に従って、新しい<resource-ref>エントリを作成します。

    1. Oracle RTD Database(SDDS)の既存の<resource-ref>エントリをコピーして、その直後に貼り付けます。

    2. SDDSエントリと同様に、識別可能な値(末尾に_LSを付加)を入力してid属性を変更します。idの値はファイル内で一意である必要があります。

    3. 手順3で入力したJNDI名(jndi_name)を入力して、<res-ref-name>タグを変更します。

    次に例を示します。

    <resource-ref id="jndi_name_LS">
      <res-ref-name>jndi_name</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Unshareable</res-sharing-scope>
    </resource-ref>
    

    変更を保存して、ファイルを閉じます。

  13. 手順16に進みます。

    Oracle RTDへのデータソースの追加手順: WebLogicの場合

  14. インストール時にRTD.earファイルを展開したディレクトリ(RTD_HOME/package/expanded)に移動します。

  15. ls.warアーカイブを開いてweb.xmlを抽出し、web.xmlを開いて編集します。ファイルの下部にスクロールします。SDDS_LSのリソース参照を定義しているセクションをコピーして、既存のセクションの後ろに貼り付けます。コピーしたセクションで、文字列SDDSを、手順3で入力したJNDI名(jndi_name)に置き換えます。

    次に例を示します。

    <resource-ref id="jndi_name_LS">
      <res-ref-name>jndi_name</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Unshareable</res-sharing-scope>
    </resource-ref>
    

    変更内容を保存してファイルを閉じ、ファイルを元のls.warに再びアーカイブします。

    手順16に進みます。

  16. JConsoleで、新しいデータソースの名前をOracleRTD MBeanに登録します。

    • 「MBeans」→「OracleRTD」→「SDClusterPropertyManager」→「Misc」にナビゲートします。

    • ModelSnapshotDSName属性で、モデルのスナップショット用に作成したデータソースの名前を指定します。

12.4 モデルのスナップショット・テーブルの移入と消去

モデルの学習データのスナップショットは、予測に必要なデータが十分に蓄積されていない場合であっても、いつでも取得できます。

各モデルは、週、月、四半期などの時間枠を設定できるように定義されています。時間枠は、学習プロセスにおいて収集されるデータ量を決定し、モデルのスナップショット・テーブルに書き込まれるデータ量に影響を与えます。

書き込むデータの量は、次のオプションから選択できます。

また、モデルのスナップショット・テーブルから、スタディに対するモデルの学習データをすべて削除することもできます。

モデルのスナップショット・テーブルを移入または消去するには、次の手順を実行します。

  1. JConsoleで、「MBeans」→「OracleRTD」→「Learning Server」→「スタディ名」にナビゲートします。

  2. 「Operations」タブをクリックします。

  3. 該当するスナップショット・オプションをクリックします。

    • CompleteSnapshot

      スタディに対してそれまで取得されたデータをすべて削除し、現時点までのすべてのスタディ・データを再書込みします。

    • IncrementalSnapshot

      未完了の時間枠のスタディ・データを削除し、現時点までの現行の時間枠のデータを再書込みします。

    • DeleteSnapshot

      スタディに対して取得されたデータをすべて削除します。

12.5 モデルのスナップショット・データからのレポート作成

モデルのスナップショット・テーブルからレポートを作成できます。作成する場合は通常、SQLの標準Selectコマンドを使用するか、または次の製品ドライバ・レポートと同様のレポートを生成するビジネス・インテリジェンス製品にデータを送ります。

周囲のテキストはprod_sales.gifに関する説明です。

この項の残りの部分では、モデルの複数のスナップショット・テーブルから情報を抽出するスクリプトの例を示します。各スクリプト例の後には、サンプルの出力を示します。また、一部の例には、結果の解釈に役立つ注釈があります。

これらの例で使用されるインライン・サービスは、CrossSellアプリケーションです。また、データは、400,000ユーザー・セッションをシミュレートしたOracle RTD Load Generatorスクリプトを完了まで実行して生成されています。

12.5.1 選択肢別の件数の問合せ

次の問合せでは、選択肢別の件数をすべての時間枠について取得します。

select g.display_name     as 'Choice Group',
       c.display_name     as 'Choice',
       e.name             as 'Event',
      mi.timewindow_start as 'Start',
      mi.timewindow_end   as 'End',
      mi.state            as 'Model Status',
       m.name             as 'Model Name',
      mi.count_total,
      mi.count_positive,
      mi.quality
from RTDApp a
     inner join RTDStudy s          on s.id=a.study_id
     inner join RTDModel m          on m.study_id=s.id
     inner join RTDModelInstance mi on mi.model_id=m.id
     inner join RTDEvent e          on mi.event_id=e.id
     inner join RTDChoice c         on c.id=mi.choice_id
     inner join RTDChoiceGroup g    on c.choicegroup_id=g.id
where a.name='CrossSell'
order by m.name,
         g.display_name,
         c.display_name,
       mi.timewindow_start

図12-2は、選択肢別の件数の問合せ結果を示しています。

図12-2 選択肢別の件数の問合せ結果

周囲のテキストは図12-2に関する説明です。

選択肢別の件数の問合せ結果についての注釈

  1. 行13では、ChoiceがGold Card、EventがInterested、count_totalが477、count_positiveが19、qualityが0.0になっています。これは、Gold Cardオファーが提示された477人のユーザーのうち、19人が興味を示したことを意味します。この件数は少ないため、Gold Card ChoiceとInterested Eventに関するモデル品質は0になります。

    行14では、ChoiceがGold Card、EventがPurchased、count_totalが477、count_positiveが1、qualityが0.0になっています。これは、1人のユーザーがこのオファーに対して購入したことを意味します。Gold Card ChoiceとPurchased Eventに関するモデル品質は0になります。

    行13と行14は両方とも、2003年4月1日〜2003年7月1日の期間に適用されます。

  2. Choice Group列とChoice列の値BASE EVENTは、全般的または全体的という意味です。

    たとえば、行1では、ChoiceがBASE EVENT、EventがInterested、count_totalが24917、count_positiveが1663、qualityがおよそ0.6882になっています。これは、Start日からEnd日までの期間に、オファーが提示された合計24917人のユーザーのうち、1663人が興味を示したことを意味します。この期間のモデル全体の品質はおよそ0.69になります。

    行2では、ChoiceがBASE EVENT、EventがPurchased、count_totalが24917、count_positiveが220、qualityがおよそ0.5666になっています。これは、行1と同じ期間に、すべてのChoiceに対して合計220件のPurchasedイベントがあり、モデル品質がおよそ0.57であることを意味します。

12.5.2 上位6つの予測属性の問合せ

次の問合せでは、Purchased Eventを引き起こすCredit Protection Choiceに対する上位6つの予測属性を時間枠ごとに選択します。

select a.name                'Attribute Name',
       p.predictiveness      'Predictiveness',
       c.display_name        'Choice Name',
      mi.timewindow_start as 'Start',
      mi.timewindow_end   as 'End',
      mi.state            as 'Model Status'
from RTDApp app
     inner join RTDChoice c         on c.app_id=app.id
     inner join RTDStudy s          on s.id=app.study_id
     inner join RTDModel m          on m.study_id=s.id
     inner join RTDModelInstance mi on mi.model_id=m.id and mi.choice_id=c.id
     inner join RTDEvent e          on mi.event_id=e.id
     inner join RTDPredictiveness p on p.model_instance_id=mi.id
     inner join RTDAttribute a      on a.id=p.attribute_id
where app.name         = 'CrossSell'
  and   c.display_name = 'Credit Protection'
  and   e.name         = 'Purchased'
  and   m.name         = 'OfferAcceptance'
  and   7 > (select count(*)
             from RTDPredictiveness p2
             where p2.model_instance_id = p.model_instance_id
               and p2.predictiveness > p.predictiveness)
order by mi.timewindow_end desc,
          p.predictiveness desc

図12-3は、上位6つの予測属性の問合せ結果を示しています。

図12-3 上位6つの予測属性の問合せ結果

周囲のテキストは図12-3に関する説明です。

12.5.3 予想件数と実績件数の差異の問合せ

次の問合せでは、クレジット・プロテクションを実際に購入した顧客数とクレジット・プロテクションの購入が予想される顧客数を、婚姻ステータス別に示します。また、このレポートでは、これら2つの値の間の差異と、オファーの受入れにおける相関関係の重要度も示します。

select cor.value               'customer MaritalStatus',
       cor.count_output_input  'Actual Count',
       mi.count_positive*cor.count_input/mi.count_total 'Expected Count',
  100* (  (mi.count_total*cor.count_output_input)
        / (mi.count_positive*cor.count_input) - 1) 'Percent Difference',
       cor.correlation         'Importance',
         c.display_name        'Choice Name',
        mi.timewindow_start as 'Start',
        mi.timewindow_end   as 'End',
        mi.state            as 'Model Status'
from RTDApp app
     inner join RTDChoice c         on c.app_id=app.id
     inner join RTDStudy s          on s.id=app.study_id
     inner join RTDModel m          on m.study_id=s.id
     inner join RTDModelInstance mi on mi.model_id=m.id and mi.choice_id=c.id
     inner join RTDEvent e          on mi.event_id=e.id
     inner join RTDCorrelation cor  on cor.model_instance_id=mi.id
     inner join RTDAttribute a      on a.id = cor.attribute_id
where app.name         = 'CrossSell'
    and c.display_name = 'Credit Protection'
    and e.name         = 'Purchased'
    and m.name         = 'OfferAcceptance'
    and a.name         = 'customer MaritalStatus'
order by mi.timewindow_end desc,
        cor.correlation desc

予想件数と実績件数の差異の問合せについての注釈

  1. Actual Count(cor.count_output_input)は、クレジット・プロテクションを実際に購入した顧客の婚姻ステータス別の人数です。

  2. Expected Countは、mi.count_positive/mi.count_totalで表される、クレジット・プロテクションを購入した顧客の人数に対する、婚姻ステータス別の合計人数の単純な線形予測(cor.count_input)です。

  3. Percent Differenceは、「100×(実績件数-予想件数)/予想件数」です。

図12-4は、予想件数と実績件数の差異の問合せ結果を示しています。

図12-4 予想件数と実績件数の差異の問合せ結果

周囲のテキストは図12-4に関する説明です。

予想件数と実績件数の差異の問合せ結果についての注釈

  1. 婚姻ステータスごとに2つの行があり、2003年4月1日〜2003年7月1日と2003年7月1日〜2003年10月1日それぞれの期間に対応しています。

12.6 パーティションの処理

RTDPartitionテーブルには、パーティション化属性に対する値が保持されます。モデルがパーティション化されていない場合、モデルには時間枠ごとに1つのモデル・インスタンスがあり、RTDPartitionテーブルには関連する行がありません。

1つ以上のディメンションに沿って分割したモデルを、パーティション化されたモデルと呼びます。

たとえば、モデルMを、Marital StatusとFavorite Beverageという2つの属性によってパーティション化するとします。Marital Statusに3つの値(Married、Single、Divorced)、Favorite Beverageに2つの値(Coffee、Tea)がある場合、このモデルには6つのモデル・インスタンスがあります。

この場合、各モデル・インスタンスには、RTDPartitionの行が2つ関連付けられています。たとえば、Marital StatusがMarriedで、Favorite BeverageがCoffeeという組合せに対するモデル・インスタンスは、RTDPartitionで次の情報を含む2つの行に関連付けられます。

モデルがパーティション化されているかどうかは、モデルのスナップショット・テーブルに対する問合せ結果に影響を与える場合があります。結果の中で繰返しが行われないようにするには、問合せにRTDPartitionとRTDAttributeの結合条件を入れます。

次の例は、予想件数と実績件数の差異の問合せを変更および拡張したもので、モデルはDiabetic(値はyesまたはno)とMarital Statusという2つの属性でパーティション化されています。

select a.name,
       p.value,
      subquery.*
from (select cor.value               'Favorite Sports',
             cor.count_output_input  'Actual Count',
             mi.count_positive*cor.count_input/mi.count_total 'Expected Count',
  100* (  (mi.count_total*cor.count_output_input)
        / (mi.count_positive*cor.count_input) - 1) 'Percent Difference',
       cor.correlation         'Importance',
         c.display_name        'Choice Name',
        mi.timewindow_start as 'Start',
        mi.timewindow_end   as 'End',
        mi.state            as 'Model Status'
        mi.id                   model_instance_id
  from RTDApp app
       inner join RTDChoice c         on c.app_id=app.id
       inner join RTDStudy s          on s.id=app.study_id
       inner join RTDModel m          on m.study_id=s.id
       inner join RTDModelInstance mi on mi.model_id=m.id and mi.choice_id=c.id
       inner join RTDEvent e          on mi.event_id=e.id
       inner join RTDCorrelation cor  on cor.model_instance_id=mi.id
       inner join RTDAttribute a      on a.id = cor.attribute_id
  where app.name       = 'HighlyPartitionedDataset'
    and c.display_name = 'Fanta'
    and e.name = 'loved'
    and m.name = 'SatisfactionModel'
    and a.name = 'Favorite Sports') as subquery
inner join RTDPartition p on subquery.model_instance_id = p.model_instance_id
inner join RTDAttribute a on p.attribute_id = a.id
order by subquery.[End] desc,
         subquery.model_instance_id,
         a.name,
         p.value
         subquery.[Importance] desc

図12-5は、パーティション化された予想件数と実績件数の問合せ結果を示しています。

図12-5 パーティション化された予想件数と実績件数の問合せ結果

周囲のテキストは図12-5に関する説明です。

12.7 モデルのスナップショット・プロセスのチューニング

JMX MBean属性として用意されている次のパラメータを使用して、モデルのスナップショット・プロセスをチューニングできます。

詳細は、第15.3.2項「「OracleRTD」→「SDClusterPropertyManager」→「Misc」について」を参照してください。