分類について
分類とは、ある集合内の項目をターゲットのカテゴリまたはクラスに割り当てる機械学習手法です。
分類の目的は、データの各ケースのターゲット・クラスを正確に予測することです。たとえば、分類モデルを使用すれば、融資希望者を信用リスク別(低、中、高)で識別することが可能です。
分類タスクは、クラスの割当てが判明しているデータセットから着手します。たとえば、信用リスクを予測する分類モデルは、一定の期間に観測された多数の融資希望者のデータに基づいて作成されます。これらのデータには、支払能力の履歴だけでなく、雇用履歴、持ち家または賃貸、居住年数、投資の数と種類などが含まれていることが考えられます。支払能力をターゲット、他の属性を予測子として、各顧客のデータが1つのケースを構成します。
分類は離散的であり、順序を示すものではありません。連続的な浮動小数点値の場合、ターゲットは質的ではなく量的になります。量的ターゲットを扱う予測モデルでは、分類アルゴリズムではなく、回帰アルゴリズムを使用します。
最も単純なタイプの分類問題は、2項分類です。2項分類では、ターゲット属性が取り得る値は2つのみ(たとえば「支払能力が高い」と「支払能力が低い」)です。多クラス・ターゲットは、3つ以上の値(たとえば支払能力の場合、低、中、高、不明など)を持ちます。
分類アルゴリズムは、モデルの作成(トレーニング)プロセスにおいて、予測子の値とターゲットの値の関係を見つけます。関係の検出に使用される手法は、分類アルゴリズムによって異なります。これらの関係はモデル内に集約され、このモデルはクラスの割当てが未知である別のデータセットに適用できます。
分類モデルは、テスト・データセット内の既知のターゲット値と予測値を比較することによってテストされます。通常、分類プロジェクト用の履歴データを2つのデータセットに分割し、一方をモデルの作成用、もう一方をモデルのテスト用として使用します。
分類モデルを適用すると、各ケースについてのクラスの割当ておよび確率が生成されます。たとえば、顧客を低、中、高の値に分類するモデルの場合、各顧客についてそれぞれの値に分類される確率も予測されます。
分類は、顧客のセグメンテーション、ビジネスのモデル化、マーケティング、信用分析、生物医学および薬物反応モデリングなど、様々な分野で利用されます。
分類モデルのテスト
分類モデルをテストするには、既知のターゲット値を持つテスト・データにそのモデルを適用し、予測値と既知の値を比較します。
モデルを適用するテスト・データは、モデルの構築で使用したデータと互換性があることが必要で、モデル構築データが準備されたのと同じ方法で準備される必要があります。通常、作成データとテスト・データは、同じ履歴データ・セットからのものである必要があります。モデルの作成に数パーセントのレコードが使用され、残りのレコードはモデルのテストに使用されます。
これらの既知の値をモデルがどれくらい正確に予測するかを評価するために、テスト・メトリックが使用されます。モデルの予測精度が高くビジネス要件を満たす場合は、新しいデータにそのモデルを適用して将来の予測に役立てることができます。
混同マトリックス
混同マトリックスは、モデルによる予測をテスト・データでの実際の分類と比較した場合の、正確な予測と不正確な予測の数を表したものです。このマトリックスはn×nの行列(nはクラスの数)です。
次の図は、2項分類モデルの混同マトリックスです。各行は、テスト・データでの実際の分類の数を表しています。各列は、モデルにより予測された分類の数を表しています。
この例では、affinity_card
のポジティブ・クラス(真陽性(TP)とも呼ばれます)をモデルが正確に予測したのが516回、不正確に予測したのが25回です(偽陰性(FN)とも呼ばれます)。affinity_card
のネガティブ・クラス(真のネガティブ(TN)とも呼ばれる)を正確に予測したのが725回、不正確に予測したのが10回です(偽陽性(FP)とも呼ばれます)。この混同マトリックスから次のことが計算できます。
-
このモデルは1241の正確な予測、つまりTP + TN (516 + 725)を行いました。
-
このモデルは35の不正確な予測、つまりFN + FP (25 + 10)を行いました。
-
スコアリングされたケースの合計は1276 (516 + 25 + 10 + 725)です。
-
誤差率は0.0274 (35/1276)です。(FN + FP/合計)
-
総合精度は1241/1276 = 0.9725 (TP + TN)/合計)です。
精度とリコール
同じ例を考えてみます。精度は0.97です。ただし、モデルが誤って予測した場合があります。精度(正の予測値)は、関連するケースのみを返す分類モデルの機能です。精度はTP/TP+FPとして計算できます。リコール(感度または真陽性率)は、分類モデルが関連するケースを返す能力です。リコールはTP/TP+FNとして計算できます。この例の精度は516/526 = 0.98です。この例のリコールは516/541 = 0.95です。このモデルは、精度とリコールの両方が1の場合に適しています。これは、分子と分母が等しい場合に発生する可能性があります。つまり、精度の場合、FPがゼロで、リコールの場合、FNがゼロです。
リフト
リフトは、ランダムに生成された予測と比較して、分類モデルの予測がどの程度信頼できるかを計算したものです。
リフトが適用されるのは2項分類のみで、ポジティブ・クラスを指定する必要があります。モデル自体に2項ターゲットがない場合は、1つのクラスをポジティブとして指定し、その他すべてのクラスを1つにまとめたものをネガティブ・クラスとして、リフトを計算できます。
多数の統計量計算を使用して、リフトの概念をサポートできます。基本的に、リフトは、モデルにより正確に予測されたポジティブ分類の割合と、テスト・データでの実際のポジティブ分類の割合という、2つの割合の比率として考えることができます。たとえば、ある市場調査で、過去に実施された販促キャンペーンに対して40%の顧客が好意的な反応を示し(ポジティブ分類)、モデルではそれらの顧客の75%を正確に予測したとする場合、リフトは0.75を0.40で割ることによって求めることができます。この計算で求められるリフトは、1.875です。
リフトは、それぞれが同数のケースを含んでいる複数の分位に対して計算されます。対象のデータは、スコアリングされた後で分位に分割されます。ポジティブ・クラスの確率が最も高いものから最も低いものの順にランク付けされ、ポジティブ予測の集中度が高い方が上位の分位になります。標準的な分位数は10です。
リフトは通常、マーケティング用途の反応モデルの性能を測定するために使用されます。反応モデルの目的は、マーケティング・キャンペーンに対する肯定的な反応者が潜在的に多数集まっている母集団のセグメントを特定することです。リフトを使用することにより、最高率の潜在的反応者を得るためには母集団のどの部分にマーケティング活動を行うべきかが明らかになります。
関連トピック
リフト統計量
Oracle Machine Learning for SQLで計算できる様々なリフト統計量を学習します。
Oracle Machine Learning for SQLでは、次のリフト統計量が計算されます。
-
分位nの確率しきい値: ポジティブ・ターゲットが、その分位またはそれより前の任意の分位(分位n-1、n-2、...、1)に含まれる最小確率です。コスト・マトリックスを使用する場合は、かわりにコストしきい値が示されます。コストしきい値は、ポジティブ・ターゲットが、その分位またはそれより前の任意の分位に含まれる最大コストです。
-
累積増加率: ポジティブ・ターゲットの総数に対するポジティブ・ターゲットの累計数の割合。
-
ある分位のターゲット密度: その分位内の実際のポジティブ・インスタンスの数を、分位内のインスタンスの総数で割った値。
-
分位nの累積ターゲット密度: 最初のn個の分位に対して計算されるターゲット密度。
-
分位リフト: すべてのテスト・データのターゲット密度に対する分位のターゲット密度の割合。
-
レコードの累積比率: ある分位について、最初のn個(ポジティブである信頼度が最も高い最後の分位から指定の分位までを含むn個)の分位によって表されるすべてのケースの割合。
-
分位nの累積ターゲット数: 最初のn個の分位内における実際のポジティブ・インスタンスの数。
-
累積非ターゲット数: 最初のn個の分位における実際のネガティブ・インスタンスの数。
-
ある分位の累積リフト: すべてのテスト・データのターゲット密度に対する累積ターゲット密度の割合。
関連トピック
受信者操作特性(ROC)
ROCは、分類モデルにおいて予測値と実際のターゲット値を比較するためのメトリックです。
リフトと同様に、ROCが適用されるのは2項分類のみであり、ポジティブ・クラスを指定する必要があります。
ROCを使用すると、モデルの意思決定能力を的確にとらえることが可能です。つまり、モデルがどの程度正確にネガティブ・クラスまたはポジティブ・クラスを予測できるかを知ることができます。
ROCは、確率しきい値における変化の影響を測定します。確率しきい値は、モデルが分類に使用する決定ポイントです。2項分類のデフォルトの確率しきい値は、0.5です。ある予測の確率が50%以上である場合、モデルは該当するクラスを予測します。確率が50%より低い場合は、もう一方のクラスが予測されます。(多クラス分類の場合、予測されるクラスは、予測の確率が最も高いクラスになります。)
関連トピック
ROC曲線
ROCは、X-Y軸上の曲線として描くことができます。X軸を偽陽性率にします。Y軸を真陽性率にします。
ROCグラフでは左上隅が最適位置です。つまり、真のポジティブ率が高く不適切なポジティブ率が低いことを表します。
曲線下面積
ROC曲線下面積(AUC)により、2項分類モデルの識別能力が測定されます。AUCが大きいほど、実際のネガティブ・ケースではなく実際のポジティブ・ケースが高い確率でポジティブに割り当てられるという尤度も高くなります。AUC測定は、ターゲット分布が不均衡である(1つのターゲット・クラスが他のクラスに比べて顕著である)データセットに対して特に有効です。
ROCとモデルのバイアス
モデルのROC曲線は、その混同マトリックスの値について可能なすべての組合せを表します。
確率しきい値の変化は、モデルにより生成される予測に影響します。たとえば、ポジティブ・クラス予測のしきい値が0.5から0.6に変わった場合、生成されるポジティブ予測の数が少なくなります。これにより、混同マトリックスでの値の分布が影響を受け、真のポジティブ数と不適切なポジティブ数および真のネガティブ数と不適切なネガティブ数が変わることになります。
ROCを使用することにより、全体の最高精度またはクラスごとの最高精度が得られる確率しきい値を見つけることが可能です。たとえば、ポジティブ・クラスを正確に予測することが重要である一方、ネガティブ・クラスの予測ミスについては許容できる場合には、ポジティブ・クラスのしきい値を下げることができます。つまり、ポジティブ・クラスを優先するようにモデルにバイアスをかけることができます。
コスト・マトリックスは、モデルのスコアリング用の確率しきい値を変更する際に便利なメカニズムです。
関連トピック
ROC統計量
Oracle Machine Learning for SQLでは、次のROC統計量が計算されます。
-
確率しきい値: ポジティブ・クラス予測が生成される最小予測ポジティブ・クラス確率。しきい値が異なると、ヒット率および不適切な警告率も異なります。
-
真のネガティブ数: 確率しきい値未満の予測確率を持つテスト・データにおけるネガティブ・ケース数(正確に予測されたケース)。
-
真のポジティブ数: 確率しきい値以上の予測確率を持つテスト・データにおけるポジティブ・ケース数(正確に予測されたケース)。
-
不適切なネガティブ数: 確率しきい値未満の予測確率を持つテスト・データにおけるポジティブ・ケース数(不正確に予測されたケース)。
-
不適切なポジティブ数: 確率しきい値以上の予測確率を持つテスト・データにおけるネガティブ・ケース数(不正確に予測されたケース)。
-
真のポジティブの割合: ヒット率 (真のポジティブ数/(真のポジティブ数+不適切なネガティブ数))。
-
不適切なポジティブの割合: 不適切な警告率 (不適切なポジティブ数/(不適切なポジティブ数+真のネガティブ数))。
分類モデルのバイアス
コスト
コスト・マトリックスは、モデルの意思決定に影響を与えるためのメカニズムです。コスト・マトリックスを使用することにより、モデルによるコストの高い分類ミスを最小化することが可能です。また、モデルが利益の高い正確な分類を行う確率を最大化することもできます。
たとえば、あるモデルが信用リスクの高い顧客を低リスクとして分類した場合、このような分類ミスにはコストがかかります。コスト・マトリックスを使用することによって、こうしたミスを回避するようにモデルにバイアスをかけることができます。また、信用履歴が最も悪い顧客を正確に分類することを優先するようモデルにバイアスをかける際に、コスト・マトリックスを使用する場合もあります。
確率しきい値が変化したときにモデルがどのように動作するかを評価するメトリックとしては、ROCが有効です。ROCは、用途が異なるいくつかのシナリオがある場合に、特定の分類子について最適なコストを見つけるのに役立ちます。この情報を利用して、モデルの配置に影響を与えるコスト・マトリックスを作成できます。
コストと精度
モデルの質を評価するために、コストと精度のコスト・マトリックスと混同マトリックスを比較します。
混同マトリックスと同様、コスト・マトリックスはn×nの行列(nはクラスの数)です。混同マトリックスとコスト・マトリックスはいずれも、特定のテスト・データセットに基づく実測値と予測値のすべての可能な組合せを含んでいます。
混合マトリックスは、精度、つまり予測の総数に対する正確な予測の割合を測定するために使用します。コスト・マトリックスは、それぞれの予測の精度について相対的な重要度を特定するときに使用されます。ビジネスに応用する場合は、モデルの質を評価するときに、精度に加えコストが重視されることがほとんどです。
関連トピック
ポジティブ・クラスとネガティブ・クラス
混同マトリックスにおけるポジティブ・クラスとネガティブ・クラスの重要度について示します。
ポジティブ・クラスは、最も重要性が高いクラスです。リフトおよびROCを計算するときは、ポジティブ・クラスの指定が必要となります。
次の図の混同マトリックスでは、値1
がポジティブ・クラスとして指定されています。これは、提携カードがあれば消費を増やす可能性がある顧客(affinity_card
=1)を正確に予測する方が、反応のない顧客(affinity_card
=0)を正確に予測するよりも重要であるとモデルの作成者が判断したことを意味します。提携カードを使用する可能性が低い顧客にカードを提供したとしても、カードのコストが低いため企業の損失はそれほど大きくはありません。しかし、反応する可能性が高い顧客を見落とした場合は、収益増加の機会を逃すことになります。
この混同マトリックスでの真のポジティブ率と不適切なポジティブ率は次のようになります。
-
不適切なポジティブ率 — 10/(10 + 725) =.01
-
真のポジティブ率 — 516/(516 + 25) =.95
関連トピック
コストと利益の割当て
コスト・マトリックスでは、正の数(コスト)を使用してネガティブの結果に影響を与えることが可能です。負数のコストは利益と解釈されるため、負の数(利益)を使用するとポジティブの結果に影響を与えることができます。
消費を増やす可能性がある顧客に提携カードを提供しなかった場合、ビジネスに$1500の損害を与えることになる、と算定したとします。図7-6の混同マトリックスを持つモデルを使用した場合、不適切なネガティブ予測(反応する顧客の分類ミス)により1500ドルのコストがかかることになります。反応しない顧客の分類ミスの方が、ビジネスに与える損害は小額です。不適切なポジティブ予測(反応しない顧客の分類ミス)それぞれによるコストは$300しかかからないものと想定します。
販促キャンペーンを計画する際は、これらのコストを考慮する必要があります。このキャンペーンの対象として顧客を1人追加するには10ドルのコストがかかると見積ります。そのため、真のネガティブ予測には10ドルの利益を関連付けます(これは、反応しない顧客を販促の対象外にできるためです)。対象外となる顧客1人につき、10ドルの節約になります。コスト・マトリックスでは、この利益を負のコスト(-10)として指定します。
次の図は、これらのコストおよび利益をコスト・マトリックスで表したものです。
Oracle Machine Learning for SQLでは、分類モデルのスコアリングに影響するようにコストを指定できます。デシジョン・ツリー・モデルでは、コスト・マトリックスを使用してモデルの作成に影響を与えることも可能です。
コストの指定
デシジョン・ツリー・モデルを作成するためのコスト・マトリックスを指定します。
CLAS_COST_TABLE_NAME
設定は、デシジョン・ツリー・モデルの作成に使用するコスト・マトリックス表の名前を指定します。コスト・マトリックスは、分類モデルにバイアスをかけて、コストのかかる分類ミスを最小化します。コスト・マトリックス表には、次の表に示す列が必要です。
表7-1 コスト・マトリックス表に必要な列
列名 | データ型 |
---|---|
|
有効なターゲット・データ型 |
|
有効なターゲット・データ型 |
|
|
デシジョン・ツリーは、作成時にコスト・マトリックスを指定できる唯一のアルゴリズムです。ただし、スコアリングの際には、どの分類モデルにもコスト・マトリックスを作成して関連付けることができます。
スコアリングにコストを使用する場合は、表7-1に示す列を持つ表を作成し、DBMS_DATA_MINING.ADD_COST_MATRIX
プロシージャを使用してコスト・マトリックス表をモデルに追加します。PREDICTION
関数を呼び出すときに、コスト・マトリックスをインラインで指定することもできます。表1-5で、有効なターゲット・データ型の詳細を示しています。
コスト重視の意思決定
コストは、分類にバイアスをかけるためにユーザーが指定する数値です。コストのより低い結果に対してコストのより高い結果にペナルティを課すために、アルゴリズムでは正の数を使用します。数値が大きいほどコストが高いことを示します。
一方、利益のより低い結果に対して利益のより高い結果を支持するためには負の数が使用されます。負の数が小さいほど利益が高いことを示します。
すべての分類アルゴリズムで、スコアリング用のコストを使用できます。コスト・マトリックス表でコストを指定するか、スコアリング時にインラインでコストを指定します。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。PREDICTION
関数、PREDICTION_SET
関数およびPREDICTION_COST
関数がコストをサポートしています。
コストを使用してモデル作成にバイアスをかけることができるのは、デシジョン・ツリー・アルゴリズムのみです。コストを使用するデシジョン・ツリー・モデルを作成する場合は、コスト・マトリックス表を作成し、モデルのCLAS_COST_TABLE_NAME
設定にその表の名前を指定します。モデルの作成時にコストを指定すると、モデルの作成に使用したコスト・マトリックスがスコアリング時に使用されます。スコアリング用に別のコスト・マトリックス表を使用する場合は、既存のコスト・マトリックス表を削除してから新しいコスト・マトリックス表を追加します。
次の表に、コスト・マトリックスの例の表を示します。コスト・マトリックスは、2項ターゲットのコストを指定しています。このマトリックスから、0に分類ミスした場合、1に分類ミスした場合の2倍のコストがかかるものとして処理されることがわかります。
表7-2 コスト・マトリックスの例
ACTUAL_TARGET_VALUE | PREDICTED_TARGET_VALUE | COST |
---|---|---|
0 |
0 |
0 |
0 |
1 |
2 |
1 |
0 |
1 |
1 |
1 |
0 |
例7-1 コストを使用した問合せの例
表nbmodel_costs
には、表7-2で説明されているコスト・マトリックスが含まれています。
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
スコアリング関数を呼び出すときに、コストをインラインで指定できます。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。インラインで指定した異なるコストを使用している同じ内容の問合せを次に示します。コスト・マトリックス表(表7-2)で示されている「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
事前確率およびクラスの重み
有益な結果を生み出すために、分類モデルでの事前確率およびクラスの重みを学習します。
ベイズ・モデルでは、作成データと実際の母集団(スコアリング・データ)との間の分布の差を埋めるために、事前確率を指定できます。分類のその他の形式を使用して、事前確率と同じバイアス効果を持つクラスの重みを指定できます。
多くの問題では、1つのターゲット値が頻繁に出現します。たとえば、電話によるマーケティング・キャンペーンに対する好意的(ポジティブ)な反応は2%以下で、クレジット・カード決済での不正行為の発生率は1%未満となります。このタイプの履歴データを基に作成された分類モデルの場合、2つのクラスの特性を区別するのに十分な数の希少クラスを見つけられない可能性があり、その結果、新しいデータに適用すると、すべてのケースに対し頻出クラスを予測するというモデルになる可能性があります。このようなモデルの精度は非常に高い可能性がありますが、あまり有用ではありません。これは、精度のみを分類モデルの質の判断材料とするのは好ましくないことを示しています。
トレーニング・データにおける非現実的な分布を補正するには、モデルの作成プロセスで事前確率を指定します。データの分布に関する問題を補正するその他の方法としては、層別サンプリングや異常検出があります。
関連トピック
分類のアルゴリズム
Oracle Machine Learning for SQLで使用される様々な分類アルゴリズムを学習します。
Oracle Machine Learning for SQLには、次の分類アルゴリズムが用意されています。
-
デシジョン・ツリー
デシジョン・ツリーは、ツリーの作成に使用されるロジックを明らかにする条件文であるルールを自動的に生成します。
-
明示的セマンティック分析
明示的セマンティック分析(ESA)は、テキスト・データの予測を作成するように設計されています。このアルゴリズムは、何十万ものクラスを持つのユース・ケースに対処できます。
-
一般化線形モデル
一般化線形モデル(GLM)は、線形モデリングでよく使用される統計的手法です。OML4SQLでは、2項分類および回帰についてはGLMが実装されています。GLMでは、係数統計情報やモデルの統計情報、行の診断情報など多数の情報を利用できます。GLMは信頼限界もサポートしています。
-
Naive Bayes
Naive BayesではBayesの定理が使用されます(履歴データの値の組合せと値の頻度を数えて確率を計算する式)。
-
ランダム・フォレスト
ランダム・フォレストは、パフォーマンスとスケーラビリティに大きなメリットをもたらす、強力で一般的な機械学習アルゴリズムです。
-
サポート・ベクター・マシン
サポート・ベクター・マシン(SVM)は、線形回帰および非線形回帰に基づく強力な最新のアルゴリズムです。OML4SQLでは、2項分類および多クラス分類についてはSVMが実装されています。
- XGBoost
XGBoostは、XGBoostオープン・ソース・パッケージを利用可能にする、回帰および分類の機械学習アルゴリズムです。Oracle Machine Learning for SQLのXGBoostは、トレーニング・データを準備し、XGBoostを起動し、モデルを作成して保持し、予測のためにモデルを適用します。