データ・マイニングを使用すると、大量のデータに埋もれた有効な情報を見つけ出すことができます。ただし、これを行うために必要なプログラミング・インタフェースおよびデータ・マイニングは、幅広いユーザーが使用するには複雑すぎるため、Oracle Data Mining(ODM)を使用することで十分な効果を得ることができない場合があります。
DBMS_PREDICTIVE_ANALYTICSパッケージは、データ・マイニングのプロセス全体(データの前処理からモデルの作成、新しいデータのスコアリングに至るまで)を自動化して、これらの複雑さに対処しています。このパッケージは、幅広いユーザー(特にビジネス・アナリスト)がデータ・マイニングを使用できるような便利なツールを提供します。
ODMで使用されるデータは、Oracleデータベースに保存された表やビューで構成されています。レコード(行)の各列には、情報項目が含まれます。多くの場合、データ・マイニング・モデルは、重要な列の識別または列の値の予測に使用されます。
DBMS_PREDICTIVE_ANALYTICSパッケージは、次の機能をサポートしています。
EXPLAIN: ターゲット列の分析時に、重要度の順に属性をランク付けします。
PREDICT: 列の値を予測します。
この章では、次の項目について説明します。
この項では、DBMS_PREDICTIVE_ANALYTICSパッケージの使用に関連する項目について説明します。
データ・マイニングでは、一般に使用されているプロセス・モデルに従って、次の手順を実行する必要があります。
ビジネス上の問題を確認します。
データを確認します。
マイニングに使用するデータを準備します。
準備したデータを使用してモデルを作成します。
モデルを評価します。
モデルを配置し、使用して新しいデータのスコアリングを行います。
DBMS_PREDICTIVE_ANALYTICSは、このプロセスの手順3、手順4および5を自動化します。
ユーザーは、単一の表またはビューにデータを入力します。また、ユーザーは、EXPLAINの場合は分析する列を指定し、PREDICTの場合は予測する列およびcase id列を指定します。このプロシージャは、入力データを受け入れて分析し、適切な前処理を実行した後、モデルの作成およびテストを行い、最適なモデルを選択してデータにそのモデルを適用します。
DBMS_PREDICTIVE_ANALYTICSへの入力データが、Oracleデータベースの単一の表またはビューの名前になります。表の各列は、次のデータ型のいずれかである必要があります。
NUMBER
FLOAT
CHAR
VARCHAR2
DATE
TIMESTAMP
表72-1 DBMS_PREDICTIVE_ANALYTICSパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
ターゲット列の分析時に、重要度の順に属性をランク付けします。 |
|
|
入力データの値に基づいて列の値を予測します。 |
このプロシージャは、ターゲット列の分析時に重要度の順に属性をランク付けします。
このプロシージャは、入力データの表を分析して前処理を実行し、モデルの作成および分析を行ってキー列を識別した後、重要な列およびそれらの各列の説明力の数値を示す結果表を作成します。
構文
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);
パラメータ
表72-2 EXPLAINプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
入力データの表またはビューの名前。 |
|
|
分析する列の名前。 |
|
|
結果を保存する表の名前。 |
|
|
入力データの表またはビューが存在するスキーマの名前。デフォルトは現在のスキーマです。 |
使用上の注意
結果表は次のように定義されます。
column_name VARCHAR2(30) explanatory_value NUMBER rank NUMBER
表72-3に、結果表の列を示します。
表72-3 EXPLAINプロシージャの結果表
| 列名 | 意味 |
|---|---|
|
|
入力データの列の名前。分析された列を除くすべての列が結果表に示されます。 |
|
|
分析された列の値を確認する場合の列の有効性を示す値。値が高くなると説明力が大きくなります。値の範囲は0から1です。個々の列の分析値は、入力データ表の他の列とは無関係です。かわりに、この値は、各列と分析された列との関連性の高さを示します。この値は、入力データ表のレコード数、および各列の値と分析された列の値との関係によって影響を受けます。説明力の値が0(ゼロ)の場合は、各列の値と解析された列の値との間に有効な相関関係がないことを示します。説明力が1の場合は、完全な相関関係があることを示します。このような列は |
|
|
説明力のランキング。 |
例
次の例では、EXPLAIN操作を実行し、その結果を表示します。
--Perform EXPLAIN operation
BEGIN
DBMS_PREDICTIVE_ANALYTICS.EXPLAIN(
data_table_name => 'census_dataset',
explain_column_name => 'class',
result_table_name => 'census_explain_result');
END;
/
--View results
SELECT * FROM census_explain_result;
COLUMN_NAME EXPLANATORY_VALUE RANK
----------- ----------------- ----
RELATIONSHIP .21234788 1
MARITAL_STATUS .195201808 2
CAPITAL_GAIN .102951498 3
OCCUPATION .06883765 4
EDUCATION .067517394 5
EDUCATION_NUM .067517394 5
SEX .055541542 6
HOURS_PER_WEEK .032476973 7
AGE .021933245 8
CAPITAL_LOSS .013083265 9
RACE .009670242 10
WORKCLASS 0 11
NATIVE_COUNTRY 0 11
WEIGHT 0 11
PERSON_ID 0 11
15 rows selected.
このプロシージャは、特定の列の値を予測するために使用されます。入力データは表およびターゲット列で構成され、ターゲット列には予測する値が含まれます。入力データには、ターゲット値が判明しているケース(NULL以外の値)を含める必要があります。ターゲット値が判明しているケースは、モデルの調整に使用されます。
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);
パラメータ
表72-4 PREDICTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
入力データの表またはビューの名前。 |
|
|
入力データの各ケースを一意に識別する列の名前(カスタマID、ケースIDを含む列など)。 |
|
|
予測する値を含む列(ターゲット)の名前。 |
|
|
結果を保存する表の名前。 |
|
|
入力データの表またはビューが存在し、結果表が書き込まれるスキーマの名前。デフォルトは現在のスキーマです。 |
使用上の注意
結果表は次のように定義されます。
case_id_column_name VARCHAR2 or NUMBER prediction VARCHAR2 or NUMBER probability_number NUMBER
表72-5に、PREDICTプロシージャの結果表を示します。
表72-5 PREDICTプロシージャの結果表
| 列名 | 意味 |
|---|---|
|
|
case_id列に指定された各ケース。これは、渡された名前と同じです。データ型は、入力した |
|
|
特定のケースのターゲット列の予測値。データ型は、入力した |
|
|
分類(ターゲット属性がカテゴリ)の場合は、予測の確率です。リグレッションの問題(ターゲット属性が数値)の場合は、この列に |
予測は、入力データのすべてのケースに対して戻されます。
既知のケースの予測値は、偏差分析を実行する(予測値と実績値を比較する)場合などに使用されます。
例
次の例では、PREDICT操作を実行し、最初の10個の予測を表示します。この例では、ターゲット列classはカテゴリ属性のため、各予測に対して確率が戻されます。
--Perform PREDICT operation
DECLARE
v_accuracy NUMBER(10,9);
BEGIN
DBMS_PREDICTIVE_ANALYTICS.PREDICT(
accuracy => v_accuracy,
data_table_name => 'census_dataset',
case_id_column_name => 'person_id',
target_column_name => 'class',
result_table_name => 'census_predict_result');
DBMS_OUTPUT.PUT_LINE('Accuracy = ' || v_accuracy);
END;
/
--View first 10 predictions
SELECT * FROM census_predict_result where rownum < 10;
PERSON_ID PREDICTION PROBABILITY
---------- ---------- -----------
2 1 .418787003
7 0 .922977991
8 0 .99869723
9 0 .999999605
10 0 .9999009
11 0 .999999996
12 1 .953949094
15 0 .99999997
16 0 .999968961
9 rows selected.