Oracle RTDのモデルのスナップショット機能を使用すると、Oracle RTDの予測モデルに蓄積されたデータを、外部データベースの表にエクスポートできます。これらの結果には、イベント件数、予測値および相関関係が含まれます。Oracle RTDのモデルからエクスポートされたデータはさらに、標準のレポート作成およびビジネス・インテリジェンスの製品および技術を使用して分析できます。
指定されたインライン・サービスの予測モデルにOracle RTDが収集したデータは、スタディにアタッチされます。インライン・サービスとスタディの関連付けは、デプロイメント時に定義されます。
Oracle RTDのモデルのスナップショット機能は、スタディ・レベルで動作し、インライン・サービスで定義されているすべてのモデルに影響を及ぼします。モデルのスナップショットを使用すると、指定したスタディのインライン・サービスのすべてのモデルに格納されているデータをエクスポートできます。
モデルのスナップショット機能によってエクスポートされたデータを使用すると、Oracle RTDのデシジョン・センターによって提供される標準の選択肢および選択肢グループ・レベルの「予測モデル」レポートをレプリケートし、拡張できます。さらに、データ・ウェアハウスから得られる顧客データと関連付けられている場合、このエクスポートされたデータを使用すると、Oracle RTDによって収集および生成された予測的な洞察データの顧客中心のオフライン・レポートを作成できます。
この項には、次の項目が含まれます。
注意: Oracle RTDのモデルのスナップショット機能を設定し、使用する方法の説明では、予測モデルが移入された状態でインライン・サービスが稼動していると想定しています。 |
モデルのスナップショットの設定および使用のプロセスは、主に次の3つの段階に分かれています。
モデルのスナップショット表の構成。
学習データからのモデルのスナップショット表の移入と、必要に応じた表のクリア。
モデルのスナップショット表からのレポート作成。
モデルのスナップショットに関連して、チューニングを目的とするパラメータが2つあります。詳細は、第10.7項「モデルのスナップショット・プロセスのチューニング」を参照してください。
Oracle RTDでの予測モデル・データのエクスポートには、多次元スキーマが使用されます。図10-1のエンティティ関連モデルは、この多次元スキーマを示したものです。この図では、モデルのスナップショット表(RTDSnapshotSchemaVersionを除く)とその列を示し、表間の関係をコネクタ線で表現しています。
各コネクタは、コネクタの上位の表から下位の表への関係が1対多であることを示しています。逆に、下位の表から上位の表への関係は1対1になります。
表で表される要素間の1対多の関係は次のとおりです(1対多の関係はそれぞれ、逆方向では1対1の関係になります)。
スタディはそれぞれ、1つ以上のアプリケーションと1つ以上のモデルを持つことができます。
アプリケーションはそれぞれ、1つ以上の選択肢グループと1つ以上の選択肢を持つことができます。
選択肢グループはそれぞれ、1つ以上の選択肢を持つことができます。
選択肢、イベントおよびモデルはそれぞれ、1つ以上のモデル・インスタンスを持つことができます。
モデル・インスタンスはそれぞれ、1つ以上の累積利得を持つことができます。
モデル・インスタンスと属性(パーティション、予測および相関関係)の間には、多対多の関係も3つあります。
表名および列名は、次の一覧のとおりです。
RTDApp
列 | 説明 |
---|---|
id |
主キー。 |
study_id |
RTDStudyに対する外部キー。 |
name |
アプリケーション名。 |
RTDAttribute
列 | 説明 |
---|---|
id |
主キー。 |
name |
属性名。 |
path |
セッションのルートからこの属性への到達方法を示す、区切り記号付きの属性名。 |
RTDChoice
列 | 説明 |
---|---|
id |
主キー。 |
app_id |
RTDAppに対する外部キー。 |
internal_name |
選択肢の内部名。 |
display_name |
選択肢の表示名。 |
choicegroup_id |
RTDChoiceGroupに対する外部キー。 |
RTDChoiceGroup
列 | 説明 |
---|---|
id |
主キー。 |
app_id |
RTDAppに対する外部キー。 |
internal_name |
選択肢グループの内部名。 |
display_name |
選択肢グループの表示名。 |
RTDCorrelation
列 | 説明 |
---|---|
model_instance_id |
RTDModelInstanceに対する外部キー。 |
attribute_id |
RTDAttributeに対する外部キー。 |
count_output_input |
移入する入力データで、この出力属性値が検出された件数。 |
correlation |
-1から1の値。正の相関関係は、入力属性値の出力値への関係の度合いを表します。負の相関関係は、関係がないことを示します。 |
count_input |
移入において、この入力属性値が検出された件数。 |
value |
入力属性の値。 |
注意: 特定のモデル・インスタンスのRTDCorrelationの列count_inputの合計が、関連するRTDModelInstanceの列count_totalより少ない場合があります。 また、特定のモデル・インスタンスのRTDCorrelationの列count_output_inputの合計が、関連するRTDModelInstanceの列count_positiveより少ない場合もあります。 これらの結果は、次の状況で生じることがあります。
|
RTDCumulativeGains
列 | 説明 |
---|---|
model_instance_id |
RTDModelInstanceに対する外部キー。 |
x |
累積利得の曲線データ・ポイント。 |
y |
累積利得の曲線データ・ポイント。 |
RTDEvent
列 | 説明 |
---|---|
id |
主キー。 |
name |
イベント名。 |
RTDModel
列 | 説明 |
---|---|
id |
主キー。 |
name |
モデル名。 |
study_id |
RTDStudyに対する外部キー。 |
RTDModelInstance
列 | 説明 |
---|---|
id |
主キー。 |
state |
モデルの状態。 可能な値は次のとおりです。 c: 完了。モデルは完了しています(以前の時間枠を対象としている場合など)。これ以上変更されることはありません。モデルの完全スナップショットを実行するか、モデルのスナップショットを削除した後にモデルの増分スナップショットを実行しないかぎり、再書込みは行われません。 d: 複合。モデルは、現在と以前の時間枠を対象としています。 s: 分割。モデルは、現在の時間枠を対象としています。 w: 書込み中。モデルは現在書込み中です。一貫性のない結果となる可能性があります。 |
model_id |
RTDModelに対する外部キー。 |
choice_id |
RTDChoiceに対する外部キー。 |
event_id |
RTDEventに対する外部キー。 |
count_total |
ベース・イベントの合計数。 |
count_positive |
この非ベース・イベントが記録された移入のサブセットのサイズ。 |
time_window_start |
時間枠の開始。 |
time_window_end |
時間枠の終了。 |
quality |
モデルの品質で、0から1までの値。値が高いほど良く、0は何も学習されなかったことを表します。 |
mae |
平均絶対誤差。 |
me |
平均誤差。 |
mse |
平均二乗誤差。 |
rmse |
根平均二乗誤差。 |
rel_mae |
相対平均絶対誤差。 |
rel_me |
相対平均誤差。 |
rel_mse |
相対平均二乗誤差。 |
rel_rmse |
相対根平均二乗誤差。 |
RTDPartition
列 | 説明 |
---|---|
model_instance_id |
RTDModelInstanceに対する外部キー。 |
attribute_id |
RTDAttributeに対する外部キー。 |
value |
パーティションの属性値。 |
RTDPredictiveness
列 | 説明 |
---|---|
model_instance_id |
RTDModelInstanceに対する外部キー。 |
attribute_id |
RTDAttributeに対する外部キー。 |
predictiveness |
特定のモデル・インスタンスに対する入力属性の説明的なスコア。0から1の値で、値が大きいほどスコアが高いことを表します。 |
RTDSnapshotSchemaVersion
列 | 説明 |
---|---|
major |
メジャー・バージョン。 |
minor |
マイナー・バージョン。 |
RTDStudy
列 | 説明 |
---|---|
id |
主キー。 |
name |
スタディ名。 |
注意: モデルのスナップショット表は、Oracle Real-Time Decisionsの簡易インストールおよびエンタープライズ・インストール時にSDDBデータベースに設定されます。SDDBデータベース表にモデルのスナップショット・データを格納することを選択できますが、本番システムではお薦めしません。 |
この段階の主要な目的は、非SDDSデータベースにモデルのスナップショット表を作成し、それをアプリケーション・サーバーおよびJMX MBeanに登録することです。
重要: モデルのスナップショット表内のテキスト値は、大文字と小文字を区別する必要があります。データベースのデフォルト設定が大文字と小文字を区別しないようになっている場合は、モデルのスナップショット表を作成するときに、この設定を無効にしてください。 |
モデルのスナップショット表を構成するには:
モデルのスナップショット表を格納するデータベースを選択します。
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
スクリプトのパラメータについて説明しています。
パラメータ | 説明 |
---|---|
|
データベースのタイプ。 oracle、sqlserver、db2のいずれかを選択します。 |
|
データベース・サーバーをホスティングするコンピュータの名前。 |
|
データベースのポート番号。 |
|
データベースの名前。Oracle Databaseの場合はSID。 |
|
システムのランタイム・ユーザーのユーザー名。 |
|
データベースに対して表およびストアド・プロシージャを作成する権限を持つユーザーの名前。 |
|
管理ユーザーのパスワード。 |
脚注 1 Oracle Databaseの場合は、db_runtime_user
とdb_admin_user
は同じユーザーになります。
アプリケーション・サーバーに、モデルのスナップショット表の格納先であるデータベースを参照する新しいデータ・ソースを作成します。
アプリケーション・サーバーでのデータ・ソースの作成方法の詳細は、第5章「Oracle Real-Time Decisionsのデータ・アクセスの構成」を参照してください。
新しいデータ・ソースを作成する作業の一貫として、この後の手順で使用する新しいJNDI名を指定します。
インストール時にRTD.ear
ファイルを展開したディレクトリ(RTD_HOME
/package/expanded
)に移動します。
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
に再びアーカイブします。
Enterprise Managerで、新規データ・ソースの名前をOracleRTD MBeanに登録します。
「MBeans」→「OracleRTD」→「SDClusterPropertyManager」→「Misc」にナビゲートします。
ModelSnapshotDSName属性で、モデルのスナップショット用に作成したデータ・ソースの名前を指定します。
モデルの学習データのスナップショットは、予測に必要なデータが十分に蓄積されていない場合であっても、いつでも取得できます。
各モデルは、週、月、四半期などの時間枠を設定できるように定義されています。時間枠は、学習プロセスにおいて収集されるデータ量を決定し、モデルのスナップショット表に書き込まれるデータ量に影響を与えます。
書き込むデータの量は、次のオプションから選択できます。
スタディに対するモデルの学習データすべて
現在の時間枠のスタディに対するモデルの学習データすべて
また、モデルのスナップショット表から、スタディに対するモデルの学習データをすべて削除することもできます。
モデルのスナップショット表を移入またはクリアするには:
Enterprise Managerで、「MBean」→OracleRTD→Learning Server→ スタディ名に移動します。
「Operations」タブをクリックします。
該当するスナップショット・オプションをクリックします。
CompleteSnapshot
スタディに対してそれまで取得されたデータをすべて削除し、現時点までのすべてのスタディ・データを再書込みします。
IncrementalSnapshot
未完了の時間枠のスタディ・データを削除し、現時点までの現行の時間枠のデータを再書込みします。
DeleteSnapshot
スタディに対して取得されたデータをすべて削除します。
モデルのスナップショット表からレポートを作成できます。作成する場合は通常、SQLの標準Selectコマンドを使用するか、または次の製品ドライバ・レポートと同様のレポートを生成するビジネス・インテリジェンス製品にデータを送ります。
この項の残りの部分では、モデルの複数のスナップショット表から情報を抽出するスクリプトの例を示します。各スクリプト例の後には、サンプルの出力を示します。また、一部の例には、結果の解釈に役立つ注釈があります。
これらの例で使用されるインライン・サービスは、CrossSellアプリケーションです。また、データは、400,000ユーザー・セッションをシミュレートしたOracle RTDロード・ジェネレータ・スクリプトを完了まで実行して生成されています。
次の問合せでは、選択肢別の件数をすべての時間枠について取得します。
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に、選択肢別のカウントの問合せ結果を示します。
選択肢別の件数の問合せ結果についての注釈
行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日の期間に適用されます。
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であることを意味します。
次の問合せでは、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位の予測属性の問合せ結果を示します。
次の問合せでは、クレジット・プロテクションを実際に購入した顧客数とクレジット・プロテクションの購入が予想される顧客数を、婚姻ステータス別に示します。また、このレポートでは、これら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
予想件数と実績件数の差異の問合せについての注釈
Actual Count(cor.count_output_input
)は、クレジット・プロテクションを実際に購入した顧客の婚姻ステータス別の人数です。
Expected Countは、mi.count_positive/mi.count_total
で表される、クレジット・プロテクションを購入した顧客の人数に対する、婚姻ステータス別の合計人数の単純な線形予測(cor.count_input
)です。
Percent Differenceは、「100×(実績件数-予想件数)/予想件数」です。
図10-4に、期待カウントと実カウントの差異の問合せ結果を示します。
予想件数と実績件数の差異の問合せ結果についての注釈
婚姻ステータスごとに2つの行があり、2003年4月1日から2003年7月1日と2003年7月1日から2003年10月1日それぞれの期間に対応しています。
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の行1: 属性=Marital Status、値=Married
RTDPartitionの行2: 属性=Favorite Beverage、値=Coffee
モデルがパーティション化されているかどうかは、モデルのスナップショット表に対する問合せ結果に影響を与える場合があります。結果の中で繰返しが行われないようにするには、問合せに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に、パーティション化された期待カウントと実カウントの問合せ結果を示します。
JMX MBean属性として用意されている次のパラメータを使用して、モデルのスナップショット・プロセスをチューニングできます。
ModelSnapshotMinAbsCorrelationでは、すべての相関行のスナップショットを実行するか、スナップショットのための最小相関値を設定するかを制御します。
ModelSnapshotNumberOfBinsでは、モデルのスナップショットのビンの数を制御します。
詳細は、第13.3.2項「OracleRTD > SDClusterPropertyManager > Miscについて」を参照してください。