32.6 コスト重視の意思決定

コストは、分類にバイアスをかけるためにユーザーが指定する数値です。コストのより低い結果に対してコストのより高い結果にペナルティを課すために、アルゴリズムでは正の数を使用します。数値が大きいほどコストが高いことを示します。

一方、利益のより低い結果に対して利益のより高い結果を支持するためには負の数が使用されます。負の数が小さいほど利益が高いことを示します。

すべての分類アルゴリズムで、スコアリング用のコストを使用できます。コスト・マトリックス表でコストを指定するか、スコアリング時にインラインでコストを指定します。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。PREDICTION関数、PREDICTION_SET関数およびPREDICTION_COST関数がコストをサポートしています。

コストを使用してモデル作成にバイアスをかけることができるのは、ディシジョン・ツリー・アルゴリズムのみです。コストを使用するディシジョン・ツリー・モデルを作成する場合は、コスト・マトリックス表を作成し、モデルのCLAS_COST_TABLE_NAME設定にその表の名前を指定します。モデルの作成時にコストを指定すると、モデルの作成に使用したコスト・マトリックスがスコアリング時に使用されます。スコアリング用に別のコスト・マトリックス表を使用する場合は、既存のコスト・マトリックス表を削除してから新しいコスト・マトリックス表を追加します。

次の表に、コスト・マトリックスの例の表を示します。コスト・マトリックスは、2項ターゲットのコストを指定しています。このマトリックスから、0に分類ミスした場合、1に分類ミスした場合の2倍のコストがかかるものとして処理されることがわかります。

表32-1 コスト・マトリックスの例

ACTUAL_TARGET_VALUE PREDICTED_TARGET_VALUE COST

0

0

0

0

1

2

1

0

1

1

1

0

例32-14 コストを使用した問合せの例

nbmodel_costsには、表32-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

スコアリング関数を呼び出すときに、コストをインラインで指定できます。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。インラインで指定した異なるコストを使用している同じ内容の問合せを次に示します。コスト・マトリックス表(表32-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