5.6 コスト重視の意思決定
コストは、分類にバイアスをかけるためにユーザーが指定する数値です。コストのより低い結果に対してコストのより高い結果にペナルティを課すために、アルゴリズムでは正の数を使用します。数値が大きいほどコストが高いことを示します。
一方、利益のより低い結果に対して利益のより高い結果を支持するためには負の数が使用されます。負の数が小さいほど利益が高いことを示します。
すべての分類アルゴリズムで、スコアリング用のコストを使用できます。コスト・マトリックス表でコストを指定するか、スコアリング時にインラインでコストを指定します。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。PREDICTION関数、PREDICTION_SET関数およびPREDICTION_COST関数がコストをサポートしています。
コストを使用してモデル作成にバイアスをかけることができるのは、デシジョン・ツリー・アルゴリズムのみです。コストを使用するデシジョン・ツリー・モデルを作成する場合は、コスト・マトリックス表を作成し、モデルのCLAS_COST_TABLE_NAME設定にその表の名前を指定します。モデルの作成時にコストを指定すると、モデルの作成に使用したコスト・マトリックスがスコアリング時に使用されます。スコアリング用に別のコスト・マトリックス表を使用する場合は、既存のコスト・マトリックス表を削除してから新しいコスト・マトリックス表を追加します。
次の表に、コスト・マトリックスの例の表を示します。コスト・マトリックスは、2項ターゲットのコストを指定しています。このマトリックスから、0に分類ミスした場合、1に分類ミスした場合の2倍のコストがかかるものとして処理されることがわかります。
表5-1 コスト・マトリックスの例
| ACTUAL_TARGET_VALUE | PREDICTED_TARGET_VALUE | COST |
|---|---|---|
|
0 |
0 |
0 |
|
0 |
1 |
2 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
例5-14 コストを使用した問合せの例
表nbmodel_costsには、表5-1で説明されているコスト・マトリックスが含まれています。
SELECT * from nbmodel_costs;
出力内容は次のようになります。
ACTUAL_TARGET_VALUE PREDICTED_TARGET_VALUE COST
------------------- ---------------------- ----------
0 0 0
0 1 2
1 0 1
1 1 0
次の文では、コスト・マトリックスをnbmodelという名前のNaive Bayesモデルに関連付けます。
BEGIN
dbms_data_mining.add_cost_matrix('nbmodel', 'nbmodel_costs');
END;
/
次の問合せでは、mining_data_apply_vのスコアリング時にコスト・マトリックスが考慮されます。出力は、1を予測するほうが0を予測するよりコストが低い行に制限されます。
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION (nbmodel COST MODEL
USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender
ORDER BY cust_gender;
出力内容は次のようになります。
C CNT AVG_AGE
- ---------- ----------
F 25 38
M 208 43
スコアリング関数を呼び出すときに、コストをインラインで指定できます。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。インラインで指定した異なるコストを使用している同じ内容の問合せを次に示します。コスト・マトリックス表(表5-1)で示されている「2」のかわりに、インラインで指定したコストでは「10」が指定されています。
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION (nbmodel COST (0,1) values ((0, 10), (1, 0)) USING cust_marital_status, education, household_size) = 1 GROUP BY cust_gender ORDER BY cust_gender;
出力内容は次のようになります。
C CNT AVG_AGE
- ---------- ----------
F 74 39
M 581 43
コストのかわりに確率に基づいた同じ内容の問合せを次に示します。
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION (nbmodel
USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender
ORDER BY cust_gender;
出力内容は次のようになります。
C CNT AVG_AGE
- ---------- ----------
F 73 39
M 577 44
親トピック: スコアリングと配置