ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Real-Time Decisions管理者ガイド
11gリリース1(11.1.1)
B72431-01
  目次へ移動
目次

前
 
次
 

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

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

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

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

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

この項には、次の項目が含まれます。

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


注意:

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


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

  1. モデルのスナップショット表の構成。

  2. 学習データからのモデルのスナップショット表の移入と、必要に応じた表のクリア。

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

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

10.2 モデルのスナップショット表のスキーマ

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

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

図10-1 モデルのスナップショット表のスキーマ

図10-1の説明は前後の文章を参照してください。

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

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

表名および列名は、次の一覧のとおりです。

10.3 モデルのスナップショット表の構成


注意:

モデルのスナップショット表は、Oracle Real-Time Decisionsの簡易インストールおよびエンタープライズ・インストール時にSDDBデータベースに設定されます。SDDBデータベース表にモデルのスナップショット・データを格納することを選択できますが、本番システムではお薦めしません。


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


重要:

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


モデルのスナップショット表を構成するには:

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

  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. アプリケーション・サーバーに、モデルのスナップショット表の格納先であるデータベースを参照する新しいデータ・ソースを作成します。

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

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

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

  5. 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に再びアーカイブします。

  6. Enterprise Managerで、新規データ・ソースの名前をOracleRTD MBeanに登録します。

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

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

10.4 モデルのスナップショット表の移入とクリア

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

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

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

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

モデルのスナップショット表を移入またはクリアするには:

  1. Enterprise Managerで、「MBean」→OracleRTD→Learning Server→ スタディ名に移動します。

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

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

    • CompleteSnapshot

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

    • IncrementalSnapshot

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

    • DeleteSnapshot

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

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

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

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

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

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

10.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

図10-2に、選択肢別のカウントの問合せ結果を示します。

図10-2 選択肢別のカウントの問合せ結果

図10-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であることを意味します。

10.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

図10-3に、上位6位の予測属性の問合せ結果を示します。

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

図10-3については周囲のテキストで説明しています。

10.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×(実績件数-予想件数)/予想件数」です。

図10-4に、期待カウントと実カウントの差異の問合せ結果を示します。

図10-4 期待カウントと実カウントの差異の問合せ結果

図10-4については周囲のテキストで説明しています。

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

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

10.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

図10-5に、パーティション化された期待カウントと実カウントの問合せ結果を示します。

図10-5 パーティション化された期待カウントと実カウントの問合せ結果

周囲のテキストで図10-5を説明しています。

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

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

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