DBMS_PREDICTIVE_ANALYTICS
機械学習を使用すると、大量のデータに埋もれた有効な情報を発見できます。ただし、そうした結果を得るために必要なプログラミング・インタフェースと機械学習の専門知識は、Oracle Machine Learning for SQLの使用によって利益が得られる幅広い利用者が使用するには複雑すぎます。
DBMS_PREDICTIVE_ANALYTICS
パッケージは、機械学習のプロセス全体(データの前処理からモデルの作成、新しいデータのスコアリングに至るまで)を自動化して、これらの複雑さに対処しています。このパッケージは、幅広いユーザー(特にビジネス・アナリスト)が機械学習を使用できるようにする便利なツールを提供します。
この章のトピックは、次のとおりです:
DBMS_PREDICTIVE_ANALYTICSの使用方法
この項では、DBMS_PREDICTIVE_ANALYTICS
パッケージの使用に関連する項目について説明します。
DBMS_PREDICTIVE_ANALYTICSの概要
DBMS_PREDICTIVE_ANALYTICSにより、機械学習のプロセスの一部が自動化されます。
機械学習では、一般に使用されているプロセス・モデルに従って、次のステップを実行する必要があります。
-
ビジネス上の問題を確認します。
-
データを確認します。
-
マイニングに使用するデータを準備します。
-
準備したデータを使用してモデルを作成します。
-
モデルを評価します。
-
モデルをデプロイし、使用して新しいデータのスコアリングを行います。
DBMS_PREDICTIVE_ANALYTICS
は、このプロセスのステップ3から5を自動化します。
予測分析プロシージャは、入力データの分析と準備、および入力データを使用した機械学習モデルの作成とテストを実行して、スコアリングに入力データを使用します。スコアリングの結果はユーザーに戻されます。操作の完了後、モデルおよびサポート・オブジェクトは保持されません。
DBMS_PREDICTIVE_ANALYTICSのセキュリティ・モデル
DBMS_PREDICTIVE_ANALYTICS
パッケージは、ユーザーSYS
によって所有され、データベース・インストールの一環としてインストールされます。このパッケージの実行権限は、PUBLICに付与されます。このパッケージ内のルーチンは、実行者権限(現行のユーザーの権限)を使用して実行されます。
DBMS_PREDICTIVE_ANALYTICS
パッケージは、Oracle Machine Learning for SQLオプションで利用するAPIを公開します。このパッケージのプロシージャを起動するユーザーは、CREATE TABLE
およびCREATE VIEW
システム権限に加え、CREATE MINING MODEL
システム権限も必要です。
DBMS_PREDICTIVE_ANALYTICSサブプログラムの要約
この表では、DBMS_PREDICTIVE_ANALYTICS
パッケージのサブプログラムをリストし、簡単に説明します。
表6-176 DBMS_PREDICTIVE_ANALYTICSパッケージのサブプログラム
サブプログラム | 用途 |
---|---|
ターゲット列の分析時に、重要度の順に属性をランク付けします。 |
|
入力データの値に基づいてターゲット列の値を予測します。 |
|
同じターゲット値を持つレコードを識別するルールを生成します。 |
EXPLAINプロシージャ
EXPLAIN
プロシージャは、ターゲット列の値のバリエーションを説明する場合に重要となる属性を識別します。
入力データには、ターゲット値が判明しているレコード(NULL
以外の値)を含める必要があります。これらのレコードはプロシージャによって使用され、属性の重要度を計算するモデルの調整が行われます。
ノート:
EXPLAIN
は、DATE
データ型とTIMESTAMP
データ型、およびOracle Machine Learning for SQLのモデルでサポートされる、数値、文字およびネストしたデータ型をサポートします。
Oracle Machine Learning for SQLのデータ要件については、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください
EXPLAIN
プロシージャは、属性を説明力の順序で表示する結果表を作成します。結果表については、「使用上のノート」を参照してください。
構文
DBMS_PREDICTIVE_ANALYTICS.EXPLAIN ( data_table_name IN VARCHAR2, explain_column_name IN VARCHAR2, result_table_name IN VARCHAR2, data_schema_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表6-177 EXPLAINプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
入力データの表またはビューの名前。 |
|
分析する列の名前。 |
|
結果を保存する表の名前。 |
|
入力データの表またはビューが存在し、結果表が作成されるスキーマの名前。デフォルトは現在のスキーマです。 |
使用上のノート
EXPLAIN
プロシージャは、表6-178で説明する列を使用して結果表を作成します。
表6-178 EXPLAINプロシージャの結果表
列名 | データ・タイプ | 説明 |
---|---|---|
|
|
入力データの列の名前。分析された列を除くすべての列が結果表に示されます。 |
|
|
分析された列の値を確認する場合の列の有効性を示す値。値が高くなると説明力が大きくなります。値の範囲は0から1です。 個々の列の分析値は、入力データ表の他の列とは無関係です。この値は、各列と分析された列との関連性の高さを示します。この値は、入力データ表のレコード数、および各列の値と分析された列の値との関係によって影響を受けます。 説明力の値が0の場合は、各列の値と解析された列の値との間に有効な相関関係がないことを示します。説明力が1の場合は完全な相関関係があることを示しており、このような列は、 |
|
|
説明力のランキング。 |
例
次の例では、販売履歴のSUPPLEMENTARY_DEMOGRAPHICS
表でEXPLAIN
操作を実行します。
--Perform EXPLAIN operation BEGIN DBMS_PREDICTIVE_ANALYTICS.EXPLAIN( data_table_name => 'supplementary_demographics', explain_column_name => 'home_theater_package', result_table_name => 'demographics_explain_result'); END; / --Display results SELECT * FROM demographics_explain_result;
ATTRIBUTE_NAME EXPLANATORY_VALUE RANK ---------------------------------------- ----------------- ---------- Y_BOX_GAMES .524311073 1 YRS_RESIDENCE .495987246 2 HOUSEHOLD_SIZE .146208506 3 AFFINITY_CARD .0598227 4 EDUCATION .018462703 5 OCCUPATION .009721543 6 FLAT_PANEL_MONITOR .00013733 7 PRINTER_SUPPLIES 0 8 OS_DOC_SET_KANJI 0 8 BULK_PACK_DISKETTES 0 8 BOOKKEEPING_APPLICATION 0 8 COMMENTS 0 8 CUST_ID 0 8
この結果から、Y_BOX_GAMES
、YRS_RESIDENCE
およびHOUSEHOLD_SIZE
が、HOME_THEATER_PACKAGE
の最適な予測子であることがわかります。
PREDICTプロシージャ
PREDICT
プロシージャは、ターゲット列の値を予測します。
入力データには、ターゲット値が判明しているレコード(NULL
以外の値)を含める必要があります。これらのレコードはプロシージャによって使用され、予測を作成するモデルの調整およびテストが行われます。
ノート:
PREDICT
は、DATE
データ型とTIMESTAMP
データ型、およびOracle Machine Learning for SQLのモデルでサポートされる、数値、文字およびネストしたデータ型をサポートします。
Oracle Machine Learning for SQLのデータ要件については、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください
PREDICT
プロシージャは、レコードごとの予測されたターゲット値を含む結果表を作成します。結果表については、「使用上のノート」を参照してください。
構文
DBMS_PREDICTIVE_ANALYTICS.PREDICT ( accuracy OUT NUMBER, data_table_name IN VARCHAR2, case_id_column_name IN VARCHAR2, target_column_name IN VARCHAR2, result_table_name IN VARCHAR2, data_schema_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表6-179 PREDICTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
予測の信頼度を戻す出力パラメータであり、予測値の精度です。質的ターゲットの予測の信頼度は最も一般的なターゲット値で、量的ターゲットの予測の信頼度は平均値になります。 |
|
入力データの表またはビューの名前。 |
|
入力データの各ケース(レコード)を一意に識別する列の名前。 |
|
予測する列の名前。 |
|
結果を保存する表の名前。 |
|
入力データの表またはビューが存在し、結果表が作成されるスキーマの名前。デフォルトは現在のスキーマです。 |
使用上のノート
PREDICT
プロシージャは、表6-180で説明する列を使用して結果表を作成します。
表6-180 PREDICTプロシージャの結果表
列名 | データ・タイプ | 説明 |
---|---|---|
ケースID列の名前 |
|
入力データのケースID列の名前。 |
|
|
特定のケースのターゲット列の予測値。 |
|
|
分類(質的ターゲット)の場合は、予測の確率です。回帰の問題(量的ターゲット)の場合は、この列に |
ノート:
ケースID列の名前が、'PREDICTION
'または'PROBABILITY
'でないことを確認してください。
予測は、入力にターゲット値を含むかどうかにかかわらず、すべてのケースに対して戻されます。
既知のケースの予測値が役立つ場合があります。たとえば、偏差分析を実行して予測値と実績値を比較する場合です。
例
次の例では、PREDICT
操作を実行し、最初の10個の予測を表示します。この結果から、各顧客がアフィニティ・カードを持っているかどうかに関する予測の精度が79%であることがわかります。
--Perform PREDICT operation DECLARE v_accuracy NUMBER(10,9); BEGIN DBMS_PREDICTIVE_ANALYTICS.PREDICT( accuracy => v_accuracy, data_table_name => 'supplementary_demographics', case_id_column_name => 'cust_id', target_column_name => 'affinity_card', result_table_name => 'pa_demographics_predict_result'); DBMS_OUTPUT.PUT_LINE('Accuracy = ' || v_accuracy); END; / Accuracy = .788696903 --Display results SELECT * FROM pa_demographics_predict_result WHERE rownum < 10; CUST_ID PREDICTION PROBABILITY ---------- ---------- ----------- 101501 1 .834069848 101502 0 .991269965 101503 0 .99978311 101504 1 .971643388 101505 1 .541754127 101506 0 .803719133 101507 0 .999999303 101508 0 .999999987 101509 0 .999953074
PROFILEプロシージャ
PROFILE
プロシージャは、入力データからのケース(レコード)を記述するルールを生成します。
たとえば、ターゲット列CHURN
の値がYesおよびNoである場合、PROFILE
は予想される結果を記述するルール・セットを生成します。各プロファイルには、ルール、レコード数およびスコアの分散が含まれています。
入力データには、ターゲット値が判明しているケース(NULL
以外の値)を含める必要があります。これらのケースはプロシージャによって使用され、ルールを計算するモデルが構築されます。
ノート:
PROFILE
は、ネストしたタイプまたは日付をサポートしていません。
Oracle Machine Learning for SQLのデータ要件については、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください
PROFILE
プロシージャは、ルール(プロファイル)および対応するターゲット値を指定する結果表を作成します。結果表については、「使用上のノート」を参照してください。
構文
DBMS_PREDICTIVE_ANALYTICS.PROFILE ( data_table_name IN VARCHAR2, target_column_name IN VARCHAR2, result_table_name IN VARCHAR2, data_schema_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表6-181 PROFILEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
分析対象のデータが保存される表の名前。 |
|
ターゲット列の名前。 |
|
結果を保存する表の名前。 |
|
入力データの表またはビューが存在し、結果表が作成されるスキーマの名前。デフォルトは現在のスキーマです。 |
使用上のノート
PROFILE
プロシージャは、表6-182で説明する列を使用して結果表を作成します。
表6-182 PROFILEプロシージャの結果表
列名 | データ・タイプ | 説明 |
---|---|---|
|
|
このプロファイル(ルール)に対する一意の識別子。 |
|
|
プロファイルによって記述されるレコード数。 |
|
|
プロファイルのルール。「プロファイルのルールのXMLスキーマ」を参照してください。 |
プロファイルのルールのXMLスキーマ
結果表のDESCRIPTION
列には、次のXSDに準拠するXMLが含まれています。
<xs:element name="SimpleRule"> <xs:complexType> <xs:sequence> <xs:group ref="PREDICATE"/> <xs:element ref="ScoreDistribution" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="optional"/> <xs:attribute name="score" type="xs:string" use="required"/> <xs:attribute name="recordCount" type="NUMBER" use="optional"/> </xs:complexType> </xs:element>
例
この例では、アフィニティ・カードを使用する可能性がある顧客を記述するルール(ターゲット値は1)、およびアフィニティ・カードを使用する可能性がない顧客を記述するルール・セット(ターゲット値は0)が生成されます。ルールは、educationおよびoccupationの2つの予測子のみに基づいています。
SET serveroutput ON SET trimspool ON SET pages 10000 SET long 10000 SET pagesize 10000 SET linesize 150 CREATE VIEW cust_edu_occ_view AS SELECT cust_id, education, occupation, affinity_card FROM sh.supplementary_demographics; BEGIN DBMS_PREDICTIVE_ANALYTICS.PROFILE( DATA_TABLE_NAME => 'cust_edu_occ_view', TARGET_COLUMN_NAME => 'affinity_card', RESULT_TABLE_NAME => 'profile_result'); END; /
この例では、結果表profile_result
に8個のルールが生成されます。このルールのうち7個はターゲット値0を示し、1つはターゲット値1を示しています。ルールのscore
属性はターゲット値を識別します。
次のSELECT
文は、結果表のすべてのルールを戻します。
SELECT a.profile_id, a.record_count, a.description.getstringval() FROM profile_result a;
次のSELECT
文は、ターゲット値0のルールを戻します。
SELECT * FROM profile_result t WHERE extractvalue(t.description, '/SimpleRule/@score') = 0;
この例で生成された8個のルールは、次のとおりです。
<SimpleRule id="1" score="0" recordCount="443"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"Armed-F" "Exec." "Prof." "Protec." </Array> </SimpleSetPredicate> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string">"< Bach." "Assoc-V" "HS-grad" </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="297" /> <ScoreDistribution value="1" recordCount="146" /> </SimpleRule> <SimpleRule id="2" score="0" recordCount="18"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"Armed-F" "Exec." "Prof." "Protec." </Array> </SimpleSetPredicate> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string">"10th" "11th" "12th" "1st-4th" "5th-6th" "7th-8th" "9th" "Presch." </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="18" /> </SimpleRule> <SimpleRule id="3" score="0" recordCount="458"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"Armed-F" "Exec." "Prof." "Protec." </Array> </SimpleSetPredicate> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string">"Assoc-A" "Bach." </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="248" /> <ScoreDistribution value="1" recordCount="210" /> </SimpleRule> <SimpleRule id="4" score="1" recordCount="276"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"Armed-F" "Exec." "Prof." "Protec." </Array> </SimpleSetPredicate> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string">"Masters" "PhD" "Profsc" </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="1" recordCount="183" /> <ScoreDistribution value="0" recordCount="93" /> </SimpleRule> <SimpleRule id="5" score="0" recordCount="307"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string">"Assoc-A" "Bach." "Masters" "PhD" "Profsc" </Array> </SimpleSetPredicate> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"Crafts" "Sales" "TechSup" "Transp." </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="184" /> <ScoreDistribution value="1" recordCount="123" /> </SimpleRule> <SimpleRule id="6" score="0" recordCount="243"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string">"Assoc-A" "Bach." "Masters" "PhD" "Profsc" </Array> </SimpleSetPredicate> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"?" "Cleric." "Farming" "Handler" "House-s" "Machine" "Other" </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="197" /> <ScoreDistribution value="1" recordCount="46" /> </SimpleRule> <SimpleRule id="7" score="0" recordCount="2158"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string"> "10th" "11th" "12th" "1st-4th" "5th-6th" "7th-8th" "9th" "< Bach." "Assoc-V" "HS-grad" "Presch." </Array> </SimpleSetPredicate> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"?" "Cleric." "Crafts" "Farming" "Machine" "Sales" "TechSup" " Transp." </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="1819"/> <ScoreDistribution value="1" recordCount="339"/> </SimpleRule> <SimpleRule id="8" score="0" recordCount="597"> <CompoundPredicate booleanOperator="and"> <SimpleSetPredicate field="EDUCATION" booleanOperator="isIn"> <Array type="string"> "10th" "11th" "12th" "1st-4th" "5th-6th" "7th-8th" "9th" "< Bach." "Assoc-V" "HS-grad" "Presch." </Array> </SimpleSetPredicate> <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn"> <Array type="string">"Handler" "House-s" "Other" </Array> </SimpleSetPredicate> </CompoundPredicate> <ScoreDistribution value="0" recordCount="572"/> <ScoreDistribution value="1" recordCount="25"/> </SimpleRule>