K-Means クラスタリング・モデルの作成例

この例では、顧客離れ データ・セットのクラスタリング・モデルを作成します。

SAMPLES.CUSTOMER_CHURN 表には、この例で使用されるデータが含まれています。 この例では、トレーニング・データを含む表と、予測に関するデータを含む表 (例えば、トレーニング済みモデルの適用など) が必要です。

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

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

次の呼び出しは、K-Means クラスタリング・モデルを作成する方法を示しています。

CALL IDAX.KMEANS('intable=customer_churn_train, id=cust_id, k=5, maxiter=3, distance=euclidean, model=ci_km5c, outtable=ci_km5m_out');

この呼び出しでは、距離測度としてユークリッド関数を使用します。 最大 3 回の反復内で 5 個のクラスターが作成されます。 また、4 つのモデル表と、outtable 引数によって指定された 1 つの出力表も作成されます。 この引数には、intable トレーニング・データ・セットからの各インスタンスのクラスター・メンバーシップに関する情報と、クラスター中心からの距離が含まれます。

model 引数によって、以下のメタ表が指定されます。

<model name>_MODEL
<model name>_CLUSTERS
<model name>_COLUMNS
<model name>_COLUMN_STATISTICS

<model name>_MODEL には、クラスタリング・モデル全体に適用される以下の情報が含まれます。

  • <model name>_CLUSTERS には、モデル内のすべてのクラスターが含まれます。 また、クラスター中心、クラスター・サイズ、クラスター・メンバーと中心との距離の二乗和などの、クラスターに関する情報も含まれます。
  • <model name >_COLUMNS には、K-Means クラスタリングおよびスコアリングで使用されるすべての列が含まれます。
  • <model name>_COLUMN_STATISTICS には列の統計情報が含まれます。

作成したモデルを分析するには、以下のように PRINT_KMEANS プロシージャーを使用できます。

CALL IDAX.PRINT_MODEL('model=ci_km5c, mode=clusters');

出力例を以下に示します。

Result set 1                                                                                                        
  --------------                                                                                                      
                                                                                                                      
  CLUSTERID   NAME             SIZE                 RELSIZE                  WITHINSS                 DESCRIPTION     
  ----------- ---------------- -------------------- ------------------------ ------------------------ --------------- 
            1 1                                  37        0.211428571428571      2.477881267144491E8 NULL               
            2 2                                  28                     0.16         3482930.29850247 NULL              
            3 3                                  36        0.205714285714286     4.7292148007801384E7 NULL              
            4 4                                  27        0.154285714285714         2193463.04765905 NULL               
            5 5                                  47        0.268571428571429         8910472.36068028 NULL               
                                                                                                                      
  5 record(s) selected.                                                                                               
                                                                                                                      
  Return Status = 0

作成したモデルをさらに分析するには、以下のようにして ci_km5c クラスター表を分析できます。

SELECT * FROM ci_km5c_clusters ORDER BY clusterid;

この表には、クラスターごとに 1 行が含まれます。 また、属性ごとに 1 列が含まれ、これは連続属性の平均属性値および離散型属性の最頻値とともにクラスタリングで使用されます。

さらに、以下の追加の診断列も含まれます。

clusterid
クラスターの ID 番号。
withinss
クラスターに割り当てられたトレーニング・インスタンスとクラスター中心との距離の二乗和。

クラスター記述の読みやすさを改善するには、以下のようにして診断列のみを選択し、クラスター中心を表す列をスキップします。

SELECT clusterid, size, withinss FROM ci_km5c_clusters ORDER BY clusterid;

ci_km5m_out メンバー表には、トレーニング・インスタンスごとに 1 行と、以下の列が含まれます。

ID
距離 ID。
cluster_id
インスタンスが割り当てられたクラスターの ID。
distance
クラスタリングの距離測度に基づいた、インスタンスとクラスター中心との間の距離。

このデータを使用して、追加の指標を計算できます。 この計算は、クラスターへのトレーニング・インスタンスの割り当てに基づいています。

例えば、取得されたクラスター内の、顧客離れを 0 および 1 で表す censor 属性の分布を判別するには、以下の照会を使用できます。

SELECT cluster_id, censor, count(*)
FROM ci_km5m_out O, customer_churn_train T
WHERE O.id=T.cust_id
GROUP BY cluster_id, censor
ORDER BY cluster_id, censor; 

k=5 で取得されるクラスター・サイズは不平衡であるため、k の値を小さくすることができます。 不平衡であるということは、大きいクラスターそれぞれが他のクラスターよりも上位になることを意味します。

以下の例は、k=2 を指定してクラスターの平衡を向上させる方法を示しています。

CALL IDAX.KMEANS('intable=customer_churn_train, id=cust_id, k=2, maxiter=3, distance=euclidean, model=ci_km2c, outtable=ci_km2m_out'); 

SELECT clusterid, size, withinss FROM ci_km2c_clusters ORDER BY clusterid; 
SELECT cluster_id, censor, count(*) FROM ci_km2m_out O, customer_churn_train T WHERE O.id=T.cust_id GROUP BY cluster_id, censor ORDER BY cluster_id, censor; 

k 値を調整した後、クラスターの平衡がとれます。

以下の例に示すように、トレーニング・セットに基づいて作成されたクラスタリング・モデルを新しいデータに適用できます。 この呼び出しは、k=5 で作成されたクラスタリング・モデルを使用して、顧客離れ予測セットに対するクラスター・メンバーシップ割り当てを生成します。

スコアリングでは、K-Means モデルの作成に使用された K-Means クラスタリング・オプションと列およびクラスターの統計情報がメタ表に保存されます。 この情報が、新しいクラスターのスコアリングおよび予測に使用されます。

以下のリストに、メタ表を示します。

  • <model name>_CLUSTERS
  • <model name>_COLUMNS
  • <model name>_COLUMN_STATISTICS
CALL IDAX.PREDICT_KMEANS('intable=customer_churn_predict, id=cust_id,  outtable=ci_km5m_predict, model=ci_km5c');

出力表には、指定したデータ・セットからのインスタンスごとの 1 行と、以下の列が含まれます。

ID          CLUSTER_ID  DISTANCE
----------- ----------- ------------------------

以下のようにして、出力表を使用して、予測セットに対して取得されたクラスター内の censor 属性の分布を判別できます。

SELECT cluster_id, censor, count(*)
FROM ci_km5m_predict O, customer_churn_predict T
WHERE O.id=T.id
GROUP BY cluster_id, censor
ORDER BY cluster_id, censor;