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 模型中。
下列 meta 表格是透過 '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
您可以使用 PRINT_MODEL 程序來檢視由這些表格組成的 PCA 模型,如下所示:
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 模型」的另一種呈現是摘要視圖(類比 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' 表格進行預測,下列範例顯示如何轉換此表格。這是必要步驟,因為 'customer_customn_project_pre' 表格包含的直欄並未反映在前一個步驟中建立的 PCA 模型中。因此,在套用 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');
在此範例中,輸出表格為指定的輸入資料集的每一個實例各提供一列。
下列直欄顯示主成分:
ID PC1 PC2 PC3 PC4 ...
-------------------- ------------------------ ------------------------ ------------------------ ------------------------ ...