PCA の例

この例では、CUSTOMER_CHURN データ・セット内の主成分を特定し、その主成分を PCA モデルに保管し、そのモデルを別のデータに適用する方法を示します。

作成した PCA モデルを使用して、新規データの主成分を予測できます。

この例では、顧客離れデータ・セットの PCA モデルを作成します。

SAMPLES.CUSTOMER_CHURN 表に、使用するデータが入っています。また、トレーニング・データを含む表と、テスト・データを含む表も必要になります。

次の呼び出しは、それらの表を SAMPLES.CUSTOMER_CHURN 表から作成する方法を示しています。

CALL IDAX.SPLIT_DATA('intable=samples.customer_churn, traintable=customer_churn_train, testtable=customer_churn_project_pre, id=cust_id, fraction=0.9');

次の呼び出しは、PCA モデルの作成方法を示しています。

CALL IDAX.PCA('model=customer_churn_pca, intable=customer_churn_train, id=cust_id, coldefrole=ignore, incolumn=DURATION;AVG_SPENT_RETAIN_PM;AVG_SQ_SPENT_RETAIN_PM;ANNUAL_REVENUE_MIL;TOTAL_EMPLOYEES;TOTAL_BUY;TOTAL_BUY_FREQ;TOTAL_BUY_FREQ_SQ, centerData=true, scaleData=true, forceEigenSolve=false, saveScores=true');

PCA 関数は連続型入力列のみをサポートするので、非数値列および離散型列はすべて除外されます。入力データがセンタリングおよびスケーリングされ、特異値分解 (SVD) を使用して主成分計算が行われます。

また、各主成分のスコアが PCA モデルに保管されます。

以下のメタ表は「model」引数で指定します。

<model_name>_META
<model_name>_PCA
<model_name>_ATTMEAN
<model_name>_ATTSD
<model_name>_ATTSD_DIV
<model_name>_SCORES
<model_name>_SDEV
<model_name>_RCV

これらの表で構成される PCA モデルを、次のように PRINT_MODEL プロシージャーを使用して表示できます。

Result set 1
--------------
ID  PC1                      PC2                      PC3                      PC4                      ...
--- ------------------------ ------------------------ ------------------------ ------------------------ ...
 1]   +1.65727166025521E+000   +1.40976803961328E+000   +1.05428317056634E+000   +1.00661921778098E+000 ...

  1 record(s) selected.
Result set 2
--------------
ID                          PC1                      PC2                      PC3                      PC4                      ...
--------------------------- ------------------------ ------------------------ ------------------------ ------------------------ ...
DURATION                      +5.60318143412660E-001   -2.18647274716772E-002   +5.10079834520816E-002   -1.90423990300730E-001 ...
AVG_SPENT_RETAIN_PM           -5.64039266932060E-001   +3.82013477352810E-003   +6.97059518304552E-002   -2.04239857563087E-001 ...
AVG_SQ_SPENT_RETAIN_PM        -5.84291068949257E-001   -1.22230471272086E-002   +6.90425476061470E-002   -1.76276233237407E-001 ...
ANNUAL_REVENUE_MIL            +8.88768424472973E-002   +4.41767150633714E-002   +6.06883648826900E-001   +1.62114024933152E-001 ...
TOTAL_EMPLOYEES               +8.44624028753465E-002   -1.75756296874039E-002   +6.04577189935120E-001   -6.53914336812468E-001 ...
TOTAL_BUY                     +1.06723780559009E-001   +8.81594438912170E-002   -5.02786941873035E-001   -6.60181838993008E-001 ...
TOTAL_BUY_FREQ                +8.87399480111440E-003   -7.03193685540747E-001   -3.25360238114661E-002   -2.95322362404112E-002 ...
TOTAL_BUY_FREQ_SQ             -2.35085602543812E-003   -7.03451494800843E-001   -9.88680721058580E-003   -1.88240169390858E-002 ...

  8 record(s) selected.

  Return Status = 0

この PCA モデルの表現は、関数「prcomp()」および「print()」を使用して R で作成された PCA モデルと簡単に比較できます。

PCA モデルのもう 1 つの表現は、以下のような要約ビューです (R の関数「summary()」に似ています)。

CALL IDAX.PRINT_PCA('model=customer_churn_pca, mode=summary');

Result set 1
--------------

MEASURE                     PC1                      PC2                      PC3                      PC4                      ...
--------------------------- ------------------------ ------------------------ ------------------------ ------------------------ ...
Standard deviation            +1.65727166025521E+000   +1.40976803961328E+000   +1.05428317056634E+000   +1.00661921778098E+000 ...
Proportion of Variance        +3.43318669485631E-001   +2.48430740689382E-001   +1.38939125467427E-001   +1.26660281200748E-001 ...
Cumulative Proportion         +3.43318669485631E-001   +5.91749410175013E-001   +7.30688535642440E-001   +8.57348816843189E-001 ...

  3 record(s) selected.

  Return Status = 0

新しいデータの主成分を予測するには、PROJECT_PCA 関数と事前に作成した PCA モデルを使用します。予測 (PCA では射影ともいう) に使用する入力データの構造は、PCA モデルの作成に使用した構造と同じでなければなりません。つまり、両方の構造の列は同じでなければなりません。

次の例は、射影に「customer_churn_project_pre」表を使用するために、この表を変換する方法を示しています。この手順が必要になるのは、前の手順で作成した PCA モデルでは考慮しなかった列が「customer_churn_project_pre」表に含まれているからです。そのため、PCA モデルを適用する前に、それらの列を除外する必要があります。

CREATE TABLE customer_churn_project_in AS (SELECT CUST_ID, 
DURATION, AVG_SPENT_RETAIN_PM, AVG_SQ_SPENT_RETAIN_PM, 
ANNUAL_REVENUE_MIL, TOTAL_EMPLOYEES, TOTAL_BUY, 
TOTAL_BUY_FREQ, TOTAL_BUY_FREQ_SQ FROM 
customer_churn_project_pre) WITH NO DATA;
INSERT INTO customer_churn_project_in (SELECT CUST_ID, 
DURATION, AVG_SPENT_RETAIN_PM, AVG_SQ_SPENT_RETAIN_PM, 
ANNUAL_REVENUE_MIL, TOTAL_EMPLOYEES, TOTAL_BUY, 
TOTAL_BUY_FREQ, TOTAL_BUY_FREQ_SQ FROM 
customer_churn_project_pre);
DROP TABLE customer_churn_project_pre;

CALL IDAX.PROJECT_PCA('model=customer_churn_pca, intable=customer_churn_project_in, outtable=customer_churn_project_out');

この例の出力表には、指定した入力データ・セットから取得されたインスタンスごとに 1 行が含まれています。

以下の列は、主成分を示しています。

ID                   PC1                      PC2                      PC3                      PC4                      ...
-------------------- ------------------------ ------------------------ ------------------------ ------------------------ ...